⛰️ Cực trị, saddle point và điểm dừng

By Better Wise

Ở bài trước bạn đã thấy learning rate quá lớn làm loss dao động, quá nhỏ thì bò rất chậm. Nhưng còn một câu hỏi lớn hơn: vòng lặp nên dừng ở đâu, và làm sao biết chỗ mình dừng là đáy thật hay chỉ là một chỗ trũng giả? Bài này trang bị cho bạn cách đọc "địa hình" của loss surface.

Sau bài này, bạn sẽ:

  • Phân biệt local minimum, local maximum và saddle point qua gradient và Hessian.
  • Giải thích vì sao gradient xấp xỉ 0 chưa chắc là điểm tốt để dừng.
  • Viết được bốn tiêu chí dừng vòng lặp thường dùng và chọn ngưỡng hợp lý.
  • Kiểm tra một điểm dừng bằng tay trên loss của hồi quy tuyến tính.

Điểm dừng: nơi gradient không còn chỉ đường

Điểm dừng (stationary point) là điểm mà gradient bằng 0 (hoặc xấp xỉ 0). Đây chính là chỗ gradient descent tự nhiên chậm lại, vì bước cập nhật tỉ lệ thuận với gradient.

Với hàm một biến, điều kiện $f'(x) = 0$ chỉ nói rằng tiếp tuyến nằm ngang. Để phân loại, xem đạo hàm bậc hai:

  • $f''(x) > 0$: đường cong mở lên, đó là local minimum.
  • $f''(x) < 0$: đường cong mở xuống, đó là local maximum.
  • $f''(x) = 0$: chưa kết luận được, phải xét thêm.

Với hàm nhiều biến, "đạo hàm bậc hai" là Hessian, ma trận các đạo hàm riêng bậc hai. Phân loại dựa trên dấu của các eigenvalue của Hessian tại điểm dừng đó.

flowchart TD
    A["🎯<br/>Gradient bằng 0?"] -->|Chưa| B["Tiếp tục cập nhật"]
    A -->|Rồi| C["📐<br/>Xét Hessian"]
    C --> D["Eigenvalue toàn dương"]
    C --> E["Eigenvalue toàn âm"]
    C --> F["Eigenvalue trái dấu"]
    D --> G["🟢<br/>Minimum"]
    E --> H["🔴<br/>Maximum"]
    F --> I["🟡<br/>Saddle point"]

Một điểm dừng mà gradient bằng 0 được gọi là _____. Với hàm một biến, nếu $f'(x)=0$ và $f''(x) > 0$ thì $x$ là _____.

Kiểm tra tay trên loss một tham số

Loss của mô hình một tham số trên tập dữ liệu nhỏ có dạng $L(w) = (w-4)^2 + 2$.

  1. Tính $L'(w)$ và tìm điểm dừng.
  2. Dùng đạo hàm bậc hai để phân loại điểm đó.
  3. Nếu gradient descent dừng ở $w = 3.9$, tham số lệch bao nhiêu so với điểm tối ưu?

Xem đáp án

  1. $L'(w) = 2(w-4) = 0 \Rightarrow w = 4$.
  2. $L''(w) = 2 > 0$ nên $w = 4$ là local minimum, giá trị loss là $L(4) = 2$.
  3. Lệch $0.1$. Đây là lý do ta cần tiêu chí dừng theo ngưỡng chứ không chờ gradient bằng 0 tuyệt đối.

Saddle point: đáy ở hướng này, vực ở hướng khác

Xét $L(w_1, w_2) = w_1^2 - w_2^2$. Gradient là $(2w_1, -2w_2)$, bằng 0 tại gốc tọa độ. Nhưng nhìn kỹ: theo hướng $w_1$ hàm mở lên (có đáy), theo hướng $w_2$ hàm mở xuống (không có đáy). Điểm này là saddle point.

Hessian tại gốc là ma trận chéo $\mathrm{diag}(2, -2)$: một eigenvalue dương, một eigenvalue âm. Nếu Hessian có eigenvalue trái dấu thì điểm dừng đó là _____.

Vì sao điều này quan trọng với ML? Loss surface của mạng neural nhiều tham số hiếm khi có local minimum "kẹt" theo mọi hướng, nhưng saddle point thì rất nhiều. Gần saddle point, gradient rất nhỏ nên bước đi rất nhỏ: loss đứng yên, trông y như đã hội tụ, nhưng giá trị loss vẫn còn cao. Đây là cái bẫy phổ biến khi đọc loss curve.

Dấu hiệu nhận biết: gradient norm nhỏ, loss gần như phẳng, nhưng loss không giảm thêm dù chạy rất nhiều vòng. Cách kiểm tra thực dụng: khởi tạo lại với seed khác, hoặc chạy thêm vài trăm vòng với learning rate lớn hơn một chút, xem loss có tụt xuống mức thấp hơn không.

Phân loại điểm dừng bằng Hessian

Cho $L(w_1, w_2) = w_1^2 - w_2^2 + 5$. Tại $(0,0)$, gradient bằng 0 và $|\nabla L| = 0$. Hãy tính Hessian, kết luận loại điểm dừng, và giải thích vì sao một vòng lặp dừng ở đây là kết quả xấu.

Xem đáp án

Hessian là $\begin{pmatrix} 2 & 0 \ 0 & -2 \end{pmatrix}$, eigenvalue $2$ và $-2$ trái dấu, nên $(0,0)$ là saddle point. Loss tại đó là $5$, trong khi theo hướng $w_1$ hoặc $w_2$ ta còn giảm được nhiều. Dừng vì gradient norm nhỏ là dừng sai chỗ.

Bốn tín hiệu đáng tin để dừng vòng lặp

Trong thực tế gradient gần như không bao giờ bằng 0 chính xác, ta chỉ dừng khi "đủ gần". Bốn tiêu chí thường dùng:

  1. Gradient norm. Dừng khi $|\nabla L| < \varepsilon$, ví dụ $\varepsilon = 10^{-5}$. Phổ biến nhất, nhưng không phân biệt được minimum với saddle point.
  2. Thay đổi loss. Dừng khi $|L_t - L_{t-1}| < \delta$ trong vài vòng liên tiếp. Rẻ, nhưng dễ dừng sớm ở vùng phẳng.
  3. Số vòng lặp tối đa. Luôn đặt max_epochs để chặn chi phí, kể cả khi hai tiêu chí trên chưa kích hoạt.
  4. Validation loss (early stopping). Dừng khi validation loss bắt đầu tăng trong patience vòng liên tiếp. Đây là tiêu chí sát với mục tiêu thật của model.

Tiêu chí dừng phổ biến nhất là chuẩn của gradient nhỏ hơn _____. Nhưng dùng một mình gradient norm rất dễ nhầm saddle point hoặc vùng phẳng với minimum thật, nên luôn log loss song song.

Với hồi quy tuyến tính, loss là hàm _____, nên mọi điểm dừng đều là global minimum. Đây là lý do gradient norm là tiêu chí dừng khá đáng tin cho mô hình này, và cũng là lý do nếu bạn thấy hai lần chạy ra hai mức loss khác nhau ở "điểm dừng" thì gần như chắc chắn có bug (tính gradient sai, ngưỡng quá lớn, hoặc dữ liệu chưa chuẩn hóa).

Chẩn đoán một lần chạy hồi quy tuyến tính

Bạn chạy gradient descent cho hồi quy tuyến tính hai tham số $(w, b)$. Sau 500 vòng: $|\nabla L| = 3 \times 10^{-6}$ và $L = 0.42$. Lần chạy trước với khởi tạo khác đạt $L = 0.31$. Bạn kết luận gì?

Xem hướng làm

Vì loss convex, nếu gradient thật sự xấp xỉ 0 thì chỉ có một mức loss tối ưu duy nhất. Hai mức loss khác nhau ở hai "điểm dừng" là mâu thuẫn. Cần kiểm tra theo thứ tự: công thức gradient có đúng không, ngưỡng $\varepsilon$ có quá lớn so với scale dữ liệu không, dữ liệu đã chuẩn hóa chưa, và đã chạy đủ vòng chưa.

Đọc loss curve như một kỹ sư

  • Đừng bao giờ chỉ nhìn một con số cuối cùng. Vẽ loss curve và log gradient norm cùng lúc, hai đường này phải "đồng ý" với nhau.
  • Gradient norm nhỏ mà loss cao: nghi saddle point hoặc vùng phẳng (ví dụ sigmoid bão hòa), không phải đã hội tụ.
  • Loss giảm rồi đứng yên nhưng nhảy bậc thất thường: quay lại bài learning rate trước khi kết luận về điểm dừng.
  • Với hàm convex, hãy tin gradient norm. Với mạng neural, hãy tin validation loss hơn.
  • Luôn có max_epochs làm chốt chặn an toàn, và lưu lại tham số tốt nhất theo validation loss chứ không phải theo vòng cuối.

Mang gì sang project hồi quy tuyến tính

Bốn điều cần nhớ: điểm dừng là nơi gradient bằng 0; phân loại nó bằng dấu eigenvalue của Hessian; saddle point có gradient nhỏ nhưng không phải đáy; và tiêu chí dừng đáng tin nhất là tổ hợp gradient norm, thay đổi loss và validation loss.

Bài tiếp theo là project: bạn sẽ tự chạy gradient descent cho hồi quy tuyến tính từng vòng, in ra loss và gradient norm, rồi dùng chính bốn tín hiệu vừa học để quyết định lúc dừng và để giải thích vì sao loss giảm chậm ở một số vòng.

Thẻ ghi nhớ để ôn lại

Front: Điểm dừng (stationary point) là gì? Back: Điểm mà gradient bằng 0 hoặc xấp xỉ 0.

Front: Ba loại điểm dừng là gì? Back: Local minimum, local maximum và saddle point.

Front: f'(x) = 0 và f''(x) > 0 cho biết điều gì? Back: x là điểm cực tiểu cục bộ.

Front: f'(x) = 0 và f''(x) < 0 cho biết điều gì? Back: x là điểm cực đại cục bộ.

Front: Hessian là gì? Back: Ma trận các đạo hàm riêng bậc hai của hàm nhiều biến.

Front: Phân loại điểm dừng bằng Hessian như thế nào? Back: Eigenvalue toàn dương là minimum, toàn âm là maximum, trái dấu là saddle point.

Front: Tại sao saddle point nguy hiểm với gradient descent? Back: Gradient gần 0 nên bước cập nhật rất nhỏ, dễ bị nhầm là đã hội tụ.

Front: Dấu hiệu nhận biết saddle point trên loss curve? Back: Gradient norm nhỏ, loss phẳng nhưng vẫn ở mức cao, không giảm thêm.

Front: Tiêu chí dừng theo gradient norm là gì? Back: Dừng khi chuẩn của gradient nhỏ hơn ngưỡng epsilon.

Front: Tiêu chí dừng theo thay đổi loss là gì? Back: Dừng khi chênh lệch loss giữa hai vòng liên tiếp nhỏ hơn delta trong vài vòng.

Front: Early stopping dựa trên tín hiệu nào? Back: Validation loss bắt đầu tăng trong patience vòng liên tiếp.

Front: Vì sao chỉ dùng gradient norm để dừng là chưa đủ? Back: Nó không phân biệt được minimum với saddle point hay vùng phẳng.

Front: Vì sao hồi quy tuyến tính ít gặp saddle point? Back: Loss là hàm convex nên mọi điểm dừng đều là global minimum.