Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Hồi quy tuyến tính trong PyTorch Beginner
Trong phần này, mình sẽ triển khai thuật toán Linear Regression (hồi quy tuyến tính) bằng PyTorch và áp dụng các khái niệm đã học từ trước. Đây là một ví dụ nền tảng giúp hiểu sâu hơn về cách vận hành của mô hình hồi quy tuyến tính.
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
Linear Regression (hồi quy tuyến tính) bằng PyTorch
Pipeline bao gồm các bước sau:
- Chuẩn bị dữ liệu.
- Thiết kế mô hình hồi quy tuyến tính .
- Định nghĩa hàm mất mát (Loss) và trình tối ưu hóa (Optimizer).
- Huấn luyện mô hình tự động với các bước forward pass, backward pass, và cập nhật trọng số (weight update).
Mã thực hiện Linear Regression
import torch import torch.nn as nn import numpy as np from sklearn import datasets import matplotlib.pyplot as plt # 0) Chuẩn bị dữ liệu # Tạo bộ dữ liệu giả lập với 100 mẫu, mỗi mẫu có 1 đặc trưng (feature) X_numpy, y_numpy = datasets.make_regression(n_samples=100, n_features=1, noise=20, random_state=4) # Chuyển đổi dữ liệu sang kiểu Tensor của PyTorch X = torch.from_numpy(X_numpy.astype(np.float32)) # Đầu vào X y = torch.from_numpy(y_numpy.astype(np.float32)) # Đầu ra y y = y.view(y.shape[0], 1) # Điều chỉnh kích thước y thành ma trận cột # Thông tin về số mẫu và số đặc trưng n_samples, n_features = X.shape # 1) Thiết kế mô hình # Mô hình hồi quy tuyến tính f(x) = wx + b input_size = n_features # Số chiều đầu vào output_size = 1 # Số chiều đầu ra model = nn.Linear(input_size, output_size) # 2) Định nghĩa hàm mất mát và trình tối ưu hóa learning_rate = 0.01 criterion = nn.MSELoss() # Mean Squared Error Loss optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # 3) Vòng lặp huấn luyện num_epochs = 100 for epoch in range(num_epochs): # Dự đoán và tính lỗi (forward pass) y_predicted = model(X) loss = criterion(y_predicted, y) # Gradient ngược và cập nhật trọng số (backward pass) loss.backward() optimizer.step() # Reset gradient về 0 sau khi cập nhật trọng số optimizer.zero_grad() if (epoch + 1) % 10 == 0: print(f'epoch: {epoch+1}, loss = {loss.item():.4f}') # 4) Vẽ biểu đồ kết quả predicted = model(X).detach().numpy() # Dự đoán giá trị (tách khỏi đồ thị tính gradient) plt.plot(X_numpy, y_numpy, 'ro', label='Dữ liệu thực tế') # Dữ liệu thực tế plt.plot(X_numpy, predicted, 'b', label='Hồi quy tuyến tính') # Đường hồi quy plt.legend() plt.show()
Giải thích từng phần
Bước 0: Chuẩn bị dữ liệu
- Chúng ta sử dụng thư viện
sklearn.datasets
để tạo dữ liệu giả lập cho bài toán hồi quy. - Bộ dữ liệu bao gồm 100 mẫu , mỗi mẫu có 1 đặc trưng đầu vào , và đầu ra .
Bước 1: Thiết kế mô hình
- PyTorch hỗ trợ lớp
nn.Linear
để triển khai một mô hình hồi quy tuyến tính đơn giản . input_size = 1
do mỗi mẫu có một đặc trưng,output_size = 1
vì đầu ra là một giá trị.
Bước 2: Định nghĩa hàm mất mát và trình tối ưu hóa
- Hàm mất mát: Sử dụng MSELoss, tính toán trung bình bình phương lỗi giữa đầu ra thực tế và đầu ra dự đoán.
- Trình tối ưu hóa: Sử dụng SGD (Stochastic Gradient Descent) để cập nhật trọng số và bias .
Bước 3: Vòng lặp huấn luyện
- Trong mỗi epoch:
- Dự đoán (forward pass): Mô hình tính toán giá trị .
- Tính lỗi: Tính toán độ chênh lệch giữa và bằng hàm mất mát.
- Gradient ngược (backward pass): Tự động tính gradient của lỗi theo các tham số và .
- Cập nhật tham số: Trình tối ưu hóa điều chỉnh trọng số và bias dựa trên gradient.
- Xóa gradient: Đặt gradient về 0 trước khi bước lặp tiếp theo bắt đầu.
Bước 4: Vẽ kết quả
- Dữ liệu thật được biểu diễn bằng các điểm đỏ (scatter plot).
- Đường màu xanh hiển thị đường hồi quy tuyến tính của mô hình sau khi huấn luyện.
Kết quả mong đợi
- Mô hình hồi quy tuyến tính sẽ tìm ra một đường thẳng gần khớp với dữ liệu thật nhất, dự đoán chính xác hơn qua các epoch.
- Lỗi giảm dần, ví dụ:
epoch: 10, loss = 150.2427 epoch: 20, loss = 110.3215 ... epoch: 100, loss = 24.5678
Biểu đồ trực quan:
- Dữ liệu thật nằm rải rác gần đường hồi quy.
- Đường màu xanh đại diện cho đường hồi quy tuyến tính được học.
Kết bài
Đây là bước cơ bản nhưng quan trọng để hiểu về các bước xây dựng, huấn luyện, và đánh giá một mô hình hồi quy tuyến tính trong PyTorch. Từ ví dụ này, bạn có thể mở rộng sang các mô hình phức tạp hơn như logistic regression, mạng nơ-ron, hoặc các thuật toán học sâu khác.