Momentum, RMSprop, Adam
Momentum, RMSprop, Adam: Các thuật toán tối ưu hóa trong Deep Learning
Giới thiệu
Trong lĩnh vực deep learning, việc huấn luyện mạng neural hiệu quả không chỉ phụ thuộc vào kiến trúc mạng mà còn phụ thuộc rất nhiều vào thuật toán tối ưu hóa (optimization algorithm) được sử dụng. Các thuật toán này quyết định cách thức cập nhật trọng số (weights) và độ lệch (bias) trong mạng neural để giảm thiểu hàm mất mát (loss function).
Bài viết này sẽ đi sâu vào ba thuật toán tối ưu hóa phổ biến và hiệu quả nhất hiện nay: Momentum, RMSprop và Adam. Chúng ta sẽ khám phá cách chúng hoạt động, ưu điểm, nhược điểm và khi nào nên sử dụng mỗi phương pháp.
Stochastic Gradient Descent (SGD) - Điểm khởi đầu
Trước khi đi vào các thuật toán tối ưu hóa nâng cao, chúng ta cần hiểu rõ về Stochastic Gradient Descent (SGD) - thuật toán cơ bản nhất.
Nguyên lý hoạt động của SGD
θ = θ - η * ∇J(θ)Trong đó:
θ: tham số mô hình (trọng số và độ lệch)
η: learning rate (tốc độ học)
∇J(θ): gradient của hàm mất mát theo các tham số
SGD cập nhật các tham số theo hướng ngược lại với gradient để giảm thiểu hàm mất mát. Tuy nhiên, SGD có một số hạn chế:
Hội tụ chậm trên bề mặt dốc thoải
Dễ bị mắc kẹt tại các cực tiểu cục bộ hoặc điểm yên ngựa
Nhạy cảm với việc lựa chọn learning rate
Dễ bị dao động khi bề mặt mất mát không đều
Những vấn đề này dẫn đến sự ra đời của các thuật toán tối ưu hóa nâng cao.
1. Momentum - Đà quán tính
Nguyên lý
Momentum được lấy cảm hứng từ vật lý học - một quả bóng lăn xuống đồi sẽ tích lũy động lượng và di chuyển nhanh hơn. Thuật toán này lưu trữ "vận tốc" - hướng và tốc độ di chuyển từ các bước cập nhật trước đó.
Công thức toán học
v = γ * v - η * ∇J(θ)
θ = θ + vTrong đó:
v: vận tốc (động lượng tích lũy)
γ: hệ số momentum (thường là 0.9)
η: learning rate
∇J(θ): gradient
Cách hoạt động
Tích lũy động lượng: Lưu trữ vận tốc từ các bước trước
Làm mịn quỹ đạo: Giảm dao động bằng cách trung bình hóa các cập nhật
Tăng tốc hội tụ: Tăng tốc theo các hướng nhất quán
Ưu điểm
Hội tụ nhanh hơn: Momentum giúp vượt qua các vùng dốc thoải nhanh hơn
Giảm dao động: Làm mịn các cập nhật, giảm dao động trong quỹ đạo tối ưu hóa
Thoát khỏi cực tiểu cục bộ: Đà tích lũy có thể giúp vượt qua các cực tiểu cục bộ nông
Nhược điểm
Có thể vượt quá mục tiêu: Đôi khi tích lũy quá nhiều động lượng và vượt qua điểm tối ưu
Thêm tham số γ: Cần điều chỉnh thêm tham số momentum
2. RMSprop - Root Mean Square Propagation
Nguyên lý
RMSprop (Root Mean Square Propagation) do Geoffrey Hinton đề xuất, nhằm giải quyết vấn đề learning rate khác nhau cho mỗi tham số. Nó thích nghi learning rate dựa trên lịch sử gradient gần đây.
Công thức toán học
E[g²] = β * E[g²] + (1 - β) * (∇J(θ))²
θ = θ - η * ∇J(θ) / (√E[g²] + ε)Trong đó:
E[g²]: trung bình bình phương của gradient
β: hệ số giảm (thường là 0.9)
ε: hằng số nhỏ để tránh chia cho 0
∇J(θ): gradient
Cách hoạt động
Tính trung bình bình phương: Theo dõi trung bình động bình phương của gradients
Thích nghi learning rate: Chia learning rate cho căn bậc hai của trung bình này
Cập nhật tham số: Sử dụng learning rate thích nghi để cập nhật tham số
Ưu điểm
Thích nghi learning rate: Learning rate khác nhau cho mỗi tham số
Xử lý gradient lớn: Giảm tác động của gradient lớn, tránh dao động
Hiệu quả với bài toán non-stationary: Phù hợp với các bài toán có mục tiêu di chuyển
Nhược điểm
Không có động lượng: Thiếu cơ chế động lượng như Momentum
Cần điều chỉnh β: Thêm một hyperparameter cần tinh chỉnh
3. Adam - Adaptive Moment Estimation
Nguyên lý
Adam (Adaptive Moment Estimation) kết hợp ưu điểm của cả Momentum và RMSprop. Nó sử dụng cả động lượng và trung bình bình phương của gradient để thích nghi learning rate.
Công thức toán học
m = β₁ * m + (1 - β₁) * ∇J(θ) # Ước lượng moment thứ nhất (trung bình)
v = β₂ * v + (1 - β₂) * (∇J(θ))² # Ước lượng moment thứ hai (phương sai)
# Hiệu chỉnh độ chệch
m̂ = m / (1 - β₁ᵗ)
v̂ = v / (1 - β₂ᵗ)
θ = θ - η * m̂ / (√v̂ + ε)Trong đó:
m: ước lượng moment thứ nhất (trung bình)
v: ước lượng moment thứ hai (phương sai)
β₁, β₂: hệ số giảm (thường là 0.9 và 0.999)
t: số bước cập nhật
ε: hằng số nhỏ để tránh chia cho 0
Cách hoạt động
Tính moment thứ nhất: Ước lượng trung bình của gradient (giống Momentum)
Tính moment thứ hai: Ước lượng phương sai của gradient (giống RMSprop)
Hiệu chỉnh độ chệch: Khắc phục vấn đề ước lượng chệch ở giai đoạn đầu
Cập nhật thích nghi: Sử dụng cả hai moment để cập nhật tham số
Ưu điểm
Kết hợp ưu điểm: Tận dụng cả đà quán tính và learning rate thích nghi
Hiệu suất ổn định: Hoạt động tốt trên nhiều kiến trúc và tập dữ liệu
Hiệu chỉnh độ chệch: Giải quyết vấn đề ước lượng không chính xác ở giai đoạn đầu
Hiệu quả với gradient thưa thớt: Xử lý tốt các gradient có nhiều giá trị bằng 0
Nhược điểm
Tính toán phức tạp hơn: Yêu cầu nhiều tài nguyên tính toán hơn
Nhiều hyperparameters: Cần điều chỉnh β₁, β₂, ε
So sánh hiệu suất
SGD
Chậm
Kém
Không ổn định
Thấp
Bài toán đơn giản, dataset nhỏ
Momentum
Nhanh hơn SGD
Tốt
Ổn định trung bình
Trung bình
Bề mặt mất mát có "thung lũng dài"
RMSprop
Nhanh
Trung bình
Ổn định
Trung bình
Bài toán non-stationary
Adam
Rất nhanh
Rất tốt
Rất ổn định
Cao
Đa số bài toán, đặc biệt là deep learning
Hướng dẫn thực hành
Khi nào sử dụng từng thuật toán?
Momentum: Khi bề mặt mất mát có "thung lũng dài" hoặc bạn cần tốc độ hội tụ nhanh hơn SGD
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9)RMSprop: Khi làm việc với RNN hoặc cần thích nghi learning rate
optimizer = tf.keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9)Adam: Lựa chọn mặc định cho hầu hết các bài toán deep learning
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999)
Tuning các hyperparameters
Learning rate (η): Thường bắt đầu với 0.01 cho Momentum, 0.001 cho RMSprop và Adam
Momentum (γ or β₁): Giá trị từ 0.8 đến 0.99, thường là 0.9
β₂ (RMSprop và Adam): Thường là 0.999 hoặc 0.9999
ε: Giá trị nhỏ như 1e-8 đến 1e-7
Kết luận
Mỗi thuật toán tối ưu hóa đều có ưu và nhược điểm riêng. Trong thực tế:
Adam thường là lựa chọn đầu tiên cho hầu hết các bài toán deep learning do tính ổn định và hiệu suất cao
RMSprop là một lựa chọn tốt cho các mạng RNN
Momentum có thể được sử dụng khi bạn muốn một thuật toán đơn giản hơn Adam nhưng hiệu quả hơn SGD
Việc lựa chọn thuật toán tối ưu hóa phù hợp có thể giúp giảm đáng kể thời gian huấn luyện và cải thiện hiệu suất của mô hình deep learning. Tuy nhiên, không có một thuật toán "một-kích-cỡ-phù-hợp-tất-cả" - hãy thử nghiệm để tìm ra thuật toán tốt nhất cho bài toán cụ thể của bạn.
Last updated