Chuyển tới nội dung chính

Hồi quy tuyến tính và gradient descent

Đặt vấn đề

Bạn có bảng dữ liệu nhà ở: mỗi căn kèm diện tích và giá bán. Chấm từng căn thành một điểm trên mặt phẳng, mắt ta lập tức thấy một xu hướng chạy chéo lên. Giờ có căn mới rao bán rộng 85 mét vuông, ta đoán giá bao nhiêu.

Con người trả lời bằng cách vẽ nhẩm một đường thẳng xuyên qua giữa đám điểm rồi dóng lên. Học máy làm đúng việc đó, chỉ khác là nó cần định nghĩa chặt chẽ cho ba chữ "xuyên qua giữa". Từ đó nảy ra ba câu hỏi mà cả bài học này xoay quanh: mô hình trông ra sao, đo độ tệ bằng gì, và tìm tham số tốt nhất bằng cách nào. Khung ba bước ấy giữ nguyên cả khi ta đổi sang mạng nơ-ron, nên hồi quy tuyến tính là mô hình bé nhất mà vẫn đủ mọi bộ phận của một hệ thống học máy thật.

Thử ngay: chạy gradient descent trên tập điểm mẫu

Cách tìm tham số thông dụng nhất tên là gradient descent: xuất phát từ một đường bất kỳ rồi lặp đi lặp lại việc nhích tham số theo hướng làm sai số giảm. Sai số ở đây đo bằng MSE, tức trung bình bình phương khoảng cách từ các điểm tới đường. Bấm nút để chạy gradient descent trên một tập điểm mẫu. Đường bắt đầu nằm ngang với sai số lớn, rồi xoay và dịch dần để bám dữ liệu, sai số MSE giảm sau mỗi bước cho tới khi gần như không đổi. Sau đó hãy tự chỉnh tốc độ học và số bước mỗi lần bấm: chọn tốc độ học vượt ngưỡng ổn định thì sai số bùng nổ thay vì giảm, và bạn nhìn thấy tận mắt vì sao tham số này phải chọn cẩn thận.

Hồi quy tuyến tính bằng gradient descentepoch 0
đường: y = 0.00 x + 0.00sai số MSE: 22.740
Đường khởi đầu nằm ngang, sai số lớn. Mỗi bước, gradient descent chỉnh độ dốc và vị trí đường để giảm sai số.
Bấm vào khung để thêm điểm, bấm trúng một điểm để xoá nó. Với tập điểm mặc định, ngưỡng ổn định vào khoảng 0.031: tốc độ học nhỏ hơn thì đường hội tụ, lớn hơn thì phân kỳ. Đặt số bước về 1 để nhìn từng bước nhích một.

Ý tưởng cốt lõi

Hồi quy tuyến tính là mô hình đơn giản nhất trong học máy có giám sát: ta muốn dự đoán một số thực y từ một hay nhiều đặc trưng x. Mô hình giả định mối quan hệ giữa đầu vào và đầu ra là một đường thẳng (hoặc một mặt phẳng khi có nhiều đặc trưng):

y = w*x + b

Trong đó w là trọng số (độ dốc) và b là hằng số dịch (điểm cắt trục tung). Nhiệm vụ của ta là tìm cặp wb sao cho đường thẳng đi gần nhất với toàn bộ các điểm dữ liệu.

Ví dụ trực quan: với ba điểm (1, 2), (2, 3), (3, 5), không có đường thẳng nào đi qua cả ba, nhưng có một đường "khớp tốt nhất" theo nghĩa tổng sai số nhỏ nhất. Đường đó xấp xỉ là y = 1.5*x + 0.33.

Hàm mất mát: sai số bình phương trung bình (MSE)

Để biết một đường thẳng "tốt" hay "tệ", ta cần một con số đo độ sai. Phổ biến nhất là sai số bình phương trung bình, viết tắt là MSE:

MSE = trung binh cua (y_du_doan - y_thuc)**2

Với từng điểm dữ liệu, ta lấy giá trị mô hình dự đoán trừ giá trị thực, bình phương hiệu đó (để sai âm và sai dương không triệt tiêu nhau và để phạt mạnh các sai số lớn), rồi lấy trung bình trên toàn bộ dữ liệu.

Một vài tính chất quan trọng của MSE:

  • Vì có bình phương nên một sai số gấp đôi bị phạt gấp bốn lần. MSE rất "ghét" những điểm lệch xa.
  • MSE là hàm lồi theo wb. Nói nôm na, mặt mất mát có dạng một cái bát, chỉ có đúng một đáy. Nhờ vậy ta luôn tìm được điểm tốt nhất toàn cục, không bị mắc kẹt.

Mục tiêu của huấn luyện là điều chỉnh wb để MSE nhỏ nhất có thể.

Tính MSE bằng tay

Lấy lại ba điểm (1, 2), (2, 3), (3, 5) và thử hai đường thẳng.

Đường y = x + 1 cho dự đoán 2, 3, 4. Sai số là 0, 0 và 4 - 5 = -1. Bình phương lên được 0, 0, 1, trung bình là 1/3, xấp xỉ 0.333.

Đường y = 2x cho dự đoán 2, 4, 6. Sai số là 0, 1, 1. Bình phương được 0, 1, 1, trung bình là 2/3, xấp xỉ 0.667.

Vậy đường thứ nhất tốt gấp đôi đường thứ hai theo MSE. Chú ý hệ quả của phép bình phương: một điểm lệch 2 đơn vị đóng góp bằng bốn điểm lệch 1 đơn vị cộng lại, nên đường thẳng luôn bị kéo về phía những điểm lệch xa nhất. Ta sẽ quay lại chi tiết này ở phần bàn về ngoại lai.

Gradient descent: lăn xuống đáy bát

Với hồi quy tuyến tính, ta có công thức giải trực tiếp ra wb. Nhưng với hầu hết các mô hình khác (hồi quy logistic, mạng nơ-ron) thì không. Khi đó ta dùng một phương pháp tổng quát hơn: gradient descent.

Ý tưởng giống như đứng trên sườn đồi trong sương mù và muốn xuống đáy thung lũng. Ta không nhìn thấy đáy, nhưng có thể cảm nhận hướng dốc xuống ngay dưới chân, rồi bước theo hướng đó. Lặp lại nhiều lần, ta dần tới đáy.

Trong toán học, "hướng dốc xuống nhanh nhất" chính là ngược chiều đạo hàm của hàm mất mát. Đạo hàm cho ta biết hàm mất mát thay đổi thế nào khi nhích w lên một chút. Quy tắc cập nhật như sau:

w_moi = w_cu - eta * dao_ham_cua_L_theo_w
b_moi = b_cu - eta * dao_ham_cua_L_theo_b

Ở đây eta (đọc là "ê-ta") là bước học, hay tốc độ học. Nó quyết định mỗi bước ta đi xa bao nhiêu.

Với hàm MSE, đạo hàm có dạng cụ thể và dễ tính. Đặt sai_so = y_du_doan - y_thuc cho từng điểm, thì:

dao_ham_theo_w = trung binh cua (2 * sai_so * x)
dao_ham_theo_b = trung binh cua (2 * sai_so)

Bước học quan trọng cỡ nào

Giá trị eta ảnh hưởng cực lớn tới quá trình học:

  • Nếu eta quá nhỏ: mỗi bước nhích rất ngắn, hội tụ chậm, có khi hết số vòng lặp vẫn chưa tới đáy.
  • Nếu eta vừa phải: mất mát giảm đều và mượt qua từng vòng lặp.
  • Nếu eta quá lớn: ta bước qua khỏi đáy (overshoot), mất mát dao động lên xuống hoặc thậm chí tăng vọt rồi phân kỳ.

Quy tắc kinh nghiệm: bắt đầu với eta = 0.01 hoặc 0.001, theo dõi mất mát. Nếu giảm chậm đều thì tăng eta lên vài lần; nếu dao động hoặc tăng thì giảm eta đi một nửa.

Vì sao bước quá lớn lại phá hỏng mọi thứ. Hình dung mặt mất mát là một thung lũng hẹp. Nếu bước đi dài hơn bề ngang thung lũng, ta không dừng ở đáy mà văng sang sườn bên kia, ở vị trí còn cao hơn lúc đầu. Vòng sau lại văng ngược về, cao hơn nữa. Mất mát lớn dần theo cấp số nhân và chương trình in ra inf hoặc nan. Đó là phân kỳ.

Chạy tay một bước gradient descent

Vẫn ba điểm (1, 2), (2, 3), (3, 5). Khởi tạo w = 0, b = 0, chọn eta = 0.1. Dự đoán ban đầu đều bằng 0, nên sai số là -2, -3, -5.

Đạo hàm theo w là trung bình của 2 * sai_so * x, tức trung bình của -4, -12, -30, bằng -46/3, xấp xỉ -15.33. Đạo hàm theo b là trung bình của -4, -6, -10, bằng -20/3, xấp xỉ -6.67. Cập nhật: w = 0 - 0.1 * (-15.33) bằng khoảng 1.53, và b bằng khoảng 0.67.

Chỉ sau một vòng, đường thẳng đã nhảy từ nằm ngang lên gần đúng độ dốc cần tìm. Chú ý dấu: đạo hàm âm nghĩa là tăng w sẽ làm mất mát giảm, và quy tắc trừ đi eta nhân đạo hàm tự động làm đúng việc đó.

Chuẩn hóa đặc trưng

Giả sử ta dự đoán giá nhà từ diện tích (cỡ 30 tới 200) và số phòng ngủ (cỡ 1 tới 5). Đạo hàm theo trọng số của diện tích chứa thừa số x cỡ hàng trăm, còn đạo hàm theo trọng số của số phòng chỉ cỡ vài đơn vị. Mặt mất mát vì thế méo thành thung lũng dài và hẹp, nên một bước học vừa đủ cho hướng thoải sẽ quá lớn cho hướng dốc: gradient descent đi ngoằn ngoèo và hội tụ rất chậm. Cách chữa là chuẩn hóa, thường bằng cách trừ trung bình rồi chia độ lệch chuẩn. Lưu ý hai tham số này phải tính trên tập huấn luyện rồi áp y nguyên cho tập kiểm tra, tính lại trên tập kiểm tra là rò rỉ thông tin.

Hồi quy nhiều biến

Thực tế hiếm khi ta dự đoán chỉ từ một đặc trưng. Giá nhà phụ thuộc diện tích, số phòng, tuổi công trình, khoảng cách tới trung tâm. Mô hình mở rộng rất tự nhiên:

y = w1*x1 + w2*x2 + ... + wm*xm + b

Về hình học, thay vì một đường thẳng ta có một siêu phẳng. Về tính toán thì gần như không có gì mới: hàm mất mát vẫn là MSE, đạo hàm theo trọng số thứ j vẫn là trung bình của 2 * sai_so * x_j, và vòng lặp cập nhật đồng thời cả m trọng số cùng b. Trọng số wj cho biết nếu đặc trưng thứ j tăng một đơn vị mà mọi đặc trưng khác giữ nguyên thì dự đoán thay đổi bao nhiêu.

Dưới khớp và quá khớp

Dưới khớp xảy ra khi mô hình quá đơn giản so với quy luật thật. Nếu quan hệ giữa xy vốn cong mà ta ép một đường thẳng vào, thì huấn luyện bao lâu cũng vậy, sai số ngay trên tập huấn luyện vẫn cao. Dấu hiệu: sai số huấn luyện cao, sai số kiểm tra cũng cao, hai con số gần bằng nhau.

Quá khớp thì ngược lại: mô hình đủ linh hoạt để bám cả nhiễu ngẫu nhiên. Nếu thêm các đặc trưng lũy thừa x**2 tới x**9 rồi khớp qua mười điểm, đường cong sẽ xuyên đúng cả mười điểm, sai số huấn luyện gần bằng 0, nhưng giữa các điểm nó uốn lượn điên rồ và dự đoán trên dữ liệu mới sai bét. Vì thế phải luôn tách tập huấn luyện và tập kiểm tra, và chỉ tin con số đo trên tập kiểm tra.

Giả định của mô hình và khi nào nó hỏng

Giả định thứ nhất là quan hệ tuyến tính: mô hình tin rằng cứ tăng x thêm một đơn vị thì y tăng đúng w đơn vị, bất kể x đang ở mức nào. Nhiều hiện tượng thực tế không như vậy, doanh thu theo chi phí quảng cáo thường bão hòa dần. Cách kiểm tra là vẽ đồ thị phần dư theo giá trị dự đoán: nếu chúng tạo thành hình cung thay vì rải ngẫu nhiên quanh 0 thì quan hệ thật là phi tuyến. Giả định thứ hai là nhiễu có phương sai đều. Giả định thứ ba, ngầm ẩn hơn: trọng số đo tương quan chứ không chứng minh nhân quả.

Nhạy cảm với ngoại lai

Điểm yếu dễ thấy nhất của MSE nằm ngay trong phép bình phương. Thêm vào ba điểm quen thuộc một điểm nhập sai (4, 50), do gõ thừa một số 0. Đường y = 1.5*x + 0.33 dự đoán ở x = 4 giá trị 6.33, nên điểm này lệch khỏi xu hướng chung gần 44 đơn vị, bình phương lên thành khoảng 1900, trong khi tổng bình phương sai số của cả ba điểm còn lại cộng lại chưa tới một đơn vị. Hàm mất mát gần như chỉ còn thấy mình điểm hỏng đó, nên đường thẳng tối ưu bị bẻ ngược lên để chiều nó và trở nên sai với toàn bộ dữ liệu lành. Hướng xử lý: làm sạch dữ liệu, hoặc đổi sang hàm mất mát ít nhạy hơn như sai số tuyệt đối trung bình (MAE) hay mất mát Huber.

Hồi quy logistic và hàm sigmoid

Hồi quy tuyến tính dự đoán một số thực bất kỳ, nên không phù hợp cho bài toán phân loại nhị phân, nơi nhãn chỉ là 0 hoặc 1. Một dự đoán thô như 1.5 hay -0.3 không có ý nghĩa cho biến chỉ nhận hai giá trị.

Giải pháp là ép đầu ra qua một hàm "bóp" giá trị về khoảng giữa 0 và 1, để diễn giải được như xác suất. Hàm đó là sigmoid:

sigmoid(z) = 1 / (1 + e**(-z))

trong đó z = w*x + b là điểm số tuyến tính. Sigmoid có dạng chữ S và một số tính chất đẹp:

  • Đầu ra luôn nằm trong khoảng từ 0 tới 1, nên đọc được như xác suất.
  • Khi z = 0 thì sigmoid = 0.5. Khi z rất lớn thì tiến tới 1, khi z rất âm thì tiến tới 0.
  • Đạo hàm rất gọn: dao_ham_sigmoid(z) = sigmoid(z) * (1 - sigmoid(z)).

Mô hình hồi quy logistic coi sigmoid(w*x + b) là xác suất nhãn bằng 1. Quy tắc quyết định: nếu xác suất lớn hơn hoặc bằng 0.5 thì dự đoán nhãn 1, ngược lại dự đoán nhãn 0.

Lưu ý tên gọi gây nhầm lẫn: tuy mang chữ "hồi quy", hồi quy logistic thực ra là mô hình phân loại. Nó cũng được huấn luyện bằng gradient descent, với hàm mất mát chuẩn là cross-entropy (chứ không phải MSE, vì MSE kết hợp với sigmoid sẽ thành hàm phi lồi, dễ mắc kẹt).

Điều chuẩn L1 và L2: chống quá khớp

Mô hình có thể bị quá khớp (overfit): học thuộc cả nhiễu trong dữ liệu huấn luyện thay vì học quy luật chung. Một dấu hiệu là các trọng số w phình to bất thường, khiến mô hình quá nhạy với mọi thay đổi nhỏ.

Ý tưởng điều chuẩn (regularization) là thêm một khoản "phạt" vào hàm mất mát để giữ cho các trọng số nhỏ lại:

  • Điều chuẩn L2 (Ridge): cộng thêm lambda * tong cua (w**2). Khoản này buộc mọi trọng số co về gần 0 một cách mượt mà. Khi lambda càng lớn, trọng số càng bị ép nhỏ.
  • Điều chuẩn L1 (Lasso): cộng thêm lambda * tong cua tri tuyet doi cua w. Điểm đặc biệt là L1 đẩy nhiều trọng số về đúng bằng 0, tức là tự động loại bỏ bớt đặc trưng không quan trọng. Nhờ vậy L1 còn dùng để lựa chọn đặc trưng.

Ở đây lambda là siêu tham số điều khiển mức phạt. Khi lambda = 0, ta quay về mô hình gốc không điều chuẩn. Khi lambda lớn, mô hình đơn giản hơn nhưng có thể quá đơn giản (underfit). Người ta thường chọn lambda bằng kiểm định chéo (cross-validation), và nhớ chuẩn hóa đặc trưng trước khi điều chuẩn để mọi đặc trưng bị phạt công bằng.

Tóm lại: L2 làm trọng số nhỏ và đều, L1 làm trọng số thưa (nhiều số 0). Cả hai đều giúp mô hình tổng quát tốt hơn trên dữ liệu mới.

Hiểu nhầm thường gặp
  • Tưởng mất mát giảm là mô hình tốt. Mất mát giảm chỉ nói mô hình bám tập huấn luyện ngày càng sát. Nếu nó bám cả nhiễu thì đó là quá khớp. Chỉ sai số trên dữ liệu chưa từng thấy mới nói lên chất lượng thật.
  • Tưởng bước học lớn thì học nhanh hơn. Bước quá lớn làm ta văng qua đáy, mất mát dao động rồi phân kỳ.
  • Tưởng gradient descent bị kẹt cực tiểu địa phương ở đây. Với MSE và mô hình tuyến tính, mặt mất mát lồi, chỉ có một đáy. Kẹt cực tiểu địa phương là chuyện của mạng nơ-ron.
  • Tưởng w lớn nghĩa là đặc trưng đó quan trọng. Sai nếu chưa chuẩn hóa: đặc trưng đo bằng đơn vị nhỏ tự động có trọng số lớn hơn.

Mã nguồn Python

Đoạn mã dưới đây tự cài đặt gradient descent cho hồi quy tuyến tính trên vài điểm dữ liệu, không dùng thư viện học máy. Ta in ra wb sau mỗi vài vòng lặp để thấy chúng dần hội tụ.

# Tu cai dat gradient descent cho hoi quy tuyen tinh

# Du lieu mau: quan he gan dung y = 1.5 * x + 0.3
xs = [1.0, 2.0, 3.0, 4.0, 5.0]
ys = [1.8, 3.3, 4.9, 6.2, 7.8]

# Khoi tao tham so
w = 0.0
b = 0.0
eta = 0.01 # buoc hoc (learning rate)
epochs = 1000 # so vong lap
n = len(xs)

for epoch in range(epochs):
# Tinh gradient (dao ham) cua MSE theo w va b
grad_w = 0.0
grad_b = 0.0
for x, y in zip(xs, ys):
y_du_doan = w * x + b
sai_so = y_du_doan - y # du doan tru thuc te
grad_w += 2 * sai_so * x
grad_b += 2 * sai_so
grad_w /= n
grad_b /= n

# Cap nhat tham so theo huong nguoc gradient
w = w - eta * grad_w
b = b - eta * grad_b

# In tien trinh moi 100 vong lap
if epoch % 100 == 0:
# Tinh mat mat MSE hien tai
mse = sum((w * x + b - y) ** 2 for x, y in zip(xs, ys)) / n
print("Vong", epoch, "-> w =", round(w, 4),
"b =", round(b, 4), "MSE =", round(mse, 4))

print("Ket qua cuoi: w =", round(w, 4), "b =", round(b, 4))

Khi chạy, ta sẽ thấy w tiến dần về khoảng 1.5b về khoảng 0.3, đúng như quy luật sinh ra dữ liệu, còn MSE giảm dần về gần 0. Thử đổi eta thành 0.001 (chậm hơn) hoặc 0.1 (nhanh, có thể dao động) để cảm nhận vai trò của bước học.

Bài tập thực hành

Bài 1. Sửa đoạn mã trên để thử ba giá trị bước học khác nhau: eta = 0.001, eta = 0.01, và eta = 0.3. Với mỗi giá trị, in MSE cuối cùng và nhận xét: trường hợp nào hội tụ chậm, trường hợp nào dao động hoặc phân kỳ.

Gợi ý

Đưa toàn bộ vòng huấn luyện vào một hàm huan_luyen(eta) trả về w, b và MSE cuối. Gọi hàm này ba lần với ba giá trị. Với eta = 0.3 rất có thể MSE sẽ tăng vọt hoặc thành inf vì các bước quá lớn vượt qua đáy. Với eta = 0.001 thì sau 1000 vòng MSE vẫn còn khá cao vì học quá chậm.

Bài 2. Tự viết hàm sigmoid(z) và in ra giá trị của nó tại z = -5, -1, 0, 1, 5. Kiểm tra rằng kết quả luôn nằm trong khoảng từ 0 tới 1 và bằng đúng 0.5 khi z = 0.

Gợi ý

Dùng import math rồi viết return 1 / (1 + math.exp(-z)). Lặp qua danh sách các giá trị z và in từng kết quả. Bạn sẽ thấy giá trị tăng dần theo hình chữ S: rất gần 0 khi z âm lớn, đúng 0.5 ở giữa, và rất gần 1 khi z dương lớn.

Bài 3. Thêm điều chuẩn L2 vào gradient của bài hồi quy tuyến tính. Cụ thể, cộng thêm 2 * lambda * w vào grad_w (nhưng không phạt b). Thử lambda = 0.1 và quan sát giá trị w cuối cùng có nhỏ hơn so với khi không điều chuẩn hay không.

Gợi ý

Sau khi tính xong grad_w trung bình, thêm dòng grad_w += 2 * lam * w (đặt biến lam = 0.1). Vì khoản phạt kéo w về 0, giá trị w hội tụ sẽ hơi nhỏ hơn 1.5. Đây chính là sự đánh đổi: điều chuẩn hi sinh một chút độ khớp trên dữ liệu huấn luyện để đổi lấy mô hình ổn định hơn.

Tự kiểm tra

Vì sao hàm mất mát MSE lại bình phương sai số thay vì chỉ lấy hiệu?

Có hai lý do. Thứ nhất, bình phương khiến sai số âm và dương không triệt tiêu lẫn nhau (nếu chỉ lấy hiệu, một điểm lệch lên và một điểm lệch xuống có thể cộng thành 0 dù mô hình tệ). Thứ hai, bình phương phạt mạnh các sai số lớn, ép mô hình tránh những dự đoán lệch xa. Ngoài ra MSE còn là hàm lồi và khả vi trơn, rất tiện cho gradient descent.

Khác biệt cốt lõi giữa hồi quy tuyến tính và hồi quy logistic là gì?

Hồi quy tuyến tính cho đầu ra là số thực bất kỳ, dùng cho bài toán dự đoán giá trị liên tục (ví dụ giá nhà). Hồi quy logistic đặt thêm hàm sigmoid lên trên điểm số tuyến tính để ép đầu ra về khoảng từ 0 tới 1, diễn giải như xác suất, dùng cho phân loại nhị phân. Hai mô hình có cấu trúc cập nhật gradient gần giống hệt nhau, chỉ khác hàm dự đoán và hàm mất mát (MSE so với cross-entropy).

Một mô hình đạt MSE huấn luyện gần bằng 0 nhưng MSE kiểm tra rất cao. Chuyện gì đã xảy ra và nên làm gì?

Đó là quá khớp: mô hình đủ linh hoạt để bám cả nhiễu ngẫu nhiên của tập huấn luyện, nên nó nhớ dữ liệu thay vì học quy luật. Khoảng cách lớn giữa sai số huấn luyện và sai số kiểm tra là dấu hiệu kinh điển. Hướng xử lý: giảm độ phức tạp mô hình, thêm điều chuẩn L1 hoặc L2, hoặc thu thập thêm dữ liệu. Nếu ngược lại cả hai sai số đều cao và gần bằng nhau thì vấn đề là dưới khớp, khi đó phải làm mô hình mạnh lên chứ không phải yếu đi.

Câu hỏi tự kiểm

Kiểm tra nhanh: hồi quy tuyến tính và gradient descent0/4 đúngchưa trả lời
  1. 1Với hồi quy tuyến tính dùng MSE, vì sao gradient descent không lo mắc kẹt ở cực tiểu địa phương?
  2. 2Thêm một điểm nhập sai lệch rất xa xu hướng làm đường hồi quy MSE bị kéo lệch mạnh. Nguyên nhân trực tiếp là gì?
  3. 3Đặt bước học eta quá lớn thường dẫn tới điều gì?
  4. 4Chuẩn hóa đặc trưng đúng cách phải làm thế nào để tránh rò rỉ dữ liệu?

Tóm tắt

Bài này đi trọn một vòng quy trình học máy trên mô hình đơn giản nhất: chọn họ hàm dự đoán là đường thẳng, chọn thước đo độ tệ là MSE, rồi dùng gradient descent đi ngược chiều đạo hàm để hạ dần mất mát. Bước học eta là núm vặn quan trọng nhất: quá nhỏ thì chậm, quá lớn thì phân kỳ. Chuẩn hóa đặc trưng giúp hội tụ nhanh hơn, còn mở rộng sang nhiều đặc trưng chỉ là thêm trọng số chứ không đổi khung tính toán. Quan trọng không kém là biết mô hình sai ở đâu: nó giả định quan hệ tuyến tính nên bó tay trước quy luật cong, phép bình phương trong MSE khiến nó rất nhạy với ngoại lai, và giữa dưới khớp với quá khớp thì điều chuẩn là công cụ chỉnh cán cân.

Ghi nhớ

Hồi quy tuyến tính khớp một đường thẳng y = w*x + b bằng cách tối thiểu hóa MSE. Gradient descent là thuật toán tổng quát: đi ngược chiều đạo hàm với bước học eta để giảm dần mất mát; chọn eta quá nhỏ thì chậm, quá lớn thì phân kỳ. Hàm sigmoid biến điểm số tuyến tính thành xác suất, cho ra hồi quy logistic dùng để phân loại nhị phân. Điều chuẩn L2 giữ trọng số nhỏ và đều, L1 đẩy nhiều trọng số về 0 (thưa), cả hai đều chống quá khớp.