Lựa chọn Optimizer phù hợp (phần 1)

CongDC
5 min readJun 24, 2024

--

Optimizer là các thuật toán để giúp quy trình huấn luyện một model AI đi đúng hướng tới điểm tối ưu, trong bài toán sinh ảnh, các mô hình phức tạp như Stable diffusion, … cần có thuật toán tối ưu phù hợp để giúp mô hình nhanh đến đích hơn

Cho đến thời điểm viết bài báo này, đã có rất nhiều nghiên cứu về các thuật toán tối ưu khác nhau. Đánh giá chung hiện tại có 6 thuật toán tối ưu đang được các nhà nghiên cứu ưu thích sử dụng. Để dễ hình dung, tôi sẽ ví dụ quá trình tối ưu mạng neural giống với một người leo bộ bị mù xuất phát từ môt điểm bất kỳ đang cố gắng đi đến nơi sâu nhất của trái đất. Nhìn chung các làm của các thuật toán hiện tại là người leo bộ này sẽ luôn đi theo hướng sườn đồi dốc xuống

Minh họa về quá trinh tìm kiếm điểm tối ưu của các optimizer function

SGD (Stochastic Gradient Descent)

Đây là thuật toán tối ưu hóa cơ bản nhất, ví dụ ký hiệu của tham số là a, learning rate là alpha và đạo hàm của loss function là delta J, ta có công thức cập nhập hàm tối ưu như sau:

Momentum Optimizer

SGD có một nhược điểm là dễ bị mắc kẹt ở các điểm tối ưu hóa cục bộ, do vậy các nhà nghiên cứu đã bô xung thêm momentum (quán tính) để khi gặp điểm tối ưu cục bộ, thuật toán tiếp tục tìm điểm tối ưu tiếp theo mà chưa vội dừng lại, cụ thể như sau:

NAG (Nesterov Accelerated gradient)

Tiếp tục cải tiến từ Momentum optimizer, giờ đây optimizer sẽ có thêm “ma sát” để giúp mô hình ổn định lại nhanh chóng khi gặp các điểm tối ưu mà không dao động vòng vòng xung quanh điểm này nữa, cụ thể:

Chi tiết hơn có thể xem thêm tại đây

AdaGrad

AdaGrad điều chỉnh tốc độ học theo các tham số, thực hiện cập nhật nhỏ hơn cho các trọng số cập nhật thường xuyên và ngược lại. Quy tắc cập nhật là

trong đó Gt là ma trận đường chéo trong đó mỗi phần tử đường chéo i, i là tổng bình phương của các gradient w.r.t a_i cho đến bước thời gian t.

RMSprop Optimizer

RMSprop chia tốc độ học của một trọng số cho giá trị trung bình của các learning rate gần đây cho trọng số đó. Quy tắc cập nhật là:

trong đó β là tốc độ phân rã kiểm soát đường trung bình động

Adam

Trước khi đi vào AdamW, hay đi qua một chút lý thuyết về Adam. Minh họa cho dễ hiểu thì Adam là cách người đi bộ sẽ đi xuống khá cẩn thận, tại vùng sườn đồi có độ dốc thay đổi lớn, người đi bộ sẽ đi một cách chậm rãi, nhưng ở vùng đồng bằng, người đi bộ sẽ cố gắng đi thật nhanh để tới đích. Công thức về cách cập nhập như sau:

Bản thân Adam đã là một phiên bản cải tiến so với SGD, do vậy về mặt lý thuyết Adam sẽ phải tốt hơn SGD. Nhưng thực tế là không, khi sử dụng trong thực tế, kết hợp với các kỹ thuật khác như regularized L2, SGD cung cấp một thuật toán có độ tổng quát hơn hẳn so với Adam. Lý do tại sao vậy ? Hãy nhìn vào hình ảnh dưới đây

Mô tả thuật toán “Fixing Weight Decay Regularization in Adam” của Ilya Loshchilov, Frank Hutter

Phần màu hồng chính là khi áp dụng regularized cho Adam, lúc này việc cập nhập trong số ( ký hiệu là x) sẽ diễn ra như sau.

Nhìn vào công thức trên có thể thấy weight decay sẽ được chuẩn hóa theo vận tốc vt, điều này tức là gì ? nếu độ dốc của một trọng số x_(t-1) lớn, v tương ứng cũng lớn và ngược lại, việc này khiên mô hình luôn luôn bỏ qua các trọng số đang thay đổi nhanh chóng trong quá trình cập nhập và khiến mô hình không hội tụ một cách ổn định. Chính điều này gây ra hạn chế khiến các nhà khoa học phải chuyển đổi giữa SGD và Adam liên tục.

AdamW

Từ điểm yếu trên, tác giả đã tìm ra cách để khắc phục là chuyển vị trí thêm weight decay xuống dòng số 12 trong bảng minh họa thuật toán bên trên, điều này bỏ qua sự ảnh hưởng của vận tốc trong quá trình chuẩn hóa trọng số của mô hình, giúp L2 hoạt động đúng với mục đích của nó. AdamW mang lại khả năng tổng quát hóa và tốc độ đào tạo nhanh hơn nhiều so với Adam và lại vượt trên SGD một lần nữa.

Chi tiết bạn có thể đọc thêm tại bài Why adamw is matters ?

Lion (EvoLved Sign Momentum)

Lion được sinh ra để cải tiến về măt hiệu suất cho AdamW, Lion chỉ tập chung vào dâu (hướng đi) của đạo hàm chứ không quan tâm đến độ lớn như các thuật toán tối ưu hóa trước đây

Điều này giúp không chỉ tiết kiệm bộ nhớ hơn so với sử dụng AdamW mà nó còn có khả năng chống chịu overfiting tốt hơn so với các thuật toán trước đây

Tổng kết

Chúng ta vừa nhìn lại qua những thuật toán tối ưu hóa đang phổ biến nhất hiện tại, tùy từng bài toán mọi người sẽ có những lựa chọn khác nhau cho riêng mình. Tuy nhiên vẫn sẽ còn 1 vài nhược điểm như phải tự điều chỉnh tốc độ học mất khá nhiều thời gian. Mọi người hãy xem phần tiếp theo

Tài liệu tham khảo

  1. Lion Optimizer
  2. Cloudfactory — Lion
  3. Viblo — Hiểu sâu về các thuât toán tối ưu hóa

--

--

No responses yet