Chuyển tới nội dung chính

Optimizers SGD, Momentum, Adam

Kéo thảTính lại thậtSo sánh trực tiếp

Optimizers SGD, Momentum, Adam

Thả cùng một điểm xuất phát và xem ba optimizer đi tới đáy theo ba kiểu khác hẳn nhau.

Trong huấn luyện, mặt lỗi hiếm khi là một cái bát tròn đều. Nó thường là một rãnh hẹp: rất dốc theo một hướng và gần như phẳng theo hướng còn lại. Ở đây mặt lỗi là f(x, y) = 0.6·x² + 60·y², dốc dựng đứng theo trục dọc y và thoai thoải theo trục ngang x, nên các đường đồng mức là những elip dẹt kéo dài.

Gradient descent thuần túy lấy cùng một tốc độ học cho mọi chiều. Trong rãnh này, bước đi vừa đủ lớn để không vọt qua bức tường dốc lại quá nhỏ so với hướng phẳng, nên nó nảy qua nảy lại giữa hai vách trong khi bò rất chậm dọc theo đáy. Momentum và Adam ra đời để chữa đúng cảnh này: một cái tích lũy đà theo hướng nhất quán, một cái chỉnh riêng độ dài bước cho từng chiều.

Thử ngay

Optimizers · SGD, Momentum, Adam đi khác nhau thế nào
bước 0sẵn sàng
cực tiểuSGDMomentumAdam
SGDbước tới đáy > 90lỗi cuối 0.015
Momentumbước tới đáy 15lỗi cuối 0.001
Adambước tới đáy 58lỗi cuối 0.002

Thử điều này:

  • Bấm Chạy với thiết lập mặc định và nhìn ba đường: SGD zigzag qua lại trong rãnh, momentum lao thẳng xuống đáy, Adam đi một đường chéo mượt.
  • Đọc bảng dưới khung: momentum chạm đáy sau khoảng 15 bước, còn SGD chưa tới đáy sau cả 90 bước.
  • Kéo tốc độ học lên mức cao nhất rồi chạy lại: SGD phân kỳ (vọt khỏi khung), nhưng momentum và Adam vẫn về được đáy.
  • Kéo điểm xuất phát sang một góc khác và chạy lại để thấy thứ tự về đích vẫn giữ.

Momentum và thích nghi

Momentum giữ một vector vận tốc: mỗi bước nó cộng thêm một phần gradient mới vào đà cũ, nên theo hướng phẳng nhất quán đà lớn dần và nó phóng nhanh về đáy. Adam đi theo cách khác: nó chia bước của mỗi chiều cho độ lớn gradient gần đây của chính chiều đó, nên chiều dốc và chiều phẳng nhận bước dài xấp xỉ nhau và đường đi thành một đường chéo gọn gàng thay vì zigzag.

Điều rút ra

Cùng một tốc độ học, SGD kẹt lại vì nó đối xử mọi chiều như nhau, còn momentum tích lũy đà theo hướng phẳng và Adam chỉnh riêng bước cho từng chiều nên cả hai thoát khỏi rãnh nhanh hơn hẳn.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Kéo tốc độ học lên mức cao nhất rồi bấm Chạy. SGD làm gì?
  2. 2Với thiết lập mặc định, optimizer nào chạm đáy sau ít bước nhất?
  3. 3Vì sao đường của Adam là một đường chéo mượt còn SGD thì zigzag?