AIToanHoc.comAI Toán Học
Toán đứng sau trí tuệ nhân tạo

Quá khớp (overfitting) là gì: vì sao mô hình học thuộc và các cách chính quy hoá

Quá khớp là khi mô hình học thuộc dữ liệu huấn luyện mà dự đoán kém trên dữ liệu mới. Ví dụ tính tay, chia tập dữ liệu, chính quy hoá L1, L2 và dừng sớm.

Quang Ninh tailor shop, a tailor seen from behind pinning a jacket tightly onto a wooden mannequin, fabric rolls on shelves, soft window light, close medium shot

Quá khớp là khi mô hình khớp dữ liệu huấn luyện quá sát, tới mức học cả nhiễu và chi tiết ngẫu nhiên, nên dự đoán kém trên dữ liệu mới mà nó chưa từng thấy. Dấu hiệu điển hình là sai số trên tập huấn luyện tiếp tục giảm trong khi sai số trên tập kiểm định dừng giảm rồi đi lên. Mô hình đã chuyển từ học quy luật sang học thuộc.

Đây là vấn đề trung tâm của học máy, vì mục tiêu thật không bao giờ là làm tốt trên dữ liệu đã có mà là làm tốt trên dữ liệu sắp tới. Bài này minh hoạ quá khớp bằng ví dụ ba điểm tính tay, giải thích cách chia dữ liệu để phát hiện nó, khung độ lệch và phương sai, rồi đi qua các cách chống quá khớp: chính quy hoá L2 và L1, dropout, dừng sớm và thêm dữ liệu.

Ví dụ tính tay: đường thẳng hay đường cong đi qua mọi điểm

Ví dụ giả định có ba điểm dữ liệu: (0; 1), (1; 3), (2; 2). Có một parabol đi qua đúng cả ba điểm. Đặt y = a·x² + b·x + c. Từ điểm (0; 1) có c = 1. Từ (1; 3) có a + b + 1 = 3, tức a + b = 2. Từ (2; 2) có 4a + 2b + 1 = 2, tức 4a + 2b = 1. Giải ra a = −1,5 và b = 3,5. Parabol y = −1,5x² + 3,5x + 1 có sai số huấn luyện bằng 0.

Đường thẳng khớp tốt nhất theo bình phương nhỏ nhất thì khác. Trung bình của x là 1, của y là 2. Độ dốc bằng tổng (x − 1)(y − 2) chia tổng (x − 1)², tức [(−1)(−1) + 0 + 1·0] : 2 = 0,5. Đường thẳng là y = 0,5x + 1,5, không đi qua điểm nào trong ba điểm, sai số huấn luyện khác 0.

Giờ dự đoán tại x = 4. Parabol cho −1,5·16 + 14 + 1 = −9. Đường thẳng cho 0,5·4 + 1,5 = 3,5. Nếu dữ liệu thật đi theo xu hướng tăng nhẹ có nhiễu, giá trị −9 là vô lý, dù parabol “hoàn hảo” trên dữ liệu huấn luyện. Tổng quát hơn, với n điểm có hoành độ khác nhau luôn có một đa thức bậc n − 1 đi qua tất cả. Mô hình đủ nhiều tham số luôn có thể học thuộc, và sai số huấn luyện bằng 0 vì thế không chứng minh được gì.

Chia dữ liệu để thấy được quá khớp

Quá khớp không nhìn thấy được nếu chỉ đo trên dữ liệu đã dùng để huấn luyện. Cách làm chuẩn là chia dữ liệu thành ba phần với vai trò tách bạch:

Phần dữ liệuDùng để làm gìLỗi hay gặp
Tập huấn luyệnCho thuật toán hạ dốc tìm trọng sốBáo cáo kết quả trên tập này như thể là kết quả thật
Tập kiểm địnhChọn siêu tham số, chọn thời điểm dừng, so sánh các phương ánThử quá nhiều phương án trên cùng tập kiểm định, vô tình quá khớp vào chính nó
Tập kiểm traĐo một lần duy nhất ở cuối, ước lượng hiệu năng trên dữ liệu mớiNhìn kết quả kiểm tra rồi quay lại sửa mô hình, biến nó thành tập kiểm định thứ hai

Một lỗi tinh vi hơn là rò rỉ dữ liệu: thông tin từ tập kiểm tra lọt vào quá trình huấn luyện. Ví dụ, tính trung bình và độ lệch chuẩn để chuẩn hoá trên toàn bộ dữ liệu trước khi chia; hoặc với dữ liệu theo thời gian, chia ngẫu nhiên khiến mô hình được học từ tương lai để đoán quá khứ. Với dữ liệu theo thời gian, tập kiểm tra phải nằm sau tập huấn luyện về mặt thời gian.

Khi dữ liệu ít, kiểm định chéo k phần giúp tận dụng tốt hơn: chia dữ liệu thành k phần, lần lượt lấy mỗi phần làm tập kiểm định và k − 1 phần còn lại để huấn luyện, rồi lấy trung bình k kết quả.

Độ lệch và phương sai: hai cách một mô hình có thể sai

Sai số của mô hình trên dữ liệu mới có thể tách thành hai nguồn chính, cộng với phần nhiễu không thể tránh trong dữ liệu. Độ lệch là sai số do mô hình quá đơn giản, không đủ sức biểu diễn quy luật thật, ví dụ dùng đường thẳng cho dữ liệu cong rõ rệt. Mô hình độ lệch cao sai nhiều ngay cả trên tập huấn luyện, gọi là chưa khớp.

Phương sai là sai số do mô hình quá nhạy với dữ liệu huấn luyện cụ thể. Nếu lấy một mẫu dữ liệu khác từ cùng nguồn rồi huấn luyện lại, mô hình phương sai cao sẽ thay đổi rất nhiều. Parabol ở ví dụ trên là như vậy: đổi một điểm một chút, dự đoán tại x = 4 có thể nhảy rất xa. Quá khớp chính là trạng thái phương sai cao.

Theo cách nhìn cổ điển, tăng độ phức tạp của mô hình làm giảm độ lệch nhưng tăng phương sai, và có một điểm cân bằng tối ưu ở giữa. Chính quy hoá là cách đẩy mô hình về phía đơn giản hơn một cách có kiểm soát, chấp nhận tăng độ lệch một chút để giảm phương sai nhiều hơn. Biết mô hình đang sai vì độ lệch hay vì phương sai quyết định phải làm gì: độ lệch cao thì cần mô hình mạnh hơn hoặc đặc trưng tốt hơn, phương sai cao thì cần thêm dữ liệu hoặc chính quy hoá.

Chính quy hoá L2 và L1: phạt trọng số lớn

Ý tưởng chung là cộng thêm vào hàm mất mát một số hạng phạt độ lớn của trọng số. Với chính quy hoá L2, số hạng đó là λ nhân tổng bình phương các trọng số, trong đó λ là hệ số do người huấn luyện chọn. Ví dụ giả định: trọng số (3; −4), tổng bình phương là 9 + 16 = 25, với λ = 0,01 thì hàm mất mát cộng thêm 0,25. Mô hình phải cân nhắc: tăng trọng số để khớp dữ liệu hơn có đáng với mức phạt không.

Nhìn từ thuật toán hạ dốc, L2 thêm 2λw vào gradient của mỗi trọng số. Quy tắc cập nhật trở thành w mới = (1 − 2ηλ)·w − η·gradient của mất mát gốc. Với tốc độ học η = 0,1 và λ = 0,01, mỗi bước trọng số bị nhân với 0,998 trước khi cập nhật bình thường, tức là liên tục bị kéo nhẹ về 0. Vì thế L2 còn được gọi là suy giảm trọng số. Lưu ý với các thuật toán tối ưu thích nghi như Adam, cộng L2 vào mất mát và suy giảm trọng số trực tiếp không còn tương đương, nên thư viện thường có hai lựa chọn riêng.

Chính quy hoá L1 phạt tổng trị tuyệt đối thay vì tổng bình phương; với trọng số (3; −4) là 3 + 4 = 7. Khác biệt quan trọng: L1 có xu hướng đẩy hẳn một số trọng số về đúng 0, tức tự loại bớt đặc trưng, còn L2 làm mọi trọng số nhỏ lại nhưng hiếm khi bằng 0. Khi muốn mô hình chỉ dựa vào ít đặc trưng để dễ giải thích, L1 hữu ích hơn.

Những cách chống quá khớp khác

Thêm dữ liệu. Cách hiệu quả nhất khi làm được. Với nhiều dữ liệu hơn, việc học thuộc khó hơn và quy luật thật nổi lên rõ hơn so với nhiễu.

Tăng cường dữ liệu. Tạo thêm mẫu hợp lệ từ mẫu có sẵn: lật, xoay, cắt ảnh; thêm nhiễu nhẹ vào âm thanh. Cách tăng cường phải giữ nguyên nhãn, ví dụ lật ngang ảnh con mèo vẫn là con mèo, nhưng lật chữ số 6 có thể thành gần giống chữ số 9.

Dropout. Trong lúc huấn luyện, mỗi bước tắt ngẫu nhiên một tỉ lệ nơ-ron, buộc mạng không được dựa quá nhiều vào một nơ-ron cụ thể nào. Phương pháp được Srivastava, Hinton và cộng sự trình bày đầy đủ năm 2014. Khi dùng mô hình thật thì không tắt nơ-ron nào nữa.

Dừng sớm. Theo dõi mất mát trên tập kiểm định sau mỗi epoch, lưu lại trọng số tốt nhất, và dừng khi mất mát kiểm định không cải thiện sau một số epoch liên tiếp. Đơn giản, rẻ, gần như luôn nên dùng.

Mô hình nhỏ hơn. Bớt lớp, bớt nơ-ron, bớt đặc trưng. Đây là cách trực tiếp giảm khả năng học thuộc, dù trong học sâu hiện đại người ta thường giữ mô hình lớn và dùng các cách trên.

Quy trình kiểm quá khớp cho một dự án nhỏ

Với một dự án học máy cỡ vừa, ví dụ dự đoán khách hàng có quay lại hay không từ dữ liệu bảng, trình tự sau giúp phát hiện và xử lý quá khớp mà không tốn nhiều công:

  1. Tách tập kiểm tra ra trước tiên và cất đi. Không nhìn, không tính thống kê gì trên nó cho tới bước cuối.
  2. Huấn luyện một mô hình đơn giản làm mốc, ví dụ hồi quy logistic, ghi lại sai số trên tập huấn luyện và tập kiểm định.
  3. Huấn luyện mô hình phức tạp hơn. Nếu sai số huấn luyện thấp hơn hẳn mốc mà sai số kiểm định không tốt hơn, đó là dấu hiệu quá khớp sớm.
  4. Thêm lần lượt từng biện pháp: dừng sớm, chính quy hoá với vài giá trị λ, bớt đặc trưng. Mỗi lần chỉ đổi một thứ để biết thứ nào có tác dụng.
  5. Nếu dữ liệu ít, chuyển sang kiểm định chéo để kết quả so sánh không phụ thuộc may rủi của một lần chia.
  6. Chọn phương án cuối theo tập kiểm định, rồi mới đo một lần trên tập kiểm tra và báo cáo con số đó.

Ghi lại mọi phương án đã thử, kể cả phương án thất bại. Khi kết quả trên tập kiểm tra thấp hơn kỳ vọng, nhật ký này giúp nhận ra mình đã thử quá nhiều lần trên cùng tập kiểm định hay chưa.

Mô hình rất lớn và câu chuyện học thuộc ở mô hình ngôn ngữ

Các mạng nơ-ron hiện đại thường có nhiều tham số hơn số mẫu huấn luyện, đủ sức học thuộc hoàn toàn, vậy mà vẫn dự đoán tốt trên dữ liệu mới. Điều này không khớp với bức tranh cổ điển về độ lệch và phương sai. Các nghiên cứu từ khoảng năm 2019 mô tả hiện tượng gọi là giảm hai lần: khi tăng kích thước mô hình, sai số kiểm tra giảm, rồi tăng quanh điểm mô hình vừa đủ để khớp hoàn toàn, rồi lại giảm tiếp. Giải thích đầy đủ vẫn đang được nghiên cứu.

Với mô hình ngôn ngữ, quá khớp mang thêm một hệ quả thực tế: mô hình có thể học thuộc nguyên văn một số đoạn trong dữ liệu huấn luyện, nhất là những đoạn lặp lại nhiều lần, và tái tạo chúng khi được gợi đúng cách. Nếu dữ liệu huấn luyện có thông tin cá nhân, đây là rủi ro về quyền riêng tư.

Điều này liên quan trực tiếp đến người dùng: những gì bạn dán vào một dịch vụ AI có thể được dùng để huấn luyện mô hình sau này, tuỳ điều khoản và cài đặt của dịch vụ. Che tên người, số giấy tờ, thông tin nội bộ trước khi dán là thói quen nên giữ, vì bạn không kiểm soát được mô hình đời sau học thuộc những gì.

Câu hỏi thường gặp

Làm sao biết mô hình đang quá khớp?

Vẽ hai đường mất mát theo số epoch: một trên tập huấn luyện, một trên tập kiểm định. Nếu đường huấn luyện tiếp tục giảm trong khi đường kiểm định chững lại rồi đi lên, khoảng cách giữa hai đường ngày càng rộng, mô hình đang quá khớp. Sai số huấn luyện gần 0 trong khi sai số kiểm định cao cũng là dấu hiệu rõ.

Chưa khớp và quá khớp khác nhau thế nào?

Chưa khớp là mô hình sai nhiều trên cả tập huấn luyện lẫn tập kiểm định, vì quá đơn giản hoặc huấn luyện chưa đủ. Quá khớp là mô hình làm tốt trên tập huấn luyện nhưng kém trên tập kiểm định. Hai trường hợp cần cách xử lý ngược nhau, nên phải chẩn đoán đúng trước khi sửa.

Chọn hệ số λ cho chính quy hoá thế nào?

Thử một dãy giá trị cách nhau theo bội số mười, ví dụ 0,0001; 0,001; 0,01; 0,1, huấn luyện với từng giá trị và chọn giá trị cho mất mát kiểm định thấp nhất. Không chọn λ dựa trên tập kiểm tra, vì như vậy tập kiểm tra không còn đo được hiệu năng trên dữ liệu mới.

Tỉ lệ chia dữ liệu huấn luyện, kiểm định, kiểm tra bao nhiêu là hợp lý?

Tỉ lệ kiểu 70, 15, 15 hay 80, 10, 10 phần trăm hay được dùng với dữ liệu cỡ vừa. Với dữ liệu rất lớn, tập kiểm định và kiểm tra chỉ cần đủ lớn để ước lượng ổn định, có thể chỉ vài phần trăm. Với dữ liệu nhỏ, dùng kiểm định chéo thay vì cắt cố định.

Dropout có làm mô hình chạy chậm hơn khi dùng thật không?

Không. Dropout chỉ hoạt động trong lúc huấn luyện. Khi dùng mô hình để dự đoán, mọi nơ-ron đều bật, và trọng số được điều chỉnh tỉ lệ phù hợp để đầu ra có cùng độ lớn trung bình như lúc huấn luyện. Vì vậy cần nhớ chuyển mô hình sang chế độ dự đoán trong mã nguồn.

Có phải mô hình càng lớn càng dễ quá khớp?

Theo lý thuyết cổ điển là đúng, và với mô hình nhỏ, dữ liệu ít thì vẫn đúng. Nhưng với mạng nơ-ron hiện đại huấn luyện bằng hạ dốc ngẫu nhiên và đủ dữ liệu, tăng kích thước nhiều khi lại cải thiện kết quả trên dữ liệu mới. Đây là chủ đề nghiên cứu đang sôi động, chưa có lý thuyết hoàn chỉnh.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138