- vừa được xem lúc

Vọc vạch Machine Learning: Regularized Linear Models

0 0 1

Người đăng: Le Thanh Cong

Theo Viblo Asia

1. Underfitting và Overfitting

  • Overfitting là hiện tượng mô hình dự đoán quá khớp với dữ liệu đã cho dẫn đến việc sẽ dự đoán không tốt trên các dữ liệu mới. Ví dụ như học tủ nhưng đi thi thì lệch tủ.
  • Underfitting là hiện tượng mô hình quá đơn giản so với cấu trúc dữ liệu. Điều này dẫn đến dự đoán từ mô hình đưa ra luôn có hiệu suất kém.

Hình minh cho Underfitting, Overfitting và Optimal (tối ưu).

2. Regularized Linear Models

Regularized là một phương pháp giúp giảm overfitting trong quá trình huấn luyện.

Lưu ý: Bài viết này chúng ta sẽ tìm hiểu cách dùng Regularized với mô hình tuyến tính Linear Models).

  • Ý tưởng chính của phương pháp này là cộng thêm 1 thành phần regularization vào hàm mất mát.

J(θ)=MSE(θ)+regularizationJ(\theta) = \text{MSE}(\theta) + regularization

Sau đó qua trở lại bài toán tìm θ\theta sao cho J(θ)J(\theta) đạt giá trị nhỏ nhất.

Ridge Regression (L2 norm)

J(θ)=MSE(θ)+α2mj=1nθj2J(\theta) = \text{MSE}(\theta) + \frac{\alpha}{2m} \sum_{j=1}^{n} \theta_j^2

Với:

  • α\alpha là một tham số có thể điều chỉnh được (hyperparameter)
  • m là số lượng mẫu dữ liệu
  • n là số lượng đặc trưng (feature)
  • α2mj=1nθj2\frac{\alpha}{2m} \sum_{j=1}^{n} \theta_j^2 gọi là L2 regularization term (phần "phạt").

Khi α=0\alpha = 0 => mô hình hồi quy tuyến tính thông thường không áp dụng Regularized

Ý nghĩa của việc cộng thêm L2 regularization term:

  • Ép các tham số θ\theta nhỏ lại vì nếu to thì hàm mất mát sẽ lớn.

  • Tạo ngẫu nhiên 20 điểm dữ liệu
np.random.seed(42)
m = 20
X = 3 * np.random.rand(m, 1)
y = 1 + 0.5 * X + np.random.randn(m, 1) / 1.5 # y = 1 + 0.5 * x + nhiễu
X_new = np.linspace(0, 3, 100).reshape(100, 1)

  • Vẽ các điểm vừa tạo trên đồ thị
import matplotlib.pyplot as plt plt.rc('font', size=14)
plt.rc('axes', labelsize=14, titlesize=14)
plt.rc('legend', fontsize=14)
plt.rc('xtick', labelsize=10)
plt.rc('ytick', labelsize=10) plt.figure(figsize=(6, 4))
plt.plot(X, y, ".")
plt.xlabel("$x_1$")
plt.ylabel("$y$ ", rotation=0)
plt.axis([0, 3, 0, 3.5])
plt.grid()
plt.show()



  • Tìm θ\theta

Ta có công thức tìm θ\theta tối ưu:

θ=(XX+αA)1Xy\theta = (X^\top X + \alpha A)^{-1} X^\top y

  • A là một ma trận, thường là ma trận đơn vị (ma trận đường chéo với các phần tử đường chéo bằng 1).
alpha = 0.1
A = np.array([[0., 0.], [0., 1.]])
X_b = np.c_[np.ones(m), X]
np.linalg.inv(X_b.T @ X_b + alpha * A) @ X_b.T @ y """
array([[0.97898394], [0.3828496 ]])
Mô hình cho ra: y = 0.97 + 0.38 * x
"""

Hoặc dùng hàm có sẵn trong thư viện sklearn

from sklearn.linear_model import Ridge ridge_reg = Ridge(alpha=0.1, solver="cholesky")
ridge_reg.fit(X, y)
print(ridge_reg.intercept_, ridge_reg.coef_) # [0.97898394] [0.3828496]: y = 0.97 + 0.38 * x

  • Thử với các giá trị alpha khác nhau

Từ các đồ thị trên, nhận thấy.

  • Nếu α quá lớn, mô hình sẽ bị underfitting.
  • Nếu α quá nhỏ thì overfitting.

Cũng dễ hiểu thôi vì nếu α càng lớn => hàm mất mát càng lớn. Do đó trong quá trình tối ưu thì mô hình càng phải ép các giá trị θi\theta_{i} nhỏ đi dẫn đến underfitting.

Lasso Regression (L1 norm)

Thay vì dùng bình phương như Ridge regression, Lasso Regression dùng trị tuyệt đối với công thức như sau:

J(θ)=MSE(θ)+2αi=1nθiJ(\theta) = \text{MSE}(\theta) + 2\alpha \sum_{i=1}^{n} |\theta_i|

Phương pháp của Lasso dùng trị tuyệt đối gọi là L1 norm, còn của Ridge sử dụng bình phương là L2 norm.

Lưu ý:

  • Để giảm overfitting, Lasso có thể ép một vài θi\theta_{i} về bằng 0.

  • Đối với Ridge, chỉ có tác động làm giảm bớt giá trị của các θi\theta_{i}.

  • Lasso không có công thức tính θ\theta tối ưu như Ridge do θi|\theta_i| không có đạo hàm tại 0 (không giải được phương trình đạo hàm bằng 0 để tìm tối ưu).

  • Lasso sẽ dùng một số phương pháp khác để tính θ\theta tối ưu như Coordinate Descent, Proximal Gradient Descent, Subgradient Descent ...

  • Dùng hàm Lasso của thư viện Sklearn để tính toán.

from sklearn.linear_model import Lasso lasso_reg = Lasso(alpha=0.1)
lasso_reg.fit(X, y) print(lasso_reg.intercept_, lasso_reg.coef_) # [1.14537356] [0.26167212]: y = 1.14 + 0.26 * x

Elastic Net

Elastic Net là một phương pháp trung gian giữa Ridge và Lasso. Thành phần regularization là sự kết hợp của cả hai phương pháp trên.

J(θ)=MSE(θ)+r(2αi=1nθi)+(1r)αi=1nθi2J(\theta) = \text{MSE}(\theta) + r (2\alpha \sum_{i=1}^{n} \theta_i) + (1-r) \alpha \sum_{i=1}^{n} \theta_i^2

  • r = 0 tương đương với Ridge Regression
  • r = 1 tương đương với Lasso Regression
from sklearn.linear_model import ElasticNet elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_net.fit(X, y) print(elastic_net.intercept_, elastic_net.coef_) # [1.08639303] [0.30462619]: y = 1.08 + 0.304x

Early Stopping

Early stopping khác biệt so với các kỹ thuật như Lasso hay Ridge. Thay vì tinh chỉnh hàm mất mát, nó chỉ đơn giản là dừng quá trình huấn luyện khi lỗi trên tập kiểm định (validation error) đạt giá trị nhỏ nhất.

Geoffrey Hinton gọi phương pháp này là “beautiful free lunch”.

  • Như hình trên, sau khi huấn luyện xong. Lấy thông số mô hình tại điểm mà lỗi trên tập validation bé nhất. Rất đơn giản mà lại hiểu quả phải không 😄

Tài liệu tham khảo

https://jashrathod.github.io/2021-09-30-underfitting-overfitting-and-regularization/

https://github.com/ageron/handson-ml3/blob/main/04_training_linear_models.ipynb

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hành trình AI của một sinh viên tồi

Mình ngồi gõ những dòng này vào lúc 2h sáng (chính xác là 2h 2 phút), quả là một đêm khó ngủ. Có lẽ vì lúc chiều đã uống cốc nâu đá mà giờ mắt mình tỉnh như sáo, cũng có thể là vì những trăn trở về lý thuyết chồng chất ánh xạ mình đọc ban sáng khiến không tài nào chợp mắt được hoặc cũng có thể do mì

0 0 152

- vừa được xem lúc

[Deep Learning] Key Information Extraction from document using Graph Convolution Network - Bài toán trích rút thông tin từ hóa đơn với Graph Convolution Network

Các nội dung sẽ được đề cập trong bài blog lần này. . Tổng quan về GNN, GCN. Bài toán Key Information Extraction, trích rút thông tin trong văn bản từ ảnh.

0 0 229

- vừa được xem lúc

Tìm hiểu về YOLO trong bài toán real-time object detection

1.Yolo là gì. . Họ các mô hình RCNN ( Region-Based Convolutional Neural Networks) để giải quyết các bài toán về định vị và nhận diện vật thể.

0 0 292

- vừa được xem lúc

Encoding categorical features in Machine learning

Khi tiếp cận với một bài toán machine learning, khả năng cao là chúng ta sẽ phải đối mặt với dữ liệu dạng phân loại (categorical data). Khác với các dữ liệu dạng số, máy tính sẽ không thể hiểu và làm việc trực tiếp với categorical variable.

0 0 262

- vừa được xem lúc

TF Lite with Android Mobile

Như các bạn đã biết việc đưa ứng dụng đến với người sử dụng thực tế là một thành công lớn trong Machine Learning.Việc làm AI nó không chỉ dừng lại ở mức nghiên cứu, tìm ra giải pháp, chứng minh một giải pháp mới,... mà quan trọng là đưa được những nghiên cứu đó vào ứng dụng thực tế, được sử dụng để

0 0 76

- vừa được xem lúc

Xây dựng hệ thống Real-time Multi-person Tracking với YOLOv3 và DeepSORT

Trong bài này chúng ta sẽ xây dựng một hệ thống sử dụng YOLOv3 kết hợp với DeepSORT để tracking được các đối tượng trên camera, YOLO là một thuật toán deep learning ra đời vào tháng 5 năm 2016 và nó nhanh chóng trở nên phổ biến vì nó quá nhanh so với thuật toán deep learning trước đó, sử dụng YOLO t

0 0 320