[ML] Mô hình quá khớp (Overfitting)

Related Articles

Lỗi ước lượng tham số có thể được chia thành 2 loại là khớp quá (over-fitting) và chưa khớp (under-fitting) với tập huấn luyện. Trong bài này sẽ nói về cách theo dõi và hạn chế các lỗi này ra sao. Trọng tâm của bài này sẽ tập trung chủ yếu vào kĩ thuật chính quy hoá (regularization) để giải quyết vấn đề khớp quá của tham số.

Mô hình của ta sau khi huấn luyện và đào tạo hoàn toàn có thể đạt hiệu suất cao không tốt khi Dự kiến với một tài liệu mới. Chuyện này xảy ra là do quy mô của ta chưa tổng quát hoá được với hàng loạt tập dữ liệu. Nguyên nhân cũng khá dễ hiểu khi mà tập huấn luyện của ta chỉ là một tập nhỏ chưa thể đại diện thay mặt cho toàn thể tài liệu được và hơn nữa hoàn toàn có thể nó còn bị nhiễu nữa. Người ta chia nguyên do ra làm 2 loại chính là chưa khớp hoặc quá khớp .

1.1. Chưa khớp (Underfitting)

Mô hình được coi là chưa khớp nếu nó chưa được chưa tương thích với tập dữ liệu giảng dạy và cả những mẫu mới khi Dự kiến. Nguyên nhân hoàn toàn có thể là do quy mô chưa đủ độ phức tạp thiết yếu để bao quát được tập dữ liệu. Ví dụ như hình 1 phía bên trái ở trên. Tập dữ liệu giảng dạy loanh quanh khúc USD y = sin ( 2 pi x ) USD thế nhưng quy mô của ta chỉ là một đường thẳng mà thôi. Rõ ràng như vậy thì nó không những không hề ước đạt được giá trị của USD y USD với USD x USD mới mà còn không hiệu suất cao với cả tập dữ liệu USD ( x, y ) USD có sẵn .

1.2. Quá khớp (Overfitting)

Mô hình rất hợp lý, rất khớp với tập huấn luyện nhưng khi đem ra dự đoán với dữ liệu mới thì lại không phù hợp. Nguyên nhân có thể do ta chưa đủ dữ liệu để đánh giá hoặc do mô hình của ta quá phức tạp. Mô hình bị quá phức tạp khi mà mô hình của ta sử dụng cả những nhiễu lớn trong tập dữ liệu để học, dấn tới mất tính tổng quát của mô hình. Ví dụ như ở hình 1 phía bên phải ở trên. Mô hình của ta gần như mong muốn bao được hết tất cả các điểm làm cho biên độ dao động của nó lớn quá mức. Mô hình này mà dự đoán với 1 giá trị mới của $x$ thì khả năng $y$ sẽ bị lệch đi rất nhiều.

1.3. Vừa khớp (Good Fitting)

Mô hình này nằm giữa 2 quy mô chưa khớp và quá khớp cho ra hiệu quả hài hòa và hợp lý với cả tập tài liệu huấn luyện và đào tạo và những giá trị mới, tức là nó mang được tính tổng quát như hình 1 ở giữa phía trên. Lý tưởng nhất là khớp được với nhiều tài liệu mẫu và cả những tài liệu mới. Tuy nhiên trên trong thực tiễn được quy mô như vậy rất hiếm .

Với định nghĩa như trên ta cần chiêu thức để nhìn nhận được quy mô trước khi hoàn toàn có thể đưa ra được giải pháp nâng cấp cải tiến. Trước tiên ta lao lý 1 số ít thông số kỹ thuật lỗi để Giao hàng cho việc nhìn nhận quy mô .

2.1. Đánh giá lỗi

Ở đây ta sẽ lấy trung bình lỗi của hàng loạt tập dữ liệu để nhìn nhận : USD USD E ( theta ) = frac { 1 } { m } sum_ { i = 1 } ^ m err ( hat y ^ { ( i ) }, y ^ { ( i ) } ) USD USD

Trong đó $E(theta)$ là lỗi ứng với tham số $theta$ ước lượng được của tập dữ liệu gồm có $m$ mẫu. $err(hat y,y)$ thể hiện cho sự khác biệt giữa giá trị dự đoán $hat y$ và giá trị thực tế $y$. Đương nhiên là nếu $hat y=y$ thì $err(hat y^{(i)},y^{(i)})=0$. Thường người ta lấy $err(hat y^{(i)},y^{(i)})=Vert hat y^{(i)}-y^{(i)}Vert_2^2$ giống như các hàm lỗi của mô hình. Khi đó lỗi của ta được gọi là lỗi trung bình bình phương (MSE – Mean Squared Error):

$$E(theta)=frac{1}{m}sum_{i=1}^mVert hat y^{(i)}-y^{(i)}Vert_2^2$$

Như đã đề cập trong phần các bước của học máy thì dữ liệu của ta sẽ được phân chia làm 3 phần là tập huấn luyện (training set) 60%, tập kiểm chứng (cross validation set) 20% và tập kiểm tra (test set) 20%. Ứng với mỗi phần ta sẽ đưa ra thông số lỗi tương ứng:

  • Tập huấn luyện: $displaystyle E_{train}(theta)=frac{1}{m_{train}}sum_{i=1}^{m_{train}}err(hat y_{train}^{(i)},y_{train}^{(i)})$
  • Tập kiểm chứng: $displaystyle E_{CV}(theta)=frac{1}{m_{CV}}sum_{i=1}^{m_{CV}}err(hat y_{CV}^{(i)},y_{CV}^{(i)})$
  • Tập kiểm tra: $displaystyle E_{test}(theta)=frac{1}{m_{test}}sum_{i=1}^{m_{test}}err(hat y_{test}^{(i)},y_{test}^{(i)})$

Với quy mô hồi quy tuyến tính ta hoàn toàn có thể lấy luôn hàm lỗi USD displaystyle J ( theta ) = frac { 1 } { 2 m } sum_ { i = 1 } ^ m ( hat y ^ { ( i ) } – y ^ { ( i ) } ) ^ 2 USD để nhìn nhận lỗi. Đương nhiên là ứng với mỗi phần tài liệu ta phải sử dụng tài liệu của phần tương ứng để nhìn nhận : USD USD begin { cases } E_ { train } ( theta ) = displaystyle frac { 1 } { 2 m_ { train } } sum_ { i = 1 } ^ { m_ { train } } ( hat y_ { train } ^ { ( i ) } – y_ { train } ^ { ( i ) } ) ^ 2 cr E_ { CV } ( theta ) = displaystyle frac { 1 } { 2 m_ { CV } } sum_ { i = 1 } ^ { m_ { CV } } ( hat y_ { CV } ^ { ( i ) } – y_ { CV } ^ { ( i ) } ) ^ 2 cr E_ { test } ( theta ) = displaystyle frac { 1 } { 2 m_ { test } } sum_ { i = 1 } ^ { m_ { test } } ( hat y_ { test } ^ { ( i ) } – y_ { test } ^ { ( i ) } ) ^ 2 end { cases } USD USD

2.2. Phán định lỗi

Với cách định nghĩa lỗi như trên thì một quy mô :

  • Chưa khớp: Cả $E_{train},E_{CV},E_{test}$ đều lớn.
  • Quá khớp: $E_{train}$ nhỏ còn $E_{CV},E_{test}$ lại lớn.
  • Vừa khớp: Cả $E_{train},E_{CV},E_{test}$ đều nhỏ.

Tuy nhiên khi huấn luyện và đào tạo bạn không được phép sờ tới tập kiểm tra, nên ta sử dụng 2 tập huấn luyện và kiểm chứng để Dự kiến kiểu lỗi. Ví dụ hình dưới đây diễn đạt lỗi đồ thị của USD E_ { train } ( theta ) USD và USD E_ { CV } ( theta ) USD .Ở hình trên ta thấy rằng, trước điểm USD d USD – bậc của đa thức hài hòa và hợp lý thì cả 2 lỗi đều có khunh hướng giảm dần, nhưng vượt qua điểm này thì lỗi tập huấn luyện vẫn liên tục nhỏ đi còn tập kiểm chứng lại vọt lên. Điều đó chứng tỏ rằng phía trước USD d USD ta thu được lỗi chưa khớp và sau USD d USD là lỗi quá khớp, còn ở USD d USD là vừa khớp .Một cách tổng quát, ta hoàn toàn có thể dựa vào sự biến thiên của USD E_ { train } USD và USD E_ { CV } USD như trên để có phán định về đặc thù của lỗi :

  • $E_{train}$ và $E_{CV}$ đều lớn: Chưa khớp
  • $E_{train}$ và $E_{CV}$ đều nhỏ: Vừa khớp
  • $E_{train}$ nhỏ còn $E_{CV}$ lớn: Khớp quá

3.1. Điểm hợp lý

Đồ thị trên còn cho ta một gợi ý rất quan trọng là ta hoàn toàn có thể đoán được điểm hài hòa và hợp lý để dừng lại khi đào tạo và giảng dạy. Điểm dừng ở đây chính là điểm mà đồ thị của USD E_ { CV } USD đổi hướng. Khi mở màn thấy USD E_ { CV } USD đổi hướng sau 1 số ít vòng lặp nào đó thì ta sẽ dừng việc huấn luyện và đào tạo lại và chọn lấy điểm khởi đầu có sự đổi hướng này làm điểm hài hòa và hợp lý cho tham số và siêu tham số. Nếu bạn cần đọc thêm về việc dừng này thì hoàn toàn có thể đọc ở phần điều kiện kèm theo dừng ở phần tối ưu hàm lỗi .

3.2. Chưa khớp

Như đã đề cập chuyện này xảy ra khi mà quy mô của ta chưa đủ phức tạp. Như vậy ta cần phải tăng độ phức tạp của quy mô lên. Để tăng độ phức tạp ta hoàn toàn có thể lấy thêm tính năng cho mẫu bằng cách thêm những USD phi ( mathbf { x } ) USD khác nhau. Ví dụ, tăng bậc của đa thức lên hoàn toàn có thể giúp ta khớp hơn với tập dữ liệu ví dụ điển hình. Cụ thể thì bạn có xem lại ví dụ 2 của bài về hồi quy tuyến tính .

Khi xảy ra lỗi chưa khớp thì ta cần lưu ý tới một điểm quan trọng là tăng dữ liệu không giúp mô hình tốt hơn. Tại sao lại thế thì ta sẽ cùng bàn về lý thuyết cân bằng giữa phương sai vào độ lệch ở bài viết sau.

3.3. Quá khớp

Khi xảy quá khớp ta hoàn toàn có thể bỏ bớt tính năng đi để giảm độ phức tạp quy mô. Hoặc hoàn toàn có thể lấy thêm tài liệu để quy mô hoàn toàn có thể học được một cách tổng quát hơn. Thật khó đưa ra được một cách đơn cử ngoài việc phối hợp của toàn bộ những kiểu giải quyết và xử lý trên lại với nhau sau đó đưa ra nhìn nhận đơn cử sau .Ngoài ra, ta còn có một kĩ thuật nữa rất thông dụng trong học máy là chính quy hoá mà ta sẽ cùng xem xét ở phần ngay dưới đấy .

4.1. Định nghĩa

Chính quy hoá ( regularization ) là một kĩ thuật giúp giảm lỗi khớp quá bằng cách thêm một phần chính quy hoá vào hàm lỗi như sau : USD USD J ( theta ) = E_X ( theta ) + lambda E_ theta ( theta ) USD USDUSD E_X ( theta ) USD là hàm lỗi khởi đầu và cụm USD lambda E_ theta ( theta ) USD mới thêm vào là số hạng chính quy hoá đóng vai trò như một giải pháp phạt lỗi ( penalization ) .Trong đó, thông số chính quy hoá USD lambda USD được chọn từ trước để cân đối giữa $ E_X ( theta ) USD và USD E_ theta ( theta ) USD. USD lambda USD càng lớn thì ta càng coi trọng USD E_ theta ( theta ) USD, ít coi trọng tham số cho hàm lỗi bắt đầu hơn, dẫn tới việc những tham số USD theta USD ít có ảnh hưởng tác động tới quy mô hơn. Hay nói cách khác là quy mô bớt phức tạp đi giúp ta đỡ việc lỗi quá khớp .

$E_theta(theta)$ ở đây sẽ không bao gồm độ lệch $theta_0$ và thường có dạng như sau:

$$E_theta(theta)=frac{1}{p}VertthetaVert_p^p=frac{1}{p}sum_{i=1}^n|theta_i|^p$$

Khi đó, hàm lỗi hoàn toàn có thể viết lại như sau : USD USD J ( theta ) = E_X ( theta ) + lambda frac { 1 } { p } sum_ { i = 1 } ^ n | theta_i | ^ p USD USDUSD p USD thường được chọn là 2 ( L2 Norm ) và 1 ( L1 Norm hay còn được gọi là Lasso trong thống kê ) .Với L2, hàm lỗi có dạng : USD USD J ( theta ) = E_X ( theta ) + frac { lambda } { 2 } theta ^ { intercal } theta USD USDVới L1, hàm lỗi có dạng : USD USD J ( theta ) = E_X ( theta ) + lambda sum_ { i = 1 } ^ n | theta_i | USD USD

Phương pháp chính quy hoá này còn có tên là cắt trọng số (weight decay) vì nó làm cho các trọng số (tham số $theta$) bị tiêu biến dần về 0 trong khi học. Còn trong thống kê, phương pháp này có tên là co tham số (parameter shrinkage) vì nó làm co lại các giá trị tham số dần về 0.

4.2. Công thức chuẩn

Với hàm lỗi của hồi quy tuyến tính thì ta thường chia lấy trung bình của toàn mẫu nên số hạng chính quy hoá cũng sẽ được chia tương tự như. Ngoài ra ta cũng thường lấy L2 để thực thi việc chính quy hoá, nên : USD USD J ( theta ) = frac { 1 } { 2 m } sum_ { i = 1 } ^ m Big ( theta ^ { intercal } phi ( mathbf { x } _i ) – y_i Big ) ^ 2 + frac { lambda } { 2 m } theta ^ { intercal } theta USD USDKhi đó, công thức chuẩn được viết lại như sau : USD USD hat theta = ( lambda mathbf { I } + Phi ^ { intercal } Phi ) ^ { – 1 } Phi ^ { intercal } mathbf { y } USD USD

4.3. Tính đạo hàm

Việc tính đạo hàm nhằm mục đích triển khai giải thuật tối ưu với Gradient Descent .Đạo hàm khi có số hạng chính quy hoá với :

  • L2 : $dfrac{partial E_X(theta)}{partialtheta_i}+lambdatheta_i$
  • L1 : $dfrac{partial E_X(theta)}{partialtheta_i}+lambdatext{sgn}(theta_i)$

Lưu ý: đạo hàm này không tính cho $theta_0$. Nói cách khác $theta_0$ không được thêm số hạng chính quy hoá.

Trường hợp của bài toán hồi quy tuyến tính :USD USD frac { partial } { partial theta_i } = frac { 1 } { m } sum_ { j = 1 } ^ m ( theta ^ { intercal } phi ( mathbf { x } _j ) – y_j ) mathbf { x_j } + begin { cases } 0 và text { for } i = 0 cr frac { lambda } { m } theta_i và text { for } i > 0 end { cases } USD USDGradient có dạng sau : USD USD Delta_ theta J ( theta ) = frac { 1 } { m } ( theta ^ { intercal } Phi-y ) Phi + frac { lambda } { m } theta USD USDĐương nhiên là khi tính số hạng chính quy hoá ta gắn USD theta_0 triangleq 0 USD để tiêu biến số hạng đó đi .

4.4. Cài đặt

Hệ số chính quy hoá USD lambda USD thường nhỏ để không quá tác động ảnh hưởng nhiều tới việc tối ưu lỗi truyền thống lịch sử. Thường người ta sẽ chọn lấy 1 list những USD lambda USD để đào tạo và giảng dạy và lấy một giá trị tối ưu nhất. Tuy nhiên, quan tâm rằng thông số này không dùng cho tập kiểm chứng khi so sánh để nhìn nhận quy mô .Cụ thể những bước thiết lập như sau :

  1. Tạo danh sách các $lambda$.
  2. Tạo các mô hình tương ứng với các $phi(mathbf{x})$ tương ứng. Ví dụ như bậc của đa thức hay co giãn các thuộc tính chẳng hạn.
  3. Học tham số $theta$ ứng với từng $lambda$ một.
  4. Tính lỗi với tập kiểm chứng $E_{CV}(theta)$ ứng với tham số $theta$ học được (lúc này đặt $lambda=0$).
  5. Chọn lấy mô hình ứng với tham số và $lambda$ cho ít lỗi nhất với tập kiểm chứng.
  6. Lấy $theta$ và $lambda$ tương ứng rồi tính lỗi cho tập kiểm tra $E_{test}(theta)$ và đánh giá mô hình.

Nếu hứng thú bạn hoàn toàn có thể xem ví dụ setup thuật toán với chính quy hoá tại đây nhé .

Đánh giá mô hình có thể chia thành 3 dạng chưa khớp khi nó chưa đủ độ phức tạp, quá khớp khi nó quá phức tạp và vừa khớp khi mà nó vừa đủ để tổng quát hoá. Khi huấn luyện ta có thể sử dụng tập huấn luyện và tập kiểm chứng để đánh giá mô hình đang ở tình trạng nào. Nếu $E_{train},E_{CV}$ đều lớn thì ta nói rằng nó chưa khớp, còn $E_{train}$ nhỏ và $E_{CV}$ lớn thì ta nói rằng nó bị quá khớp.

Bài toán chưa khớp thì ta hoàn toàn có thể xử lý bằng cách phức tạp hoá quy mô lên còn với bài toán quá khớp thì ta hoàn toàn có thể sử dụng chiêu thức chính quy hoá để xử lý : USD USD J ( theta ) = E_X ( theta ) + lambda E_ theta ( theta ) USD USDHệ số USD lambda USD càng lớn thì quy mô sẽ càng đơn thuần đi từ đó giúp tránh được chuyện quá khớp nhưng cũng dẫn tới việc chưa khớp. Nên ta cần phải chọn được giá trị USD lambda USD hài hòa và hợp lý. Thường ta sẽ đưa ra 1 list những thông số USD lambda USD rồi chạy lần lượt và chọn lấy một giá trị tốt nhất. Tuy nhiên ta cần phải nhớ rằng cụm chuẩn hoá này không dùng cho tập kiểm chứng khi giảng dạy .Mặc dù qua bài này còn đôi chỗ hơi khó hiểu và mơ hồ nhưng nhìn chung nếu chỉ lập trình thì ta nhớ lấy thông số USD lambda USD là được. Nếu bạn hứng thú khám phá tận gốc yếu tố thì ta sẽ cùng xem trong bài viết tới về yếu tố cân đối giữa phương sai và độ lệch của quy mô .

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories