Hầu hết các bài toán chúng ta gặp đều có nhiều cách giải. Ví dụ, nếu muốn đi từ bên này phòng sang bên kia, chúng ta có thể đi vòng quanh phòng cho đến khi đến phía đối diện, hoặc đơn giản là đi đường thẳng băng qua.
Phương trình chuẩn nhấn mạnh chính ý niệm đó. Nó chỉ là một cách khác để giải một bài toán. Bạn hỏi là bài toán nào ư? Chúng ta sẽ đề cập trong phần còn lại của bài viết. Trước mắt, bạn chỉ cần biết đây là một cách tiếp cận hiệu quả có thể giúp tiết kiệm rất nhiều thời gian khi triển khai hồi quy tuyến tính trong một số điều kiện nhất định.
Hãy cùng đi sâu hơn…
Phương trình Chuẩn là gì?
Phương trình chuẩn là một nghiệm dạng đóng dùng để tìm giá trị của θ tối thiểu hóa hàm chi phí cho hồi quy tuyến tính bình phương tối thiểu thông thường. Cách mô tả khác là một cách tiếp cận phân tích để tìm các hệ số tối thiểu hóa hàm mất mát. Cả hai cách mô tả đều đúng, nhưng chính xác chúng có nghĩa là gì?
Hồi quy tuyến tính tạo dự đoán y_hat bằng cách tính tổng có trọng số của các đặc trưng đầu vào cộng với một hằng số chệch. Về mặt toán học, có thể biểu diễn như sau:

Trong đó θ biểu thị các tham số và n là số lượng đặc trưng.
Về bản chất, những gì diễn ra trong phương trình trên là tích vô hướng của θ và x được cộng lại. Do đó, cách biểu diễn gọn hơn là dùng dạng vector hóa:

h(θ) là hàm giả thuyết.
Với hàm mục tiêu xấp xỉ này, chúng ta có thể dùng mô hình để dự đoán. Để xác định mô hình học tốt hay không, điều quan trọng là đo lường hiệu suất mô hình trên dữ liệu huấn luyện. Vì mục đích này, chúng ta tính một hàm mất mát. Mục tiêu của quá trình huấn luyện là tìm các giá trị theta (θ) tối thiểu hóa hàm mất mát.
Dưới đây là cách biểu diễn hàm mất mát bằng toán học:

Trong phương trình trên, theta (θ) là một vector có chiều n + 1, và hàm mất mát là hàm của giá trị vector. Do đó, đạo hàm riêng của hàm mất mát J phải được lấy theo từng tham số θ_j lần lượt. Tất cả chúng phải bằng không. Thực hiện quy trình này và giải cho toàn bộ các giá trị θ từ θ_0 đến θ_n sẽ cho ra các giá trị θ tối thiểu hóa hàm mất mát.
Giải lần lượt các tham số từ θ_0 đến θ_n theo quy trình trên dẫn đến một phép dẫn xuất rất phức tạp. Thực tế có một lời giải nhanh hơn.
Hãy xem công thức của phương trình chuẩn:

Trong đó:
θ → Các tham số tối thiểu hóa hàm mất mát X → Giá trị đặc trưng đầu vào cho mỗi mẫu y → Vector giá trị đầu ra cho mỗi mẫu
Phương trình Chuẩn so với Hạ dốc
Mặc dù cả hai phương pháp đều nhằm tìm các tham số theta (θ) tối thiểu hóa hàm mất mát, cách tiếp cận giữa hai lời giải khác nhau đáng kể.
Vì chúng ta đã trình bày cách phương trình chuẩn hoạt động ở phần trước, phần này sẽ điểm qua hạ dốc và sau đó nêu các điểm khác nhau giữa hai kỹ thuật.
Hạ dốc (Gradient Descent)
Hạ dốc là một trong những thuật toán được dùng nhiều nhất trong học máy. Nó được sử dụng để lặp dần tìm các tham số theta (θ) tối thiểu hóa hàm mất mát.
Quy trình bắt đầu bằng việc đánh giá hiệu suất của mô hình. Tiếp theo, tính đạo hàm riêng từ hàm mất mát, dùng để tham chiếu độ dốc tại điểm hiện tại. Cuối cùng, chúng ta thực hiện các bước tỷ lệ với gradient âm để đi xuống điểm cực tiểu của hàm mất mát bằng cách cập nhật tập tham số hiện tại — xem công thức bên dưới.

Quy trình này được lặp lại cho đến khi hội tụ tại điểm cực tiểu của hàm mất mát.
Chúng khác nhau như thế nào?
Điểm khác biệt rõ ràng nhất là phương trình chuẩn mang tính phân tích. Hạ dốc sử dụng cách tiếp cận lặp, nghĩa là các tham số được cập nhật dần cho đến khi hội tụ. Một khác biệt tinh tế kèm theo là hạ dốc yêu cầu chúng ta xác định tốc độ học để kiểm soát kích thước bước tiến về cực tiểu của hàm mất mát. Phương trình chuẩn không yêu cầu tốc độ học vì chúng ta không thực hiện các bước lặp — chúng ta nhận kết quả trực tiếp.
Ngoài ra, không cần chuẩn hóa đặc trưng khi dùng phương trình chuẩn; chúng ta thường chuẩn hóa đặc trưng để các đặc trưng có phạm vi giá trị tương tự nhau. Điều này là vì hạ dốc nhạy với phạm vi của các điểm dữ liệu. Nếu không chuẩn hóa đặc trưng khi dùng hạ dốc, có thể gây lệch cho biểu đồ đường đồng mức của hàm mất mát, trong khi phương trình chuẩn không gặp vấn đề này.
Xác định khi nào nên dùng Phương trình Chuẩn
Cách tốt nhất để biết bạn có nên dùng phương trình chuẩn thay cho hạ dốc hay không là hiểu các nhược điểm của nó.
Việc tính phương trình chuẩn trở nên khó khăn về mặt tính toán khi số lượng đặc trưng trong tập dữ liệu lớn. Lý do là để giải các tham số θ, phải tính hạng tử (X’ X)^-1. Việc tính X’ X tạo ra một ma trận n x n, và với hầu hết các hiện thực trên máy tính, việc nghịch đảo một ma trận có độ phức tạp tăng xấp xỉ theo lập phương của kích thước ma trận. Điều này có nghĩa phép nghịch đảo chạy với độ phức tạp thời gian O(n^3), khiến phương trình chuẩn chạy cực kỳ chậm khi n rất lớn — tìm hiểu thêm về độ phức tạp thời gian.
Vì vậy, tốt nhất là dùng hạ dốc khi số lượng đặc trưng trong tập dữ liệu lớn. Andrew Ng, một chuyên gia hàng đầu về học máy và AI, khuyến nghị bạn nên cân nhắc dùng hạ dốc khi số đặc trưng n lớn hơn 10.000. Với 10.000 đặc trưng trở xuống, bạn có thể phù hợp hơn với cách tiếp cận phân tích như phương trình chuẩn vì bạn không cần chọn giá trị tốc độ học, tức là có ít hơn một siêu tham số cần tinh chỉnh. Tuy nhiên, cần nói rằng các ngôn ngữ lập trình như R hoặc Python thực tế dùng phân rã QR để tìm các hệ số của hồi quy tuyến tính bình phương tối thiểu thông thường, vì phân rã QR ổn định và hiệu quả về số học hơn so với phương trình chuẩn.
Phương trình Chuẩn từ đầu bằng Python
Hãy tạo một bài toán hồi quy để kiểm thử phương trình này:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
# Generate a regression problem
X, y = make_regression(
n_samples=100,
n_features=2,
n_informative=2,
noise = 10,
random_state=25
)
# Visualize feature at index 1 vs target
plt.subplots(figsize=(8, 5))
plt.scatter(X[:, 1], y, marker='o')
plt.xlabel("Feature at Index 1")
plt.ylabel("Target")
plt.show()

Đây là nơi chúng ta sẽ hiện thực phương trình chuẩn:
# adds x0 = 1 to each instance
X_b = np.concatenate([np.ones((len(X), 1)), X], axis=1)
# calculate normal equation
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
# best values for theta
intercept, *coef = theta_best
print(f"Intercept: {intercept}\n\
Coefficients: {coef}")
Intercept: 0.35921242677977794
Coefficients: [6.129199175400593, 96.44309685893134]
Hãy kiểm thử mô hình bằng cách tạo một dự đoán:
# making a new sample
new_sample = np.array([[-2, 0.25]])
# adding a bias term to the instance
new_sample_b = np.concatenate([np.ones((len(new_sample), 1)), new_sample], axis=1)
# predicting the value of our new sample
new_sample_pred = new_sample_b.dot(theta_best)
print(f"Prediction: {new_sample_pred}")
Prediction: [12.21158829]
Mỗi khi bạn hiện thực một thuật toán học máy từ đầu, việc có cách để kiểm chứng lời giải luôn hữu ích; Scikit-learn là một trong những thư viện học máy phổ biến nhất trong Python. Thư viện này có nhiều hiện thực của các thuật toán khác nhau, bao gồm hồi quy tuyến tính, mà chúng ta sẽ dùng để kiểm chứng phương trình chuẩn của mình.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X, y)
print(f"Intercept: {lr.intercept_}\n\
Coefficients: {lr.coef_}")
print(f"Prediction: {lr.predict(new_sample)}")
Intercept: 0.3592124267797807
Coefficients: [ 6.12919918 96.44309686]
Prediction: [12.21158829]
Các nghiệm gần như bằng nhau, nên chúng ta có thể xác nhận lời giải là đúng.
Câu hỏi thường gặp (FAQ)
Phương trình chuẩn trong học máy là gì?
Phương trình chuẩn là một cách tiếp cận phân tích để tìm giá trị của θ nhằm tối thiểu hóa hàm mất mát mà không cần lặp.
Khi nào tôi nên dùng phương trình chuẩn thay vì hạ dốc (gradient descent)?
Nên dùng phương trình chuẩn khi chúng ta có ít đặc trưng. Việc tính phương trình chuẩn trở nên thách thức về mặt tính toán khi số lượng đặc trưng trong tập dữ liệu lớn.
Có thể dùng phương trình chuẩn cho hồi quy logistic không?
Rất tiếc là không. Chỉ có một mô hình có điều kiện trong lý thuyết phân loại có nghiệm dạng đóng — hồi quy tuyến tính.
Khác biệt giữa phương trình chuẩn và hạ dốc là gì?
Điểm khác biệt rõ ràng giữa phương trình chuẩn và hạ dốc là phương trình chuẩn dùng cách tiếp cận phân tích để tìm điểm tối thiểu của hàm mất mát, trong khi hạ dốc dùng cách tiếp cận lặp. Một khác biệt nữa là bạn không phải tinh chỉnh tốc độ học khi tính phương trình chuẩn vì chỉ cần một bước để tìm các tham số θ.