Khi mới bắt tay vào huấn luyện mô hình AI, mình hay gặp một tham số lạ lẫm trong các file config: warmup_steps. Ban đầu mình cứ để mặc định và không quan tâm, cho đến một lần loss tự nhiên nhảy lên rồi biến thành NaN chỉ sau vài trăm bước. Hóa ra lý do rất đơn giản: mình đã bỏ qua warmup. Bài này sẽ giải thích warmup steps là gì, tại sao nó lại quan trọng đến vậy và nên đặt bao nhiêu cho hợp lý.
Warmup Steps Là Gì?
Warmup steps là số bước huấn luyện đầu tiên mà learning rate được tăng dần từ một giá trị rất nhỏ lên mức tối đa, thay vì dùng ngay learning rate đầy đủ ngay từ bước đầu tiên.
Ví dụ cụ thể: bạn đặt learning rate là 0.0001 và warmup steps là 1.000. Điều đó có nghĩa là ở bước 1, learning rate chỉ bằng 0.0000001, rồi tăng dần đều cho đến bước 1.000 mới đạt đúng 0.0001. Sau đó, chiến lược giảm learning rate thông thường (cosine, linear hay step decay) mới bắt đầu vào việc.
Nói ngắn gọn, warmup chính là màn “khởi động” của mô hình, giống như bạn khởi động cơ thể trước khi chạy nước rút vậy.

Tại Sao Cần Warmup Steps Khi Huấn Luyện Mô Hình?
Ở những bước đầu tiên của quá trình huấn luyện, trọng số của mô hình chỉ là các con số ngẫu nhiên. Mô hình chưa biết gì cả, nên gradient lúc này thường lớn và hỗn loạn. Nếu bạn dùng ngay learning rate cao, một bước cập nhật trọng số quá mạnh có thể khiến mô hình “vỡ” ngay lập tức.
Hiện tượng này mình đã trải qua: loss giảm ngon lành vài chục bước rồi bất ngờ tăng vọt và thành NaN, tức là các con số trong mô hình đã tràn ra ngoài phạm vi biểu diễn. Chạy lại với warmup 500 bước, mọi thứ êm ru.
Có một lý do kỹ thuật nữa: các bộ tối ưu như Adam phải ước lượng trung bình gradient ngay từ đầu. Trong lúc ước lượng còn sai, learning rate hiệu quả có thể bị thổi phồng lên gấp nhiều lần so với dự kiến. Warmup cho bộ tối ưu có thời gian “canh” lại tấn số trước khi chạy hết tốc lực.
Warmup Steps Hoạt Động Như Thế Nào?
Cách phổ biến nhất là linear warmup: learning rate tăng theo đường thẳng từ 0 (hoặc một giá trị rất nhỏ) lên mức đỉnh. Giả sử huấn luyện tổng cộng 100.000 bước, peak learning rate 0.0001 và warmup 5.000 bước, thì tại bước 2.500 learning rate sẽ là 0.00005, tức đúng nửa mức đỉnh.
Một số setup dùng constant warmup, tức giữ learning rate ở mức thấp cố định trong suốt pha khởi động rồi nhảy lên đỉnh. Cách này đơn giản nhưng dễ gây giật nếu mức chênh lệch quá lớn, nên ngày nay linear warmup được ưa chuộng hơn.
Sau khi warmup kết thúc, đường learning rate sẽ tiếp tục theo lịch trình giảm mà bạn cấu hình. Toàn bộ hành trình lên rồi xuống đó được gọi là learning rate schedule, còn warmup chỉ là đoạn khởi đầu của hành trình ấy.
Nên Đặt Warmup Steps Bao Nhiêu Là Hợp Lý?
Không có con số thần nào phù hợp cho mọi trường hợp, nhưng kinh nghiệm chung của cộng đồng là khoảng 1% đến 10% tổng số bước huấn luyện. Với các mô hình transformer huấn luyện từ đầu, người ta thường chọn vài nghìn bước hoặc khoảng 1-3% tổng steps.
Khi fine-tune một mô hình có sẵn, bạn thường không cần warmup dài. Vài trăm bước là đủ, thậm chí có thể bỏ hẳn nếu learning rate đã rất nhỏ, ví dụ dưới 0.00001. Lý do là trọng số đã ở vị trí tốt rồi, không còn cảnh gradient hỗn loạn như huấn luyện từ đầu.
Mẹo thực tế của mình: hãy nhìn biểu đồ loss những bước đầu tiên. Nếu loss nhảy loạn lên xuống hoặc tăng vọt ngay lúc mở đầu, hãy tăng warmup lên gấp đôi rồi thử lại. Nếu loss giảm mượt ngay từ đầu, bạn đang đặt warmup hợp lý, hoặc thậm chí đang đặt dư.
Warmup Steps Khác Gì Learning Rate Schedule?
Nhiều bạn hay nhái lẫn hai khái niệm này. Warmup steps chỉ là pha tăng nhiệt ở phần đầu, còn learning rate schedule là toàn bộ kế hoạch điều chỉnh learning rate xuyên suốt quá trình huấn luyện: lên ở đầu, giữ hoặc giảm dần về sau.
Bạn có thể hình dung schedule là lộ trình chạy marathon cả buổi, còn warmup là 5 phút khởi động chân tay trước khi xuất phát. Một schedule tốt thường bao gồm warmup bên trong nó, và hầu hết các thư viện huấn luyện hiện đại đều cho phép cấu hình cả hai trong cùng một chỗ.
Ngoài ra, warmup còn liên quan mật thiết đến gradient descent: chính là việc kiềm chế bước đi của thuật toán này ở giai đoạn mù mờ nhất, khi hướng đi chưa đáng tin cậy.
Bỏ Qua Warmup Steps Có Sao Không?
Tùy tình huống. Nếu bạn fine-tune nhẹ với learning rate rất nhỏ, việc bỏ warmup thường không gây hậu quả đáng kể. Nhưng nếu huấn luyện một mô hình lớn từ đầu, nhất là kiến trúc transformer với learning rate cỡ 0.0001 trở lên, bỏ warmup là đánh bạc với xác suất loss diverge khá cao.
Chi phí của warmup gần như bằng không: chỉ là vài phần trăm thời gian huấn luyện ban đầu chạy chậm tiến độ hơn một chút, đổi lại sự ổn định rõ rệt. Theo mình, đây là một trong những khoản đầu tư có tỷ lệ lợi nhuận cao nhất trong deep learning: rẻ mà tránh được thảm họa.
Kết Luận
Warmup steps là pha khởi động của learning rate: tăng dần từ gần 0 lên mức đỉnh trong một số bước đầu tiên, giúp mô hình vượt qua giai đoạn hỗn loạn nhất mà không bị vỡ. Kinh nghiệm của mình sau nhiều lần vấp: cứ để warmup khoảng vài phần trăm tổng số bước cho các bản huấn luyện lớn, và luôn theo dõi loss lúc mở đầu.
Nếu bạn đang tìm hiểu sâu hơn về cách điều chỉnh tốc độ học, hãy đọc tiếp bài về learning rate schedule để hiểu toàn bộ bức tranh, từ lúc khởi động cho đến khi hạ nhiệt hoàn toàn.