Thứ Tư, 29 tháng 12, 2021

Những vấn đề trong Machine Learning

1. Giới thiệu

Mọi lĩnh vực đều có những vấn đề riêng của nó. Machine Learning cũng vậy, thậm chí vấn đề mà nó đang gặp phải mình sẽ trình bày trong bài viết này còn không có cách giải quyết triệt để mà chỉ có những phương pháp nhằm giảm thiểu mức độ rủi ro mà nó mang lại trong các bài toán Machine Learning mà thôi.

Nội dung bài viết:

  • Underfitting
  • Overfitting
  • Regularization
  • Dropout
  • Early Stopping

2. Underfitting

Underfitting hay còn được gọi high-bias và low-variance là hiện tượng model học không tốt. Trường hợp này mình tạm gọi là model "stupid". Nó dự đoán không tốt trên cả tập dữ liệu train và cả tập dữ liệu test.

Nguyên nhân

  • Model quá đơn giản, không đủ khả năng mô tả được dữ liệu. Như các bạn thấy ở hình đầu tiên, model là 1 đường tuyến tính như vậy là không đủ phức tạp để mô tả dữ liệu.
  • Noise hay outlier thường được gọi là nhiễu. Nhiễu từ dữ liệu, có thể do dụng cụ đo, do nguyên nhân chủ quan từ con người... Gây ra nhiễu.

Giải pháp

  • Tìm một model phù hợp, đủ phức tạp để khái quát được dữ liệu
  • Xử lý nhiễu có thể xóa dữ liệu nó nếu dữ liệu đủ lớn.

Tuy nhiên hậu quả underfitting chúng ta có thể nhận biết được tại thời điểm training ví dụ accuracy thấp chẳng hạn.

3. Overfitting

Overfitting hay còn được gọi là low-bias và high-variance là hiện tượng mà model dự đoán tốt trên tập train nhưng lại cho kết quả thấp trên tập test. Mình tạm gọi model này là "Học vẹt". Overfitting gây ra hậu quả lớn hơn underfitting, vì underfitting chúng ta nhận biết được trong quá trình train, còn overfitting đôi khi phải đưa ra thực tế sử dụng chúng ta mới nhận ra được, khi đưa ra thực tế rõ ràng là tốn kém chi phí, nguồn lực mà chúng ta mới nhận ra thì sẽ rất là tốn kém phải không nào.

Nguyên nhân

  • Model quá phức tạp, các bạn nhìn hình 3 sẽ rõ. Dữ liệu cần một model đơn giản hơn, thể hiện được tính tổng quát của dữ liệu, mà ta lại chọn một model quá phức tạp nên không thể hiện được tính tổng quát của dữ liệu. Mà không tổng quát nên khả năng nó dự đoán trên dữ liệu test là thấp.
  • Ít dữ liệu
  • Nhiễu

Giải pháp

  • Thu thập thêm dữ liệu
  • Khử nhiễu
  • Kĩ thuật Regularization
  • Dropout
  • Early stopping

4. Regularization

Nguyên nhân dẫn đến overfitting là do model quá phức tạp. Kĩ thuật regularization dùng để giảm thiểu độ phức tạp của model. Mà độ phức tạp của model được thể hiện ở số lượng parameters $w$

Mình gọi hàm Loss Function ở các bài trước là $L = L_0$

Kĩ thuật này cộng thêm một đại lượng $R$ vào phía sau $L$ lúc này Loss Function sẽ trở thành: $$L = L_0 + \lambda R$$

Đại lượng $R$ được gọi là Regulazer

$R = ||w||_{2}^{2}$ được gọi là norm 2. Hoặc $R = ||w||_{1}$ được gọi là norm 1

Các bạn có thể tham khảo cách tính norm tại đây

Tại sao lại cộng đại lượng phía sau lại giảm được độ phức tạp của model nhỉ?

Từ $L$ ta chia thành 2 phần $L_0$ và regulazer. Phần thứ nhất là phần mà các bài trước mình đã trình bày. Đại lượng này càng nhỏ thì model càng tốt. Như vậy, phần $L_0$ này thể hiện cho độ chính xác của model. Còn phần thứ 2 là phần đại diện cho độ phức tạp của model. Đại lượng này càng nhỏ model càng đơn giản.

$\lambda$ là đại lượng cân bằng giữa độ chính xác và độ phức tạp. Khi $\lambda$ nhỏ thì model sẽ tập trung cực tiểu vào phần đầu tiên tức là $L_0$ để $L$ đạt giá trị nhỏ lúc này nó sẽ ít tập trung vào phần thứ 2 là phần độ phức tạp của model hơn. Ngược lại, khi $\lambda$ lớn model sẽ tập trung cực tiểu vào phần thứ 2 tức là phần độ phức tạp để $L$ đạt giá trị nhỏ, lúc này model sẽ ít ưu tiên hơn vào phần thứ nhất tức là $L_0$

Có thể đưa ra một kết luận rằng, khi $\lambda$ nhỏ, độ chính xác model tăng nhưng độ phức tạp của model cũng tăng. Ngược lại, khi $\lambda$ lớn, độ chính xác model giảm nhưng độ phức tạp của model cũng giảm theo

Bạn lưu ý một điều rằng khi $\lambda$ quá lớn sẽ dẫn đến model quá đơn giản vì vậy có thể gây ra underfitting nhé, còn khi $\lambda$ quá nhỏ thì model lại quá phức tạp vì vậy có thể gây ra overfitting

$\lambda$ được gọi là 1 hyperparameter

5. Dropout

Đây cũng là một kĩ thuật regularization khác tuy nhiên nó được sử dụng trong Neural Network. Mình sẽ viết phần này khi chúng ta nghiên cứu đến Neural Network

6. Early Stopping

Hiện tại dữ liệu của chúng ta gồm có 2 tập là: train và test. Bây giờ chúng ta chia thêm 1 tập nữa được gọi là validation, với tỉ lệ thường là $train:validation:test = 8:1:1$

Kĩ thuật này được trình bày như sau: Trong quá trình train bạn quan sát Loss Function trên tập train và validation. Nếu tại một epoch nào đó giả sử Loss trên tập train đang giảm và loss trên tập validation có dấu hiệu tăng thì bạn dừng ngay tại thời điểm đó

Nguồn: https://www.researchgate.net/figure/Early-stopping-based-on-cross-validation_fig1_3302948

Trong trường hợp ít dữ liệu, kĩ thuật k-fold validation được áp dụng: Các bạn có thể tham khảo tại đây

OK! Trên đây là một số vấn đề trong Machine Learning cũng như giải pháp của nó, nếu các bạn có thắc mắc gì vui lòng để lại comment phía dưới nhé, Xin cảm ơn

0 nhận xét:

Đăng nhận xét