# 🎚️ Learning rate, dao động và phân kỳ

By Better Wise

Ở bài trước bạn đã chạy gradient descent bằng tay: mỗi vòng tính gradient rồi trừ đi một lượng tỉ lệ với gradient đó. Bài này trả lời phần còn treo lại: hệ số tỉ lệ, tức learning rate α, nên là bao nhiêu, và làm sao nhìn chuỗi loss mà biết α đang tệ ở chỗ nào.

Sau bài này bạn có thể:

- giải thích α ảnh hưởng thế nào tới tốc độ giảm loss ở từng vòng lặp;
- phân biệt hội tụ êm, dao động và phân kỳ chỉ qua chuỗi loss;
- tính được ngưỡng α cho một loss bậc hai đơn giản;
- chọn α khởi điểm và chỉnh nó trong project hồi quy tuyến tính.

## Learning rate can thiệp vào đâu trong một vòng lặp

Công thức cập nhật: θ ← θ − α·∇L(θ). Gradient trả lời "đi hướng nào", α trả lời "bước dài bao nhiêu". α quá nhỏ thì loss vẫn giảm nhưng rất chậm, đốt vòng lặp vô ích. α quá lớn thì bước nhảy vượt qua đáy, rơi sang sườn bên kia và loss tăng.

Lấy ví dụ chuẩn để tính tay được: L(w) = ½·a·w², gradient = a·w. Thay vào công thức:

w_{k+1} = w_k − α·a·w_k = (1 − α·a)·w_k

Sai số bị nhân với cùng một hệ số sau mỗi vòng, gọi là r = _____. Toàn bộ hành vi của gradient descent trên loss này chỉ phụ thuộc vào độ lớn của r. Vì vậy chỉ cần nhìn chuỗi loss là đoán được α đang ở đâu.

## Ba chế độ: hội tụ êm, dao động, phân kỳ

| α | r = 1 − αa | Chuỗi w | Kết luận |
| --- | --- | --- | --- |
| 0 < α < 1/a | 0 < r < 1 | w giữ dấu, biên độ co đều | Hội tụ êm |
| 1/a < α < 2/a | −1 < r < 0 | w đổi dấu mỗi vòng, biên độ vẫn co | Dao động tắt dần, vẫn hội tụ |
| α = 2/a | r = −1 | w đổi dấu, biên độ giữ nguyên | Dao động vĩnh viễn, loss không giảm |
| α > 2/a | r < −1 | w đổi dấu, biên độ phình ra | Phân kỳ |

> **Important:** 
> Biên phân kỳ là 2/a, không phải 1/a. Vùng giữa 1/a và 2/a vẫn hội tụ, chỉ là w nhảy qua nhảy lại quanh 0. Nhiều người thấy loss nhấp nhô đã vội chia α cho 10, trong khi lẽ ra chỉ cần chia 2.

Đọc bảng này theo hướng kỹ sư: bạn không cần biết a chính xác, bạn chỉ cần biết dấu hiệu nào ứng với vùng nào. Biên độ co lại thì còn cứu được bằng cách tăng số vòng lặp. Biên độ phình ra thì phải hạ α ngay, chạy thêm vòng lặp chỉ làm loss lớn hơn.

Ví dụ thật từ project hồi quy tuyến tính, một biến, bias bằng 0: $L(w) = \frac{1}{2n}\sum (y_i - w x_i)^2$. Đạo hàm bậc hai theo w là $\frac{1}{n}\sum x_i^2$, đóng vai trò a, tức _____. Nếu x quanh 1000 thì a ≈ 10^6, ngưỡng α ≈ 2·10^−6. Một α = 0.01 nghe rất "an toàn" sẽ nổ ngay vòng đầu. Chuẩn hóa x về quanh 1 thì a ≈ 1, α = 0.01 chạy thoải mái.

**Bài tập 1.** Cho $L(w) = \frac{1}{2}\cdot 4w^2$, $w_0 = 1$. (a) Ngưỡng phân kỳ của α? (b) Với α = 0.1; 0.3; 0.6, tính r và ba giá trị loss đầu tiên, kết luận chế độ.

**Xem đáp án**

a = 4 nên hội tụ khi α < 0.5, dao động vĩnh viễn tại α = 0.5, phân kỳ khi α > 0.5. Loss là $2w^2$.

- α = 0.1: r = 0.6. w: 1 → 0.6 → 0.36 → 0.216. Loss: 2 → 0.72 → 0.259 → 0.093. Hội tụ êm.
- α = 0.3: r = −0.2. w: 1 → −0.2 → 0.04 → −0.008. Loss: 2 → 0.08 → 0.003 → gần 0. Dao động tắt rất nhanh, vẫn hội tụ.
- α = 0.6: r = −1.4. w: 1 → −1.4 → 1.96 → −2.744. Loss: 2 → 3.92 → 7.68 → 15.05. Phân kỳ.

Lưu ý ở đây: r âm không đồng nghĩa với hỏng. _____ nhưng nếu |r| < 1 thì loss vẫn về 0.

## Chọn α cho project hồi quy tuyến tính

Hồi quy tuyến tính nhiều feature không có một a duy nhất. Mỗi hướng trong không gian tham số có độ cong riêng: với $L = \frac{1}{2}(\lambda_1 w_1^2 + \lambda_2 w_2^2)$, hướng thứ i co theo $r_i = 1 - \alpha\lambda_i$. Vì α dùng chung cho mọi hướng, nó bị chặn bởi hướng cong nhất: _____. Hướng có λ nhỏ thì $r$ gần 1, gần như đứng yên, và đó là lý do loss giảm chậm dù bạn đã tăng α hết mức an toàn.

Quy trình thực dụng khi bắt tay vào project:

1. Chuẩn hóa feature trước, đưa mỗi feature về cùng thang đo. Việc này kéo λmax xuống và làm các λ gần nhau hơn, tức là mở rộng vùng α an toàn.
2. Thử α theo bậc 10: 1; 0.3; 0.1; 0.03; 0.01. Đừng thử 0.011 rồi 0.012, khác biệt đó không đáng.
3. In loss của 20 đến 50 vòng đầu là đủ chẩn đoán. Không cần đợi 10.000 vòng mới biết α sai.
4. α ≈ 1/λmax cho $r \approx 0$, hội tụ gần như sau một bước theo hướng cong nhất. Đây là điểm khởi đầu tốt nếu bạn ước lượng được λmax.

**Bài tập 2.** Cho $L = \frac{1}{2}(10w_1^2 + 0.1w_2^2)$, khởi tạo $w_1 = w_2 = 1$, α = 0.15. Hướng nào phân kỳ, hướng nào gần như không học?

**Xem đáp án**

λmax = 10 nên α < 0.2 là điều kiện hội tụ; α = 0.15 nằm trong vùng an toàn. $r_1 = 1 - 1.5 = -0.5$: w1 đổi dấu và tắt dần, sau 10 vòng còn khoảng 0.001. $r_2 = 1 - 0.015 = 0.985$: sau 46 vòng w2 mới giảm còn một nửa, loss gần như phẳng. Kết luận: không phân kỳ, nhưng loss bị chi phối bởi hướng chậm. Cách sửa không phải tăng α (sẽ làm w1 nổ), mà là chuẩn hóa feature để hai λ xích lại gần nhau.

## Ba lỗi chỉnh α hay gặp

- **Chưa chuẩn hóa feature đã lo α.** Hầu hết các vụ loss nổ khi làm hồi quy tuyến tính là do cột dữ liệu lệch thang đo, không phải do α. Sửa dữ liệu trước, sửa α sau.
- **Giảm α quá tay khi thấy dao động.** Dao động có biên độ co lại là dấu hiệu vẫn hội tụ. Giảm α lúc đó chỉ khiến bạn chạy thêm vài nghìn vòng vô ích.
- **Đánh giá α bằng đường loss cuối cùng.** Nhìn 20 vòng đầu để chẩn đoán, nhìn loss cuối để so sánh các cấu hình. Trộn hai việc này dễ kết luận sai.

Một lưu ý về số học: khi loss tăng theo cấp số nhân, bạn thường thấy giá trị nhảy lên rất nhanh rồi thành NaN hoặc inf sau vài chục vòng, đặc biệt với dữ liệu thô. Thấy NaN thì đừng nghĩ "lỗi code", hãy nghĩ "α vượt ngưỡng" trước.

## Chốt lại và bài tiếp theo

- α quyết định bước dài bao nhiêu; với loss bậc hai, toàn bộ hành vi gói trong $r = 1 - \alpha a$.
- Hội tụ êm: 0 < α < 1/a. Dao động tắt dần: 1/a < α < 2/a. Phân kỳ: α > 2/a, hay α > 2/λmax khi nhiều chiều.
- Dao động chưa chắc xấu, biên độ phình ra mới xấu. _____ là bước rẻ nhất để mở rộng vùng α an toàn.

Bài tới, "Cực trị, saddle point và điểm dừng", sẽ trả lời câu hỏi mà bài này để ngỏ: loss ngừng giảm nghĩa là đã tới đáy, hay chỉ là gradient quá nhỏ so với α bạn chọn?

## Thẻ ôn tập nhanh

Front: Trong θ ← θ − α·∇L(θ), α điều khiển điều gì?
Back: Độ dài bước mỗi vòng lặp; gradient cho hướng, α cho độ xa của bước.

Front: Với L(w) = ½·a·w², hệ số co sau mỗi vòng là gì?
Back: r = 1 − αa, vì w_{k+1} = r·w_k.

Front: Điều kiện hội tụ êm, không đổi dấu, của loss bậc hai?
Back: 0 < α < 1/a, tức 0 < r < 1.

Front: Khoảng α gây dao động nhưng vẫn hội tụ?
Back: 1/a < α < 2/a, tức −1 < r < 0.

Front: Ngưỡng phân kỳ của L = ½·a·w²?
Back: α > 2/a; tại α = 2/a thì dao động vĩnh viễn, không hội tụ.

Front: Chuỗi loss dao động nhưng biên độ co lại thì kết luận gì?
Back: Vẫn hội tụ, chỉ là α hơi lớn; không cần giảm α ngay.

Front: Dấu hiệu rõ nhất của phân kỳ trên chuỗi loss?
Back: Loss tăng dần qua các vòng, biên độ phình ra, cuối cùng có thể thành NaN.

Front: Với hồi quy tuyến tính một biến, bias bằng 0, hệ số a của loss MSE là gì?
Back: Trung bình bình phương các giá trị x, tức (1/n)Σx_i².

Front: Vì sao feature chưa chuẩn hóa dễ làm loss nổ?
Back: x lớn làm a hay λmax lớn, ngưỡng 2/a rất nhỏ, nên α thường dùng vượt ngưỡng.

Front: Với L = ½(λ1·w1² + λ2·w2²), α bị chặn trên bởi gì?
Back: α < 2/λmax, vì α dùng chung cho mọi hướng.

Front: Nếu λmin rất nhỏ so với λmax thì hiện tượng gì?
Back: Hướng đó có r gần 1, học cực chậm, loss giảm chậm dù α đã tối đa cho phép.

Front: α quá nhỏ biểu hiện thế nào trên chuỗi loss?
Back: Loss giảm đều nhưng rất chậm, nhiều vòng gần như không cải thiện.

Front: Cách thử α thực dụng khi bắt đầu project?
Back: Chuẩn hóa feature, thử theo bậc 10 (1; 0.3; 0.1; 0.03), xem 20 đến 50 vòng đầu.

Front: Chọn α ≈ 1/λmax cho hành vi gì?
Back: r ≈ 0, hội tụ gần như sau một bước theo hướng cong nhất, hướng còn lại chậm hơn nhiều.

Front: Vì sao không nên chỉ thử một giá trị α duy nhất?
Back: Cần quét theo bậc 10 để thấy ranh giới giữa quá nhỏ, vừa và quá lớn.

## Ba thói quen khi chỉnh learning rate

1. **Chuẩn hóa feature trước khi thử α.** Với MSE ở hồi quy tuyến tính, hệ số cong a là trung bình của x², nên x lớn làm ngưỡng 2/a bé đi rất nhanh. Chuẩn hóa giúp cùng một α dùng được cho mọi feature.
2. **Quét theo bậc 10, không quét tuyến tính.** Thử 1; 0,3; 0,1; 0,03; 0,01 và nhìn 20 đến 50 vòng đầu. Learning rate tốt thường nằm cách ngưỡng phân kỳ khoảng 3 đến 10 lần.
3. **Đọc loss theo hình dạng, không theo một con số.** Loss còn giảm đều thì cứ tăng α. Loss dao động với biên độ co lại thì giữ nguyên. Loss phình ra hoặc thành NaN thì chia α cho 3 đến 10 rồi chạy lại.

Nhớ nhanh bằng bốn câu điền khuyết:

- Với L = ½·a·w², phân kỳ xảy ra khi α > _____.
- Vùng dao động nhưng vẫn hội tụ là _____ (tương đương −1 < r < 0).
- Tỉ lệ r = 1 − α·a; khi r âm thì loss _____ quanh điểm cực tiểu thay vì tiến đều.
- Bước chuẩn bị bắt buộc trước khi thử α là _____.

> **Warning:** 
> Đừng chẩn đoán chỉ từ vòng lặp cuối cùng. Một chuỗi loss dao động mạnh ở 10 vòng đầu nhưng biên độ giảm dần vẫn là hội tụ. Hãy nhìn xu hướng của biên độ, không nhìn giá trị tuyệt đối.

## Chốt lại về learning rate

- α quá nhỏ: loss giảm đều nhưng chậm, lãng phí vòng lặp.
- α trong khoảng 1/a < α < 2/a: loss dao động, biên độ co dần, vẫn hội tụ.
- α > 2/a: loss tăng dần rồi nổ, đây là phân kỳ.
- α ≈ 1/λmax cho tốc độ tốt nhất theo hướng cong nhất, nhưng hướng có λ nhỏ vẫn học chậm.
- Chuẩn hóa feature và quan sát 20 đến 50 vòng đầu là hai thao tác rẻ nhất để tránh phân kỳ trong project.

Bài kế tiếp sẽ đi sâu vào chỗ mà chuỗi loss phẳng lì dù α hợp lý: cực trị, saddle point và khi nào thì dừng vòng lặp.

Front: Learning rate α quyết định điều gì trong gradient descent?
Back: Độ dài bước đi ngược hướng gradient ở mỗi vòng lặp.

Front: Với L = ½·a·w², công thức cập nhật là gì?
Back: w ← w − α·a·w, tức w mới = (1 − α·a)·w.

Front: Tỉ lệ r trong w_{t+1} = r·w_t là gì?
Back: r = 1 − α·a.

Front: Điều kiện hội tụ của gradient descent trên L = ½·a·w²?
Back: |r| < 1, tức 0 < α < 2/a.

Front: α < 1/a thì loss biến đổi thế nào?
Back: Giảm đều, không dao động, nhưng chậm nếu α quá nhỏ.

Front: Khoảng α gây dao động nhưng vẫn hội tụ?
Back: 1/a < α < 2/a, tức −1 < r < 0.

Front: Ngưỡng phân kỳ của L = ½·a·w²?
Back: α > 2/a; tại α = 2/a thì dao động vĩnh viễn, không hội tụ.

Front: Chuỗi loss dao động nhưng biên độ co lại thì kết luận gì?
Back: Vẫn hội tụ, chỉ là α hơi lớn; không cần giảm α ngay.

Front: Dấu hiệu rõ nhất của phân kỳ trên chuỗi loss?
Back: Loss tăng dần qua các vòng, biên độ phình ra, cuối cùng có thể thành NaN.

Front: Với hồi quy tuyến tính một biến, bias bằng 0, hệ số a của loss MSE là gì?
Back: Trung bình bình phương các giá trị x, tức (1/n)Σx_i².

Front: Vì sao feature chưa chuẩn hóa dễ làm loss nổ?
Back: x lớn làm a hay λmax lớn, ngưỡng 2/a rất nhỏ, nên α thường dùng vượt ngưỡng.

Front: Với L = ½(λ1·w1² + λ2·w2²), α bị chặn trên bởi gì?
Back: α < 2/λmax, vì α dùng chung cho mọi hướng.

Front: Nếu λmin rất nhỏ so với λmax thì hiện tượng gì?
Back: Hướng đó có r gần 1, học cực chậm, loss giảm chậm dù α đã tối đa cho phép.

Front: α quá nhỏ biểu hiện thế nào trên chuỗi loss?
Back: Loss giảm đều nhưng rất chậm, nhiều vòng gần như không cải thiện.

Front: Cách thử α thực dụng khi bắt đầu project?
Back: Chuẩn hóa feature, thử theo bậc 10 (1; 0,3; 0,1; 0,03), xem 20 đến 50 vòng đầu.

---

## Contents

Part of [📉 Khóa 3: Toán cho Machine Learning — đạo hàm, gradient và tối ưu hóa huấn luyện](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen.md)

- **📐 Đạo hàm, độ dốc và gradient**
  - [📈 Độ dốc và ý nghĩa hình học của đạo hàm](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/do-doc-va-y-nghia-hinh-hoc-cua-dao-ham.md)
  - [🔗 Đạo hàm hàm hợp và chain rule](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/dao-ham-ham-hop-va-chain-rule.md) (sign-in required)
  - [🧭 Đạo hàm riêng và vector gradient](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/dao-ham-rieng-va-vector-gradient.md)
  - [✅ Checkpoint: Đạo hàm và gradient](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/checkpoint-dao-ham-va-gradient.md)
- **📉 Gradient descent và hồi quy tuyến tính**
  - [✍️ Gradient descent tính tay từng bước](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/gradient-descent-tinh-tay-tung-buoc.md)
  - [🎚️ Learning rate, dao động và phân kỳ](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/learning-rate-dao-dong-va-phan-ky.md) — this lesson
  - [⛰️ Cực trị, saddle point và điểm dừng](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/cuc-tri-saddle-point-va-diem-dung.md)
  - [🛠️ Project: Hồi quy tuyến tính với gradient descent](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/project-hoi-quy-tuyen-tinh-voi-gradient-descent.md)
  - [✅ Checkpoint: Gradient descent và hồi quy tuyến tính](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/checkpoint-gradient-descent-va-hoi-quy-tuyen-tinh.md)
- [Course cheatsheet](https://everwise.study/courses/khoa-3-toan-cho-machine-learning-dao-ham-gradient-va-toi-uu-hoa-huan-luyen/cheatsheet.md) (premium content)
