Đạo hàm hàm hợp và chain rule
Từ một độ dốc đến chuỗi phụ thuộc
Bài trước ta đọc $f'(x)$ như độ dốc tiếp tuyến: $x$ nhích 1 đơn vị thì $y$ nhích $f'(x)$ đơn vị. Nhưng trong model, loss hiếm khi phụ thuộc trực tiếp vào trọng số. Nó phụ thuộc theo chuỗi: $w \to z \to \hat{y} \to L$. Chain rule chính là công cụ trả lời câu hỏi thực chiến: "nếu tôi nhích $w$ một chút, loss đổi bao nhiêu?"
Sau bài này bạn sẽ:
- Phát biểu được chain rule cho hàm hợp hai và nhiều tầng.
- Tính tay đạo hàm của hàm hợp 2 đến 3 lớp, có kiểm tra lại.
- Áp chain rule vào loss của hồi quy tuyến tính để ra $\partial L/\partial w$.
- Nhận ra lỗi phổ biến nhất: quên nhân đạo hàm của hàm trong.
Chain rule: thay đổi lan qua từng mắt xích
Nếu $y = f(u)$ và $u = g(x)$ thì
$$ \frac{dy}{dx} = f'(u) \cdot g'(x) = \frac{dy}{du}\cdot\frac{du}{dx} $$
Đọc bằng trực giác: nếu $u$ thay đổi gấp 2 lần mỗi khi $x$ đổi, và $y$ thay đổi gấp 3 lần mỗi khi $u$ đổi, thì $y$ thay đổi gấp 6 lần mỗi khi $x$ đổi. Chain rule chỉ là phép nhân dồn các tốc độ thay đổi trung gian.
Ví dụ tính tay: $y = (3x+1)^2$.
- Đặt hàm trong: u = 3x + 1, suy ra y = u^2
- Đạo hàm lớp ngoài: dy/du = 2u
- Đạo hàm lớp trong: du/dx = 3
- Nhân lại: dy/dx = 2u · 3 = 6(3x + 1)
Kiểm tra bằng cách khai triển: $y = 9x^2 + 6x + 1$, đạo hàm là $18x + 6 = 6(3x+1)$. Khớp.
Bài tập 1. Tính đạo hàm của $y = (2x - 5)^3$.
Xem đáp án
$u = 2x - 5$, $dy/du = 3u^2$, $du/dx = 2$, nên $dy/dx = 6(2x-5)^2$.
Đưa vào loss: từ trọng số đến sai số
Đây là chỗ chain rule kiếm cơm. Với hồi quy tuyến tính một biến: $\hat{y} = wx + b$ và $L = (\hat{y} - y)^2$.
$$ \frac{\partial L}{\partial w} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial w} = 2(\hat{y} - y)\cdot x $$
Ý nghĩa: $2(\hat{y}-y)$ là "model đang lệch bao nhiêu", còn $x$ là "trọng số này ảnh hưởng mạnh cỡ nào tới dự đoán". Nhân hai thứ đó lại chính là mức độ $w$ đang gây ra lỗi.
Sign in to view the full content of this lesson. Sign in
Ví dụ số: $x = 2$, $y = 3$, $w = 0.5$, $b = 0$ cho $\hat{y} = 1$. Khi đó $\partial L/\partial w = 2(1-3)\cdot 2 = -8$. Gradient âm nghĩa là tăng $w$ sẽ làm loss giảm, đúng chiều ta muốn đi.
Bài tập 2. Với $x = 1$, $y = 4$, $w = 1$, $b = 1$, tính $\partial L/\partial w$ và cho biết nên tăng hay giảm $w$.
Xem đáp án
$\hat{y} = 1\cdot 1 + 1 = 2$, nên $\partial L/\partial w = 2(2-4)\cdot 1 = -4$. Gradient âm, vậy tăng $w$ sẽ giảm loss.
Bảng đạo hàm cho các hàm hay gặp trong model
| $f(u)$ | $f'(u)$ |
|---|---|
| $u^n$ | $n u^{n-1}$ |
| $e^u$ | $e^u$ |
| $\ln u$ | $1/u$ |
| $\sigma(u)$ (sigmoid) | $\sigma(u)(1-\sigma(u))$ |
| $\tanh u$ | $1 - \tanh^2 u$ |
| ReLU | $1$ nếu $u>0$, $0$ nếu $u<0$ |
Ví dụ sigmoid: $L = (\sigma(wx+b) - y)^2$ với $x=1$, $w=0$, $b=0$, $y=1$. Ta có $z = 0$, $\sigma(0) = 0.5$, $\partial L/\partial \hat{y} = 2(0.5-1) = -1$, $\sigma'(0) = 0.25$. Nhân lại: $\partial L/\partial w = -1 \cdot 0.25 \cdot 1 = -0.25$.
Chain rule phát biểu: nếu y = f(u) và u = g(x) thì dy/dx = _____. Với L = (ŷ - y)² và ŷ = wx + b, ta có ∂L/∂w = _____. Đạo hàm của sigmoid σ(u) là _____. Đạo hàm của ln(u) là _____, còn đạo hàm của e^u là _____.
Lan truyền ngược qua nhiều lớp
Xếp hai lớp: $a_1 = w_1 x$, $a_2 = w_2 a_1$, $L = (a_2 - y)^2$. Muốn biết $w_1$ ảnh hưởng thế nào, ta nhân dồn cả chuỗi:
$$ \frac{\partial L}{\partial w_1} = 2(a_2 - y)\cdot w_2 \cdot x $$
Ví dụ số: $x=1$, $w_1=2$, $w_2=0.5$, $y=3$ cho $a_1=2$, $a_2=1$, nên $\partial L/\partial w_1 = 2(1-3)\cdot 0.5 \cdot 1 = -2$.
Để ý: cùng một loss, nhưng gradient của lớp đầu bị nhân thêm $w_2 = 0.5$ nên nhỏ đi. Nếu nhiều lớp đều có trọng số nhỏ, gradient lớp đầu teo dần. Đây là mầm mống của vanishing gradient, ta sẽ gặp lại ở các bài sau.
Bài tập 3. Giữ nguyên ví dụ trên nhưng đổi $w_2 = 2$. Tính $\partial L/\partial w_1$ và so sánh độ lớn với kết quả cũ.
Xem đáp án
$a_1 = 2$, $a_2 = 4$, $\partial L/\partial w_1 = 2(4-3)\cdot 2 \cdot 1 = 4$. Gradient lớn gấp đôi về độ lớn so với trường hợp $w_2=0.5$ (dấu khác vì $a_2$ đã vượt $y$).
Những chỗ dễ sai khi nhân đạo hàm
- Quên lớp trong. $\frac{d}{dx}(2x-5)^3$ không phải $3(2x-5)^2$ mà là $6(2x-5)^2$. Đây là lỗi số một.
- Viết chuỗi phụ thuộc trước khi tính. Ghi ra $w \to z \to \hat{y} \to L$ rồi mới nhân, tránh nhảy cóc.
- Giữ đúng dấu. Loss bình phương luôn sinh ra $2(\hat{y}-y)$, đừng bỏ hệ số 2 hay đảo dấu.
- Kiểm tra bằng xấp xỉ số. Chọn một $x$ cụ thể, so kết quả với $\frac{f(x+h)-f(x)}{h}$ với $h$ nhỏ như $10^{-4}$. Lệch là sai.
- Nhìn độ lớn gradient. Tích nhiều số nhỏ thì gradient teo, tích nhiều số lớn thì gradient nổ. Đây là lý do learning rate phải chọn cẩn thận.
Chốt lại và bước tiếp theo
- Chain rule: đạo hàm hàm hợp bằng tích các đạo hàm trung gian, $dy/dx = f'(u)\cdot g'(x)$.
- Trong model, nó biến câu hỏi "loss phụ thuộc $w$ thế nào" thành một phép nhân dồn qua từng tầng.
- Với $L = (\hat{y}-y)^2$ và $\hat{y} = wx+b$, kết quả cần nhớ là $\partial L/\partial w = 2(\hat{y}-y)x$.
- Luôn kiểm tra lại bằng xấp xỉ số khi tính tay.
Bài tiếp theo ta mở rộng đúng ý tưởng này sang hàm nhiều biến: mỗi trọng số có một đạo hàm riêng, gom chúng lại thành vector gradient, thứ mà gradient descent sẽ dùng trực tiếp.
Front: Chain rule phát biểu thế nào với y = f(u) và u = g(x)? Back: dy/dx = f'(u) · g'(x) = (dy/du) · (du/dx).
Front: Vì sao chain rule là nền tảng của backpropagation? Back: Vì loss là hàm hợp nhiều lớp, gradient phải nhân dồn đạo hàm của từng lớp.
Front: Đạo hàm của y = (3x + 1)^2 theo x? Back: 6(3x + 1), tức 18x + 6.
Front: Đạo hàm của e^u theo u? Back: e^u.
Front: Đạo hàm của ln(u)? Back: 1/u.
Front: Đạo hàm của sigmoid σ(u)? Back: σ(u)(1 − σ(u)).
Front: Đạo hàm của tanh(u)? Back: 1 − tanh²(u).
Front: Với L = (ŷ − y)² và ŷ = wx + b, ∂L/∂w bằng gì? Back: 2(ŷ − y)·x.
Front: Lỗi phổ biến nhất khi áp dụng chain rule? Back: Quên nhân với đạo hàm của hàm trong.
Front: Cách kiểm tra nhanh một đạo hàm tính tay? Back: So với xấp xỉ số (f(x+h) − f(x))/h với h rất nhỏ.
Front: Với a1 = w1·x, a2 = w2·a1, L = (a2 − y)², dL/dw1 bằng gì? Back: 2(a2 − y)·w2·x.
Front: Đạo hàm của ReLU tại u > 0? Back: 1 (và bằng 0 khi u < 0).
Front: Gradient của lớp đầu bị nhân bởi gì trong mạng nhiều lớp? Back: Bởi trọng số của các lớp phía sau, nên dễ teo hoặc nổ.