Đạo hàm riêng và vector gradient
Bạn đã đọc được độ dốc của một đồ thị và đã bẻ được hàm phức tạp bằng chain rule. Nhưng loss của một model hồi quy tuyến tính không phải hàm một biến: nó phụ thuộc vào cả $w$ và $b$ cùng lúc. Câu hỏi thực chiến là: "nếu chỉ nhích $w$ một chút, hoặc chỉ nhích $b$ một chút, loss đổi bao nhiêu?" Trả lời được câu đó cho từng biến, rồi gói các câu trả lời lại thành một vector, ta có gradient. Đây là thứ mà mọi vòng lặp ở Module 2 sẽ cầm trên tay.
Sau bài này bạn cần làm được:
- Tính đạo hàm riêng của hàm nhiều biến bằng cách đóng băng các biến còn lại.
- Lắp các đạo hàm riêng thành vector gradient cùng số chiều với input.
- Giải thích vì sao gradient chỉ hướng tăng nhanh nhất, và vì sao muốn giảm loss phải đi ngược dấu.
- Viết được $\nabla L$ của loss hồi quy tuyến tính theo $w$ và $b$.
- Tính tay một gradient cụ thể trên dataset nhỏ của project.
Đạo hàm riêng: đổi một biến, đóng băng phần còn lại
Đạo hàm riêng theo $x$ của $f(x,y)$ là đạo hàm theo $x$ khi coi $y$ là hằng số. Ký hiệu $\partial f/\partial x$. Cách tính không mới, chỉ thêm một luật: biến nào không phải biến đang lấy đạo hàm thì đối xử như một con số.
Ví dụ $f(x,y) = x^2y + 3y^2$:
- $\partial f/\partial x = 2xy$ (vì $y$ là hằng số, đạo hàm của $y \cdot x^2$ là $2xy$).
- $\partial f/\partial y = x^2 + 6y$ (lúc này $x^2$ là hằng số).
Tại điểm $(1, 2)$: $\partial f/\partial x = 4$ và $\partial f/\partial y = 13$.
Note: Đạo hàm riêng trả lời đúng câu hỏi mà ta cần cho model: "giữ nguyên $b$, chỉ nhích $w$ một chút thì loss đổi bao nhiêu?"
Bài tập nhanh 1. Với $f(w,b) = 3w^2 + 2wb + b^2$, tính $\partial f/\partial w$ và $\partial f/\partial b$ tại $(w,b) = (2,1)$.
Xem đáp án
$\partial f/\partial w = 6w + 2b = 12 + 2 = 14$. $\partial f/\partial b = 2w + 2b = 4 + 2 = 6$.
Vector gradient: gói các đạo hàm riêng lại
Gradient là vector gom tất cả đạo hàm riêng, cùng số chiều với input:
$$ \nabla f = \left(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\right) $$
Với $f(x,y) = x^2 + y^2$ thì $\nabla f = (2x, 2y)$. Tại $(1,1)$ gradient là $(2,2)$, tức mũi tên chỉ ra xa gốc tọa độ, đúng hướng làm hàm tăng nhanh nhất. Độ lớn $\lVert \nabla f \rVert$ là tốc độ tăng theo hướng đó.
Ba tính chất cần nhớ:
- Gradient vuông góc với đường mức (contour) tại điểm đang xét.
- Gradient chỉ hướng tăng nhanh nhất. Gradient luôn chỉ về phía hàm tăng; muốn giảm loss thì phải đi ngược lại.
- Nếu mọi đạo hàm riêng bằng 0 thì $\nabla f = 0$, đó là điểm dừng, chỗ mà bài 2.3 sẽ mổ xẻ (cực tiểu, cực đại hay saddle point).
flowchart TD
L["📉<br/>L(w, b)"] --> Pw["∂L/∂w"]
L --> Pb["∂L/∂b"]
Pw --> G["🧭<br/>∇L"]
Pb --> G
Bài tập nhanh 2. Cho $f(x,y) = x^2y + 3y^2$. Viết $\nabla f$ tại $(1,2)$ và cho biết hướng giảm nhanh nhất.
Xem đáp án
$\nabla f = (2xy,\ x^2 + 6y) = (4, 13)$. Hướng giảm nhanh nhất là $-\nabla f = (-4, -13)$.
Gradient của loss hồi quy tuyến tính
Đây là chỗ chain rule của bài trước quay lại làm việc. Với $\hat{y}_i = w x_i + b$ và $L(w,b) = \frac{1}{n}\sum_i (\hat{y}_i - y_i)^2$, đặt $r_i = \hat{y}_i - y_i$:
\frac{\partial L}{\partial w} = \frac{2}{n}\sum_i x_i r_i, \qquad \frac{\partial L}{\partial b} = \frac{2}{n}\sum_i r_i
Hệ số 2 đến từ đạo hàm của bình phương, $x_i$ đến từ đạo hàm của $w x_i$ theo $w$, còn theo $b$ thì đạo hàm của $w x_i + b$ là 1 nên chỉ còn $r_i$.
Dataset nhỏ của project: $x = [1,2,3]$, $y = [2,3,5]$, khởi đầu $w=0$, $b=0$ nên $\hat{y} = [0,0,0]$.
| $i$ | $x_i$ | $y_i$ | $\hat{y}_i$ | $r_i$ |
|---|---|---|---|---|
| 1 | 1 | 2 | 0 | -2 |
| 2 | 2 | 3 | 0 | -3 |
| 3 | 3 | 5 | 0 | -5 |
$\sum x_i r_i = -2 - 6 - 15 = -23$ nên $\partial L/\partial w = -46/3 \approx -15.33$. $\sum r_i = -10$ nên $\partial L/\partial b = -20/3 \approx -6.67$. Vậy $\nabla L = (-15.33, -6.67)$: cả hai thành phần âm, nghĩa là tăng $w$ và tăng $b$ sẽ kéo loss xuống.
Bài tập nhanh 3. Vẫn dataset trên, tính $\nabla L$ tại $w=1$, $b=1$.
Xem đáp án
$\hat{y} = [2,3,4]$ nên $r = [0,0,-1]$. $\partial L/\partial w = \frac{2}{3}( -3 ) = -2$, $\partial L/\partial b = \frac{2}{3}(-1) \approx -0.67$. Gradient nhỏ hơn nhiều so với lúc $w=b=0$, đúng như kỳ vọng vì $(1,1)$ đã gần nghiệm tối ưu (khoảng $w=1.5$, $b=0.33$), nơi gradient xấp xỉ 0.
Điền nhanh các chỗ trống để tự kiểm tra:
Đạo hàm riêng theo x của f(x,y) được tính bằng cách coi _____ là hằng số. Vector gradient gồm các _____ theo từng biến, cùng số chiều với input. Gradient chỉ hướng _____ nhanh nhất của hàm. Muốn giảm loss, ta cập nhật theo hướng _____ (ngược dấu gradient). Với loss MSE, ∂L/∂b = _____. Tại điểm tối ưu, gradient bằng _____.
Bốn lỗi làm gradient sai dấu
- Quên đóng băng biến: khi tính $\partial L/\partial b$ mà vẫn để $w$ biến thiên thì kết quả sai ngay.
- Nhầm thứ tự hiệu: dùng $(y_i - \hat{y}_i)$ thay vì $(\hat{y}_i - y_i)$ sẽ lật dấu toàn bộ gradient, model đi ngược hướng.
- Quên hệ số 2 hoặc quên $1/n$: hướng không sai nhưng độ lớn sai, và độ lớn là thứ quyết định khi chọn learning rate ở bài sau.
- Tưởng gradient là hướng giảm: gradient là hướng tăng, công thức cập nhật luôn có dấu trừ.
Mẹo kiểm tra 10 giây: tính gradient tại một điểm gần nghiệm tối ưu, nếu ra số lớn thì gần như chắc chắn bạn sai một trong bốn lỗi trên.
Front: Đạo hàm riêng ∂f/∂x của f(x,y) nghĩa là gì? Back: Tốc độ thay đổi của f khi chỉ nhích x, giữ y cố định.
Front: Khi tính ∂f/∂y, biến x được xử lý thế nào? Back: Coi như hằng số.
Front: f(x,y) = x²y thì ∂f/∂x bằng bao nhiêu? Back: 2xy
Front: f(x,y) = x²y + 3y² thì ∂f/∂y bằng bao nhiêu? Back: x² + 6y
Front: Vector gradient ∇f có số chiều bằng gì? Back: Bằng số biến đầu vào của f.
Front: Gradient chỉ hướng nào của hàm? Back: Hướng tăng nhanh nhất (steepest ascent).
Front: Muốn giảm loss thì đi theo hướng nào? Back: Ngược dấu gradient, tức -∇L.
Front: Gradient có quan hệ gì với đường mức (contour)? Back: Vuông góc với đường mức tại điểm đang xét.
Front: ∂L/∂w của loss MSE hồi quy tuyến tính? Back: (2/n) Σ x_i (ŷ_i - y_i)
Front: ∂L/∂b của loss MSE hồi quy tuyến tính? Back: (2/n) Σ (ŷ_i - y_i)
Front: Nếu lỡ dùng (y_i - ŷ_i) thay vì (ŷ_i - y_i) thì sao? Back: Gradient lật dấu, bước cập nhật đi sai hướng.
Front: Gradient tại điểm tối ưu bằng bao nhiêu? Back: Bằng 0, tức vector không.
Front: Với x=[1,2,3], y=[2,3,5], w=0, b=0 thì ∂L/∂w bằng bao nhiêu? Back: -46/3 ≈ -15.33
Chốt lại và bước tiếp theo
- Đạo hàm riêng là đạo hàm một biến, áp lên hàm nhiều biến bằng cách đóng băng các biến còn lại.
- Gradient là vector gom các đạo hàm riêng, cùng số chiều với input, vuông góc với đường mức.
- Gradient chỉ hướng tăng nhanh nhất, nên hướng giảm loss là $-\nabla L$.
- Với hồi quy tuyến tính: $\partial L/\partial w = \frac{2}{n}\sum x_i r_i$ và $\partial L/\partial b = \frac{2}{n}\sum r_i$, tính tay rất nhanh trên dataset nhỏ.
- Bài 2.1 sẽ lấy đúng vector này và biến nó thành vòng lặp cập nhật $w$, $b$ từng bước, để bạn thấy loss tụt dần qua mỗi vòng.