Optimizers SGD, Momentum, Adam
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
Thử điều này:
- Bấm
Chạyvớ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ả
90bướ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.
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.
- 1Kéo tốc độ học lên mức cao nhất rồi bấm Chạy. SGD làm gì?
- 2Với thiết lập mặc định, optimizer nào chạm đáy sau ít bước nhất?
- 3Vì sao đường của Adam là một đường chéo mượt còn SGD thì zigzag?