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
.png)
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 = 1do mỗi mẫu có một đặc trưng,output_size = 1vì đầ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.

            Các kiểu dữ liệu trong C ( int - float - double - char ...)        
            Thuật toán tìm ước chung lớn nhất trong C/C++        
            Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)        
            ComboBox - ListBox trong lập trình C# winforms        
            Random trong Python: Tạo số random ngẫu nhiên        
            Lệnh cin và cout trong C++        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng