Trong lĩnh vực Machine Learning và Deep Learning, việc lựa chọn và sử dụng các thuật toán tối ưu (Optimizer) đóng vai trò then chốt trong quá trình huấn luyện mô hình. Vậy Optimizer là gì và tại sao chúng ta cần sử dụng chúng? Bài viết này sẽ đi sâu vào giải thích các khái niệm cơ bản, các thuật toán tối ưu phổ biến, ưu nhược điểm và ứng dụng của từng thuật toán.
Optimizer
Mục Lục
Optimizer Là Gì? Tại Sao Phải Dùng?
Để hiểu rõ về Optimizer, trước tiên chúng ta cần nắm vững khái niệm về thuật toán tối ưu. Về cơ bản, thuật toán tối ưu là nền tảng để xây dựng các mô hình mạng nơ-ron (neural network) với mục đích “học” các đặc trưng (features) hoặc mẫu (pattern) từ dữ liệu đầu vào. Từ đó, thuật toán giúp tìm ra một cặp trọng số (weights) và độ lệch (bias) phù hợp để tối ưu hóa mô hình.
Vấn đề cốt lõi ở đây là: “Học” như thế nào? Cụ thể, trọng số và độ lệch được tìm kiếm ra sao? Chúng ta không thể chỉ đơn thuần thử nghiệm ngẫu nhiên (random) các giá trị (weights, bias) một số lần hữu hạn và hy vọng tìm được lời giải tối ưu. Cách tiếp cận đó không khả thi và lãng phí tài nguyên. Thay vào đó, chúng ta cần một thuật toán để cải thiện weight và bias theo từng bước, và đó là lý do các thuật toán optimizer ra đời.
Các Thuật Toán Tối Ưu Phổ Biến
1. Gradient Descent (GD)
Trong các bài toán tối ưu, mục tiêu thường là tìm giá trị nhỏ nhất của một hàm số. Hàm số đạt giá trị nhỏ nhất khi đạo hàm bằng 0. Tuy nhiên, việc tính đạo hàm không phải lúc nào cũng khả thi, đặc biệt đối với các hàm số nhiều biến phức tạp. Thay vào đó, người ta thường tìm một điểm gần với điểm cực tiểu nhất và xem đó là nghiệm của bài toán.
Gradient Descent, hay còn gọi là “giảm dần độ dốc”, tiếp cận vấn đề bằng cách chọn một nghiệm ngẫu nhiên ban đầu và sau mỗi vòng lặp (epoch), nghiệm này sẽ dần tiến đến điểm cần tìm. Công thức cập nhật nghiệm là:
*xnew = xold – η gradient(x)**
Trong đó:
- xnew: Nghiệm mới sau khi cập nhật.
- xold: Nghiệm hiện tại.
- η: Tốc độ học (learning rate), một siêu tham số quan trọng.
- gradient(x): Đạo hàm của hàm số tại điểm x.
Dấu “-” trong công thức thể hiện việc di chuyển ngược hướng đạo hàm. Điều này xuất phát từ việc đạo hàm chỉ ra hướng tăng nhanh nhất của hàm số, do đó, để tìm điểm cực tiểu, chúng ta cần di chuyển theo hướng ngược lại.
Gradient Descent
Ưu điểm của Gradient Descent:
- Thuật toán cơ bản, dễ hiểu và dễ cài đặt.
- Giải quyết được bài toán tối ưu mô hình neural network bằng cách cập nhật trọng số sau mỗi vòng lặp.
Nhược điểm của Gradient Descent:
- Phụ thuộc vào điểm khởi tạo ban đầu và learning rate. Nếu chọn điểm khởi tạo không tốt, thuật toán có thể hội tụ về một cực tiểu cục bộ (local minimum) thay vì cực tiểu toàn cục (global minimum).
- Learning rate quá lớn có thể khiến thuật toán không hội tụ, trong khi learning rate quá nhỏ làm chậm quá trình training.
Gradient Descent Limitations
2. Stochastic Gradient Descent (SGD)
Stochastic Gradient Descent (SGD) là một biến thể của Gradient Descent. Thay vì cập nhật trọng số một lần sau mỗi epoch dựa trên toàn bộ dữ liệu, SGD cập nhật trọng số N lần trong mỗi epoch, với N là số lượng điểm dữ liệu.
Về mặt lý thuyết, SGD có thể làm giảm tốc độ của một epoch. Tuy nhiên, trên thực tế, SGD thường hội tụ nhanh hơn chỉ sau một vài epoch. Công thức cập nhật của SGD tương tự như GD, nhưng được thực hiện trên từng điểm dữ liệu:
*xnew = xold – η gradient(xi)**
Trong đó xi là một điểm dữ liệu ngẫu nhiên.
Stochastic Gradient Descent
SGD có đường đi hội tụ khá zig-zag, không mượt mà như GD. Điều này dễ hiểu vì một điểm dữ liệu đơn lẻ không thể đại diện cho toàn bộ dữ liệu.
Ưu điểm của Stochastic Gradient Descent:
- Phù hợp với cơ sở dữ liệu lớn mà GD không thể xử lý hiệu quả.
- Phù hợp với online learning, trong đó dữ liệu được cập nhật liên tục.
Nhược điểm của Stochastic Gradient Descent:
- Vẫn chưa giải quyết được hai nhược điểm lớn của Gradient Descent: learning rate và điểm khởi tạo ban đầu.
3. Momentum
Để khắc phục các hạn chế của Gradient Descent, người ta sử dụng Gradient Descent with Momentum. Ý tưởng chính của Momentum là thêm một “vận tốc” vào quá trình cập nhật, giúp thuật toán vượt qua các cực tiểu cục bộ và tiến tới cực tiểu toàn cục.
Momentum Visualization
Công thức cập nhật của Momentum:
vt = γ vt-1 + η gradient(x)
xnew = xold – vt
Trong đó:
- vt: Vận tốc tại thời điểm t.
- γ: Hệ số momentum (thường là 0.9).
Ưu điểm của Momentum:
- Giải quyết được vấn đề Gradient Descent bị mắc kẹt tại các cực tiểu cục bộ.
Nhược điểm của Momentum:
- Khi tiến gần đến điểm đích, thuật toán có thể mất nhiều thời gian dao động qua lại trước khi dừng hẳn do quán tính.
Momentum Example
4. Adagrad
Khác với các thuật toán trước đó sử dụng learning rate cố định trong suốt quá trình training, Adagrad coi learning rate là một tham số biến đổi theo thời gian. Adagrad sẽ điều chỉnh learning rate cho từng tham số dựa trên lịch sử gradient của nó.
Công thức cập nhật của Adagrad:
ηt,i = η / √(Gt,ii + ε)
*xnew,i = xold,i – ηt,i gradient(xi)**
Trong đó:
- ηt,i: Learning rate của tham số thứ i tại thời điểm t.
- Gt,ii: Tổng bình phương các gradient của tham số thứ i từ đầu đến thời điểm t.
- ε: Một hằng số nhỏ để tránh chia cho 0.
Adagrad Formula
Ưu điểm của Adagrad:
- Tránh việc điều chỉnh learning rate bằng tay, thuật toán sẽ tự động điều chỉnh.
Nhược điểm của Adagrad:
- Tổng bình phương gradient tăng dần theo thời gian, dẫn đến learning rate giảm dần đến mức cực nhỏ, làm chậm quá trình training và có thể dẫn đến tình trạng “đóng băng”.
5. RMSprop
RMSprop (Root Mean Square Propagation) giải quyết vấn đề learning rate giảm dần của Adagrad bằng cách sử dụng trung bình trượt của bình phương gradient.
Công thức cập nhật của RMSprop:
E[g2]t = ρ E[g2]t-1 + (1 – ρ) gradient(x)2
*xnew = xold – η / √(E[g2]t + ε) gradient(x)**
Trong đó:
- E[g2]t: Trung bình trượt của bình phương gradient tại thời điểm t.
- ρ: Hệ số phân rã (decay rate), thường là 0.9.
Ưu điểm của RMSprop:
- Giải quyết được vấn đề learning rate giảm dần của Adagrad.
Nhược điểm của RMSprop:
- Có thể hội tụ về các cực tiểu cục bộ thay vì cực tiểu toàn cục.
6. Adam
Adam (Adaptive Moment Estimation) là sự kết hợp của Momentum và RMSprop. Adam sử dụng cả trung bình trượt của gradient (như Momentum) và trung bình trượt của bình phương gradient (như RMSprop) để điều chỉnh learning rate cho từng tham số.
Adam Visualization
Công thức cập nhật của Adam:
mt = β1 mt-1 + (1 – β1) gradient(x)
vt = β2 vt-1 + (1 – β2) gradient(x)2
m̂t = mt / (1 – β1t)
v̂t = vt / (1 – β2t)
*xnew = xold – η / (√(v̂t) + ε) m̂t**
Trong đó:
- mt: Trung bình trượt của gradient.
- vt: Trung bình trượt của bình phương gradient.
- β1, β2: Hệ số phân rã (thường là 0.9 và 0.999).
Adam Formula
Tổng Quan
Ngoài các thuật toán trên, còn rất nhiều thuật toán tối ưu khác như Nesterov (NAG), Adadelta, Nadam,… Tuy nhiên, bài viết này tập trung vào các optimizer phổ biến và được sử dụng rộng rãi nhất.
Adam Visualization
Hiện nay, Adam là optimizer được ưa chuộng nhất nhờ khả năng hoạt động tốt và hội tụ nhanh hơn so với các phương pháp khác. Hy vọng bài viết này cung cấp cho bạn cái nhìn tổng quan và sự hiểu biết sâu sắc về các thuật toán tối ưu trong Machine Learning và Deep Learning.