Thứ Sáu, 23 tháng 11, 2018

Cross Validation

Bài này sẽ giới thiệu một khái niệm trong lĩnh vực máy học đó là Cross Validation, một phương pháp siêu phổ biến để hạn chế Overfittings trong huấn luyện mạng. Vậy Cross Validation là gì?
Chúng ta phải quay lại bài toán training model trong máy học. Như bạn đã biết, thường với một bộ dataset chúng ta sẽ có 3 tập: training set, validation set và testing set, trong đó training set dùng để huấn luyện, validation set dùng để test trong quá trình huấn luyện và testing set dùng để test cho model cuối cùng. Nhưng nếu dataset của bạn không có validation set thì sao? Bạn sẽ lấy gì để test trong quá trình huấn luyện? Chúng ta chắc chắn không được dùng testing set để kiểm thử trong huấn luyện, bởi điều này sẽ dẫn tới overfitting trên tập test. Chúng ta cũng không được dùng tập train để kiểm thử nốt, vì nó sẽ dẫn tới overfitting trên tập train. Vậy chỉ còn 1 cách, bạn sẽ lấy 1 phần của tập train ra làm tập validation. Đây cũng là 1 ý kiến hay! Nhưng, nếu tập train của bạn quá ít, việc lấy ra 1 phần của tập sẽ làm nó ít hơn và dẫn đến thiếu dữ liệu train. Điều này cũng dẫn tới overfitting. Vậy thì phải làm sao???? Đây chính là lúc bạn dùng tới Cross Validation.
Cross Validation là phương pháp chia nhỏ tập training ra thành N phần. Với mỗi lần train, mô hình sẽ sử dụng N-1 phần để train, sau đó test dựa trên 1 phần còn lại. Điều này sẽ giúp cho mô hình hạn chế gặp phải overfitting và giúp bạn tìm ra được những Hyper parameter tốt hơn. Để dễ hiểu, ta đi tới ví dụ sau. Với bộ dữ liệu CIFAR-10, bạn không hề có tập Validation.
Với phương pháp Cross Validation, bạn có thể chia nhỏ tập train ra thành 5 phần. Tổng số ảnh của tập train là 50000 ảnh => mỗi phần nhỏ sẽ có 10000 ảnh.
Cross Validation
Với mỗi lần train đầu, bạn lấy 4 fold đầu tiên để train. Sau đó để test, bạn sử dụng fold 5 để test. Qua lần train thứ 2, bạn lấy từ fold 2 đến fold 5 để train, rồi lại lấy fold 1 để test. Và đó, chính là Cross Validation. Có thể những lý thuyết ở trên sẽ chẳng giúp bạn hiểu được vai trò của Cross Validation, thế nên chúng ta hãy thử áp dụng nó vào bài toán image classification với tập CIFAR-10 bằng thuật toán K-Nearest Neighbor.
Với thuật toán này, vấn đề đặt ra là bạn phải chọn tham số K sao cho tốt nhất bằng cách thử nghiệm. Giả sử ta chọn K = 1. Đầu tiên ta sẽ lấy fold 5 để test với tập train là từ fold 1 đến fold 4. Và kết quả cho ra được là a1% độ chính xác. Lần thứ 2 ta sẽ lấy fold 4 để test, và dùng các fold còn lại để train. Kết quả lần này cho ra a2% độ chính xác. Ta thực hiện lần lượt với 5 fold, sẽ cho ra 5 kết quả từ a1 đến a5.
Cross Validation
Như vậy, với K=1, ta có kết quả bằng : (a1+a2+a3+a4+a5)/5. Tiếp tục thử nghiệm với các K khác, và ta tìm ra được K có kết quả tốt nhất. Từ đó có thể lấy K tốt nhất để test trên tập test mà không sợ Overfitting.
Share:

5 nhận xét:

  1. Cảm ơn ad. Ad giải thích các vấn đề học thuật khô khan theo 1 cách thật dễ hiểu. Có phải đây là kỹ thuật Feynman trong truyền thuyết ko nhỉ ?

    Trả lờiXóa
    Trả lời
    1. mình đã từng tốn kha khá thời gian để hiểu mấy khái niệm như thế này ở đại học, nên mình chỉ muốn tìm cách giải thích sao cho dễ hiểu nhất mà thôi ^^. Cám ơn bạn đã ghé xem blog nhé

      Xóa
  2. Bạn giải thích thật dễ hiểu ấy. Mong bạn sẽ ra nhiều bài viết hơn nữa

    Trả lờiXóa
  3. bài viết của bạn rất hay, dễ hiểu, nhưng có vẻ hơi ngắn, bạn nên gộp hoặc mở rộng thêm bài viết chút nhé.

    Trả lờiXóa
  4. Lặn lội trên ggl mãi mới tìm ra được một bài siêu dễ hiểu về vấn đề này. Cám ơn anh. Hân hạnh được đọc bài viết này ^^!

    Trả lờiXóa

Được tạo bởi Blogger.