Gradient – Cái giống khó hiểu :3

Related Articles

Gradient Descent là cụm từ được nghe rất nhiều khi học về MLP, Neuron Network, hay CNN. Quen em nó nhau lâu rồi, nhìn mặt nhau miết, tưởng mình đã hiểu nhau, mà tới nay mới vẽ lẽ vừa không hiểu và vừa hiểu sai em nó quá trời … Nay nhờ thực trạng đưa đẩy mà mình hiểu thêm được em nó chút xíu .

Gradient – em nó là ai ?

Gradient của một hàm USD f ( x_1, x_2, …, x_n ) USD, được ký hiệu USD nabla f USD là một vector USD n USD chiều, mà mỗi thành phần trong vector đó là một đạo hàm riêng phần ( partial derivative ) theo từng biến của hàm đó : USD USD bbox [ 20 px, border : 1 px solid black ] { nabla f = ( frac { df } { dx_1 }, frac { df } { dx_1 }, …, frac { df } { dx_n } ) } USD USD

Sau đây là 2 điều mình mới hiểu ra :

1. Vector gradient tại một điểm cho mình biết từ điểm đó, hướng nào làm tăng giá trị $f$ nhiều nhất có thể. Tại sao lại là tăng ?

Chấp nhận điều này lâu rồi, tự nhiên hôm qua mới ngớ ra: Tại sao lại là hướng tăng (Hình 1) mà không phải là hướng giảm ?

Example image

Hình 1. Hướng của vector gradient luôn chỉ về phía cao hơn

Wow wow, là vì do ông nào định nghĩa nó như vậy : v. Mỗi thành phần của vector gradient là một đạo hàm riêng phần, giờ thử xét USD frac { df } { dx } USD. Định nghĩa đạo hàm theo [ 1 ] : USD USD frac { df } { dx } = frac { f ( x + epsilon ) – f ( x ) } { epsilon } USD USD với USD epsilon > 0 USD và đủ nhỏ. Mấu chốt đều nằm ở ông USD epsilon USD, vì USD epsilon > 0 USD, nên chiều của USD frac { df } { dx } USD chỉ còn nhờ vào vào tử số .

Từ đó ta xét 2 trường hợp USD vec { AB } USD và USD vec { CD } USD sẽ hiểu :

  • Vector AB: $$frac{df}{dx}=frac{f(A) – f(B)}{x_A – x_B}$$

    Vì $f(A)
  • Vector CD: $$frac{df}{dx}=frac{f(D) – f( C)}{x_D – x_C}$$

    Vì $f( C)

    (d)$>
  • (b)$>

Vì vậy mà USD frac { df } { dx } USD luôn chỉ về hướng USD f USD tăng .

2. Vector gradient trực giao (perpendicular) với contour line của hàm

Điều này nghe bực mình + rối rắm kinh điển khi cứ nhớ lớp 12, được học đạo hàm của hàm USD y = f ( x ) USD tại USD x_0 USD chính là pháp tuyến của USD f ( x ) USD tại USD x_0 USD. Rà lại, đọc về đạo hàm ( derivative ) thấy đâu đâu cũng vẽ hình tiếp tuyến [ 1 ], cái khỉ gì giờ lại là trực giao ? Với vừa nãy ở trên mới nói là hướng làm tăng USD f USD, sao giờ lại có chuyện trực giao ở đây ?

Example image

Example image

Mấu chốt nằm ở khái niệm contour line. Nó có vài tên khác nhau : contour line, level set, level curve. Định nghĩa ở đây cả [ 2 ]. Đại khái một contour line là tập hợp những điểm làm cho hàm có cùng một giá trị USD y_0 USD nào đó. Hàm có miền vô hạn thì cũng có nghĩa là có vô số contour line .

Vậy là Hình 2. a và 2. b đang màn biểu diễn hai đường khác nhau : đường màu đen trong hình 2. a là đồ thị màn biểu diễn sự phụ thuộc vào USD y USD theo USD x USD qua hàm USD y = f ( x ) USD, đường màu xanh trong hình 2. b là một đường contour line màn biểu diễn của hàm USD g ( x ) = 0 USD. Mình bị nhầm lẫn chính bới lâu nay học những hàm USD y = f ( x ) USD, hầu hết đều là hàm đơn biến, màn biểu diễn đồ thị của nó bằng tọa độ 2 chiều. Nhưng với những hàm đa biến ( từ 2 biến trở lên ), người ta khó trình diễn đồ thị của hàm trên tọa độ 2 chiều nữa, nên người ta nghĩ ra cái contour line dễ trình diễn hơn .

Khi học về Linear Regression, USD y = WX + b USD, người ta thường lấy ví dụ USD W USD và USD X USD có 2 chiều, đơn cử USD y = w_1x_1 + w_2x_2 + w_0 USD, điều này khiến mình liên tưởng đến hàm USD y = ax + b USD hồi xưa có học, chỉ là chuyển vế qua thì USD x USD, USD y USD tương ứng USD w_1 USD, USD w_2 USD. Điều này sai trọn vẹn, SAI ÁC LIỆT LUÔN. Chính từ đây dẫn tới những nhầm lẫn khi đọc đến vector gradient .

Nói đúng mực thì USD y = ax + b USD chỉ là một thành phần trong tập contour line của USD y = w_1x_1 + w_2x_2 + w_0 USD. Và trách nhiệm của Linear Regression là đi tìm một contour line trong tập những contour line ở trên .

Về chuyện ngày lớp 12 được dạy rằng đạo hàm của hàm USD y = f ( x ) USD là một vector có phương tiếp tuyến với đồ thị USD f ( x ) USD. Điều này được lý giải như sau : Hàm USD y = f ( x ) USD là hàm một biến. Nếu vẽ theo kiểu contour line, mỗi contour line sẽ là 1 điểm ( hoặc một vài điểm ). Vì vậy mà đương nhiên nó thoải điều kiện kèm theo vector gradient trực giao với đường contour line. Không có xích míc gì ở đây cả .

P.s: Viết ra mới thấy, tuy đã hiểu, đã nắm được cái bản chất, mà muốn thể hiện nó ra vẫn khó thiệt. Bài này quá lủng cũng.

Tham khảo

[ 1 ] https://en.wikipedia.org/wiki/Derivative

[ 2 ] https://en.wikipedia.org/wiki/Level_set

[ 3 ] Anzai, Yuichiro. Pattern recognition and machine learning. Elsevier, 2012 .

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories