Deep Learning (học sâu) · Bước 2/8 · 10 phút
Huấn luyện trong thực tế
Bạn đọc được đường cong huấn luyện, nhận ra overfitting và biết các cách khắc phục thường dùng.
Batch và epoch
Hiếm khi người ta tính gradient trên toàn bộ dữ liệu một lúc. Bạn lấy một lô (batch) nhỏ ngẫu nhiên, chẳng hạn 32 hay 128 ví dụ, tính loss trên đó rồi cập nhật trọng số. Đây là stochastic gradient descent. Chút nhiễu trong mỗi batch lại giúp quá trình huấn luyện tìm được lời giải tốt.
Một lượt đi hết toàn bộ tập huấn luyện gọi là một epoch. Model nhỏ có thể huấn luyện hàng chục epoch. Các model ngôn ngữ rất lớn thường chỉ thấy phần lớn dữ liệu của chúng đúng một lần.
Ba tập dữ liệu, một con số trung thực
Chia dữ liệu thành tập huấn luyện (train), tập kiểm định (validation) và tập kiểm tra (test). Mạng học từ tập train. Bạn dùng tập validation để chọn cấu hình và quyết định khi nào dừng. Tập test chỉ chạm vào một lần, ở cuối, để báo cáo model thực sự tốt đến đâu.
Nếu cứ tinh chỉnh dựa trên tập test, nó lặng lẽ trở thành tập validation thứ hai, và con số cuối cùng của bạn sẽ đẹp hơn thực tế.
Overfitting và cách chống lại
Overfitting (quá khớp) là khi loss trên tập train cứ giảm nhưng loss trên tập validation bắt đầu tăng. Mạng đang học thuộc lòng các ví dụ thay vì học quy luật. Lần nào huấn luyện cũng nên vẽ cả hai đường. Biểu đồ đó là công cụ gỡ lỗi chính của bạn.
Các cách thường dùng: thêm dữ liệu, hoặc tạo thêm bằng augmentation (lật, cắt, đổi màu nhẹ với ảnh). Thêm dropout, tức tắt ngẫu nhiên một số nơ-ron khi huấn luyện. Thêm weight decay để giữ trọng số nhỏ. Dừng sớm khi loss validation hết cải thiện. Hoặc dùng model nhỏ hơn.
Vì sao cần GPU
Mạng nơ-ron chủ yếu là các phép nhân ma trận lớn. GPU làm hàng nghìn phép tính nhỏ song song, nên việc huấn luyện mất cả ngày trên CPU laptop có thể chỉ mất vài phút trên GPU.
Bộ nhớ thường là giới hạn. Gặp lỗi hết bộ nhớ (out of memory), hãy giảm batch size trước. Mixed precision, tức lưu số bằng 16 bit thay vì 32 bit, giảm khoảng một nửa bộ nhớ và chỉ cần một dòng code trong các framework hiện đại.
Thử ngay
Cố tình làm model overfit
- 1.Trong TensorFlow Playground, chọn bộ dữ liệu hình tròn (circle), đặt tỉ lệ dữ liệu huấn luyện 10% và độ nhiễu (noise) 30.
- 2.Dựng một mạng lớn: bốn hidden layer, mỗi layer tám nơ-ron. Huấn luyện và xem test loss vượt lên trên training loss.
- 3.Giờ đặt regularization là L2 với hệ số 0.01, hoặc thu nhỏ mạng. So sánh khoảng cách giữa hai con số loss.
Tôi đang học deep learning. Đây là training loss và validation loss qua từng epoch của tôi: [dán số liệu]. Model của tôi đang overfit, underfit hay ổn? Giải thích bằng lời đơn giản và gợi ý hai cách khắc phục, bắt đầu từ cách rẻ nhất.