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, RMSpropAdam. 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(θ)
θ = θ + v

Trong đó:

  • 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

  1. Tích lũy động lượng: Lưu trữ vận tốc từ các bước trước

  2. 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

  3. 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

  1. Tính trung bình bình phương: Theo dõi trung bình động bình phương của gradients

  2. Thích nghi learning rate: Chia learning rate cho căn bậc hai của trung bình này

  3. 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

  1. Tính moment thứ nhất: Ước lượng trung bình của gradient (giống Momentum)

  2. Tính moment thứ hai: Ước lượng phương sai của gradient (giống RMSprop)

  3. Hiệu chỉnh độ chệch: Khắc phục vấn đề ước lượng chệch ở giai đoạn đầu

  4. 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

Thuật toán
Tốc độ hội tụ
Khả năng thoát khỏi cực tiểu cục bộ
Độ ổn định
Tài nguyên tính toán
Phù hợp với

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?

  1. 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)
  2. 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)
  3. 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