Từ Machine Learning cổ điển đến Deep Learning và Transformer
Giải Mã Toán Học
ML · Deep Learning · Transformer
Một bản đồ toán học thống nhất đi từ vectơ, xác suất, loss và tối ưu đến mạng nơ-ron sâu, attention, positional encoding, Transformer, cross-entropy, perplexity và giải mã tự hồi quy. Mỗi khái niệm đều được trình bày theo cùng một nhịp: trực giác → hình học → công thức → ví dụ số → mô phỏng tương tác → ứng dụng thực tế.
Cách học để không bị ngợp
Lượt 1 — nhìn bức tranh: đọc phần “Ý chính trong một câu”, xem hình và thao tác phòng thí nghiệm; có thể bỏ qua chứng minh.
Lượt 2 — nối công thức: theo dõi kích thước tensor, giả định xác suất và gradient. Mỗi khi gặp một công thức, hỏi: đầu vào có shape gì, loss đến từ đâu, gradient chảy về đâu?
Lượt 3 — áp dụng: mở phần ví dụ PyTorch/NMT ở cuối module và tự thay số. Làm sáu bài luyện tập để kiểm tra shape, gradient, mask, RoPE, bộ nhớ và giải mã; tiến độ được lưu trên trình duyệt này.
Từ hiểu cơ chế đến tự giải
Sáu bài luyện tập
Dự đoán trước, thử trên hình, rồi kiểm tra lời giải. Mỗi bài nằm cạnh module liên quan.
- Ghép shape cho attentionAutograd · Q/K/VChưa làm
- Tự tính một bước backpropChain rule · kiểm tra gradientChưa làm
- Chặn đường nhìn vào tương laiCausal mask · paddingChưa làm
- Đổi vị trí, giữ tương quanRoPE · góc tương đốiChưa làm
- Thiết kế trong ngân sách KV cacheGQA · context · bộ nhớChưa làm
- Tìm đường greedy bỏ lỡXác suất chuỗi · giải mãChưa làm
Tiến độ được lưu trên trình duyệt này. Làm lại bài không xóa dấu hoàn thành.
Luyện nền tảng trong sách chính: Bayes, dữ liệu, chain rule và đánh giá mô hình →
01Module 1: Bản Đồ Tư Duy Liên Kết Toán Học Toàn Diện
(The Unified Machine Learning Math Map)
1. Tại Sao Toán Học Trong Machine Learning Thường Bị Rời Rạc?
Khi đọc cuốn "The Hundred-Page Machine Learning Book" (và các tài liệu học máy nói chung), người học thường gặp phải một cảm giác bối rối:
- Ở Chương 2, tác giả giới thiệu một loạt ký hiệu: vectơ $\mathbf{x}$, tích vô hướng $\mathbf{w}\mathbf{x}$, chuẩn $\|\mathbf{w}\|$, đạo hàm $\nabla f$, kỳ vọng $\mathbb{E}$, quy tắc Bayes, và MLE.
- Sang Chương 3, xuất hiện hàng loạt thuật toán trông có vẻ chẳng liên quan gì đến nhau: Hồi quy tuyến tính thì cực tiểu hóa bình phương sai số, Hồi quy logistic thì dùng hàm Sigmoid và Log-Likelihood, Cây quyết định thì dùng Entropy, SVM thì giải bài toán quy hoạch toàn phương với nhân tử Lagrange và Kernel Trick, còn $k$-NN thì đo khoảng cách Euclid.
- Sang Chương 4, tác giả gom tất cả lại thành "Ba khối xây dựng cốt lõi" rồi nhảy vào Gradient Descent.
- Sang Chương 6, Mạng nơ-ron lại xuất hiện dưới dạng các hàm lồng nhau $g(\mathbf{W}\mathbf{x} + \mathbf{b})$.
Vấn đề là gì?
Cuốn sách rất ngắn gọn nên đã lược bỏ "sợi chỉ đỏ" liên kết các khái niệm này. Thực chất, trong toán học của Machine Learning:
- Không có công thức nào ra đời một cách ngẫu hứng.
- Nhiều thuật toán phân loại và hồi quy kinh điển có thể được hiểu qua một nền tảng hình học (không gian vectơ, khoảng cách, siêu phẳng), một nguyên lý xác suất (likelihood/Bayes), hoặc cả hai. Cây quyết định và các phương pháp dựa trên láng giềng là những ví dụ quan trọng cho thấy không nên ép mọi thuật toán vào đúng một khuôn.
- Phần lớn hệ thống học máy có thể được phân tích bằng một bộ ba sư phạm hữu ích: không gian hàm/mô hình, tiêu chí đánh giá và thủ tục tìm nghiệm. Đây là bản đồ tư duy, không phải định nghĩa duy nhất của mọi phương pháp.
2. Bức Tranh Toàn Cảnh: Sợi Dây Liên Kết Xuyên Suốt 11 Chương
Dưới đây là sơ đồ dòng chảy toán học liên kết toàn bộ các chương trong cuốn sách (được phân tầng rõ ràng từ Nền tảng $\to$ Thuật toán cốt lõi $\to$ Mở rộng phi tuyến & Học sâu):
Bốn Tuyến Luồng Toán Học Cốt Lõi:
-
Tuyến 1: Trục Hình Học & Siêu Phẳng (Đại số tuyến tính)
- $\mathbf{x}, \mathbf{w} \in \mathbb{R}^D$ (Ch 2) $\implies$ Tích vô hướng $\mathbf{w}\mathbf{x}$ (đo lường độ tương đồng và phép chiếu trực giao).
- Phương trình Siêu phẳng $\mathbf{w}\mathbf{x} + b = 0$ chia đôi không gian $D$ chiều:
- Hồi quy Tuyến tính (Ch 3.1): Siêu phẳng đi qua giữa đám mây điểm (cực tiểu hóa khoảng cách thẳng đứng).
- Hồi quy Logistic (Ch 3.2): Siêu phẳng đóng vai trò ranh giới đẳng xác suất 50% qua hàm Sigmoid $\sigma(\mathbf{w}\mathbf{x}+b)$.
- Support Vector Machine (Ch 3.4): Siêu phẳng tối đa hóa khoảng cách trực giao an toàn $2/\|\mathbf{w}\|$.
- Mạng Nơ-ron (Ch 6): Xếp chồng nhiều siêu phẳng qua ma trận trọng số $\mathbf{W}\mathbf{x} + \mathbf{b}$ kết hợp hàm kích hoạt phi tuyến.
-
Tuyến 2: Trục Xác Suất & Cội Nguồn Các Hàm Mất Mát
- Định lý Bayes & Phân phối xác suất (Ch 2) $\implies$ Nguyên lý ước lượng MLE và MAP:
- Giả định Nhiễu Gauss $\implies$ Sinh ra hàm mất mát Bình phương MSE (Hồi quy Tuyến tính).
- Giả định Phân phối Bernoulli $\implies$ Sinh ra hàm mất mát Binary Cross-Entropy (Hồi quy Logistic & Nơ-ron).
- Tiên nghiệm Gauss $\mathbf{w} \sim \mathcal{N}$ $\implies$ Sinh ra Điều chuẩn $L_2$ (Ridge) (Ch 5.4).
- Tiên nghiệm Laplace $\implies$ Sinh ra Điều chuẩn $L_1$ (Lasso) với cơ chế ép trọng số về 0 (tính thưa).
- Biến ẩn Bayes & Hỗn hợp Gauss $\implies$ Mô hình GMM và thuật toán EM (Ch 9.2.4).
- Định lý Bayes & Phân phối xác suất (Ch 2) $\implies$ Nguyên lý ước lượng MLE và MAP:
-
Tuyến 3: Trục Giải Tích & Tối Ưu Hóa
- Đạo hàm riêng & Gradient $\nabla f$ (Ch 2.1.9) là hướng hàm số tăng nhanh nhất $\implies -\nabla f$ là hướng hàm số giảm nhanh nhất.
- Thuật toán Hạ dốc (Gradient Descent - Ch 4): $\mathbf{w} \leftarrow \mathbf{w} - \alpha \nabla \mathcal{L}$.
- Phả hệ tối ưu: $\text{Batch GD} \to \text{SGD (Lấy mẫu)} \to \text{Momentum (Quán tính)} \to \text{Adam (Thích ứng)}$.
- Quy tắc chuỗi (Chain Rule) áp dụng đệ quy ngược $\implies$ Thuật toán Lan truyền ngược (Backpropagation) trong Deep Learning (Ch 6).
-
Tuyến 4: Trục Chinh Phục Không Gian Phi Tuyến
- Giới hạn của siêu phẳng: Bất lực trước bài toán phi tuyến tính (cổng logic XOR).
- Hướng giải quyết 1 (Kernel Trick - Ch 3.4): Ánh xạ ngầm định qua tích vô hướng $k(\mathbf{x}, \mathbf{z}) = \langle \phi(\mathbf{x}), \phi(\mathbf{z}) \rangle \to$ Kernel RBF tương đương không gian Hilbert vô hạn chiều. Cùng chia sẻ bản chất này là Hồi quy Kernel (Ch 7.1) và Ước lượng mật độ KDE (Ch 9.1).
- Hướng giải quyết 2 (Deep Learning - Ch 6): Tự động học các biểu diễn phi tuyến bằng cách xếp chồng nhiều tầng ẩn với hàm kích hoạt phi tuyến (ReLU).
Ứng dụng trong ML/DL: bốn tuyến này nằm ở đâu trong một mô hình hiện đại?
- Tuyến 1 (tích vô hướng, siêu phẳng): một nơ-ron là một tích vô hướng $\mathbf{w}\mathbf{x} + b$ rồi qua hàm kích hoạt; điểm chú ý (attention) trong Transformer là tích vô hướng $\mathbf{q}\cdot\mathbf{k}_i/\sqrt{d}$; độ giống nhau giữa hai embedding là cosine, tức tích vô hướng đã chuẩn hoá. Chi tiết ở Module 2.
- Tuyến 2 (MLE/MAP): huấn luyện mô hình ngôn ngữ là cực đại hoá log-likelihood của token kế tiếp, tức cực tiểu hoá cross-entropy. Một hạng phạt $L_2$ trong hàm mục tiêu có thể được diễn giải như tiên nghiệm Gaussian của MAP; còn AdamW thực hiện weight decay tách rời, không hoàn toàn đồng nhất với việc cộng $L_2$ vào loss dưới một bộ tối ưu thích ứng. Module 3 và Module 13.
- Tuyến 3 (gradient): lan truyền ngược là quy tắc chuỗi được tổ chức trên đồ thị tính toán. ReLU/GELU tránh vùng bão hòa rộng của sigmoid; kết nối tắt tạo thêm đường gần đồng nhất để tín hiệu và gradient đi xuyên qua mạng sâu. AdamW thường được dùng cho Transformer, còn SGD + momentum vẫn rất mạnh trong thị giác. Module 4, 8 và 9.
- Tuyến 4 (phi tuyến): softmax attention có thể được nhìn như một bộ làm trơn/kernel có chuẩn hoá sau các phép chiếu $Q,K,V$ học được. Đây là phép tương tự hữu ích để hiểu weighted average, không phải đồng nhất hoàn toàn với kernel regression cổ điển. Mạng sâu cũng học biểu diễn trước khi đo tương đồng. Module 5, 10 và 11.
3. Bộ Ba Giải Phẫu Cốt Lõi (The Anatomy Triad)
Một cách rất hiệu quả để mổ xẻ các thuật toán học có giám sát trong sách là tách chúng thành 3 thành phần toán học:
$$\mathbf{\text{Thuật toán Học máy}} = \Big\langle \mathcal{H} \text{ (Không gian Giả thuyết)}, \quad \mathcal{L} \text{ (Hàm Mất mát / Chi phí)}, \quad \mathcal{O} \text{ (Thuật toán Tối ưu)} \Big\rangle$$
-
Không gian Giả thuyết $\mathcal{H}$ (Hypothesis Space):
Dạng toán học của hàm dự đoán $f(\mathbf{x})$.- Dạng tuyến tính: $f(\mathbf{x}) = \mathbf{w}\mathbf{x} + b$.
- Dạng phi tuyến qua phi tuyến hóa tham số: $f(\mathbf{x}) = \sigma(\mathbf{w}\mathbf{x} + b)$.
- Dạng hàm lồng nhau: $f(\mathbf{x}) = g_L(\mathbf{W}_L \dots g_1(\mathbf{W}_1\mathbf{x} + \mathbf{b}_1))$.
- Dạng phân hoạch từng mảnh: $f(\mathbf{x}) = \sum_{m} c_m \mathbb{I}(\mathbf{x} \in R_m)$ (Cây quyết định).
-
Hàm Mất mát / Chi phí $\mathcal{L}$ (Loss / Cost Function):
Thước đo toán học chấm điểm xem dự đoán $\hat{y} = f(\mathbf{x})$ lệch so với nhãn thật $y$ bao nhiêu.- Bài toán hồi quy: Sai số bình phương $(\hat{y} - y)^2$, sai số tuyệt đối $|\hat{y} - y|$.
- Bài toán phân loại: Binary Cross-Entropy, Hinge Loss $\max(0, 1 - y f(\mathbf{x}))$.
-
Quy trình Tối ưu hóa $\mathcal{O}$ (Optimization Routine):
Thuật toán tìm bộ tham số tối ưu $(\mathbf{w}^*, b^*)$ để cực tiểu hóa $\mathcal{L}$.- Nghiệm giải tích dạng đóng (Closed-form solution): Cho gradient bằng 0 ($\nabla \mathcal{L} = 0$) rồi biến đổi đại số ma trận (ví dụ: Normal Equation trong Hồi quy Tuyến tính).
- Nghiệm xấp xỉ số lặp (Iterative numerical methods): Gradient Descent, SGD, Adam, Newton-Raphson.
- Quy hoạch toàn phương (Quadratic Programming): SVM với bài toán đối ngẫu Lagrange.
- Tìm kiếm tham lam theo heuristic (Greedy search): Cây quyết định ID3/CART.
Bộ ba ấy chính là ba dòng mã PyTorch
model = torch.nn.Linear(D, 1) # H: không gian giả thuyết, f(x) = w·x + b
loss_fn = torch.nn.BCEWithLogitsLoss() # L: hàm mất mát = negative log-likelihood Bernoulli
opt = torch.optim.Adam(model.parameters(), 1e-3) # O: thuật toán tối ưu
Đổi dòng 1 thành nn.Sequential(nn.Linear(D, 64), nn.ReLU(), nn.Linear(64, 1)) là có mạng nơ-ron; đổi dòng 2 thành nn.MSELoss() là thành bài toán hồi quy; đổi dòng 3 thành SGD(momentum=0.9) là đổi cách đi xuống đáy. Ba dòng này nắm phần lõi của mô hình tham số, nhưng một hệ thống ML hoàn chỉnh còn phụ thuộc vào biểu diễn dữ liệu, cách lấy mẫu, metric và protocol đánh giá. Module 7 dùng bộ ba này để đối chiếu hơn 14 thuật toán.
4. Bảng Từ Điển Đối Chiếu Ký Hiệu Xuyên Suốt Cuốn Sách
Để không bị nhầm lẫn khi đọc giữa các chương, dưới đây là bảng quy chuẩn ký hiệu:
| Ký hiệu trong sách | Tên gọi toán học | Ý nghĩa hình học / bản chất | Xuất hiện ở các chương |
|---|---|---|---|
| $x, y, w, b$ | Đại lượng vô hướng (Scalar) | Một số thực đơn lẻ trên trục số $\mathbb{R}$ | Toàn bộ sách |
| $\mathbf{x} \in \mathbb{R}^D$ | Vectơ đặc trưng (Feature Vector) | Một điểm hoặc mũi tên trong không gian $D$-chiều | Ch 2, 3, 4, 5, 6, 7, 9 |
| $x^{(j)}$ | Phần tử thứ $j$ của vectơ $\mathbf{x}$ | Tọa độ trên trục thứ $j$ (thuộc tính thứ $j$ của vật thể) | Ch 2, 3, 5, 6 |
| $\mathbf{x}_i$ | Mẫu dữ liệu thứ $i$ trong tập dữ liệu | Điểm dữ liệu thứ $i$ trong tập mẫu $\{(\mathbf{x}_i, y_i)\}_{i=1}^N$ | Toàn bộ sách |
| $x_i^{(j)}$ | Đặc trưng thứ $j$ của mẫu thứ $i$ | Tọa độ chiều $j$ của điểm $i$ | Ch 2, 3, 4, 5 |
| $\mathbf{w} \in \mathbb{R}^D$ | Vectơ trọng số (Weight Vector) | Vectơ pháp tuyến vuông góc với siêu phẳng ranh giới | Ch 2, 3, 4, 6 |
| $b \in \mathbb{R}$ | Độ lệch (Bias / Intercept) | Mức dịch chuyển siêu phẳng so với gốc tọa độ | Ch 2, 3, 4, 6 |
| $\mathbf{w}\mathbf{x} = \sum_{j=1}^D w^{(j)} x^{(j)}$ | Tích vô hướng (Dot Product) | Phép chiếu $\mathbf{x}$ lên trục $\mathbf{w}$, nhân với độ dài $\|\mathbf{w}\|$ | Ch 2, 3, 4, 6, 9 |
| $\mathbf{w}\mathbf{x} + b = 0$ | Phương trình siêu phẳng (Hyperplane) | Ranh giới chia đôi không gian $D$ chiều thành 2 nửa | Ch 3 (SVM, Logistic), Ch 4 |
| $\|\mathbf{w}\|_2 = \sqrt{\sum (w^{(j)})^2}$ | Chuẩn $L_2$ (Độ dài Euclid) | Khoảng cách từ gốc tọa độ đến điểm $\mathbf{w}$ | Ch 2, 3 (SVM), Ch 5 ($L_2$ reg) |
| $\|\mathbf{w}\|_1 = \sum |w^{(j)}|$ | Chuẩn $L_1$ (Manhattan) | Tổng độ dài các cạnh đi dọc theo các trục | Ch 5 ($L_1$ Lasso) |
| $\nabla f(\mathbf{w})$ | Gradient của hàm số $f$ theo $\mathbf{w}$ | Vectơ chỉ hướng hàm số tăng nhanh nhất | Ch 2, 4 (GD), Ch 6 (Backprop) |
| $\mathbb{E}[X]$ | Kỳ vọng toán học (Expectation) | Trọng tâm phân phối xác suất (giá trị trung bình lý thuyết) | Ch 2, 5 (Bias-Variance), Ch 9 |
| $\mathcal{L}, \text{Cost}, J$ | Hàm mất mát / Hàm chi phí | Tổng sai số phạt cần cực tiểu hóa | Ch 3, 4, 6, 7 |
| $\sigma(z) = \frac{1}{1 + e^{-z}}$ | Hàm Sigmoid | "Bộ nén" trục số thực $(-\infty, +\infty)$ về khoảng xác suất $(0, 1)$ | Ch 3 (Logistic), Ch 6 (Activation) |
| $\alpha$ hoặc $\eta$ | Tốc độ học (Learning Rate) | Kích thước bước nhảy dọc theo hướng âm của Gradient | Ch 4 (GD), Ch 6, Ch 7 |
| $k(\mathbf{x}_i, \mathbf{x}_k)$ | Hàm Kernel (Hạt nhân) | Phép đo độ tương đồng ngầm định $\langle \phi(\mathbf{x}_i), \phi(\mathbf{x}_k) \rangle$ | Ch 3 (SVM), Ch 7, Ch 9 (KDE) |
5. Ba Trục Tư Duy Chính Khi Học Toán Machine Learning
Khi tiếp cận bất kỳ công thức toán nào trong các module tiếp theo, bạn chỉ cần đặt 3 câu hỏi:
-
Góc nhìn Hình học (Geometry):
- Đối tượng này là gì trong không gian? (Là một điểm, một vectơ mũi tên, một mặt phẳng, một mặt cầu, hay một đường cong?)
- Khoảng cách được đo như thế nào? (Khoảng cách thẳng đứng hay khoảng cách trực giao vuông góc?)
-
Góc nhìn Xác suất & Thống kê (Probability & Statistics):
- Ta đang giả định dữ liệu được sinh ra từ phân phối nào? (Phân phối Chuẩn Gaussian, phân phối nhị thức Bernoulli, hay phân phối Đa thức?)
- Hàm mục tiêu được rút ra từ nguyên lý MLE hay MAP?
-
Góc nhìn Tối ưu hóa (Optimization):
- Hàm này có đạo hàm liên tục không? Có lồi (Convex) không?
- Ta có thể tìm nghiệm trực tiếp bằng đại số ma trận hay phải bước từng bước dò dốc bằng Gradient Descent?
Trong các module tiếp theo, chúng ta sẽ lần lượt mổ xẻ tường tận từng góc nhìn này với các chứng minh trực quan, ví dụ số từng bước và mã nguồn Python minh họa.
6. Cách Dùng Cẩm Nang Cùng Sách Chính
Cẩm nang này không thay sách mà đi kèm sách: mỗi module giải thích vì sao công thức có dạng như vậy, còn sách chính cho bạn nghịch với nó. Có hai loại hộp đặc biệt:
- Phòng thí nghiệm M1–M13 (trong cẩm nang này): mọi con số trong mục Việc cần làm đều được tính thật bằng mô phỏng, không phải hình minh hoạ.
- M1 (Module 2): kéo $\mathbf{w}, b$ rồi bấm Tìm nghiệm SVM để thấy lề cực đại thật và các vectơ hỗ trợ.
- M2 (Module 3): xoay elip mất mát để thấy khi nào $L_1$ chạm đỉnh (thưa) và khi nào chạm cạnh (không thưa).
- M3 (Module 4): đọc giá trị và đạo hàm của 5 hàm mất mát tại cùng một lề $z$.
- M4 (Module 5): mô hình kernel ridge khớp thật, có nhiễu, có lưới kiểm tra để đo quá khớp/dưới khớp.
- Ô "Ứng dụng trong ML/DL" và các dòng "Xem phòng … sách chính": nối từng công thức tới nơi nó xuất hiện trong thực tế (attention, weight decay, cross-entropy của LLM, ResNet…) và tới 32 phòng thí nghiệm của sách chính — ví dụ phòng 10b cho GD/Momentum/Adam chạy đua trên bề mặt mất mát 3D thật.
7. Bản Đồ Mở Rộng: Từ Một Tích Vô Hướng Đến Transformer
Phần mở rộng của phiên bản này
Module 08–10 bổ sung phần còn thiếu giữa “backprop trên một nơ-ron” và một mạng sâu thực tế: Jacobian/VJP, autograd, khởi tạo, normalization, residual, RNN/LSTM và dòng gradient theo thời gian.
Module 11–13 giải phẫu Transformer từ tensor $X$ đến $Q,K,V$, causal mask, multi-head, RoPE, RMSNorm, GQA/MQA, KV cache, objective tự hồi quy, perplexity và các chiến lược giải mã.
02Module 2: Đại Số Tuyến Tính và Bản Chất Hình Học Của Machine Learning
(Linear Algebra and the Geometry of Machine Learning)
1. Vectơ và Tích Vô Hướng: Cội Nguồn Của Mọi Thuật Toán Tuyến Tính
Trong Chương 2, cuốn sách định nghĩa: $$\mathbf{w}\mathbf{x} \stackrel{\text{def}}{=} \sum_{j=1}^D w^{(j)} x^{(j)}$$ Nhưng tại sao phép toán đơn giản này lại xuất hiện ở khắp mọi nơi: từ Hồi quy Tuyến tính $\mathbf{w}\mathbf{x} + b$, Hồi quy Logistic $\sigma(\mathbf{w}\mathbf{x} + b)$, SVM $y(\mathbf{w}\mathbf{x} - b) \ge 1$, cho tới Mạng nơ-ron $\mathbf{W}\mathbf{x} + \mathbf{b}$?
1.1. Bản chất Hình học: Phép Chiếu và Độ Tương Đồng
Ngoài định nghĩa đại số ở trên, tích vô hướng còn có định nghĩa hình học kinh điển:
$$\mathbf{w}\mathbf{x} = \|\mathbf{w}\| \cdot \|\mathbf{x}\| \cdot \cos \theta$$
Trong đó:
- $\|\mathbf{w}\| = \sqrt{\sum (w^{(j)})^2}$ là độ dài (chuẩn $L_2$) của vectơ $\mathbf{w}$.
- $\|\mathbf{x}\|$ là độ dài của vectơ $\mathbf{x}$.
- $\theta$ là góc kẹp giữa hai vectơ.
Từ công thức này, ta suy ra Độ dài hình chiếu trực giao của vectơ dữ liệu $\mathbf{x}$ lên phương của vectơ trọng số $\mathbf{w}$:
$$\text{proj}_{\mathbf{w}}(\mathbf{x}) = \|\mathbf{x}\| \cos \theta = \frac{\mathbf{w}\mathbf{x}}{\|\mathbf{w}\|}$$
Ý nghĩa trực giác sống còn: 1. Nếu $\mathbf{w}$ và $\mathbf{x}$ cùng hướng ($\theta \approx 0^\circ$): $\cos \theta \approx 1 \implies \mathbf{w}\mathbf{x} > 0$ và đạt giá trị dương rất lớn. Điều này biểu thị $\mathbf{x}$ rất tương đồng và phù hợp với tiêu chí mà $\mathbf{w}$ tìm kiếm. 2. Nếu $\mathbf{w}$ và $\mathbf{x}$ vuông góc trực giao ($\theta = 90^\circ$): $\cos \theta = 0 \implies \mathbf{w}\mathbf{x} = 0$. Riêng đối với phép chấm điểm theo hướng $\mathbf{w}$, thành phần của $\mathbf{x}$ trên hướng đó bằng 0. Trực giao hình học không đồng nghĩa với độc lập thống kê. 3. Nếu $\mathbf{w}$ và $\mathbf{x}$ ngược hướng ($\theta \approx 180^\circ$): $\cos \theta \approx -1 \implies \mathbf{w}\mathbf{x} < 0$. Thành phần chiếu của mẫu đi ngược hướng $\mathbf{w}$, vì vậy score tuyến tính mang giá trị âm.
Do đó, tích vô hướng là một điểm số về mức thẳng hàng giữa $\mathbf{x}$ và hướng $\mathbf{w}$. Nó phụ thuộc cả góc lẫn độ dài nên không phải metric theo nghĩa chặt; sau khi chuẩn hoá hai vectơ, nó trở thành cosine similarity.
Ví dụ số: $\mathbf{w} = [3, 4]^T$, $\mathbf{x} = [2, 5]^T$. Tích vô hướng $\mathbf{w}\mathbf{x} = 3\cdot 2 + 4 \cdot 5 = 26$; $\|\mathbf{w}\| = 5$, $\|\mathbf{x}\| = \sqrt{29} \approx 5{,}39$. Hình chiếu của $\mathbf{x}$ lên $\mathbf{w}$ dài $26/5 = 5{,}2$; $\cos\theta = 26/(5 \cdot 5{,}39) \approx 0{,}965$ nên $\theta \approx 15^\circ$: hai vectơ gần như cùng hướng, $\mathbf{x}$ "khớp mẫu" mà $\mathbf{w}$ đang tìm. Nếu thay $\mathbf{x} = [4, -3]^T$ thì $\mathbf{w}\mathbf{x} = 12 - 12 = 0$: vuông góc; riêng qua score $\mathbf{w}^T\mathbf{x}$, điểm này và gốc tọa độ đều cho giá trị 0. Các hướng trực giao với $\mathbf{w}$ bị phép chiếu một chiều này bỏ qua.
Ứng dụng trong ML/DL: tích vô hướng ở khắp nơi
- Một nơ-ron là một máy so mẫu: $\mathbf{w}$ là "mẫu" mà nơ-ron muốn thấy, $\mathbf{w}\mathbf{x}$ lớn khi đầu vào giống mẫu. Bộ lọc tích chập trong CNN cũng chỉ là tích vô hướng giữa một mẫu $3\times3$ và từng mảnh ảnh (phòng 16 sách chính: bộ lọc Sobel "thích" cạnh dọc).
- Attention trong Transformer: điểm chú ý $\text{score}(\mathbf{q}, \mathbf{k}_i) = \mathbf{q}\cdot\mathbf{k}_i/\sqrt{d}$ chấm mức phù hợp giữa truy vấn và từng khoá; softmax biến các điểm số thành trọng số chú ý (phòng 19). Module 5 dùng phép tương tự với kernel smoother để giải thích phép trung bình có trọng số, đồng thời chỉ rõ các điểm khác với kernel regression cổ điển.
- Embedding: độ giống nghĩa giữa hai từ/câu là $\cos\theta = \dfrac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\|\mathbf{v}\|}$, tức tích vô hướng sau khi chuẩn hoá độ dài; phép "king − man + woman ≈ queen" của word2vec được kiểm tra bằng chính cosine này (phòng 25).
- Vì sao feature scaling thường hữu ích (Ch 5.1.1): trong các mô hình dựa trên khoảng cách, điều chuẩn hoặc tối ưu bằng gradient, đặc trưng có thang đo lớn có thể chi phối hình học và làm bài toán khó tối ưu. $k$-NN, SVM, PCA, $k$-Means và mạng nơ-ron thường hưởng lợi rõ rệt; với OLS không điều chuẩn, đổi đơn vị chủ yếu đổi hệ số chứ không nhất thiết đổi dự đoán. Cây quyết định hầu như không cần scaling vì chỉ so từng đặc trưng với một ngưỡng.
2. Siêu Phẳng (Hyperplane): Ranh Giới Quyết Định Tuyến Tính
Phương trình cơ bản nhất trong học máy có giám sát là:
$$\mathbf{w}\mathbf{x} + b = 0$$
Tập hợp tất cả các điểm $\mathbf{x} \in \mathbb{R}^D$ thỏa mãn phương trình này tạo thành một Siêu phẳng (Hyperplane):
- Khi $D = 1$: Là một điểm trên trục số ($w x + b = 0 \implies x = -b/w$).
- Khi $D = 2$: Là một đường thẳng trên mặt phẳng ($w_1 x^{(1)} + w_2 x^{(2)} + b = 0$).
- Khi $D = 3$: Là một mặt phẳng 2D trong không gian 3 chiều ($w_1 x^{(1)} + w_2 x^{(2)} + w_3 x^{(3)} + b = 0$).
- Khi $D > 3$: Là một siêu phẳng $(D-1)$ chiều chia không gian $D$ chiều thành hai nửa không gian riêng biệt.
2.1. Chứng minh Toán học: Tại sao $\mathbf{w}$ luôn vuông góc với Siêu phẳng?
Nhiều bạn đọc sách thường thắc mắc: "Tại sao vectơ trọng số $\mathbf{w}$ lại được gọi là vectơ pháp tuyến (normal vector) của siêu phẳng?"
Chứng minh: Lấy hai điểm bất kỳ $\mathbf{x}_A$ và $\mathbf{x}_B$ cùng nằm trên siêu phẳng. Theo định nghĩa: $$\mathbf{w}\mathbf{x}_A + b = 0 \quad \text{và} \quad \mathbf{w}\mathbf{x}_B + b = 0$$
Lấy phương trình thứ nhất trừ phương trình thứ hai: $$(\mathbf{w}\mathbf{x}_A + b) - (\mathbf{w}\mathbf{x}_B + b) = 0$$ $$\iff \mathbf{w}(\mathbf{x}_A - \mathbf{x}_B) = 0$$
Vì $\mathbf{x}_A$ và $\mathbf{x}_B$ là hai điểm nằm trên siêu phẳng, nên vectơ hiệu $(\mathbf{x}_A - \mathbf{x}_B)$ chính là một vectơ nằm hoàn toàn dọc theo bề mặt của siêu phẳng. Mà tích vô hướng của $\mathbf{w}$ với vectơ này bằng 0 ($\mathbf{w} \cdot (\mathbf{x}_A - \mathbf{x}_B) = 0$), chứng tỏ:
$$\mathbf{w} \perp \text{Siêu phẳng}$$
Kết luận: Vectơ trọng số $\mathbf{w}$ luôn là mũi tên chỉ thẳng vuông góc ra khỏi siêu phẳng, hướng về phía "nửa không gian dương" $(\mathbf{w}\mathbf{x} + b > 0)$.
Nói cách khác, $\mathbf{w}$ là hướng nhìn của mô hình: nó chỉ đo dữ liệu chiếu lên hướng này bao nhiêu, còn mọi dịch chuyển vuông góc với $\mathbf{w}$ (trượt dọc theo siêu phẳng) đều vô hình với mô hình. Một mô hình tuyến tính trong $D$ chiều thực chất chỉ nhìn thế giới qua một trục duy nhất — đó vừa là sức mạnh (đơn giản, dễ giải thích) vừa là giới hạn (Module 5: bài toán XOR).
2.2. Vai trò Hình học của Hệ số Tự do (Bias $b$)
Nếu $b = 0$, phương trình trở thành $\mathbf{w}\mathbf{0} + 0 = 0$, nghĩa là siêu phẳng bắt buộc phải đi qua gốc tọa độ. Khi $b \ne 0$, siêu phẳng được tịnh tiến dịch chuyển song song ra xa gốc tọa độ.
Khoảng cách hình học từ gốc tọa độ $\mathbf{0}$ đến siêu phẳng là:
$$\text{dist}(\mathbf{0}, \text{Hyperplane}) = \frac{|b|}{\|\mathbf{w}\|}$$
2.3. Khoảng Cách Có Dấu từ Điểm Bất Kỳ Đến Siêu Phẳng
Cho một điểm dữ liệu $\mathbf{x}_0$ bất kỳ trong không gian, khoảng cách đại số có dấu từ $\mathbf{x}_0$ đến siêu phẳng $\mathbf{w}\mathbf{x} + b = 0$ được tính bằng công thức:
$$d(\mathbf{x}_0) = \frac{\mathbf{w}\mathbf{x}_0 + b}{\|\mathbf{w}\|}$$
- Nếu $d(\mathbf{x}_0) > 0$: Điểm $\mathbf{x}_0$ nằm ở phía mà $\mathbf{w}$ đang chỉ vào (nửa không gian dương $\mathcal{H}^+$).
- Nếu $d(\mathbf{x}_0) < 0$: Điểm $\mathbf{x}_0$ nằm ở phía ngược lại (nửa không gian âm $\mathcal{H}^-$).
- Nếu $d(\mathbf{x}_0) = 0$: Điểm $\mathbf{x}_0$ nằm chính xác trên siêu phẳng.
- Khoảng cách hình học thực tế (độ dài) là giá trị tuyệt đối $|d(\mathbf{x}_0)|$.
3. So Sánh Hình Học: Hồi Quy Tuyến Tính vs. SVM vs. Hồi Quy Logistic
Cả ba mô hình này đều sử dụng biểu thức tuyến tính $\mathbf{w}\mathbf{x} + b$, nhưng cách chúng hiểu và sử dụng siêu phẳng này hoàn toàn khác nhau về mặt hình học:
| Tiêu chí | Hồi quy Tuyến tính (Linear Regression) | Máy Vectơ Hỗ trợ (SVM) | Hồi quy Logistic (Logistic Regression) |
|---|---|---|---|
| Không gian bài toán | Không gian $(D + 1)$ chiều (gồm $D$ chiều đặc trưng $\mathbf{x}$ + $1$ trục giá trị thực $y$) | Không gian $D$ chiều đặc trưng $\mathbf{x}$ (nhãn $y \in \{-1, +1\}$ là màu sắc/dấu) | Không gian $D$ chiều đặc trưng $\mathbf{x}$ (nhãn $y \in \{0, 1\}$) |
| Vai trò của siêu phẳng | Là mặt phẳng hàm số xấp xỉ dữ liệu: $\hat{y} = \mathbf{w}\mathbf{x} + b$ | Là ranh giới phân tách (Decision Boundary) ngăn giữa 2 lớp | Là ranh giới đẳng xác suất 50%: $P(y=1 \mid \mathbf{x}) = 0.5$ |
| Khoảng cách được tối ưu | Khoảng cách thẳng đứng (dọc theo trục $y$): $\|y_i - \hat{y}_i\|$ | Khoảng cách trực giao vuông góc tới điểm dữ liệu gần nhất: $\frac{1}{\|\mathbf{w}\|}$ | Khoảng cách tương đối phản ánh độ tự tin log-odds |
| Mục tiêu hình học | Siêu phẳng nằm càng gần tất cả các điểm càng tốt | Siêu phẳng nằm càng xa các điểm gần nó nhất càng tốt (Max Margin) | Đẩy các điểm dương về sâu nửa dương, các điểm âm về sâu nửa âm |
Trực quan hóa Sự Khác Biệt về Đo Khoảng Cách:
Một cách nhớ: hồi quy tuyến tính sống trong không gian có thêm trục $y$, nên "sai số" là đoạn thẳng đứng; SVM và logistic sống trong không gian đặc trưng thuần, nên thứ duy nhất có nghĩa là khoảng cách vuông góc tới ranh giới $d(\mathbf{x}) = (\mathbf{w}\mathbf{x}+b)/\|\mathbf{w}\|$ (mục 2.3). SVM ép khoảng cách đó lớn hơn một ngưỡng; logistic đổi nó thành xác suất qua sigmoid. Với $\mathbf{w}$ càng dài, sigmoid càng dốc: cùng một khoảng cách hình học nhưng mô hình "tự tin" hơn — đó là lý do điều chuẩn $L_2$ (Module 3) làm mềm xác suất dự đoán.
Siêu phẳng, vectơ pháp tuyến và lề — tìm nghiệm SVM thật
Kéo w₁, w₂, b hoặc bấm nút giảiViệc cần làm: ① Bấm ÷2 hai lần: đường thẳng không đổi nhưng dải lề nở từ 1,28 lên 5,12 — rồi 6 điểm lọt vào dải (viền vàng), z_min tụt xuống 0,65 và hinge loss = 0,133. Dải rộng mà vi phạm ràng buộc thì vô nghĩa. ② Bấm ⚡ Tìm nghiệm SVM: w = (0,36, 0,36), b = −0,27, ‖w‖ = 0,51, lề = 3,89 và 5 điểm chạm đúng mép lề (z = 1) — đó là các vectơ hỗ trợ. Đây là ‖w‖ nhỏ nhất trong mọi (w, b) có z_min ≥ 1. ③ Từ nghiệm đó bấm ×2: cùng một siêu phẳng, z_min = 2, lề chỉ còn 1,94 — minh hoạ tự do tỷ lệ ở mục 4.2: SVM phải cố định z_min = 1 thì lề 2/‖w‖ mới có nghĩa. So sánh với phòng 01 (kéo điểm) và phòng 01b (3D) trong sách chính.
4. Giải Mã Toán Học Đằng Sau Lề (Margin) Của SVM
Trong Chương 3, cuốn sách đưa ra công thức tối ưu hóa của SVM: $$\min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 \quad \text{s.t.} \quad y_i(\mathbf{w}\mathbf{x}_i - b) \ge 1$$ (Lưu ý: trong tài liệu gốc của Burkov, ông dùng dấu $- b$; thông thường trong đại số ta viết $+ b$, bản chất toán học là như nhau khi đổi dấu biến).
Tại sao tối đa hóa khoảng cách an toàn (margin) lại tương đương với cực tiểu hóa $\frac{1}{2}\|\mathbf{w}\|^2$?
4.1. Bước 1: Khoảng cách hình học tới siêu phẳng
Nhãn phân loại của SVM là $y_i \in \{-1, +1\}$. Khoảng cách hình học trực giao từ điểm $\mathbf{x}_i$ tới siêu phẳng phân tách $\mathbf{w}\mathbf{x} + b = 0$ là:
$$\gamma_i = y_i \cdot \frac{\mathbf{w}\mathbf{x}_i + b}{\|\mathbf{w}\|}$$
Nếu phân loại đúng, $y_i$ và $(\mathbf{w}\mathbf{x}_i + b)$ cùng dấu nên $\gamma_i > 0$.
4.2. Bước 2: Tự do tỷ lệ (Scale Invariance)
Nếu ta nhân cả $\mathbf{w}$ và $b$ với một số dương $c > 0$, phương trình siêu phẳng không hề thay đổi: $$(c\mathbf{w})\mathbf{x} + (cb) = 0 \iff \mathbf{w}\mathbf{x} + b = 0$$ Khoảng cách $\gamma_i$ cũng không đổi: $$\frac{c\mathbf{w}\mathbf{x}_i + cb}{\|c\mathbf{w}\|} = \frac{c(\mathbf{w}\mathbf{x}_i + b)}{c\|\mathbf{w}\|} = \frac{\mathbf{w}\mathbf{x}_i + b}{\|\mathbf{w}\|}$$
Do có sự tự do về tỷ lệ này, ta hoàn toàn có quyền chọn tỷ lệ cho $(\mathbf{w}, b)$ sao cho đối với những điểm nằm gần siêu phẳng nhất (gọi là các Vectơ Hỗ trợ - Support Vectors), giá trị tuyệt đối của biểu thức đại số bằng đúng $1$:
$$\min_{i=1 \dots N} |\mathbf{w}\mathbf{x}_i + b| = 1$$
Khi đó, đối với mọi điểm trong tập dữ liệu: $$y_i(\mathbf{w}\mathbf{x}_i + b) \ge 1, \quad \forall i = 1, \dots, N$$
4.3. Bước 3: Xác định độ rộng của Lề (Margin)
Khoảng cách từ siêu phẳng ranh giới đến điểm gần nhất của lớp $+1$ (nơi $\mathbf{w}\mathbf{x} + b = 1$) là: $$d_+ = \frac{1}{\|\mathbf{w}\|}$$
Khoảng cách từ siêu phẳng ranh giới đến điểm gần nhất của lớp $-1$ (nơi $\mathbf{w}\mathbf{x} + b = -1$) là: $$d_- = \frac{1}{\|\mathbf{w}\|}$$
Tổng bề rộng của dải phân cách an toàn (Margin) là:
$$\text{Margin} = d_+ + d_- = \frac{2}{\|\mathbf{w}\|}$$
Để ranh giới phân tách an toàn và chống nhiễu tốt nhất, ta cần cực đại hóa Margin:
$$\max_{\mathbf{w}, b} \frac{2}{\|\mathbf{w}\|} \iff \min_{\mathbf{w}, b} \frac{\|\mathbf{w}\|}{2} \iff \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2$$
Phát hiện thú vị:
Phép bình phương $\|\mathbf{w}\|^2 = \mathbf{w}^T\mathbf{w}$ và hệ số $\frac{1}{2}$ được đưa vào nhằm mục đích kỹ thuật: khi tính đạo hàm $\nabla_{\mathbf{w}} \left(\frac{1}{2} \|\mathbf{w}\|^2\right) = \mathbf{w}$, số $2$ ở số mũ và số $\frac{1}{2}$ triệt tiêu lẫn nhau rất đẹp, biến bài toán thành Quy hoạch Toàn phương Lồi (Convex Quadratic Programming). Vì bài toán lồi, mọi cực tiểu cục bộ đều là cực tiểu toàn cục; trong hard-margin SVM chuẩn, phần $\mathbf{w}$ thường là duy nhất, còn $b$ có thể không duy nhất ở một số cấu hình suy biến.
Kiểm chứng bằng phòng thí nghiệm M1 (ngay dưới): với 10 điểm trong lab, nghiệm lề cực đại là $\mathbf{w} = (0{,}364;\ 0{,}364)$, $b = -0{,}273$, $\|\mathbf{w}\| = 0{,}514$, lề $= 3{,}89$ và có 5 điểm chạm đúng mép lề ($z = 1$). Nhân $(\mathbf{w}, b)$ với 2 thì siêu phẳng vẫn y nguyên nhưng $\|\mathbf{w}\|$ tăng gấp đôi và dải $2/\|\mathbf{w}\|$ co còn 1,94; chia đôi hai lần thì dải nở tới 5,12 nhưng 6 điểm lọt vào trong dải. Vì thế SVM phải khoá tỷ lệ bằng $\min_i |\mathbf{w}\mathbf{x}_i + b| = 1$ trước, rồi mới so sánh $\|\mathbf{w}\|$ giữa các ứng viên.
Ứng dụng: lề mềm, tham số C và hinge loss
Dữ liệu thật hiếm khi tách được hoàn toàn, nên SVM thực dụng (Ch 3.4.1) giải bài toán
$$\min_{\mathbf{w}, b}\ \frac{1}{2}\|\mathbf{w}\|^2 + C \sum_{i=1}^N \max\big(0,\ 1 - y_i(\mathbf{w}\mathbf{x}_i + b)\big)$$
Số hạng thứ hai là hinge loss (Module 4): phạt tuyến tính mọi điểm lọt vào dải lề hoặc sang nhầm phía. $C$ lớn là ép tách bằng mọi giá (lề hẹp, dễ quá khớp); $C$ nhỏ là chấp nhận vài điểm sai để có lề rộng. Đây chính là tham số SVC(C=…) trong scikit-learn, và $C$ đóng vai $1/\lambda$ của điều chuẩn ở Module 3: cùng một khuôn "mất mát + phạt độ phức tạp" xuất hiện lần thứ hai. Kéo tham số này trong phòng 01 sách chính để thấy lề đổi khi $C$ đổi.
4.4. Vì Sao Chỉ Vài Điểm Quyết Định Siêu Phẳng? Nhân Tử Lagrange và Bài Toán Đối Ngẫu
Sách (Ch 3.4.1) nêu bài toán đối ngẫu mà không dẫn ra; đây là mắt xích nối lề (mục này), vectơ hỗ trợ (Module 4) và thủ thuật kernel (Module 5), nên ta làm rõ trong bốn bước.
Bước 1 — Lagrangian. Gắn mỗi ràng buộc $y_i(\mathbf{w}\mathbf{x}_i + b) \ge 1$ với một nhân tử $\alpha_i \ge 0$:
$$\mathcal{L}(\mathbf{w}, b, \boldsymbol{\alpha}) = \frac12\|\mathbf{w}\|^2 - \sum_{i=1}^N \alpha_i\big[y_i(\mathbf{w}\mathbf{x}_i + b) - 1\big]$$
Bước 2 — Cho đạo hàm theo $\mathbf{w}$ và $b$ bằng 0:
$$\frac{\partial\mathcal{L}}{\partial\mathbf{w}} = \mathbf{w} - \sum_i \alpha_i y_i \mathbf{x}_i = \mathbf{0} \implies \boxed{\mathbf{w} = \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i}, \qquad \frac{\partial\mathcal{L}}{\partial b} = -\sum_i \alpha_i y_i = 0$$
Kết quả đầu tiên đã nói lên tất cả: vectơ pháp tuyến là tổ hợp tuyến tính của các điểm dữ liệu, với hệ số $\alpha_i y_i$.
Bước 3 — Thế ngược vào $\mathcal{L}$ (dùng $\sum\alpha_i y_i = 0$ để triệt tiêu số hạng chứa $b$), ta được bài toán đối ngẫu chỉ còn ẩn $\boldsymbol{\alpha}$:
$$\max_{\boldsymbol{\alpha} \ge 0}\ \sum_{i=1}^N \alpha_i - \frac12\sum_{i=1}^N\sum_{k=1}^N \alpha_i\alpha_k\, y_i y_k\, (\mathbf{x}_i\cdot\mathbf{x}_k) \quad\text{s.t.}\quad \sum_i \alpha_i y_i = 0$$
và hàm dự đoán $f(\mathbf{x}) = \mathbf{w}\mathbf{x} + b = \sum_i \alpha_i y_i (\mathbf{x}_i\cdot\mathbf{x}) + b$. Dữ liệu chỉ còn xuất hiện qua tích vô hướng $\mathbf{x}_i\cdot\mathbf{x}_k$ — cánh cửa để Module 5 thay nó bằng $k(\mathbf{x}_i, \mathbf{x}_k)$.
Bước 4 — Điều kiện KKT (bù trừ): tại nghiệm tối ưu, $\alpha_i\big[y_i(\mathbf{w}\mathbf{x}_i + b) - 1\big] = 0$ với mọi $i$. Vậy hoặc $\alpha_i = 0$, hoặc $y_i(\mathbf{w}\mathbf{x}_i + b) = 1$ (điểm nằm đúng mép lề). Điểm nằm xa lề bắt buộc có $\alpha_i = 0$ và biến mất khỏi $\mathbf{w}$; chỉ các điểm chạm lề — vectơ hỗ trợ — còn lại trong tổng. Đó là lý do trong phòng thí nghiệm M1 nghiệm có đúng 5 điểm chạm mép lề, và trong phòng 01 sách chính kéo một điểm ở xa thì siêu phẳng không nhúc nhích. Với lề mềm, ràng buộc thêm thành $0 \le \alpha_i \le C$: điểm vi phạm lề bị "kẹp" ở $\alpha_i = C$, khớp với đạo hàm $-1$ của hinge loss ở Module 4.
5. Ví Dụ Số Tính Toán Cụ Thể Từng Bước (2D Numerical Walkthrough)
Để củng cố lý thuyết, xét bài toán phân loại 2 chiều ($D=2$): Cho vectơ trọng số $\mathbf{w} = [3, 4]^T$ và hệ số tự do $b = -6$.
-
Độ dài của $\mathbf{w}$: $$\|\mathbf{w}\| = \sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5$$
-
Phương trình ranh giới quyết định: $$3 x^{(1)} + 4 x^{(2)} - 6 = 0$$
-
Xét điểm $\mathbf{x}_A = [2, 5]^T$ (Nhãn thực tế $y_A = +1$):
- Giá trị đại số: $$\mathbf{w}\mathbf{x}_A + b = 3(2) + 4(5) - 6 = 6 + 20 - 6 = 20$$
- Khoảng cách hình học có dấu: $$d(\mathbf{x}_A) = \frac{20}{\|\mathbf{w}\|} = \frac{20}{5} = +4.0$$
- Dự đoán Hồi quy Logistic: $$P(y=1 \mid \mathbf{x}_A) = \sigma(20) = \frac{1}{1 + e^{-20}} \approx 0.999999998$$ (Mô hình cực kỳ tự tin $\mathbf{x}_A$ thuộc lớp 1 vì nó nằm sâu trong nửa dương một đoạn cách ranh giới 4 đơn vị).
-
Xét điểm $\mathbf{x}_B = [0, 1]^T$ (Nhãn thực tế $y_B = -1$):
- Giá trị đại số: $$\mathbf{w}\mathbf{x}_B + b = 3(0) + 4(1) - 6 = -2$$
- Khoảng cách hình học có dấu: $$d(\mathbf{x}_B) = \frac{-2}{5} = -0.4$$
- Điểm này nằm ở nửa không gian âm, cách ranh giới $0.4$ đơn vị.
- Với SVM: $y_B(\mathbf{w}\mathbf{x}_B + b) = (-1) \cdot (-2) = 2 \ge 1 \implies$ Thỏa mãn điều kiện lề an toàn!
- Dự đoán Hồi quy Logistic: $P(y=1 \mid \mathbf{x}_B) = \sigma(-2) \approx 0{,}119$. Mô hình nghiêng về lớp 0 nhưng chưa chắc chắn — đúng với việc điểm chỉ cách ranh giới 0,4 đơn vị, khác hẳn $\mathbf{x}_A$ ở sâu 4 đơn vị với xác suất $\approx 1$.
-
Cùng một siêu phẳng, ba cách đọc: với $\mathbf{x}_A$, hồi quy tuyến tính (nếu $y$ là số thực) sẽ dự đoán giá trị $20$; SVM chỉ nhìn dấu và lề $z = 20 \ge 1$; logistic đổi $20$ thành xác suất $0{,}99999999$. Ba thuật toán, một phép tính $\mathbf{w}\mathbf{x} + b$ — chỉ khác ở hàm mất mát đặt lên kết quả đó (Module 3 và 4).
03Module 3: Xác Suất Thống Kê & Cội Nguồn Của Các Hàm Mất Mát
(Probabilistic Foundations & The Origins of Loss Functions)
1. Tại Sao Xác Suất Là Trái Tim Của Machine Learning?
Khi bắt đầu học ML, nhiều người thường nhìn các hàm mất mát như:
- Sai số toàn phương trung bình (MSE): $\frac{1}{N}\sum (y_i - \hat{y}_i)^2$
- Mất mát Cross-Entropy: $-\sum [y_i \ln \hat{y}_i + (1-y_i) \ln(1-\hat{y}_i)]$
- Số hạng phạt điều chuẩn $L_2$: $\lambda \|\mathbf{w}\|_2^2$
- Số hạng phạt điều chuẩn $L_1$: $\lambda \|\mathbf{w}\|_1$
như những công thức do các nhà khoa học "tự nghĩ ra theo cảm tính".
Thực tế hoàn toàn ngược lại:
Tất cả các hàm mất mát và kỹ thuật điều chuẩn này đều có nguồn gốc toán học chặt chẽ bắt nguồn từ Lý thuyết Xác suất, cụ thể là hai nguyên lý nền tảng:
- Ước lượng Hợp lý Cực đại (Maximum Likelihood Estimation - MLE)
- Ước lượng Cực đại Hậu nghiệm (Maximum A Posteriori - MAP)
2. Từ Định Lý Bayes Đến MLE và MAP
Trong Chương 2.4 và 2.5 của sách, định lý Bayes được phát biểu:
$$P(\boldsymbol{\theta} \mid \mathcal{D}) = \frac{P(\mathcal{D} \mid \boldsymbol{\theta}) \cdot P(\boldsymbol{\theta})}{P(\mathcal{D})}$$
Trong đó:
- $\mathcal{D} = \{(\mathbf{x}_i, y_i)\}_{i=1}^N$ là tập dữ liệu quan sát được.
- $\boldsymbol{\theta} = (\mathbf{w}, b)$ là các tham số của mô hình cần tìm.
- $P(\boldsymbol{\theta})$ là Xác suất Tiên nghiệm (Prior): Niềm tin ban đầu của ta về tham số trước khi nhìn thấy dữ liệu.
- $P(\mathcal{D} \mid \boldsymbol{\theta})$ là Hàm Hợp lý (Likelihood): Khả năng dữ liệu $\mathcal{D}$ xuất hiện nếu mô hình có tham số $\boldsymbol{\theta}$.
- $P(\boldsymbol{\theta} \mid \mathcal{D})$ là Xác suất Hậu nghiệm (Posterior): Niềm tin về tham số sau khi đã quan sát dữ liệu.
- $P(\mathcal{D})$ là hằng số chuẩn hóa (không phụ thuộc vào $\boldsymbol{\theta}$).
Hai câu hỏi tương ứng với hai nguyên lý:
- MLE hỏi: "Bộ tham số nào làm dữ liệu đã thấy trở nên ít bất ngờ nhất?" — chỉ nhìn $P(\mathcal{D}\mid\boldsymbol{\theta})$ và không đưa phân phối tiên nghiệm trên $\boldsymbol{\theta}$ vào hàm mục tiêu.
- MAP hỏi thêm: "… và bộ tham số đó có hợp lý từ trước không?" — nhân thêm $P(\boldsymbol{\theta})$. Lấy log thì phép nhân thành phép cộng: hàm mất mát = $-\ln P(\mathcal{D}\mid\boldsymbol{\theta})$, số hạng điều chuẩn = $-\ln P(\boldsymbol{\theta})$. Toàn bộ sơ đồ dưới đây chỉ là các cách chọn hai phân phối ấy.
3. Chứng Minh Tường Minh 1: Tại Sao Hồi Quy Tuyến Tính Dùng MSE?
Trong Chương 3.1.2, cuốn sách nói rằng hồi quy tuyến tính cực tiểu hóa tổng bình phương sai số: $$\min_{\mathbf{w}, b} \frac{1}{N} \sum_{i=1}^N (y_i - (\mathbf{w}\mathbf{x}_i + b))^2$$ Tại sao lại là bình phương $(y - \hat{y})^2$ mà không phải là bậc 4, bậc 6 hay giá trị tuyệt đối?
3.1. Thiết lập Giả định Xác suất
Dữ liệu thực thường chứa sai số đo, biến chưa quan sát hoặc biến thiên ngẫu nhiên. Ta gom phần chưa được mô hình tuyến tính giải thích vào nhiễu $\epsilon_i$:
$$y_i = \mathbf{w}\mathbf{x}_i + b + \epsilon_i$$
Giả sử nhiễu $\epsilon_i$ là các biến ngẫu nhiên độc lập cùng phân phối (i.i.d.), tuân theo Phân phối Chuẩn Gaussian với kỳ vọng bằng 0 và phương sai $\sigma^2$: $$\epsilon_i \sim \mathcal{N}(0, \sigma^2)$$
Khi đó, có điều kiện khi biết $\mathbf{x}_i$, biến mục tiêu $y_i$ sẽ tuân theo phân phối chuẩn với tâm là $\mathbf{w}\mathbf{x}_i + b$: $$y_i \mid \mathbf{x}_i; \mathbf{w}, b \sim \mathcal{N}(\mathbf{w}\mathbf{x}_i + b, \sigma^2)$$
Hàm mật độ xác suất (PDF) của từng điểm dữ liệu là: $$P(y_i \mid \mathbf{x}_i; \mathbf{w}, b) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( - \frac{(y_i - (\mathbf{w}\mathbf{x}_i + b))^2}{2\sigma^2} \right)$$
3.2. Thiết lập Hàm Hợp Lý (Likelihood)
Vì các mẫu dữ liệu độc lập với nhau, xác suất đồng thời để toàn bộ tập dữ liệu $N$ mẫu xuất hiện là tích của các xác suất thành phần:
$$L(\mathbf{w}, b) = \prod_{i=1}^N P(y_i \mid \mathbf{x}_i; \mathbf{w}, b) = \prod_{i=1}^N \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( - \frac{(y_i - (\mathbf{w}\mathbf{x}_i + b))^2}{2\sigma^2} \right)$$
3.3. Lấy Log-Likelihood và Biến đổi
Để biến phép nhân thành phép cộng (tránh tràn số dưới - underflow), ta lấy logarit tự nhiên:
$$\ln L(\mathbf{w}, b) = \sum_{i=1}^N \left[ \ln\left(\frac{1}{\sqrt{2\pi\sigma^2}}\right) - \frac{(y_i - (\mathbf{w}\mathbf{x}_i + b))^2}{2\sigma^2} \right]$$ $$\ln L(\mathbf{w}, b) = - N \ln(\sqrt{2\pi}\sigma) - \frac{1}{2\sigma^2} \sum_{i=1}^N (y_i - (\mathbf{w}\mathbf{x}_i + b))^2$$
Mục tiêu của MLE là tìm $(\mathbf{w}^*, b^*)$ để cực đại hóa $\ln L(\mathbf{w}, b)$. Nhận xét:
- Số hạng $- N \ln(\sqrt{2\pi}\sigma)$ là hằng số đối với $\mathbf{w}$ và $b$.
- Hệ số $\frac{1}{2\sigma^2}$ là số dương cố định.
- Dấu trừ đằng trước có nghĩa là: Cực đại hóa biểu thức mang dấu trừ tương đương với Cực tiểu hóa biểu thức bên trong!
Do đó: $$\arg\max_{\mathbf{w}, b} \ln L(\mathbf{w}, b) \iff \arg\min_{\mathbf{w}, b} \sum_{i=1}^N (y_i - (\mathbf{w}\mathbf{x}_i + b))^2$$
Chia thêm cho hằng số $N$ không làm thay đổi vị trí cực tiểu: $$\implies \arg\min_{\mathbf{w}, b} \frac{1}{N} \sum_{i=1}^N (y_i - (\mathbf{w}\mathbf{x}_i + b))^2 = \text{MSE}$$
Định lý cốt lõi:
Việc tối thiểu hóa hàm mất mát bình phương (MSE) trong Hồi quy Tuyến tính chính là nghiệm ước lượng hợp lý cực đại (MLE) dưới giả định nhiễu ngẫu nhiên tuân theo phân phối chuẩn Gaussian!
Nói cho dễ nhớ: "bình phương" đến từ số mũ của Gauss — đổi nhiễu là đổi hàm mất mát
Hàm mật độ Gauss có $e^{-(\text{sai số})^2/2\sigma^2}$; lấy $-\ln$ thì còn lại $(\text{sai số})^2$. Vậy nếu đổi giả định nhiễu thì hàm mất mát đổi theo, hoàn toàn máy móc:
| Giả định nhiễu $\epsilon$ | $-\ln P(y\mid\mathbf{x})$ (bỏ hằng số) | Hàm mất mát | Dùng ở đâu |
|---|---|---|---|
| Gauss $\propto e^{-\epsilon^2/2\sigma^2}$ | $\epsilon^2$ | MSE | Hồi quy tuyến tính, đầu ra liên tục "sạch" |
| Laplace $\propto e^{-\lvert\epsilon\rvert/b}$ | $\lvert\epsilon\rvert$ | MAE (L1 loss) | Dữ liệu có ngoại lệ; hồi quy toạ độ khung vật thể (smooth_l1/Huber trong Faster R-CNN, YOLO) |
| Gauss ở tâm, Laplace ở đuôi | bậc hai khi nhỏ, tuyến tính khi lớn | Huber | Thoả hiệp: mượt để tối ưu, bền với ngoại lệ |
| Poisson (đếm) | $\hat y - y\ln\hat y$ | Poisson loss | Đếm lượt click, số ca bệnh |
Ví dụ số về ngoại lệ: bốn sai số $(1, 1, 1, 10)$. MSE cộng thành $1+1+1+100 = 103$: điểm ngoại lệ chiếm 97 % tổng phạt và kéo cả đường thẳng về phía nó. MAE cộng thành $1+1+1+10 = 13$: ngoại lệ chỉ chiếm 77 %. Đuôi mỏng của Gauss ($e^{-\epsilon^2}$) nghĩa là "sai số 10 gần như không thể xảy ra", nên mô hình MSE sẵn sàng hy sinh mọi điểm khác để tránh nó; Laplace đuôi dày ($e^{-|\epsilon|}$) chấp nhận ngoại lệ dễ dàng hơn. Thấy bằng mắt ở phòng 05 sách chính: kéo một điểm ra thật xa.
4. Chứng Minh Tường Minh 2: Tại Sao Hồi Quy Logistic Dùng Binary Cross-Entropy?
Trong Chương 3.2.2, cuốn sách nêu hàm Log-Likelihood của Hồi quy Logistic: $$\text{LogL} = \sum_{i=1}^N [y_i \ln f(\mathbf{x}_i) + (1 - y_i) \ln(1 - f(\mathbf{x}_i))]$$
4.1. Thiết lập Giả định Xác suất
Trong bài toán phân loại nhị phân, biến mục tiêu chỉ nhận 1 trong 2 giá trị: $y_i \in \{0, 1\}$.
Phân phối xác suất tự nhiên và duy nhất để mô hình hóa một biến nhị phân là Phân phối Bernoulli với tham số thành công $p_i \in (0, 1)$:
$$P(y_i = 1 \mid \mathbf{x}_i) = p_i = \sigma(\mathbf{w}\mathbf{x}_i + b) = \frac{1}{1 + e^{-(\mathbf{w}\mathbf{x}_i + b)}}$$ $$P(y_i = 0 \mid \mathbf{x}_i) = 1 - p_i = 1 - \sigma(\mathbf{w}\mathbf{x}_i + b)$$
Ta có thể viết gọn xác suất của $y_i$ vào một công thức duy nhất: $$P(y_i \mid \mathbf{x}_i) = p_i^{y_i} (1 - p_i)^{1 - y_i}$$ (Kiểm tra: Nếu $y_i = 1$, $p_i^1 (1-p_i)^0 = p_i$. Nếu $y_i = 0$, $p_i^0 (1-p_i)^1 = 1-p_i$. Rất chính xác!)
4.2. Thiết lập Likelihood và Log-Likelihood
Hàm Likelihood trên toàn bộ $N$ mẫu độc lập: $$L(\mathbf{w}, b) = \prod_{i=1}^N p_i^{y_i} (1 - p_i)^{1 - y_i}$$
Lấy logarit tự nhiên: $$\ln L(\mathbf{w}, b) = \sum_{i=1}^N \left[ y_i \ln p_i + (1 - y_i) \ln(1 - p_i) \right]$$
4.3. Chuyển đổi sang Hàm Mất mát (Binary Cross-Entropy Loss)
Trong tối ưu hóa toán học và học máy, theo quy ước chuẩn, người ta luôn thích phát biểu bài toán dưới dạng Cực tiểu hóa hàm mất mát (Minimizing Loss) thay vì Cực đại hóa. Do đó, ta lấy dấu âm của Log-Likelihood chia cho $N$, thu được hàm Negative Log-Likelihood (NLL), hay còn gọi là Binary Cross-Entropy (BCE):
$$\mathcal{L}_{\text{BCE}}(\mathbf{w}, b) = - \frac{1}{N} \sum_{i=1}^N \left[ y_i \ln \hat{y}_i + (1 - y_i) \ln(1 - \hat{y}_i) \right]$$ (với $\hat{y}_i = \sigma(\mathbf{w}\mathbf{x}_i + b)$).
Định lý cốt lõi:
Hàm mất mát Binary Cross-Entropy không phải là một công thức tùy ý, mà chính là Negative Log-Likelihood của phân phối xác suất Bernoulli.Ví dụ số (một mẫu có nhãn $y = 1$): mô hình dự đoán $\hat y = 0{,}9 \Rightarrow$ phạt $-\ln 0{,}9 = 0{,}105$; $\hat y = 0{,}5 \Rightarrow 0{,}693$; $\hat y = 0{,}1 \Rightarrow 2{,}303$; $\hat y = 0{,}001 \Rightarrow 6{,}9$. Mức phạt tăng theo logarit: đoán sai một chút bị phạt nhẹ, nhưng tự tin mà sai bị phạt không giới hạn ($\hat y \to 0$ thì phạt $\to \infty$). Đó là lý do cross-entropy dạy mô hình phải "biết mình không chắc".
Vì sao cặp sigmoid + BCE "đẹp": gradient giống hệt hồi quy tuyến tính
Gọi $z = \mathbf{w}\mathbf{x} + b$ (logit) và $\hat y = \sigma(z)$. Lấy đạo hàm BCE theo $z$ rồi rút gọn (dùng $\sigma' = \sigma(1-\sigma)$), mọi thứ triệt tiêu chỉ còn:
$$\frac{\partial \mathcal{L}_{\text{BCE}}}{\partial z} = \hat y - y \qquad\Longrightarrow\qquad \frac{\partial \mathcal{L}_{\text{BCE}}}{\partial \mathbf{w}} = (\hat y - y)\,\mathbf{x}$$
Đây chính là dạng gradient của MSE trong hồi quy tuyến tính $(\hat y - y)\mathbf{x}$: "sai bao nhiêu, đẩy $\mathbf{w}$ theo hướng $\mathbf{x}$ bấy nhiêu". Softmax + cross-entropy cho nhiều lớp cũng cho đúng $\hat{\mathbf{y}} - \mathbf{y}$. Trong thống kê người ta gọi đây là canonical link; trong Deep Learning, hệ quả thực dụng là gradient ở tầng đầu ra không bị $\sigma'(z) \le 0{,}25$ bóp nghẹt (Module 4 mục 5.2) — nếu ghép sigmoid với MSE thì gradient là $(\hat y - y)\,\hat y(1-\hat y)\,\mathbf{x}$, và khi mô hình tự tin sai ($\hat y \approx 0$, $y = 1$) nó gần như bằng 0: mô hình sai mà không học được gì. Đó là lý do cross-entropy thường tối ưu dễ hơn cho phân loại. Tuy vậy, squared error trên xác suất (Brier score) vẫn là một loss hợp lệ trong một số bài toán hiệu chuẩn; điều cần tránh là đồng nhất mọi dạng “MSE cho phân loại” thành cùng một trường hợp.
Ứng dụng trong ML/DL: từ Bernoulli tới huấn luyện GPT
- Nhiều lớp: thay Bernoulli bằng phân phối Categorical (Multinoulli) với $K$ lớp, $\hat{\mathbf{y}} = \text{softmax}(\mathbf{z})$, ta được cross-entropy $-\sum_k y_k \ln \hat y_k$ — chính là
nn.CrossEntropyLoss(Ch 7.2). - Mô hình ngôn ngữ: huấn luyện GPT là bài toán phân loại với $K = |V| \approx 50\,000$–$200\,000$ token; hàm mất mát là cross-entropy trung bình của token đúng, tức $-\frac{1}{T}\sum_t \ln P(\text{token}_t \mid \text{ngữ cảnh})$. Perplexity $= e^{\text{loss}}$: loss $= 2{,}3$ nat nghĩa là mô hình "bối rối như chọn đều giữa $e^{2{,}3} \approx 10$ token". Toàn bộ pre-training là MLE trên phân phối Categorical — cùng phép suy diễn ở mục 4.2 này, chỉ đổi phân phối.
- Label smoothing ($y_k = 0{,}9$ thay vì $1$): thay nhãn cứng bằng phân phối mềm để mô hình bớt tự tin thái quá — vẫn là cross-entropy, chỉ đổi $P$ thật.
- Mối liên hệ cross-entropy $\leftrightarrow$ phân kỳ KL được chứng minh ở Module 6.
5. Nguồn Gốc Xác Suất Của Điều Chuẩn (Regularization via MAP)
Trong Chương 5.4, tác giả giới thiệu điều chuẩn $L_1$ và $L_2$ như một cách cộng thêm thành phần phạt: $$\text{Cost} = \text{Loss} + \lambda \Omega(\mathbf{w})$$ Tại sao lại cộng thêm chuẩn của trọng số? Nguyên lý xác suất nào đứng sau điều này?
Câu trả lời nằm ở Nguyên lý Ước lượng Cực đại Hậu nghiệm (MAP): $$\boldsymbol{\theta}^* = \arg\max_{\boldsymbol{\theta}} P(\boldsymbol{\theta} \mid \mathcal{D}) = \arg\max_{\boldsymbol{\theta}} \left[ \ln P(\mathcal{D} \mid \boldsymbol{\theta}) + \ln P(\boldsymbol{\theta}) \right]$$
Số hạng thứ hai $\ln P(\boldsymbol{\theta})$ chính là Niềm tin tiên nghiệm về bộ trọng số!
5.1. Điều chuẩn $L_2$ (Ridge / Weight Decay) $\iff$ Tiên nghiệm Gaussian
Giả sử trước khi nhìn thấy dữ liệu, ta tin rằng các trọng số $\mathbf{w}$ không nên quá lớn, chúng nên tập trung quanh giá trị 0 theo Phân phối Chuẩn Gaussian: $$\mathbf{w} \sim \mathcal{N}\left(\mathbf{0}, \sigma_0^2 \mathbf{I}\right) \implies P(\mathbf{w}) = \prod_{j=1}^D \frac{1}{\sqrt{2\pi\sigma_0^2}} \exp\left( - \frac{(w^{(j)})^2}{2\sigma_0^2} \right)$$
Lấy logarit tự nhiên của xác suất tiên nghiệm: $$\ln P(\mathbf{w}) = - \frac{1}{2\sigma_0^2} \sum_{j=1}^D (w^{(j)})^2 + \text{const} = - \frac{1}{2\sigma_0^2} \|\mathbf{w}\|_2^2 + \text{const}$$
Đưa vào công thức MAP và đổi dấu thành bài toán cực tiểu hóa: $$\min_{\mathbf{w}} \left[ -\ln P(\mathcal{D} \mid \mathbf{w}) + \frac{1}{2\sigma_0^2} \|\mathbf{w}\|_2^2 \right]$$ Đặt $\lambda = \frac{1}{2\sigma_0^2}$, ta thu được chính xác công thức Điều chuẩn $L_2$ (Ridge): $$\min_{\mathbf{w}} \left[ \text{Loss}(\mathbf{w}) + \lambda \|\mathbf{w}\|_2^2 \right]$$
5.2. Điều chuẩn $L_1$ (Lasso) $\iff$ Tiên nghiệm Laplace
Bây giờ, nếu ta giả định các trọng số tuân theo Phân phối Laplace (phân phối có đỉnh nhọn hoắt tại 0 và đuôi nặng hơn Gaussian): $$P(w^{(j)}) = \frac{1}{2b_0} \exp\left( - \frac{|w^{(j)}|}{b_0} \right)$$
Lấy logarit tự nhiên: $$\ln P(\mathbf{w}) = - \frac{1}{b_0} \sum_{j=1}^D |w^{(j)}| + \text{const} = - \frac{1}{b_0} \|\mathbf{w}\|_1 + \text{const}$$
Đưa vào bài toán MAP, ta thu được chính xác công thức Điều chuẩn $L_1$ (Lasso): $$\min_{\mathbf{w}} \left[ \text{Loss}(\mathbf{w}) + \lambda \|\mathbf{w}\|_1 \right] \quad \text{với } \lambda = \frac{1}{b_0}$$
Ứng dụng trong ML/DL: λ là "độ nghi ngờ" dành cho trọng số lớn
- Đọc $\lambda$ bằng ngôn ngữ tiên nghiệm: $\lambda = 1/(2\sigma_0^2)$. Tin rằng trọng số cỡ $\sigma_0 = 1$ là bình thường $\Rightarrow \lambda = 0{,}5$ (phạt mạnh). Tin rằng trọng số có thể lớn tới $\sigma_0 = 10 \Rightarrow \lambda = 0{,}005$ (gần như không phạt). Chọn $\lambda$ chính là chọn niềm tin, và validation (Ch 5.6) là cách để dữ liệu sửa niềm tin ấy.
- $L_2$ và weight decay trong Deep Learning: cộng $\lambda\|\mathbf{w}\|^2$ vào loss tạo gradient $2\lambda\mathbf{w}$ và có diễn giải MAP–Gaussian. Với SGD, cách này tương đương weight decay sau khi quy đổi hệ số; với Adam/RMSProp thì không còn tương đương. AdamW vì thế co trọng số ở một bước tách khỏi gradient thích ứng. Hãy xem đây là hai cơ chế liên quan nhưng không nên đánh đồng.
- Không phải điều chuẩn nào cũng là MAP: dropout, early stopping, data augmentation (Ch 8.4) cũng giảm quá khớp nhưng không viết được thành $-\ln P(\boldsymbol{\theta})$ đơn giản. Riêng $L_2$ và $L_1$ thì có cội nguồn xác suất tường minh như trên.
- Tiên nghiệm Laplace và tính thưa: đỉnh nhọn tại 0 của Laplace là lý do xác suất của việc Lasso ép trọng số về đúng 0; mục 6 ngay dưới cho lý do hình học — hai cách nhìn của cùng một sự thật.
6. Bản Chất Hình Học Của $L_1$ vs $L_2$: Tại Sao $L_1$ Triệt Tiêu Trọng Số Về 0?
Cuốn sách nêu ở Chương 5.4.2 rằng $L_1$ tạo ra mô hình thưa (sparse model) bằng cách ép các trọng số không quan trọng về đúng bằng $0$, hoạt động như một thuật toán chọn lọc đặc trưng (Feature Selection).
Nhưng tại sao $L_1$ làm được điều đó còn $L_2$ thì không?
Trực quan hóa Bài toán Tối ưu có Ràng buộc:
Bài toán cộng số hạng phạt $\lambda \Omega(\mathbf{w})$ tương đương về mặt toán học với bài toán tối ưu hóa Lagrange có ràng buộc: $$\min \text{Loss}(\mathbf{w}) \quad \text{thỏa mãn} \quad \Omega(\mathbf{w}) \le C$$
($\lambda$ càng lớn thì $C$ càng nhỏ; hai cách viết cho cùng một tập nghiệm.) Bức tranh trong không gian trọng số: hàm mất mát của hồi quy tuyến tính là một cái bát bậc hai có đáy tại nghiệm không phạt $\mathbf{w}^*$, và các đường đồng mức của nó là những elip đồng tâm. Nghiệm có phạt là điểm của vùng ràng buộc mà elip chạm tới đầu tiên khi nở ra từ $\mathbf{w}^*$.
-
Với Điều chuẩn $L_2$ ($\|\mathbf{w}\|_2^2 \le C$):
- Vùng khả thi là một hình tròn (2D) hoặc hình cầu (nhiều chiều).
- Hình tròn có đường biên trơn và hoàn toàn đối xứng, không có góc nhọn.
- Khi các đường đồng mức elip của hàm Loss (xuất phát từ tâm nghiệm không điều chuẩn $\mathbf{w}^*$) phình to dần ra, điểm đầu tiên nó chạm vào hình tròn có thể là bất kỳ điểm nào trên đường cong.
- Xác suất để điểm tiếp xúc rơi trúng chính xác vào các trục tọa độ ($w_1 = 0$ hoặc $w_2 = 0$) là xấp xỉ bằng $0$. Do đó, $L_2$ chỉ kéo các trọng số bé đi, chứ không triệt tiêu về 0.
-
Với Điều chuẩn $L_1$ ($\|\mathbf{w}\|_1 \le C$):
- Vùng khả thi là một hình thoi (2D) hoặc khối đa diện góc cạnh (nhiều chiều).
- Hình thoi có các đỉnh nhọn nằm ngay trên các trục tọa độ (nơi một hoặc nhiều thành phần bằng $0$).
- Khi đường đồng mức của hàm Loss nở rộng, do hình học không gian, nó có xu hướng chạm vào các góc nhọn nhô ra trước tiên.
- Điểm tiếp xúc rơi vào góc nhọn $\implies$ Tại điểm đó, thành phần $w_2$ hoặc $w_1$ bằng đúng $0$!
- Trong không gian hàng nghìn chiều, khối đa diện $L_1$ có vô số đỉnh và cạnh nằm trên các siêu phẳng tọa độ, khiến hàng loạt trọng số bị triệt tiêu về $0$ chính xác.
Kiểm chứng bằng phòng thí nghiệm M2 (ngay dưới): với $\mathbf{w}^* = (2{,}4;\ 1{,}9)$, bán kính $C = 1{,}4$ và elip nghiêng $25^\circ$, nghiệm $L_1$ tính thật là $(1{,}400;\ \mathbf{0{,}000})$ còn nghiệm $L_2$ là $(1{,}216;\ 0{,}694)$. Nhưng xoay elip về $-60^\circ$ thì $L_1 = (0{,}65;\ 0{,}75)$ — chạm cạnh chứ không chạm đỉnh, không còn thưa. Tính thưa vì thế là xu hướng của hình học góc nhọn (rất mạnh ở nhiều chiều), không phải định luật tuyệt đối. Bản 2D của sách chính: phòng 13.
Ứng dụng: khi nào chọn L₁, khi nào chọn L₂?
- $L_1$ (Lasso) khi bạn tin chỉ một số ít đặc trưng thực sự quan trọng và muốn mô hình tự chọn chúng (dữ liệu gen với $D \gg N$, chọn biến trong phân tích kinh tế). Kết quả là mô hình thưa, dễ giải thích, dự đoán nhanh.
- $L_2$ (Ridge / weight decay) khi mọi đặc trưng đều đóng góp chút ít và chúng tương quan với nhau: $L_2$ chia đều trọng số giữa các đặc trưng tương quan thay vì chọn bừa một cái. Đây là lựa chọn phổ biến trong mạng nơ-ron vì hàm phạt trơn và gradient đơn giản ($2\lambda\mathbf{w}$). Tuy nhiên, tính thưa vẫn hữu ích cho chọn đặc trưng, pruning và nén; khi cần nhiều trọng số bằng 0 thật sự, ta dùng $L_1$, group sparsity hoặc cơ chế pruning chuyên biệt.
- Elastic Net $= \lambda_1\|\mathbf{w}\|_1 + \lambda_2\|\mathbf{w}\|_2^2$ lấy cả hai: vùng ràng buộc là hình thoi bo tròn góc.
Hình học điều chuẩn: hình thoi L₁ chạm đỉnh, hình tròn L₂ chạm điểm trơn
Kéo bán kính C và xoay elip mất mátViệc cần làm: ① Ở C = 1,4 và φ = 25°: nghiệm L₁ là (1,400, 0,000) — đường đồng mức chạm đúng đỉnh hình thoi, w⁽²⁾ bị loại hẳn; nghiệm L₂ là (1,216, 0,694): cả hai đều bị co nhưng không cái nào bằng 0. ② Kéo C lên 2,8: L₁ trượt sang cạnh (2,25, 0,55) — phạt yếu thì không còn thưa. ③ Kéo φ về −60°: elip nhìn thẳng vào một cạnh, L₁ = (0,65, 0,75) không thưa dù C = 1,4. Kéo φ lên 60°: đổi sang w⁽¹⁾ = 0. Tính thưa là xu hướng hình học của góc nhọn, không phải định luật — và ở hàng nghìn chiều, khối L₁ có vô số đỉnh/cạnh thấp chiều nên hầu như luôn chạm chúng. ④ Kéo C lên 3,1 (φ = 25°): nghiệm L₂ trùng w* = (2,4, 1,9) vì hình tròn đã chứa w* (‖w*‖₂ = 3,06 < 3,1, hết phạt), còn L₁ vẫn bị cắt vì ‖w*‖₁ = 4,3 — cùng một C, L₁ phạt mạnh hơn vì ‖w‖₁ ≥ ‖w‖₂. Xem thêm phòng 13 sách chính (phiên bản phạt λ).
7. Phân Rã Sai Số Bias-Variance (Đánh Đổi Độ Chệch - Phương Sai)
Trong Chương 5.3, cuốn sách đưa ra công thức: $$\text{Tổng sai số} = \text{Bias}^2 + \text{Variance} + \text{Irreducible Error}$$
Dưới đây là chứng minh toán học tường minh thông qua kỳ vọng thống kê:
Giả sử nhãn thực tế được sinh ra bởi: $y = f(\mathbf{x}) + \epsilon$, với $\mathbb{E}[\epsilon] = 0$ và $\text{Var}(\epsilon) = \sigma^2$.
Mô hình ước lượng được huấn luyện trên tập dữ liệu là $\hat{f}(\mathbf{x})$.
Kỳ vọng sai số bình phương dự đoán trên một điểm kiểm tra $\mathbf{x}$: $$\mathbb{E}\left[ (y - \hat{f}(\mathbf{x}))^2 \right] = \mathbb{E}\left[ (f(\mathbf{x}) + \epsilon - \hat{f}(\mathbf{x}))^2 \right]$$ $$= \mathbb{E}\left[ \left((f(\mathbf{x}) - \mathbb{E}[\hat{f}(\mathbf{x})]) + (\mathbb{E}[\hat{f}(\mathbf{x})] - \hat{f}(\mathbf{x})) + \epsilon\right)^2 \right]$$
Khai triển bình phương 3 số hạng (các tích chéo triệt tiêu vì $\epsilon$ độc lập với mô hình và $\mathbb{E}[\hat{f} - \mathbb{E}[\hat{f}]] = 0$):
$$\mathbb{E}\left[ (y - \hat{f}(\mathbf{x}))^2 \right] = \underbrace{\left(f(\mathbf{x}) - \mathbb{E}[\hat{f}(\mathbf{x})]\right)^2}_{\text{Độ chệch bình phương (Bias}^2\text{)}} + \underbrace{\mathbb{E}\left[\left(\hat{f}(\mathbf{x}) - \mathbb{E}[\hat{f}(\mathbf{x})]\right)^2\right]}_{\text{Phương sai (Variance)}} + \underbrace{\sigma^2}_{\text{Nhiễu không thể giảm}}$$
- $\text{Bias}^2$: Đo mức độ sai lệch giữa trung bình các dự đoán của mô hình so với chân lý thật $f(\mathbf{x})$. (Mô hình quá đơn giản $\rightarrow$ High Bias $\rightarrow$ Underfitting).
- $\text{Variance}$: Đo mức độ dao động của dự đoán khi mô hình được huấn luyện trên các tập dữ liệu khác nhau. (Mô hình quá phức tạp $\rightarrow$ High Variance $\rightarrow$ Overfitting).
- $\sigma^2$: Nhiễu nội tại của tự nhiên trong quá trình thu thập dữ liệu, không thuật toán nào có thể vượt qua giới hạn này.
Trực giác "bắn bia": tưởng tượng huấn luyện cùng một thuật toán trên 100 tập dữ liệu khác nhau rồi chấm 100 dự đoán lên bia. Bias là khoảng cách từ tâm đám đạn tới hồng tâm (mô hình quá đơn giản thì cả đám lệch về một phía). Variance là độ tản của đám đạn (mô hình quá phức tạp thì mỗi tập dữ liệu cho một kết quả khác hẳn). Kỳ vọng $\mathbb{E}[\cdot]$ trong chứng minh trên chính là "lấy trung bình trên 100 tập dữ liệu" đó.
Ứng dụng: mỗi kỹ thuật trong sách chữa đúng một số hạng
| Kỹ thuật | Số hạng bị giảm | Vì sao |
|---|---|---|
| Tăng bậc đa thức, thêm tầng ẩn | Bias $\downarrow$ (Variance $\uparrow$) | Không gian giả thuyết $\mathcal{H}$ rộng hơn, "với tới" $f$ thật |
| Điều chuẩn $L_1/L_2$, dropout, early stopping | Variance $\downarrow$ (Bias $\uparrow$ nhẹ) | Thu hẹp $\mathcal{H}$ hoặc bước tối ưu |
| Bagging / Random Forest (Ch 7.5.1) | Variance $\downarrow$ | Trung bình $B$ mô hình có sai số ít tương quan: phương sai chia gần $B$ lần, bias giữ nguyên |
| Boosting (Ch 7.5.2) | Bias $\downarrow$ | Mỗi cây mới khớp phần dư của tổng trước, nên tổng ngày càng "với tới" $f$ |
| Thêm dữ liệu | Variance $\downarrow$ | Ước lượng ổn định hơn; bias không đổi (mô hình vẫn là mô hình đó) |
Nhìn tận mắt: phòng 11 (bậc 15: lỗi huấn luyện ≈ 0, lỗi kiểm tra bùng nổ) và phòng 18 (bagging chữa phương sai, boosting chữa độ chệch) trong sách chính. Ở Deep Learning hiện đại còn có hiện tượng double descent: sau khi mô hình đủ lớn để nhớ hết dữ liệu, lỗi kiểm tra lại giảm tiếp — công thức trên vẫn đúng, nhưng "variance" của mô hình siêu lớn có điều chuẩn ngầm không tăng như trực giác cổ điển dự đoán.
04Module 4: Cây Phả Hệ Các Hàm Mất Mát & Nghệ Thuật Tối Ưu Hóa
(The Classification Loss Family Tree & The Art of Optimization)
1. Cội Nguồn: Tại Sao Ta Cần Các Hàm Mất Mát "Đại Diện" (Surrogate Losses)?
Trong bài toán phân loại nhị phân ($y_i \in \{-1, +1\}$), dự đoán của mô hình có dạng $f(\mathbf{x}) = \mathbf{w}\mathbf{x} + b$. Mục tiêu tối thượng của ta là: Phân loại chính xác nhãn của các điểm dữ liệu.
1.1. Khái niệm Lề Phân Loại (Functional Margin $z$)
Ta định nghĩa đại lượng lề chức năng:
$$z \stackrel{\text{def}}{=} y \cdot f(\mathbf{x}) = y(\mathbf{w}\mathbf{x} + b)$$
- Nếu $z > 0$: $y$ và $f(\mathbf{x})$ cùng dấu $\implies$ Mô hình dự đoán đúng! $z$ càng lớn thì dự đoán càng tự tin.
- Nếu $z < 0$: $y$ và $f(\mathbf{x})$ trái dấu $\implies$ Mô hình dự đoán sai!
- Nếu $z = 0$: Điểm nằm ngay trên ranh giới phân tách.
1.2. Hàm Mất Mát Lý Tưởng: 0-1 Loss
Hàm mất mát tự nhiên nhất mà chúng ta thực sự muốn cực tiểu hóa là số lượng mẫu đoán sai, gọi là 0-1 Loss:
$$\mathcal{L}_{0-1}(z) = \begin{cases} 0 & \text{nếu } z \ge 0 \quad (\text{đúng}) \\ 1 & \text{nếu } z < 0 \quad (\text{sai}) \end{cases}$$
Tại sao ta KHÔNG THỂ huấn luyện mô hình bằng 0-1 Loss?
1. Đạo hàm bằng 0 khắp nơi: Với mọi $z \ne 0$, đạo hàm $\frac{d\mathcal{L}_{0-1}}{dz} = 0$. Thuật toán Gradient Descent hoàn toàn bị "mù", không nhận được bất kỳ tín hiệu nào để biết cần tăng hay giảm $\mathbf{w}$! 2. Không khả vi tại 0: Hàm số bị đứt đoạn có bước nhảy đột ngột tại $z = 0$. 3. Độ phức tạp tính toán: Việc tìm bộ trọng số $\mathbf{w}$ để cực tiểu hóa 0-1 loss trên tập dữ liệu là một bài toán NP-hard (không thể giải trong thời gian đa thức).
2. Cây Phả Hệ Các Hàm Mất Mát Lồi Xấp Xỉ (Convex Surrogates)
Để giải quyết bế tắc của 0-1 Loss, các nhà khoa học đã phát minh ra các Hàm mất mát Lồi Thay thế (Convex Surrogate Losses): chúng là các hàm số lồi (convex), khả vi (hoặc khả vi từng phần), và (sau khi nhân một hệ số thích hợp) luôn là cận trên của 0-1 loss: $\mathcal{L}(z) \ge \mathcal{L}_{0-1}(z)$. Cận trên là điều quan trọng: ép hàm thay thế xuống thấp thì số lỗi thật cũng bị ép xuống theo.
| Hàm thay thế | Công thức | Tính chất | Thuật toán |
|---|---|---|---|
| Hinge | $\max(0, 1 - z)$ | Không phạt điểm đúng an toàn ($z \ge 1$) $\Rightarrow$ nghiệm chỉ phụ thuộc vài vectơ hỗ trợ | SVM (Ch 3.4) |
| Logistic | $\ln(1 + e^{-z})$ | Trơn khắp nơi, luôn $> 0$, cho ra xác suất | Hồi quy logistic (Ch 3.2), mạng nơ-ron |
| Exponential | $e^{-z}$ | Phạt theo hàm mũ, rất nhạy với ngoại lệ | AdaBoost (Ch 7.5) |
| Squared | $(1 - z)^2$ | Phạt cả khi $z > 1$ ("quá đúng") — không hợp cho phân loại | Chỉ để so sánh |
Lưu ý nhỏ về hệ số: logistic loss viết bằng $\ln$ tại $z = 0$ chỉ bằng $\ln 2 \approx 0{,}69 < 1$, nên nó chưa là cận trên của 0-1 loss; chia cho $\ln 2$ (tức dùng $\log_2$ như trong hình) thì đúng bằng 1 tại $z = 0$ và là cận trên thật sự. Nhân một hằng số dương không đổi nghiệm tối ưu, nên trong thực hành ai cũng dùng $\ln$. Phòng thí nghiệm M3 có ô bật/tắt để bạn thấy hai đường chỉ khác hệ số.
2.1. Hinge Loss (Máy Vectơ Hỗ Trợ - SVM)
$$\mathcal{L}_{\text{hinge}}(z) = \max(0, 1 - z)$$
- Nếu $z \ge 1$: Điểm được phân loại đúng và nằm an toàn cách ranh giới ít nhất một khoảng lề quy chuẩn $\implies \mathcal{L} = 0$.
- Nếu $0 \le z < 1$: Điểm được phân loại đúng nhưng nằm quá gần ranh giới (nằm trong vùng lề nguy hiểm) $\implies$ Vẫn bị phạt nhẹ ($1 - z > 0$).
- Nếu $z < 0$: Điểm bị phân loại sai $\implies$ Bị phạt tuyến tính tỷ lệ thuận với mức độ sai sót.
Hệ quả kỳ diệu của Hinge Loss:
Những điểm dữ liệu đã phân loại đúng và an toàn ($z \ge 1$) có đạo hàm phạt bằng $0$, hoàn toàn không ảnh hưởng gì đến siêu phẳng!
Chỉ những điểm rơi vào vùng vi phạm ($z < 1$) mới có đạo hàm khác $0$ và tạo nên các Vectơ Hỗ trợ (Support Vectors) cố định hình dáng của siêu phẳng.
2.2. Logistic Loss (Hồi quy Logistic)
$$\mathcal{L}_{\text{logistic}}(z) = \ln(1 + e^{-z})$$ (Hoàn toàn tương đương với công thức Binary Cross-Entropy khi nhãn được mã hóa $y \in \{-1, +1\}$ thay vì $\{0, 1\}$).
- Khi $z \gg 0$ (rất tự tin đúng): $\mathcal{L} \approx \ln(1 + 0) = 0$.
- Khi $z \ll 0$ (rất sai): $\mathcal{L} \approx \ln(e^{-z}) = -z$ (phạt tuyến tính tương tự Hinge Loss).
- Khác biệt cốt lõi với SVM: Logistic Loss không bao giờ bằng 0 tuyệt đối. Mọi điểm dữ liệu trong không gian, dù nằm rất xa ranh giới, vẫn đóng góp một lực kéo nhỏ vào quá trình cập nhật gradient!
Đọc số từ phòng thí nghiệm M3 (ngay dưới, mục 3): tại $z = 2$ (đúng và an toàn) hinge $= 0$ với đạo hàm $0$; logistic $= 0{,}127$ với đạo hàm $-0{,}12$ (vẫn kéo); squared $= 1{,}0$ với đạo hàm $+2{,}0$ — nó đẩy ngược điểm về phía ranh giới vì "quá đúng". Tại $z = -2$ (sai nặng): hinge $3{,}0$, logistic $2{,}13$, exponential $7{,}39$, squared $9{,}0$. Đạo hàm là thứ gradient descent nhìn thấy, nên cột đạo hàm mới là điều quyết định thuật toán "cư xử" thế nào với từng điểm.
Ứng dụng trong ML/DL: họ hàng của hinge và logistic trong Deep Learning
- Softmax cross-entropy được dùng rất rộng rãi cho phân loại sâu và có thể xem là logistic loss mở rộng cho $K$ lớp (Module 3); cặp sigmoid/softmax + cross-entropy còn cho gradient đẹp $\hat y - y$.
- Contrastive / triplet loss (học embedding khuôn mặt, mạng Siamese ở Ch 7.9): $\max(0,\ m - s^+ + s^-)$ — đúng là hinge trên lề giữa cặp giống ($s^+$) và cặp khác ($s^-$): chỉ phạt khi cặp khác chưa cách cặp giống ít nhất $m$.
- InfoNCE (CLIP, SimCLR): logistic/softmax loss trên các tích vô hướng $\mathbf{q}\cdot\mathbf{k}_i$ — "phân loại" xem khoá nào là cặp đúng của truy vấn. Cùng một cây phả hệ, chỉ đổi $z$ thành độ tương đồng.
- Focal loss (phát hiện vật thể): $-(1-\hat y)^\gamma \ln \hat y$ — cross-entropy nhân thêm hệ số làm giảm phạt cho điểm đã đúng dễ dàng, để mô hình tập trung vào điểm khó. Đó là cách "mượn" tinh thần hinge (bỏ qua điểm an toàn) mà vẫn giữ tính trơn của logistic.
Cây phả hệ hàm mất mát theo lề z = y·f(x): giá trị và đạo hàm
Kéo z hoặc bấm các mốc| Hàm | L(z) | dL/dz |
|---|---|---|
| 0-1 | 1.000 | 0.00 |
| Hinge (SVM) | 1.500 | -1.00 |
| Logistic (BCE) | 0.974 | -0.62 |
| Squared trên margin | 2.250 | -3.00 |
| Exponential (AdaBoost) | 1.649 | -1.65 |
Việc cần làm: ① Bấm z = 2 (đoán đúng, rất an toàn): hinge = 0 và đạo hàm = 0 — điểm này không còn kéo siêu phẳng nữa, đó là lý do SVM chỉ cần vài vectơ hỗ trợ; logistic vẫn = 0,127 với đạo hàm −0,12 nên hồi quy logistic bị mọi điểm kéo; squared loss = 1,0 với đạo hàm +2,0: nó phạt vì đoán 'quá đúng' và đẩy điểm ngược về ranh giới — đặc điểm của squared loss (1 − z)² trên margin. MSE/Brier trên xác suất là một hàm khác và vẫn dùng được cho phân loại; demo này không phủ định cách dùng đó. ② Bấm z = −2 (sai nặng): hinge 3,0 và logistic 2,1 phạt tuyến tính, exponential phạt 7,39 — một điểm nhiễu gán sai nhãn có thể kéo lệch cả AdaBoost. ③ Bấm z = 0 rồi bật ô log₂: logistic dùng ln chỉ bằng 0,69 < 1 (chưa phải cận trên của 0-1 loss), chia cho ln 2 thì đúng bằng 1 — cùng hình dạng, chỉ khác hệ số nhân.
3. Nghệ Thuật Tối Ưu Hóa: Nghiệm Giải Tích Đóng vs. Phương Pháp Số Lặp
Một trong những câu hỏi sâu sắc nhất:
"Tại sao Hồi quy Tuyến tính có nghiệm đại số dạng đóng, còn Hồi quy Logistic thường phải dùng một thủ tục tối ưu số lặp?"
3.1. Nghiệm Giải Tích Dạng Đóng của Hồi Quy Tuyến Tính (Normal Equation)
Đặt ma trận dữ liệu $\mathbf{X} \in \mathbb{R}^{N \times (D+1)}$ (đã gộp cột bias 1 vào cuối) và vectơ nhãn $\mathbf{y} \in \mathbb{R}^N$.
Hàm mất mát MSE viết dưới dạng ma trận:
$$\mathcal{L}(\mathbf{w}) = \frac{1}{2N} \|\mathbf{X}\mathbf{w} - \mathbf{y}\|_2^2 = \frac{1}{2N} (\mathbf{X}\mathbf{w} - \mathbf{y})^T (\mathbf{X}\mathbf{w} - \mathbf{y})$$ $$= \frac{1}{2N} \left[ \mathbf{w}^T \mathbf{X}^T \mathbf{X} \mathbf{w} - 2 \mathbf{y}^T \mathbf{X} \mathbf{w} + \mathbf{y}^T \mathbf{y} \right]$$
Lấy đạo hàm ma trận theo vectơ $\mathbf{w}$ và cho bằng $\mathbf{0}$: $$\nabla_{\mathbf{w}} \mathcal{L} = \frac{1}{N} \left[ \mathbf{X}^T \mathbf{X} \mathbf{w} - \mathbf{X}^T \mathbf{y} \right] = \mathbf{0}$$ $$\iff \mathbf{X}^T \mathbf{X} \mathbf{w} = \mathbf{X}^T \mathbf{y}$$
Nhận xét: Biểu thức này là một hệ phương trình tuyến tính đối với $\mathbf{w}$. Nếu ma trận $\mathbf{X}^T\mathbf{X}$ khả nghịch (các đặc trưng không bị đa cộng tuyến hoàn hảo), ta nhân nghịch đảo hai vế:
$$\mathbf{w}^* = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y}$$
Đây chính là Phương trình Chuẩn (Normal Equation), một nghiệm dạng đóng. Trong tính toán số, ta thường giải bài toán least-squares bằng QR/SVD hoặc pseudoinverse thay vì tạo nghịch đảo tường minh; công thức trên cũng cần $\mathbf{X}^T\mathbf{X}$ khả nghịch.
3.2. Tại Sao Hồi Quy Logistic Không Thể Dùng Normal Equation?
Với Hồi quy Logistic, đạo hàm của hàm mất mát Cross-Entropy theo $\mathbf{w}$ là:
$$\nabla_{\mathbf{w}} \mathcal{L}_{\text{BCE}} = \frac{1}{N} \sum_{i=1}^N \left( \sigma(\mathbf{w}\mathbf{x}_i + b) - y_i \right) \mathbf{x}_i = \mathbf{0}$$
Hãy nhìn kỹ vào số hạng $\sigma(\mathbf{w}\mathbf{x}_i + b) = \frac{1}{1 + e^{-(\mathbf{w}\mathbf{x}_i + b)}}$:
- Trọng số $\mathbf{w}$ bị "nhốt" bên trong hàm số mũ ở dưới mẫu số!
- Khi cho biểu thức bằng 0, ta có một hệ phương trình siêu việt phi tuyến tính (transcendental non-linear equations).
- Về mặt toán học, không tồn tại bất kỳ phép biến đổi đại số nào để rút $\mathbf{w}$ ra đứng độc lập một vế dạng $\mathbf{w} = \dots$
- Kết luận: Không có normal equation tương tự OLS; ta thường dùng tối ưu số lặp như gradient descent, Newton/IRLS, L-BFGS hoặc coordinate descent, tùy bài toán và regularization.
Điều đáng ngạc nhiên: nhìn kỹ hai gradient. Hồi quy tuyến tính: $\nabla \mathcal{L} = \frac{1}{N}\sum_i (\mathbf{w}\mathbf{x}_i + b - y_i)\,\mathbf{x}_i$. Hồi quy logistic: $\nabla \mathcal{L} = \frac{1}{N}\sum_i \big(\sigma(\mathbf{w}\mathbf{x}_i + b) - y_i\big)\,\mathbf{x}_i$. Cùng một công thức "(dự đoán − nhãn) × đầu vào", chỉ khác dự đoán có đi qua sigmoid hay không (Module 3, mục 4.3). Vì thế cùng một vòng lặp gradient descent chạy được cho cả hai — và cho cả mạng nơ-ron, khi "đầu vào" là kích hoạt của tầng trước.
Ứng dụng: khi nào dùng nghiệm đóng, khi nào dùng gradient descent?
- Normal Equation cần nghịch đảo $\mathbf{X}^T\mathbf{X}$ cỡ $D \times D$: chi phí $O(D^3)$. Với $D = 10^4$ đặc trưng (văn bản one-hot, ảnh) là $10^{12}$ phép tính — nên ngay cả hồi quy tuyến tính cũng chuyển sang gradient descent hoặc SGD khi $D$ lớn (
SGDRegressortrong scikit-learn). - Ridge có nghiệm đóng $(\mathbf{X}^T\mathbf{X} + \lambda\mathbf{I})^{-1}\mathbf{X}^T\mathbf{y}$: số hạng $\lambda\mathbf{I}$ còn đảm bảo ma trận khả nghịch — điều chuẩn vừa là xác suất (Module 3) vừa là "thuốc" ổn định số học.
- Logistic có thể dùng Newton–Raphson / IRLS (dùng cả đạo hàm bậc hai): hội tụ trong vài chục vòng cho $D$ nhỏ; với mạng nơ-ron thì ma trận Hessian $D \times D$ quá lớn nên chỉ còn các phương pháp bậc nhất ở mục 4.
4. Phả Hệ Tiến Hóa Của Các Thuật Toán Gradient Descent
Trong Chương 4 của sách, tác giả giới thiệu Gradient Descent cơ bản và liệt kê các biến thể: SGD, Momentum, Adagrad, RMSprop, Adam. Dưới đây là logic toán học kết nối sự tiến hóa này — mỗi mũi tên vá đúng một điểm yếu của bước trước:
4.1. Gradient Descent Cổ Điển (Batch GD)
$$w \leftarrow w - \alpha \nabla \mathcal{L}(w)$$
- Điểm yếu: Tính tổng gradient trên toàn bộ $N$ mẫu ở mỗi bước. Nếu dữ liệu có $1$ triệu dòng, một bước đi nhỏ cũng phải tính $1$ triệu phép tính.
4.2. Stochastic Gradient Descent (SGD) & Mini-Batch GD
Thay vì tính trên toàn bộ $N$, ta ước lượng gradient ngẫu nhiên trên một cụm nhỏ $B$ mẫu (Mini-batch, ví dụ $B = 64$ hoặc $128$): $$g_t = \frac{1}{B} \sum_{i \in \text{Batch}} \nabla \mathcal{L}_i(w)$$
- Tận dụng tối đa bộ nhớ đệm và tính toán song song ma trận của GPU.
4.3. Momentum (Quán Tính)
Vấn đề của SGD: Khi hàm mất mát có dạng "khe núi hẹp" (dốc đứng ở một chiều nhưng thoai thoải ở chiều kia), SGD sẽ dao động zíc-zắc qua lại hai vách núi mà di chuyển rất chậm dọc đáy hẻm.
Momentum mô phỏng một hòn bi lăn từ trên dốc xuống:
$$\mathbf{v}_t = \beta \mathbf{v}_{t-1} + (1 - \beta) g_t$$
$$\mathbf{w}_t = \mathbf{w}_{t-1} - \alpha \mathbf{v}_t$$
(với $\beta \approx 0.9$ là hệ số ma sát/quán tính).
Các dao động triệt tiêu nhau ở chiều dao động, trong khi vận tốc được cộng dồn gia tốc ở chiều tiến về phía trước!
(PyTorch và Hình 4.4 viết $\mathbf{v}_t = \beta\mathbf{v}_{t-1} + g_t$, không có hệ số $(1-\beta)$; hai cách viết chỉ khác nhau một hệ số nhân $1/(1-\beta)$ gộp vào $\alpha$. Lưu ý $\beta$ quá lớn thì "hòn bi" nặng quá đà: trong Hình 4.4, $\beta = 0{,}7$ tới đáy sau 61 bước còn $\beta = 0{,}9$ vọt qua đáy rồi phải quay lại — quán tính cũng cần được điều chỉnh.)
4.4. Adam (Adaptive Moment Estimation)
Adam tính toán đồng thời:
- Ước lượng trung bình gradient (Mômen bậc 1 - Momentum): $\mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1 - \beta_1) g_t$
- Ước lượng độ biến thiên/bình phương gradient (Mômen bậc 2 - RMSprop): $\mathbf{v}_t = \beta_2 \mathbf{v}_{t-1} + (1 - \beta_2) g_t^2$
-
Hiệu chỉnh độ chệch ban đầu (vì $\mathbf{m}_0, \mathbf{v}_0$ khởi tạo bằng 0): $$\hat{\mathbf{m}}_t = \frac{\mathbf{m}_t}{1 - \beta_1^t}, \quad \hat{\mathbf{v}}_t = \frac{\mathbf{v}_t}{1 - \beta_2^t}$$
-
Cập nhật trọng số: $$\mathbf{w}_t = \mathbf{w}_{t-1} - \frac{\alpha}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon} \hat{\mathbf{m}}_t$$
Trực giác đằng sau Adam:
Tham số nào có gradient biến động dữ dội thì bị phanh lại ($\hat{\mathbf{v}}_t$ lớn $\implies$ mẫu số lớn $\implies$ bước nhảy nhỏ). Tham số nào có gradient nhỏ và hiếm khi xuất hiện thì được ưu tiên bước nhảy dài hơn. Đây là trực giác vì sao Adam thường là một điểm khởi đầu mạnh cho nhiều mạng sâu, dù SGD/momentum hoặc optimizer khác vẫn có thể tổng quát hóa hay tối ưu tốt hơn tùy miền.Ví dụ số (bước đầu tiên của Adam, $\beta_1 = 0{,}9$, $\beta_2 = 0{,}999$): gradient của một tham số là $g_1 = 0{,}1$. Mômen: $m_1 = (1 - 0{,}9) \cdot 0{,}1 = 0{,}01$, $v_1 = (1 - 0{,}999) \cdot 0{,}1^2 = 10^{-5}$. Hiệu chỉnh: $\hat m_1 = 0{,}01/0{,}1 = 0{,}1$, $\hat v_1 = 10^{-5}/0{,}001 = 10^{-2}$. Bước đi: $\alpha \cdot 0{,}1/\sqrt{10^{-2}} = \alpha \cdot 0{,}1/0{,}1 = \alpha$. Thử lại với $g_1 = 10$: $\hat m_1 = 10$, $\hat v_1 = 100$, bước $= \alpha \cdot 10/10 = \alpha$. Tổng quát, ở bước đầu $\hat m_1 = g_1$ và $\hat v_1 = g_1^2$ nên bước luôn là $\alpha \cdot \text{sign}(g_1)$: Adam bước một đoạn $\approx \alpha$ bất kể gradient lớn hay nhỏ — nó chuẩn hoá từng tham số theo "đơn vị" của chính tham số đó. Điều này giải thích vì sao Adam bớt nhạy với chênh lệch thang gradient giữa các tham số; learning rate vẫn phải được chọn theo kiến trúc, batch, schedule và quy mô huấn luyện (phòng 10: $\alpha = 0{,}0025$ đã nổ tung).
Ứng dụng trong ML/DL: chọn bộ tối ưu và tốc độ học trong thực tế
- Vì sao thung lũng hẹp lại phổ biến? Một nguyên nhân là các chiều có thang đo hoặc độ cong rất khác nhau. Bát MSE trong phòng 10b sách chính minh họa conditioning xấu khiến GD zíc-zắc. Feature scaling có thể làm hình học bài toán tuyến tính cân đối hơn; BatchNorm/LayerNorm cũng kiểm soát thang kích hoạt, nhưng cơ chế của chúng trong mạng sâu không hoàn toàn đồng nhất với chuẩn hóa feature đầu vào.
- Thực hành phổ biến: SGD + momentum vẫn mạnh trong nhiều mô hình thị giác; AdamW thường được chọn cho Transformer. Warm-up hạn chế các cập nhật đầu quá mạnh khi tham số, kích hoạt và thống kê optimizer còn đang chuyển tiếp; sau đó linear/cosine decay giảm learning rate để tinh chỉnh cuối quá trình. Các con số cụ thể phải đi cùng batch size, model size và tổng số bước.
- Mini-batch không chỉ vì tốc độ: gradient ngẫu nhiên tạo nhiễu có thể giúp khám phá địa hình và rời một số vùng phẳng/yên ngựa, nhưng không bảo đảm tìm được cực tiểu tốt hơn. Kích thước batch vì thế ảnh hưởng cả throughput lẫn động lực tối ưu.
5. Quy Tắc Chuỗi (Chain Rule) và Lan Truyền Ngược (Backpropagation)
Trong Chương 6, Mạng nơ-ron được biểu diễn là một hàm hợp lồng nhau: $$y = f(\mathbf{x}) = g_3(\mathbf{W}_3 \cdot g_2(\mathbf{W}_2 \cdot g_1(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2) + \mathbf{b}_3)$$
Thuật toán Lan truyền ngược (Backpropagation) thực chất chỉ là việc áp dụng có hệ thống Quy tắc Chuỗi (Chain Rule) trong giải tích từ tầng cuối cùng ngược về tầng đầu tiên.
5.1. Quy tắc chuỗi trên một nơ-ron đơn lẻ
Xét một nơ-ron:
- $z = w x + b$ (tổ hợp tuyến tính)
- $a = \sigma(z) = \frac{1}{1 + e^{-z}}$ (kích hoạt phi tuyến)
- $\mathcal{L} = \frac{1}{2}(a - y)^2$ (hàm mất mát)
Để cập nhật trọng số $w$, ta cần tính đạo hàm riêng $\frac{\partial \mathcal{L}}{\partial w}$. Theo quy tắc chuỗi:
$$\frac{\partial \mathcal{L}}{\partial w} = \frac{\partial \mathcal{L}}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w}$$
Tính từng thành phần:
- $\frac{\partial \mathcal{L}}{\partial a} = (a - y)$ (sai số dự đoán ở đầu ra)
- $\frac{\partial a}{\partial z} = \sigma'(z) = \sigma(z)(1 - \sigma(z)) = a(1 - a)$
- $\frac{\partial z}{\partial w} = x$ (giá trị kích hoạt đầu vào)
Nhân lại: $$\frac{\partial \mathcal{L}}{\partial w} = (a - y) \cdot [a(1 - a)] \cdot x$$
Ví dụ số: $x = 2$, $w = 0{,}5$, $b = 0$, nhãn $y = 1$. Xuôi: $z = 1$, $a = \sigma(1) = 0{,}731$, $\mathcal{L} = \tfrac12(0{,}731 - 1)^2 = 0{,}036$. Ngược: $(a - y) = -0{,}269$; $a(1-a) = 0{,}731 \times 0{,}269 = 0{,}197$; $x = 2$. Nhân lại: $\partial\mathcal{L}/\partial w = -0{,}269 \times 0{,}197 \times 2 = -0{,}106$. Dấu âm nghĩa là tăng $w$ sẽ giảm lỗi (đúng: $a$ cần tiến về 1). Với $\alpha = 0{,}5$: $w \leftarrow 0{,}5 + 0{,}053 = 0{,}553$. Mạng nhiều tầng chỉ lặp phép nhân này lùi dần từng tầng, mỗi tầng góp thêm một thừa số $\sigma'(z_l) \cdot w_{l+1}$.
5.2. Nguồn Gốc Toán Học Của Vấn Đề "Biến Mất Gradient" (Vanishing Gradient)
Nhìn vào đạo hàm của hàm Sigmoid: $$\sigma'(z) = \sigma(z)(1 - \sigma(z))$$ Vì $\sigma(z) \in (0, 1)$, giá trị lớn nhất của tích này đạt được tại $z = 0$, khi $\sigma(0) = 0.5$: $$\max \sigma'(z) = 0.5 \times (1 - 0.5) = 0.25$$
Điều này có nghĩa là: Đạo hàm của hàm Sigmoid luôn luôn $\le 0.25$!
Khi mạng nơ-ron có $L$ tầng lồng nhau, theo quy tắc chuỗi, đạo hàm truyền về các tầng đầu tiên sẽ là tích của $L$ đạo hàm kích hoạt: $$\frac{\partial \mathcal{L}}{\partial \mathbf{W}_1} \propto \prod_{l=1}^L \sigma'(z_l) \le (0.25)^L$$
- Với mạng 5 tầng: $(0.25)^5 \approx 0.00097$
- Với mạng 10 tầng: $(0.25)^{10} \approx 0.00000095$ (xấp xỉ bằng $0$!)
Gradient ở các tầng đầu gần như bị triệt tiêu hoàn toàn $\implies$ Các tầng đầu ngừng học $\implies$ Hiện tượng Biến mất Gradient!
Tại sao hàm ReLU giải quyết triệt để vấn đề này?
$\text{ReLU}(z) = \max(0, z) \implies \text{ReLU}'(z) = 1$ với mọi $z > 0$.
Khi nhân liên tiếp các số $1$, gradient truyền ngược nguyên vẹn qua hàng trăm tầng mà không bị suy giảm theo cấp số nhân! Đây là bước ngoặt toán học đưa Deep Learning bùng nổ.
Ứng dụng trong ML/DL: ba "miếng vá" cho gradient, tất cả đều đọc được từ quy tắc chuỗi
- ReLU (trên): thừa số $\sigma'$ bằng $1$ khi $z>0$ và bằng $0$ khi $z<0$. Một nơ-ron chỉ thực sự “chết” khi pre-activation của nó nằm phía âm cho hầu như mọi mẫu, khiến gradient qua nhánh đó liên tục bằng 0; Leaky ReLU giữ độ dốc âm nhỏ, còn GELU làm chuyển tiếp trơn hơn.
- Kết nối tắt (ResNet): mỗi khối tính $\mathbf{h}_{l+1} = \mathbf{h}_l + F(\mathbf{h}_l)$. Jacobian trở thành $\mathbf{I} + J_F$, tạo thêm một đường gần đồng nhất cho tín hiệu và gradient. Điều này thường cải thiện mạnh khả năng tối ưu mạng sâu, nhưng không bảo đảm gradient tuyệt đối không thể tiêu biến hay bùng nổ. Transformer cũng dùng cấu trúc residual quanh attention và FFN.
- Chuẩn hoá (BatchNorm / LayerNorm) giữ $z$ quanh vùng $\sigma'$ lớn nhất và khởi tạo He/Xavier chọn phương sai của $\mathbf{W}$ sao cho tích các thừa số $w_{l+1}\sigma'(z_l)$ có kỳ vọng $\approx 1$ ngay từ đầu.
Chiều ngược lại — bùng nổ gradient khi các thừa số $> 1$ — được chữa bằng gradient clipping (cắt độ dài gradient) và các cổng của LSTM/GRU (Ch 6.4.2). Tất cả đều là cách kiểm soát tích của $L$ thừa số. Xem con số $0{,}25^{10} \approx 10^{-6}$ trong phòng 15 sách chính.
05Module 5: Vũ Trụ Phi Tuyến: Thủ Thuật Kernel Đối Chiếu Với Deep Learning
(The Non-Linear Universe: The Kernel Trick vs. Deep Learning)
1. Bức Tường Tuyến Tính: Bài Toán XOR Kinh Điển
Trong các module trước, chúng ta đã thấy sức mạnh hình học của siêu phẳng $\mathbf{w}\mathbf{x} + b = 0$. Tuy nhiên, thế giới thực chứa đầy các quy luật không thể phân tách bằng một đường thẳng hay một mặt phẳng.
Ví dụ lịch sử nổi tiếng nhất là Cổng logic XOR (Exclusive OR):
| $x^{(1)}$ | $x^{(2)}$ | Nhãn $y$ |
|---|---|---|
| 0 | 0 | 0 (Âm) |
| 1 | 1 | 0 (Âm) |
| 1 | 0 | 1 (Dương) |
| 0 | 1 | 1 (Dương) |
Chứng minh trực quan:
Hai điểm cùng lớp nằm chéo nhau qua gốc tọa độ. Không thể vẽ bất kỳ một đường thẳng nào trên mặt phẳng 2D để phân tách hai điểm $(+)$ khỏi hai điểm $(-)$.
Công trình của Minsky & Papert (1969) làm rõ nhiều giới hạn của perceptron đơn tầng, trong đó có XOR. Gắn riêng cuốn sách này như nguyên nhân trực tiếp của “mùa đông AI” là một cách kể lịch sử quá đơn giản hóa.
Để giải quyết bài toán phi tuyến tính, lịch sử Machine Learning đã khai phá ra hai con đường toán học hoàn toàn khác nhau:
- Con đường của SVM: Thủ thuật Kernel (Kernel Trick) — Dùng toán học nâng không gian lên số chiều cao hơn (thậm chí vô hạn chiều).
- Con đường của Deep Learning: Biểu diễn Phân tầng (Hierarchical Representation) — Xếp chồng nhiều tầng biến đổi phi tuyến để tự động bẻ cong và uốn nắn không gian dữ liệu.
2. Giải Mã Thủ Thuật Kernel (The Kernel Trick)
2.1. Ý tưởng cốt lõi: Nâng số chiều để biến Phi tuyến thành Tuyến tính
Nếu dữ liệu không thể phân tách ở không gian gốc $D$ chiều, hãy ánh xạ nó sang một không gian mới có số chiều cao hơn $M > D$ thông qua hàm biến đổi $\phi(\mathbf{x})$.
Ví dụ cụ thể giải bài toán XOR:
Ánh xạ từ 2 chiều $[x_1, x_2]^T$ lên không gian 3 chiều:
$$\phi([x_1, x_2]^T) = \left[ x_1^2, \quad \sqrt{2} x_1 x_2, \quad x_2^2 \right]^T$$
Tọa độ 4 điểm sau khi biến đổi:
- $(0, 0) \implies [0, 0, 0]^T$ (Lớp 0)
- $(1, 1) \implies [1, \sqrt{2}, 1]^T$ (Lớp 0)
- $(1, 0) \implies [1, 0, 0]^T$ (Lớp 1)
- $(0, 1) \implies [0, 0, 1]^T$ (Lớp 1)
Chú ý: không thể chỉ nhìn một toạ độ. Toạ độ thứ hai $\sqrt{2}x_1x_2$ bằng $0$ ở ba điểm $(0,0)$, $(1,0)$, $(0,1)$ nhưng $(0,0)$ thuộc lớp 0 còn hai điểm kia thuộc lớp 1. Thứ tách được là một mặt phẳng trong không gian $\phi$, tức một tổ hợp tuyến tính của ba toạ độ:
$$g(\phi) = \phi_1 - \sqrt{2}\,\phi_2 + \phi_3 - \tfrac12 = x_1^2 - 2x_1x_2 + x_2^2 - \tfrac12 = (x_1 - x_2)^2 - \tfrac12$$
Lớp 0 có $(x_1 - x_2)^2 = 0$ ở cả $(0,0)$ và $(1,1)$ nên $g = -\tfrac12 < 0$; lớp 1 có $(x_1 - x_2)^2 = 1$ ở cả $(1,0)$ và $(0,1)$ nên $g = +\tfrac12 > 0$. Trong không gian gốc, $g = 0$ là hai đường thẳng $x_1 - x_2 = \pm 1/\sqrt2$ kẹp lấy đường chéo — một ranh giới phi tuyến ở 2D nhưng là siêu phẳng $\mathbf{w}\cdot\phi(\mathbf{x}) + b = 0$ với $\mathbf{w} = (1, -\sqrt2, 1)$, $b = -\tfrac12$ ở 3D. Dữ liệu đã trở nên phân tách tuyến tính hoàn hảo — đúng theo nghĩa của Module 2: tồn tại một $\mathbf{w}$ mà tích vô hướng với $\phi(\mathbf{x})$ đổi dấu giữa hai lớp.
Deep Learning giải XOR theo cách khác: một mạng có tầng ẩn 2 nơ-ron ReLU, $h_1 = \text{ReLU}(x_1 + x_2 - 1)$ và $h_2 = \text{ReLU}(x_1 + x_2)$, rồi $y = h_2 - 2h_1$ cho đúng $(0, 1, 1, 0)$ trên bốn điểm. Nơ-ron $h_1$ về bản chất đang "đo" $x_1 x_2$ — mạng tự học ra một đặc trưng tương đương với $\phi$ thay vì được cho sẵn. Đó là khác biệt triết lý ở mục 5, và là điều phòng 14 sách chính cho bạn xem từng nơ-ron ẩn: mỗi nơ-ron vẫn chỉ là một nhát cắt thẳng, phi tuyến sinh ra khi cộng các nhát cắt lại.
2.2. Nghịch lý Tính toán và "Phép Màu" của Kernel Trick
Nếu ta nâng dữ liệu từ 100 chiều lên không gian đa thức bậc 10, số chiều $M$ sẽ lên tới hàng triệu tỷ chiều. Việc tính toán tọa độ $\phi(\mathbf{x})$ và lưu trữ trong bộ nhớ là điều hoàn toàn bất khả thi!
Nhưng hãy nhìn vào công thức bài toán đối ngẫu SVM ở Chương 3.4.1 (dẫn ra ở Module 2, mục 4.4: thế $\mathbf{w} = \sum_i \alpha_i y_i \phi(\mathbf{x}_i)$ vào Lagrangian): $$\max_{\boldsymbol{\alpha}} \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{k=1}^N y_i \alpha_i \Big( \phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_k) \Big) y_k \alpha_k$$
Toàn bộ thuật toán SVM chỉ quan tâm đến tích vô hướng $\phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_k)$, chứ không bao giờ cần biết từng tọa độ riêng lẻ của $\phi(\mathbf{x})$!
Tính toán tích vô hướng trong ví dụ trên: $$\phi(\mathbf{x}) \cdot \phi(\mathbf{z}) = x_1^2 z_1^2 + (\sqrt{2}x_1 x_2)(\sqrt{2}z_1 z_2) + x_2^2 z_2^2$$ $$= x_1^2 z_1^2 + 2 (x_1 z_1)(x_2 z_2) + x_2^2 z_2^2 = (x_1 z_1 + x_2 z_2)^2 = (\mathbf{x} \cdot \mathbf{z})^2$$
Bản chất của Kernel Trick:
Ta không cần tính toán phép ánh xạ $\phi(\mathbf{x})$ trong không gian 3 chiều tốn kém. Ta chỉ cần lấy tích vô hướng đơn giản ở không gian 2 chiều gốc rồi bình phương lên: $$k(\mathbf{x}, \mathbf{z}) = (\mathbf{x} \cdot \mathbf{z})^2 = \langle \phi(\mathbf{x}), \phi(\mathbf{z}) \rangle$$ Kết quả hoàn toàn tương đương! Đây chính là Thủ thuật Kernel.
3. Tại Sao Kernel Gaussian (RBF) Lại Tương Đương Với Không Gian Vô Hạn Chiều?
Trong Chương 3.4.2, cuốn sách khẳng định:
"Kernel RBF / Gaussian tương ứng với không gian đặc trưng có số chiều vô hạn."
Tại sao lại như vậy? Dưới đây là chứng minh toán học thông qua chuỗi Taylor:
Hàm Kernel Gaussian (RBF) giữa hai vectơ 1 chiều $x$ và $z$: $$k(x, z) = \exp\left( - \frac{(x - z)^2}{2\sigma^2} \right)$$
Khai triển phần tử trong hàm mũ: $$(x - z)^2 = x^2 - 2xz + z^2$$ Do đó: $$k(x, z) = \exp\left(-\frac{x^2}{2\sigma^2}\right) \exp\left(-\frac{z^2}{2\sigma^2}\right) \exp\left(\frac{xz}{\sigma^2}\right)$$
Theo công thức khai triển chuỗi Taylor của hàm $e^u = \sum_{n=0}^{\infty} \frac{u^n}{n!} = 1 + u + \frac{u^2}{2!} + \frac{u^3}{3!} + \dots$
Đặt $u = \frac{xz}{\sigma^2}$:
$$\exp\left(\frac{xz}{\sigma^2}\right) = \sum_{n=0}^{\infty} \frac{(xz)^n}{\sigma^{2n} n!} = \sum_{n=0}^{\infty} \left( \frac{x^n}{\sigma^n \sqrt{n!}} \right) \left( \frac{z^n}{\sigma^n \sqrt{n!}} \right)$$
Nhân lại với phần hệ số phụ thuộc vào $x$ và $z$: $$k(x, z) = \sum_{n=0}^{\infty} \left[ \exp\left(-\frac{x^2}{2\sigma^2}\right) \frac{x^n}{\sigma^n \sqrt{n!}} \right] \cdot \left[ \exp\left(-\frac{z^2}{2\sigma^2}\right) \frac{z^n}{\sigma^n \sqrt{n!}} \right]$$ $$= \langle \phi(x), \phi(z) \rangle$$
Trong đó, vectơ ánh xạ $\phi(x)$ có dạng: $$\phi(x) = \exp\left(-\frac{x^2}{2\sigma^2}\right) \left[ 1, \quad \frac{x}{\sigma}, \quad \frac{x^2}{\sqrt{2}\sigma^2}, \quad \frac{x^3}{\sqrt{6}\sigma^3}, \quad \dots, \quad \frac{x^n}{\sqrt{n!}\sigma^n}, \quad \dots \right]^T$$
Kết luận đẹp đẽ:
Vectơ $\phi(x)$ chứa vô hạn các phần tử, từ lũy thừa bậc 0 đến bậc vô cùng ($\infty$)!
Chỉ với một phép tính $\exp(-\gamma \|\mathbf{x} - \mathbf{z}\|^2)$ mất vài micro-giây, bạn thực chất đang thực hiện tích vô hướng của hai vectơ trong không gian Hilbert có số chiều vô hạn!Băng thông $\sigma$ nói gì? $k(x, z)$ chỉ phụ thuộc khoảng cách $|x - z|$: bằng $1$ khi trùng nhau, $e^{-1/2} = 0{,}61$ khi cách $\sigma$, $0{,}14$ khi cách $2\sigma$, $0{,}011$ khi cách $3\sigma$. Nghĩa là mỗi điểm huấn luyện chỉ "nhìn thấy" hàng xóm trong bán kính $\approx 3\sigma$. $\sigma$ nhỏ: mô hình gồm những quả chuông hẹp, nhớ từng điểm (quá khớp); $\sigma$ lớn: mọi chuông chồng lên nhau thành một khối phẳng (dưới khớp). Trong scikit-learn,
gamma$= 1/(2\sigma^2)$. Phòng thí nghiệm M4 (mục 4) đo điều này bằng số thật.
Ứng dụng: "vô hạn chiều" không có nghĩa là "vô hạn sức mạnh"
Không gian đặc trưng rất giàu làm mô hình có độ linh hoạt cao; khi bandwidth quá nhỏ và điều chuẩn quá yếu, nghiệm có thể bám cả nhiễu. “Vô hạn chiều” tự nó không đồng nghĩa với khả năng biểu diễn mọi hàm hay chắc chắn quá khớp. Cái giữ mô hình lại là hai tham số: $\sigma$ (mỗi chuông rộng bao nhiêu) và $C$ hay $\lambda$ (được phép bỏ qua bao nhiêu điểm). Đây chính là đánh đổi bias–variance của Module 3 mặc bộ áo kernel. Trong M4, tại $\sigma = 0{,}5$, $\lambda = 0{,}01$ với 2 điểm nhiễu: mô hình khớp 100 % tập huấn luyện nhưng mọc 2 "đảo" và chỉ đúng 89,6 % trên lưới kiểm tra; tăng lên $\sigma = 1{,}8$, $\lambda = 0{,}1$: bỏ qua nhiễu, chỉ đúng 87 % trên tập huấn luyện nhưng 97,6 % trên lưới kiểm tra.
Băng thông kernel RBF: mô hình kernel ridge khớp thật trên dữ liệu vòng tròn
Kéo σ, λ và bật/tắt nhiễu— · không gian đặc trưng tương ứng: vô hạn chiều
Việc cần làm: ① Mặc định (có nhiễu, σ = 0,5, λ = 0,01): mô hình khớp 100 % tập huấn luyện nhưng mọc 2 đảo quanh hai điểm nhiễu và chỉ đúng 89,6 % trên lưới kiểm tra — quá khớp. ② Kéo σ lên 1,8 và λ lên 0,1: đảo biến mất, đúng 97,6 % trên lưới kiểm tra dù chỉ 87 % trên tập huấn luyện (2 điểm nhiễu bị bỏ qua) — chấp nhận sai trên train để đúng trên test, đúng tinh thần điều chuẩn. ③ Kéo σ = 2,5 và λ = 1: mọi quả chuông chồng lên nhau thành một khối gần phẳng nghiêng về lớp đông hơn, chỉ còn 60 % trên train — dưới khớp dù kernel 'vô hạn chiều'. ④ Tắt nhiễu: ngay cả σ = 0,15 cũng đúng 99 % — trên dữ liệu sạch, quá khớp không lộ ra; nó chỉ hiện khi có nhiễu để nhớ. Bản 3D của cùng ý tưởng: phòng 08 sách chính.
4. Sợi Dây Liên Kết Giữa Các Thuật Toán Dựa Trên Kernel
Trong cuốn sách, các phương pháp Kernel xuất hiện rải rác ở nhiều chương:
- Chương 3.4: Support Vector Machine với Kernel Trick.
- Chương 7.1: Hồi quy Kernel (Kernel Regression / Nadaraya-Watson).
- Chương 9.1: Ước lượng Mật độ Kernel (Kernel Density Estimation - KDE).
Bản chất toán học thống nhất của chúng được thể hiện qua bảng so sánh:
| Thuật toán | Công thức Dự đoán / Ước lượng | Bản chất Toán học |
|---|---|---|
| KDE (Ch 9.1) | $\hat{f}(\mathbf{x}) = \frac{1}{N b^D} \sum_{i=1}^N k\left(\frac{\mathbf{x} - \mathbf{x}_i}{b}\right)$ | Đặt một "quả chuông" Gaussian lên mỗi điểm mẫu rồi cộng dồn lại để tạo thành hàm mật độ liên tục. |
| Kernel Regression (Ch 7.1) | $\hat{y} = \frac{\sum_{i=1}^N k\left(\frac{\|\mathbf{x}_i - \mathbf{x}\|}{b}\right) y_i}{\sum_{k=1}^N k\left(\frac{\|\mathbf{x}_k - \mathbf{x}\|}{b}\right)}$ | Lấy trung bình có trọng số của các nhãn $y_i$. Điểm nào càng gần $\mathbf{x}$ thì Kernel $k(\cdot)$ cho trọng số càng cao. |
| Kernel SVM (Ch 3.4) | $f(\mathbf{x}) = \text{sign}\left(\sum_{i \in \text{SVs}} \alpha_i y_i k(\mathbf{x}_i, \mathbf{x}) + b\right)$ | Tương tự Kernel Regression, nhưng có tính chất thưa (sparsity): chỉ giữ lại những điểm nằm ở biên (Support Vectors), các điểm còn lại có $\alpha_i = 0$. |
Cả ba đều có dạng "tổng có trọng số của các quả chuông đặt tại điểm huấn luyện" $\sum_i c_i\, k(\mathbf{x}_i, \mathbf{x})$; khác nhau chỉ ở cách chọn hệ số $c_i$: KDE lấy $c_i = 1/N$ (đếm), kernel regression lấy $c_i \propto y_i$ (trung bình nhãn), SVM học $c_i = \alpha_i y_i$ và ép phần lớn về 0. Bản 3D của KDE/GMM: phòng 23b sách chính.
Ứng dụng trong ML/DL: Attention có thể được nhìn như một kernel smoother học được
Viết lại công thức Nadaraya–Watson với trọng số $w_i = \dfrac{k(\mathbf{x}, \mathbf{x}_i)}{\sum_j k(\mathbf{x}, \mathbf{x}_j)}$: $\hat y = \sum_i w_i y_i$. Bây giờ nhìn attention (Ch 7.7, phòng 19):
$$\text{Attention}(\mathbf{q}, \{\mathbf{k}_i, \mathbf{v}_i\}) = \sum_i \underbrace{\frac{\exp(\mathbf{q}\cdot\mathbf{k}_i/\sqrt{d})}{\sum_j \exp(\mathbf{q}\cdot\mathbf{k}_j/\sqrt{d})}}_{\text{softmax} = w_i}\ \mathbf{v}_i$$
| Hồi quy kernel | Attention |
|---|---|
| Điểm truy vấn $\mathbf{x}$ | Truy vấn $\mathbf{q}$ |
| Điểm huấn luyện $\mathbf{x}_i$ | Khoá $\mathbf{k}_i$ |
| Nhãn $y_i$ | Giá trị $\mathbf{v}_i$ |
| Kernel $k(\mathbf{x}, \mathbf{x}_i) = e^{-\|\mathbf{x}-\mathbf{x}_i\|^2/2\sigma^2}$ (cố định, theo khoảng cách) | Kernel $e^{\mathbf{q}\cdot\mathbf{k}_i/\sqrt{d}}$ (theo tích vô hướng, với $\mathbf{q} = \mathbf{W}_q\mathbf{x}$, $\mathbf{k}_i = \mathbf{W}_k\mathbf{x}_i$ học được) |
Về mặt cấu trúc, đây đều là trung bình có trọng số theo một điểm số tương đồng, nên trực giác của normalized kernel smoother rất hữu ích để hiểu attention. Tuy nhiên, đây là phép tương tự chứ không phải đồng nhất: $Q/K/V$ là các phép chiếu học được, điểm số có thể bất đối xứng, value là vectơ, và attention còn có mask, nhiều head cùng residual. Hệ số $1/\sqrt{d}$ chủ yếu giữ độ lớn logits ổn định khi chiều tăng; nó không phải đúng nghĩa là băng thông Gaussian $\sigma$.
5. So Sánh Bản Chất: Kernel Trick vs. Deep Learning
Cả Kernel Trick và Mạng nơ-ron sâu đều giải quyết xuất sắc các bài toán phi tuyến tính phức tạp, nhưng triết lý thiết kế của chúng đối nghịch nhau:
| Tiêu chí | Thủ thuật Kernel (Kernel Methods / SVM) | Học Sâu (Deep Learning / Mạng Nơ-ron) |
|---|---|---|
| Cơ chế biểu diễn phi tuyến | Cố định trước bằng một hàm toán học giải tích ($k(\mathbf{x}, \mathbf{z})$ như RBF, Polynomial). | Tự động học các biểu diễn đặc trưng (Representation Learning) từ dữ liệu qua các hàm kích hoạt phi tuyến. |
| Không gian tối ưu hóa | Bài toán Lồi (Convex Optimization): Mọi cực tiểu cục bộ đều là cực tiểu toàn cục. Nghiệm chỉ duy nhất khi có thêm tính lồi nghiêm hoặc điều kiện tương ứng. | Bài toán Phi lồi (Non-convex Optimization): Hàm mất mát có vô số cực tiểu địa phương và điểm yên ngựa. |
| Khả năng mở rộng dữ liệu (Scalability) | Kém khi dữ liệu lớn: Ma trận Kernel kích thước $N \times N$, chi phí tính toán tỷ lệ $O(N^2)$ hoặc $O(N^3)$. Khó chạy với hàng triệu mẫu. | Tốt ở quy mô lớn: với batch và kiến trúc cố định, chi phí một epoch thường tăng gần tuyến tính theo số mẫu và tận dụng song song hóa GPU; tổng chi phí vẫn phụ thuộc số tham số, chiều dài chuỗi và số epoch. |
| Số lượng tham số | Phụ thuộc vào số lượng mẫu huấn luyện ($N$ nhân tử $\alpha_i$). | Phụ thuộc vào kiến trúc mạng (số tầng, số nơ-ron), cố định sau khi huấn luyện xong. |
| Bảo đảm lý thuyết | Cơ sở toán học giải tích hàm và lý thuyết học thống kê (Vapnik-Chervonenkis) cực kỳ chặt chẽ. | Định lý Xấp xỉ Vạn năng (Universal Approximation Theorem), nhưng nhiều cơ chế tổng quát hóa vẫn đang được hoàn thiện lý thuyết. |
Ứng dụng: kernel không "chết" — nó sống bên trong Deep Learning
- Nhiều mạng phân loại dùng một đầu ra tuyến tính trên biểu diễn $\mathbf{h}_L$. Tích vô hướng $\mathbf{h}_L(\mathbf{x})\cdot\mathbf{h}_L(\mathbf{z})$ khi đó tạo một độ tương đồng do representation học được; gọi nó là "learned kernel" là trực giác hữu ích, không phải mọi mạng đều là một kernel machine theo nghĩa chặt. Trong transfer learning, ta thường đóng băng backbone rồi huấn luyện lại linear head.
- Attention là hồi quy kernel với kernel học được (mục 4).
- Neural Tangent Kernel: một mạng vô hạn rộng huấn luyện bằng gradient descent tương đương chính xác với hồi quy kernel — cầu nối lý thuyết giữa hai cột của bảng.
- Quy tắc chọn trong thực tế: $N \lesssim 10^4$ và đặc trưng đã tốt $\Rightarrow$ kernel SVM/GP (lồi, ít siêu tham số, có độ bất định); $N$ lớn hoặc dữ liệu thô (ảnh, âm thanh, văn bản) $\Rightarrow$ mạng sâu vì nó tự tạo đặc trưng và huấn luyện được theo mini-batch. Bảng ma trận ở Module 7 tổng kết các lựa chọn này.
06Module 6: Lý Thuyết Thông Tin & Bản Chất Toán Học Của Học Không Giám Sát
(Information Theory & The Mathematical Foundations of Unsupervised Learning)
1. Lý Thuyết Thông Tin: Sợi Dây Liên Kết Vô Hình Trong Machine Learning
Nhiều người học thường ngạc nhiên khi thấy các khái niệm như Entropy, Information Gain, Cross-Entropy, và Phân kỳ KL xuất hiện xuyên suốt từ Cây Quyết Định (Chương 3.3), Hồi quy Logistic (Chương 3.2), Mạng Nơ-ron (Chương 6.1) cho đến giảm chiều dữ liệu t-SNE / UMAP (Chương 9.3.2).
Nhiều khái niệm trong số đó được liên kết và diễn giải tự nhiên bằng Lý thuyết Thông tin (Information Theory), do Claude Shannon đặt nền móng năm 1948; tuy nhiên mỗi thuật toán còn dựa trên các giả định thống kê và mục tiêu riêng.
1.1. Thông Tin Tự Thân (Self-Information)
Shannon đặt câu hỏi: Làm sao để đo lường lượng "thông tin" hoặc "sự bất ngờ" của một biến cố xảy ra?
- Nếu một biến cố chắc chắn xảy ra 100% (ví dụ: "Ngày mai mặt trời mọc ở hướng Đông"): Biến cố này không mang lại bất kỳ thông tin bất ngờ nào mới. Lượng thông tin bằng 0.
- Nếu một biến cố cực kỳ hiếm gặp xảy ra (ví dụ: "Có tuyết rơi giữa sa mạc Sahara"): Biến cố này mang lại một lượng thông tin chấn động, làm thay đổi toàn bộ nhận thức.
Do đó, lượng thông tin phải tỷ lệ nghịch với xác suất xảy ra $P(x)$:
$$I(x) \stackrel{\text{def}}{=} -\log_2 P(x)$$
- Nếu $P(x) = 1 \implies I(x) = -\log_2(1) = 0 \text{ bit}$.
- Nếu $P(x) = 0.5 \implies I(x) = -\log_2(0.5) = 1 \text{ bit}$ (tương đương kết quả tung một đồng xu công bằng).
- Nếu $P(x) = 0.001 \implies I(x) = -\log_2(0.001) \approx 9.97 \text{ bit}$.
1.2. Entropy Shannon: Thước Đo Độ Hỗn Loạn Trung Bình
Entropy $H(X)$ là kỳ vọng toán học của lượng thông tin tự thân trên toàn bộ phân phối:
$$H(X) \stackrel{\text{def}}{=} \mathbb{E}[I(X)] = - \sum_{i=1}^k P(x_i) \log_2 P(x_i)$$
-
Khi tập dữ liệu hoàn toàn thuần khiết ($p=0$ hoặc $p=1$):
$H(X) = 0$. Không còn bất kỳ sự bất định nào, mọi mẫu đều thuộc cùng một lớp. -
Khi tập dữ liệu hỗn loạn tối đa ($p=0.5$ với 2 lớp):
$H(X) = - (0.5 \log_2 0.5 + 0.5 \log_2 0.5) = 1 \text{ bit}$. Độ bất định đạt đỉnh điểm, việc đoán nhãn giống hệt như tung đồng xu ngẫu nhiên.
1.3. Ứng Dụng Trong Cây Quyết Định ID3 (Information Gain)
Trong Chương 3.3.1, thuật toán ID3 tìm cách chia một tập dữ liệu $S$ thành hai tập con $S_-$ và $S_+$ dựa trên thuộc tính $j$ và ngưỡng $t$.
- Entropy trước khi chia: $H(S)$
-
Entropy có trọng số sau khi chia: $$H(S \mid j, t) = \frac{|S_-|}{|S|} H(S_-) + \frac{|S_+|}{|S|} H(S_+)$$
-
Mức giảm độ hỗn loạn (Mức tăng thông tin - Information Gain): $$IG(S; j, t) = H(S) - H(S \mid j, t)$$
Bản chất toán học:
Thuật toán ID3 tại mỗi bước chỉ đơn giản là tìm cặp $(j, t)$ sao cho Information Gain $IG$ là lớn nhất, tức là chia dữ liệu sao cho các tập con thu được thuần khiết nhất có thể (Entropy thấp nhất).Ví dụ số: tập $S$ có 10 mẫu, 6 dương và 4 âm: $H(S) = -0{,}6\log_2 0{,}6 - 0{,}4\log_2 0{,}4 = 0{,}442 + 0{,}529 = 0{,}971$ bit. Một phép chia cho nhánh trái 4 mẫu (4 dương, 0 âm) và nhánh phải 6 mẫu (2 dương, 4 âm): $H(S_-) = 0$, $H(S_+) = -\tfrac13\log_2\tfrac13 - \tfrac23\log_2\tfrac23 = 0{,}918$. Entropy có trọng số sau chia: $0{,}4 \cdot 0 + 0{,}6 \cdot 0{,}918 = 0{,}551$. Vậy $IG = 0{,}971 - 0{,}551 = 0{,}420$ bit: phép chia này "mua" được 0,42 bit thông tin về nhãn. ID3 thử mọi cặp $(j, t)$ rồi chọn cái có $IG$ lớn nhất — không thông minh, chỉ chăm chỉ (phòng 07 sách chính cho xem nó quét từng ngưỡng).
Ứng dụng: Gini, XGBoost và vì sao cây không cần chuẩn hoá đặc trưng
- Gini impurity $= 1 - \sum_k p_k^2$ (CART, scikit-learn mặc định) là một tiêu chuẩn tạp chất bậc hai, rẻ hơn entropy vì không có log. Trong nhiều tập dữ liệu hai tiêu chuẩn chọn các split tương tự, nhưng chúng không đồng nhất; cả hai đều bằng 0 khi nút hoàn toàn thuần khiết.
- Cây hồi quy thay entropy bằng phương sai của $y$ trong mỗi nhánh — cũng là "độ hỗn loạn", chỉ đổi cho nhãn liên tục. Gradient boosting (Ch 7.5.2) khớp từng cây vào gradient của hàm mất mát nên bất kỳ loss nào ở Module 3–4 đều dùng được.
- Vì mỗi phép chia chỉ so $x^{(j)}$ với ngưỡng $t$, cây bất biến với mọi phép biến đổi đơn điệu của từng đặc trưng: không cần chuẩn hoá, không sợ thang đo — trái ngược hoàn toàn với các mô hình dựa trên tích vô hướng ở Module 2.
1.4. Mối Liên Hệ Giữa Cross-Entropy Và Phân Kỳ KL (Kullback-Leibler)
Giả sử ta có hai phân phối xác suất:
- $P(x)$: Phân phối thực tế của dữ liệu (Ground Truth).
- $Q(x)$: Phân phối do mô hình dự đoán (Prediction).
Để đo lường khoảng cách giữa phân phối dự đoán $Q$ so với phân phối thật $P$, ta dùng Phân kỳ Kullback-Leibler (KL Divergence):
$$D_{\text{KL}}(P \parallel Q) \stackrel{\text{def}}{=} \sum_{x} P(x) \ln \frac{P(x)}{Q(x)} = \sum_{x} P(x) \ln P(x) - \sum_{x} P(x) \ln Q(x)$$
Tách thành hai đại lượng: $$D_{\text{KL}}(P \parallel Q) = - H(P) + H(P, Q)$$ Trong đó:
- $H(P) = -\sum P(x) \ln P(x)$ là Entropy tự thân của dữ liệu thật.
- $H(P, Q) = -\sum P(x) \ln Q(x)$ chính là Cross-Entropy (Độ hỗn loạn chéo)!
Chuyển vế: $$H(P, Q) = H(P) + D_{\text{KL}}(P \parallel Q)$$
Nhận xét: Trong quá trình huấn luyện mô hình, tập dữ liệu huấn luyện đã cố định, do đó phân phối thật $P$ là không đổi $\implies H(P)$ là một hằng số cố định.
Mối liên hệ quan trọng:
Khi phân phối mục tiêu $P$ được giữ cố định, $H(P)$ là hằng số, nên tối thiểu hóa Cross-Entropy $H(P,Q)$ tương đương với tối thiểu hóa $D_{\text{KL}}(P\parallel Q)$.
Mô hình kéo $Q$ gần $P$ trong giới hạn của họ mô hình, dữ liệu và quá trình tối ưu.Ví dụ số: $P = (0{,}5;\ 0{,}5)$ (đồng xu công bằng), mô hình đoán $Q = (0{,}9;\ 0{,}1)$. $D_{\text{KL}}(P\|Q) = 0{,}5\ln\frac{0{,}5}{0{,}9} + 0{,}5\ln\frac{0{,}5}{0{,}1} = -0{,}294 + 0{,}805 = 0{,}511$ nat. Đảo chiều: $D_{\text{KL}}(Q\|P) = 0{,}9\ln 1{,}8 + 0{,}1\ln 0{,}2 = 0{,}529 - 0{,}161 = 0{,}368$ nat. KL không đối xứng — nó không phải khoảng cách. $D_{\text{KL}}(P\|Q)$ phạt nặng khi $Q$ cho xác suất quá thấp ở chỗ $P$ có khối lượng (mô hình "bỏ sót" một khả năng), nên huấn luyện bằng MLE ép mô hình phủ mọi khả năng của dữ liệu.
Ứng dụng trong ML/DL: entropy, cross-entropy và KL là ngôn ngữ chung của mô hình hiện đại
- Huấn luyện mô hình ngôn ngữ: loss $= H(P_{\text{dữ liệu}}, Q_{\text{mô hình}})$ tính trên phân phối token kế tiếp. Vì $H(P)$ là hằng số (entropy thật của ngôn ngữ), giảm loss $=$ giảm KL. Perplexity $= e^{\text{loss}}$ (hoặc $2^{H}$ nếu dùng bit): mô hình có loss $3{,}0$ nat "bối rối như chọn đều giữa 20 token".
- Chưng cất tri thức (distillation): học sinh tối thiểu $D_{\text{KL}}(P_{\text{thầy}} \| Q_{\text{trò}})$ trên nhãn mềm của thầy — cross-entropy với $P$ không còn là one-hot.
- RLHF / DPO: khi tinh chỉnh LLM theo phản hồi người dùng, thêm số hạng $\beta\, D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}})$ để mô hình mới không trôi quá xa mô hình gốc — KL đóng vai điều chuẩn (Module 3, MAP) trong không gian phân phối.
- VAE cực đại ELBO $= \mathbb{E}[\ln p(\mathbf{x}\mid\mathbf{z})] - D_{\text{KL}}(q(\mathbf{z}\mid\mathbf{x}) \| p(\mathbf{z}))$: cùng cấu trúc "khớp dữ liệu − KL tới tiên nghiệm", và cũng là mô hình biến ẩn như GMM ở mục 2.2.
- t-SNE (Ch 9.3.2) tối thiểu $D_{\text{KL}}$ giữa phân phối "hàng xóm" ở không gian gốc và ở mặt phẳng 2D — lý do nó bảo toàn cụm cục bộ tốt nhưng méo khoảng cách toàn cục.
2. Bản Chất Toán Học Của Học Không Giám Sát (Unsupervised Learning)
Học không giám sát xử lý bài toán không có nhãn $\{\mathbf{x}_i\}_{i=1}^N$. Hai thuật toán toán học sâu sắc nhất trong Chương 9 là PCA và GMM (Gaussian Mixture Model).
2.1. Phân Tích Thành Phần Chính (PCA) & Bài Toán Trị Riêng
Mục tiêu của PCA (Chương 9.3.1): Chiếu dữ liệu từ không gian $D$-chiều xuống một đường thẳng (hoặc siêu phẳng con ít chiều) được định hướng bởi vectơ đơn vị $\mathbf{u}$ ($\|\mathbf{u}\| = 1$).
Hai bài toán tối ưu tương đương:
- Góc nhìn 1: Tìm phương $\mathbf{u}$ sao cho Phương sai của các điểm dữ liệu sau khi chiếu là lớn nhất (giữ lại tối đa thông tin biến thiên).
- Góc nhìn 2: Tìm phương $\mathbf{u}$ sao cho Tổng bình phương khoảng cách từ các điểm gốc đến hình chiếu là nhỏ nhất (tối thiểu hóa sai số tái tạo).
Chứng minh bằng Toán học:
Giả sử dữ liệu đã được trừ trung bình ($\sum \mathbf{x}_i = \mathbf{0}$).
Tọa độ hình chiếu của điểm $\mathbf{x}_i$ lên vectơ đơn vị $\mathbf{u}$ là tích vô hướng $\mathbf{u}^T \mathbf{x}_i$.
Phương sai của tập dữ liệu sau khi chiếu:
$$\text{Var} = \frac{1}{N} \sum_{i=1}^N (\mathbf{u}^T \mathbf{x}_i)^2 = \frac{1}{N} \sum_{i=1}^N \mathbf{u}^T \mathbf{x}_i \mathbf{x}_i^T \mathbf{u} = \mathbf{u}^T \left( \frac{1}{N} \sum_{i=1}^N \mathbf{x}_i \mathbf{x}_i^T \right) \mathbf{u}$$
Đại lượng trong ngoặc chính là Ma trận Hiệp phương sai của dữ liệu (Covariance Matrix): $$\boldsymbol{\Sigma} = \frac{1}{N} \mathbf{X}^T \mathbf{X}$$
Vậy bài toán tối ưu có ràng buộc là: $$\max_{\mathbf{u}} \mathbf{u}^T \boldsymbol{\Sigma} \mathbf{u} \quad \text{thỏa mãn} \quad \mathbf{u}^T \mathbf{u} = 1$$
Sử dụng nhân tử Lagrange $\lambda$: $$\mathcal{L}(\mathbf{u}, \lambda) = \mathbf{u}^T \boldsymbol{\Sigma} \mathbf{u} - \lambda (\mathbf{u}^T \mathbf{u} - 1)$$
Lấy đạo hàm theo vectơ $\mathbf{u}$ và cho bằng $\mathbf{0}$: $$\nabla_{\mathbf{u}} \mathcal{L} = 2 \boldsymbol{\Sigma} \mathbf{u} - 2 \lambda \mathbf{u} = \mathbf{0}$$ $$\iff \boldsymbol{\Sigma} \mathbf{u} = \lambda \mathbf{u}$$
Khám phá toán học kinh điển:
Phương trình $\boldsymbol{\Sigma} \mathbf{u} = \lambda \mathbf{u}$ chính là phương trình Vectơ riêng và Giá trị riêng (Eigenvector & Eigenvalue) quen thuộc trong đại số tuyến tính!
Phương $\mathbf{u}_1$ chứa nhiều thông tin nhất (Thành phần chính 1) chính là Vectơ riêng ứng với Giá trị riêng lớn nhất $\lambda_{\max}$ của ma trận hiệp phương sai.
Thành phần chính thứ 2 là vectơ riêng trực giao với $\mathbf{u}_1$ ứng với giá trị riêng lớn thứ 2, v.v.
Thay $\boldsymbol{\Sigma}\mathbf{u} = \lambda\mathbf{u}$ ngược vào phương sai: $\mathbf{u}^T\boldsymbol{\Sigma}\mathbf{u} = \lambda\,\mathbf{u}^T\mathbf{u} = \lambda$. Vậy giá trị riêng chính là phương sai dọc theo trục riêng đó, và "tỉ lệ phương sai giữ lại" khi giữ $K$ thành phần là $\sum_{k\le K}\lambda_k / \sum_j \lambda_j$ — con số 97,2 % trong phòng 24b sách chính được tính đúng bằng công thức này.
Ứng dụng: PCA là autoencoder tuyến tính, và khi nào nó thất bại
- PCA = autoencoder một tầng ẩn tuyến tính (Ch 9.3.3): bộ mã hoá $\mathbf{z} = \mathbf{U}_K^T\mathbf{x}$, bộ giải mã $\hat{\mathbf{x}} = \mathbf{U}_K\mathbf{z}$, huấn luyện bằng MSE tái tạo. Góc nhìn 2 ở trên (min sai số tái tạo) nói đúng điều này; autoencoder sâu chỉ thay $\mathbf{U}_K$ bằng mạng phi tuyến.
- Thung lũng hẹp của Module 4 cũng là bài toán trị riêng: tỉ số $\lambda_{\max}/\lambda_{\min}$ của $\mathbf{X}^T\mathbf{X}$ (số điều kiện) quyết định GD zíc-zắc bao nhiêu; whitening bằng PCA (chia mỗi trục riêng cho $\sqrt{\lambda_k}$) làm bát tròn xoe.
- Giới hạn: PCA chỉ xoay trục, nên với dữ liệu nằm trên mặt cong (cuộn Thuỵ Sĩ ở phòng 24b: giữ 86 % phương sai nhưng vứt đúng trục "độ cao" của tấm) cần UMAP/t-SNE hoặc autoencoder phi tuyến — đó là chỗ tuyến 4 của Module 1 (phi tuyến) gặp học không giám sát.
2.2. Mô Hình Hỗn Hợp Gaussian (GMM) & Thuật Toán EM (Expectation-Maximization)
Trong Chương 9.2.4, GMM coi dữ liệu là sự pha trộn của $k$ phân phối chuẩn Gaussian:
$$P(\mathbf{x}) = \sum_{j=1}^k \pi_j \mathcal{N}\left(\mathbf{x} \mid \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j\right)$$
- $\pi_j$ là trọng số pha trộn ($\sum \pi_j = 1$).
- $\boldsymbol{\mu}_j$ và $\boldsymbol{\Sigma}_j$ là kỳ vọng và ma trận hiệp phương sai của cụm thứ $j$.
Vấn đề toán học nan giải:
Hàm Log-Likelihood của GMM có dạng: $$\ln L = \sum_{i=1}^N \ln \left( \sum_{j=1}^k \pi_j \mathcal{N}(\mathbf{x}_i \mid \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j) \right)$$ Tổng $\sum_{j=1}^k$ nằm bên trong dấu logarit! Khi lấy đạo hàm, ta không thể tách rời các cụm, khiến việc tìm nghiệm trực tiếp bằng MLE là bất khả thi.
Lời giải: Thuật toán EM với Biến Ẩn (Latent Variables)
Ta tưởng tượng có một biến ẩn $z_i \in \{1, \dots, k\}$ cho biết điểm $\mathbf{x}_i$ thực sự được sinh ra từ cụm Gaussian nào.
-
Bước E (Kỳ vọng - Expectation):
Dữ liệu chưa có nhãn nên ta không biết chắc $z_i$. Ta dùng Định lý Bayes để tính xác suất hậu nghiệm (gọi là Trách nhiệm - Responsibility $\gamma_{ij}$) rằng điểm $\mathbf{x}_i$ thuộc về cụm $j$: $$\gamma_{ij} = P(z_i = j \mid \mathbf{x}_i) = \frac{\pi_j \mathcal{N}(\mathbf{x}_i \mid \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)}{\sum_{l=1}^k \pi_l \mathcal{N}(\mathbf{x}_i \mid \boldsymbol{\mu}_l, \boldsymbol{\Sigma}_l)}$$ -
Bước M (Cực đại hóa - Maximization):
Coi xác suất $\gamma_{ij}$ như trọng số mềm, ta cập nhật lại các tham số của từng phân phối Gaussian bằng trung bình có trọng số: $$\boldsymbol{\mu}_j^{\text{new}} = \frac{\sum_{i=1}^N \gamma_{ij} \mathbf{x}_i}{\sum_{i=1}^N \gamma_{ij}}$$ $$\boldsymbol{\Sigma}_j^{\text{new}} = \frac{\sum_{i=1}^N \gamma_{ij} (\mathbf{x}_i - \boldsymbol{\mu}_j)(\mathbf{x}_i - \boldsymbol{\mu}_j)^T}{\sum_{i=1}^N \gamma_{ij}}$$ $$\pi_j^{\text{new}} = \frac{1}{N} \sum_{i=1}^N \gamma_{ij}$$ -
Lặp lại bước E và bước M cho đến khi Log-Likelihood hội tụ.
Mối liên hệ giữa k-Means và GMM:
Thuật toán $k$-Means thực chất chỉ là một trường hợp đặc biệt cực đoan của GMM:
Nếu ta giả định các ma trận hiệp phương sai đều là hình cầu giống nhau ($\boldsymbol{\Sigma}_j = \sigma^2 \mathbf{I}$) và cho phương sai tiến dần về 0 ($\sigma^2 \to 0$), thì các xác suất mềm $\gamma_{ij}$ sẽ chuyển thành gán cứng: chỉ cụm gần nhất có $\gamma_{ij} = 1$, các cụm còn lại bằng $0$!Ví dụ số về "trách nhiệm": hai cụm 1 chiều, $\mu_1 = 0$, $\mu_2 = 4$, cùng $\sigma = 1$, $\pi_1 = \pi_2$. Điểm $x = 1$: mật độ $\mathcal{N}(1\mid 0, 1) \propto e^{-0{,}5} = 0{,}607$, $\mathcal{N}(1\mid 4, 1) \propto e^{-4{,}5} = 0{,}011$, nên $\gamma_{i1} = 0{,}607/(0{,}607+0{,}011) = 0{,}982$. Điểm $x = 2$ (chính giữa): $\gamma = 0{,}5/0{,}5$ — GMM thừa nhận nó không biết, còn $k$-Means buộc phải gán cho một bên. Thu $\sigma$ xuống $0{,}1$: hai mật độ tỉ lệ với $e^{-50}$ và $e^{-450}$, tỉ số $e^{-400} \approx 10^{-174}$, nên $\gamma_{i1}$ của $x = 1$ bằng $1$ sai khác chưa tới $10^{-170}$ — thực chất là gán cứng.
Ứng dụng: EM là khuôn mẫu chung cho nhiều bài toán "có biến ẩn"
- $k$-Means có thể xem như một giới hạn/gán cứng của EM cho GMM cầu với phương sai bằng nhau: bước gán gần với bước E, bước dời tâm gần với bước M (phòng 22 sách chính chạy từng nửa bước). Cả hai đều chỉ đảm bảo hội tụ về cực tiểu cục bộ, nên khởi tạo (k-means++) quan trọng.
- Với EM chính xác, log-likelihood không giảm sau mỗi vòng E–M — phòng 23b đo điều đó bằng số. Khi đặt $k = 4$ cho dữ liệu có vẻ chỉ có 3 cụm, thành phần thừa có thể nhận trọng số nhỏ, chia đôi một cụm hoặc bám nhiễu; $\pi_j \to 0$ không phải kết quả được bảo đảm.
- GMM là bộ phân loại sinh (generative): biết $P(\mathbf{x}\mid \text{cụm})$ thì dùng Bayes tính được $P(\text{cụm}\mid\mathbf{x})$ — đúng phép tính $\gamma_{ij}$ ở bước E. Naive Bayes và LDA là các bộ phân loại sinh có liên hệ trực tiếp với góc nhìn này. Mô hình khuếch tán cũng thuộc họ mô hình sinh, nhưng được huấn luyện bằng quá trình thêm/khử nhiễu khác với vòng lặp EM của GMM.
- VAE cũng là mô hình biến ẩn nhưng dùng biến ẩn liên tục, decoder phi tuyến và một posterior xấp xỉ học được. ELBO đóng vai trò cận dưới khả vi cho log-likelihood khi posterior chính xác khó tính; nó có họ hàng về tư tưởng với EM/variational EM, nhưng VAE không đơn giản là GMM với "vô hạn cụm".
07Module 7: Bảng Ma Trận Giải Phẫu Toàn Diện Các Thuật Toán Học Máy
(The Unified Algorithm Anatomy Matrix)
1. Giới Thiệu Ma Trận Hợp Nhất
Chương 4 của cuốn sách đưa ra ba khối xây dựng để phân tích một learning algorithm:
mô hình/không gian giả thuyết ($\mathcal{H}$) + hàm mất mát/mục tiêu ($\mathcal{L}$) + quy trình tìm nghiệm ($\mathcal{O}$). Cẩm nang dùng đây như một hệ quy chiếu; với $k$-NN, cây, clustering hay RL, tên gọi của từng cột cần được hiểu linh hoạt.
Bảng ma trận dưới đây hệ thống hóa và đặt hơn 14 thuật toán xuất hiện trong cuốn sách lên cùng một hệ quy chiếu toán học chuẩn xác, giúp bạn so sánh và liên kết bản chất của chúng ngay trong một cái nhìn.
2. Bảng Ma Trận Giải Phẫu Toán Học Hợp Nhất
| Thuật toán | Không gian Giả thuyết $\mathcal{H}$ ($f(\mathbf{x})$) | Hàm Mất mát / Mục tiêu $\mathcal{L}$ | Quy trình Tối ưu $\mathcal{O}$ | Dạng Ranh giới Quyết định | Bản chất Mô hình | Giả định Toán học Ngầm định |
|---|---|---|---|---|---|---|
| Hồi quy Tuyến tính (OLS) (Ch 3.1) | $f(\mathbf{x}) = \mathbf{w}\mathbf{x} + b$ | $\text{MSE} = \frac{1}{N}\sum (y_i - f(\mathbf{x}_i))^2$ | Nghiệm dạng đóng: $\mathbf{w}^* = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}$ (hoặc GD) | Siêu phẳng tuyến tính $(D-1)$ chiều | Tham số (Parametric), Dựa trên mô hình | Mối quan hệ tuyến tính; Nhiễu Gauss $\epsilon \sim \mathcal{N}(0, \sigma^2)$ đồng phương sai; không đa cộng tuyến |
| Ridge Regression ($L_2$) (Ch 5.4) | $f(\mathbf{x}) = \mathbf{w}\mathbf{x} + b$ | $\text{MSE} + \lambda \|\mathbf{w}\|_2^2$ | Nghiệm dạng đóng: $\mathbf{w}^* = (\mathbf{X}^T\mathbf{X} + \lambda \mathbf{I})^{-1}\mathbf{X}^T\mathbf{y}$ | Siêu phẳng tuyến tính | Tham số, Dựa trên mô hình | Nhiễu Gauss; Tiên nghiệm trọng số là Gaussian $\mathbf{w} \sim \mathcal{N}(\mathbf{0}, \sigma_0^2\mathbf{I})$ (MAP) |
| Lasso Regression ($L_1$) (Ch 5.4) | $f(\mathbf{x}) = \mathbf{w}\mathbf{x} + b$ | $\text{MSE} + \lambda \|\mathbf{w}\|_1$ | Coordinate Descent hoặc Proximal Gradient Descent | Siêu phẳng tuyến tính (nghiệm thưa - ít đặc trưng) | Tham số, Dựa trên mô hình | Nhiễu Gauss; Tiên nghiệm trọng số là Laplace $\mathbf{w} \sim \text{Laplace}(\mathbf{0}, b_0)$ |
| Hồi quy Logistic (Ch 3.2) | $f(\mathbf{x}) = \sigma(\mathbf{w}\mathbf{x} + b) = \frac{1}{1 + e^{-(\mathbf{w}\mathbf{x}+b)}}$ | $\text{BCE} = -\frac{1}{N}\sum [y_i \ln \hat{y}_i + (1-y_i)\ln(1-\hat{y}_i)]$ | Gradient Descent, SGD, hoặc Newton-Raphson (IRLS) | Siêu phẳng phân tách tại xác suất 0.5 ($\mathbf{w}\mathbf{x}+b=0$) | Tham số, Dựa trên mô hình | Log-odds tuyến tính với đặc trưng; Nhãn tuân theo phân phối Bernoulli |
| Linear SVM (Soft Margin) (Ch 3.4) | $f(\mathbf{x}) = \text{sign}(\mathbf{w}\mathbf{x} + b)$ | $\frac{1}{2}\|\mathbf{w}\|^2 + C \sum \max(0, 1 - y_i(\mathbf{w}\mathbf{x}_i + b))$ (Hinge Loss) | Quy hoạch Toàn phương Lồi (SMO, Quadratic Programming) | Siêu phẳng phân tách cực đại hóa lề khoảng cách (Margin) | Tham số (sau huấn luyện chỉ giữ Support Vectors) | Dữ liệu có thể xấp xỉ phân tách tuyến tính; Lề an toàn chống nhiễu |
| Kernel SVM (RBF) (Ch 3.4) | $f(\mathbf{x}) = \text{sign}\left(\sum_{i \in \text{SV}} \alpha_i y_i k(\mathbf{x}_i, \mathbf{x}) + b\right)$ | Bài toán Đối ngẫu Lagrange với hàm Kernel $k(\mathbf{x}_i, \mathbf{x}_j)$ | Quy hoạch Toàn phương Lồi (SMO Solver) | Bề mặt cong phi tuyến trơn phức tạp trong không gian gốc | Phi tham số (Non-parametric), Dựa trên điểm biên | Tồn tại siêu phẳng phân tách trong không gian đặc trưng vô hạn chiều |
| $k$-Láng giềng gần nhất ($k$-NN) (Ch 3.5) | $f(\mathbf{x}) = \text{mode}\{y_k\}$ (phân loại) hoặc $\text{mean}\{y_k\}$ (hồi quy) | Không có hàm mất mát huấn luyện tường minh | Không tối ưu hóa trước (Lazy Learning / Lưu toàn bộ dữ liệu) | Phân hoạch Voronoi từng mảnh cục bộ | Phi tham số, Dựa trên cá thể (Instance-based) | Tính trơn cục bộ: các mẫu gần nhau trong không gian đặc trưng có cùng nhãn |
| Cây Quyết định (ID3/CART) (Ch 3.3) | $f(\mathbf{x}) = \sum_{m=1}^M c_m \mathbb{I}(\mathbf{x} \in R_m)$ | Entropy / Gini Impurity (Phân loại) hoặc MSE (Hồi quy) | Tìm kiếm tham lam theo heuristic (Greedy recursive splitting) | Lưới các siêu hộp vuông góc với các trục tọa độ | Phi tham số, Dựa trên mô hình | Các đặc trưng có thể phân tách trực giao độc lập từng chiều |
| Random Forest (Ch 7.5.1) | $f(\mathbf{x}) = \frac{1}{B}\sum_{b=1}^B T_b(\mathbf{x})$ | Entropy / Gini trung bình của các cây con độc lập | Huấn luyện song song $B$ cây con trên các tập Bootstrap mẫu & đặc trưng | Bậc thang mịn hơn nhiều so với cây đơn lẻ | Phi tham số kết hợp (Ensemble Bagging) | Sai số của các cây con không tương quan với nhau (Uncorrelated errors) $\implies$ Giảm Variance |
| Gradient Boosting (GBDT) (Ch 7.5.2) | $f_m(\mathbf{x}) = f_{m-1}(\mathbf{x}) + \alpha T_m(\mathbf{x})$ | Mất mát bất kỳ khả vi (MSE, Cross-Entropy, Huber…) | Khớp cây $T_m$ vào phần dư (Residuals / Gradient âm của bước trước) | Đường bậc thang phi tuyến rất linh hoạt | Phi tham số kết hợp (Ensemble Boosting) | Chuỗi mô hình yếu có thể giảm dần sai số có hệ thống $\implies$ Giảm Bias |
| Perceptron Đa tầng (MLP) (Ch 6.1) | $f(\mathbf{x}) = g_L(\mathbf{W}_L \dots g_1(\mathbf{W}_1\mathbf{x}+\mathbf{b}_1))$ | Cross-Entropy (Phân loại) hoặc MSE (Hồi quy) | Lan truyền ngược (Backprop / Chain Rule) + SGD / Adam | Siêu mặt phi tuyến liên tục uốn lượn tùy ý | Tham số (Số tham số rất lớn), Dựa trên mô hình | Dữ liệu phức tạp tuân theo cấu trúc phân tầng trừu tượng |
| $k$-Means Clustering (Ch 9.2.1) | $c_i = \arg\min_j \|\mathbf{x}_i - \boldsymbol{\mu}_j\|^2$ | Biến thiên nội cụm: $\sum_{i=1}^N \|\mathbf{x}_i - \boldsymbol{\mu}_{c_i}\|^2$ | Thuật toán lặp tọa độ luân phiên (Coordinate Descent: Gán $\to$ Cập nhật tâm) | Đa giác Voronoi dạng hình cầu đối xứng | Không giám sát, Centroid-based | Các cụm có dạng hình cầu lồi, kích thước và mật độ xấp xỉ đồng đều |
| Gaussian Mixture (GMM) (Ch 9.2.4) | $P(\mathbf{x}) = \sum_{j=1}^k \pi_j \mathcal{N}(\mathbf{x} \mid \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)$ | Log-Likelihood có biến ẩn: $\sum \ln \sum \pi_j \mathcal{N}$ | Thuật toán EM (Expectation - Maximization) | Ranh giới xác suất bậc hai dạng elip xoay tự do | Không giám sát, Mô hình xác suất sinh | Dữ liệu sinh ra từ hỗn hợp $k$ phân phối chuẩn nhiều chiều |
| PCA (Ch 9.3.1) | $\mathbf{z} = \mathbf{U}_K^T (\mathbf{x} - \boldsymbol{\mu})$ (chiếu lên $K$ chiều) | Cực đại hóa phương sai $\mathbf{u}^T \boldsymbol{\Sigma} \mathbf{u}$ (hoặc min sai số tái tạo) | Phân tích giá trị riêng (Eigenvalue Decomposition / SVD) | Phép chiếu trực giao affine tuyến tính | Không giám sát, Giảm chiều tuyến tính | Phương sai lớn nhất mang nhiều thông tin nhất; Các thành phần chính trực giao |
Bảng liên kết chéo: mỗi thuật toán được "giải mã" ở đâu và "nghịch" được ở đâu?
| Thuật toán | Module giải thích toán | Phòng thí nghiệm trong cẩm nang | Phòng thí nghiệm trong sách chính |
|---|---|---|---|
| Hồi quy tuyến tính, Ridge, Lasso | M2 §3 (hình học), M3 §3 (MLE → MSE), M3 §5–6 (MAP → $L_2/L_1$), M4 §3.1 (Normal Equation) | M2 (hình thoi vs hình tròn) | 05 đường thẳng ↔ điểm trên bản đồ lỗi · 10b bát MSE 3D · 13 L1 vs L2 |
| Hồi quy logistic | M2 §3, M3 §4 (Bernoulli → BCE), M4 §2.2, §3.2 | M3 (logistic loss) | 06 sigmoid · 12 ngưỡng & ROC |
| SVM tuyến tính & kernel | M2 §4 (lề), M4 §2.1 (hinge), M5 §2–3 (kernel trick, RBF) | M1 (nghiệm lề cực đại), M4 (băng thông RBF) | 01 kéo điểm · 01b 3D · 08 2D → 3D |
| Cây quyết định, Random Forest, GBDT | M6 §1.3 (entropy, IG), M3 §7 (bias–variance) | — | 07 ID3 · 18 bagging vs boosting |
| $k$-NN, hồi quy kernel, KDE | M5 §4 (tổng các quả chuông), M2 §1 (khoảng cách = tích vô hướng) | M4 | 09 k-NN · 23b KDE 3D |
| Mạng nơ-ron, CNN, RNN, Attention | M4 §4–5 (Adam, chain rule, vanishing), M5 §1 (XOR), §4 (attention như normalized kernel smoother), M8–M13 (DL/Transformer) | M3 (cross-entropy & gradient) | 14 · 14b · 15 · 16 · 17 · 19 · 21 |
| $k$-Means, GMM, EM | M6 §2.2 (biến ẩn, trách nhiệm) | — | 22 · 23 · 23b |
| PCA, UMAP, autoencoder | M6 §2.1 (trị riêng) | — | 24 · 24b |
| Gradient Descent và các biến thể | M4 §4 (phả hệ GD → Adam) | — | 03 · 03b · 10 · 10b |
3. Bản Đồ Lựa Chọn Thuật Toán Theo Góc Nhìn Toán Học
Khi bạn phải lựa chọn mô hình cho bài toán thực tế:
4. Tóm Tắt Quy Tắc Vàng (Mathematical Rules of Thumb)
-
Nếu không gian có số chiều $D$ lớn hơn rất nhiều số mẫu $N$ ($D \gg N$, ví dụ dữ liệu gen sinh học):
- Ưu tiên Linear SVM hoặc Logistic Regression với điều chuẩn $L_1/L_2$. Khi $D \gg N$, một siêu phẳng thường có đủ bậc tự do để khớp dữ liệu huấn luyện; chính vì vậy nguy cơ quá khớp cũng tăng mạnh, và điều chuẩn cùng đánh giá ngoài mẫu là bắt buộc.
-
Nếu dữ liệu dạng bảng có cấu trúc (Tabular data, số và danh mục lẫn lộn):
- Các mô hình cây kết hợp (Random Forest, GBDT/XGBoost) là baseline rất mạnh và trên nhiều tập dữ liệu bảng có thể ngang hoặc vượt mạng sâu. Không có bảo đảm phổ quát: kết quả còn phụ thuộc kích thước dữ liệu, kiểu đặc trưng, mục tiêu và mức tuning.
-
Nếu dữ liệu dạng lưới không gian (Ảnh) hoặc chuỗi thời gian (Văn bản, Tiếng nói):
- Thường nên ưu tiên kiến trúc có inductive bias phù hợp: CNN cho cấu trúc cục bộ, RNN/state-space cho dòng tuần tự, Transformer cho tương tác phụ thuộc nội dung. Đây là lựa chọn thực dụng, không phải mệnh đề rằng các mô hình khác “không thể” biểu diễn dữ liệu ấy.
-
Nếu cần giải thích trực quan và tường minh cho các bên liên quan (Interpretability):
- Chọn Cây quyết định đơn lẻ hoặc Hồi quy Tuyến tính/Logistic. Các trọng số $\mathbf{w}$ cho biết trực tiếp tầm quan trọng và mức độ tác động của từng đặc trưng.
-
Nếu $N$ rất lớn ($\ge 10^5$–$10^6$ mẫu):
- Tránh mọi phương pháp kernel "đầy đủ" (ma trận $N \times N$, $O(N^2)$ bộ nhớ — Module 5 §5). Dùng mô hình tuyến tính tối ưu bằng SGD, GBDT với triển khai phù hợp, hoặc mạng nơ-ron mini-batch. Mỗi họ có độ phức tạp khác nhau, nhưng đều tránh phải lưu ma trận kernel đầy đủ $N \times N$.
-
Hãy kiểm tra scaling cho các mô hình nhạy với khoảng cách, điều chuẩn hoặc conditioning ($k$-NN, SVM, hồi quy có điều chuẩn, mạng nơ-ron, PCA, $k$-Means):
- Lý do toán học: tích vô hướng cộng dồn theo đơn vị của từng chiều (Module 2 §1), và bát mất mát bị kéo dài theo tỉ số trị riêng của $\mathbf{X}^T\mathbf{X}$ (Module 4 §4, tỉ số 1617 trong phòng 10b). Cây và rừng thì không cần vì chỉ so từng đặc trưng với một ngưỡng (Module 6 §1.3).
-
Chọn hàm mất mát theo "phân phối nhiễu" bạn tin (Module 3):
- Đầu ra liên tục sạch $\to$ MSE; có ngoại lệ $\to$ MAE/Huber; nhị phân $\to$ BCE; nhiều lớp $\to$ softmax cross-entropy; đếm $\to$ Poisson. Đừng bao giờ dùng MSE cho phân loại (Module 4 §2, phòng M3: squared loss phạt cả khi đoán "quá đúng").
-
Chọn bộ tối ưu (Module 4 §4):
- Bài toán lồi nhỏ $\to$ nghiệm đóng hoặc L-BFGS/Newton; mạng tích chập $\to$ SGD + momentum; Transformer $\to$ AdamW với warm-up và cosine decay; luôn thử chuẩn hoá đầu vào trước khi đổ lỗi cho bộ tối ưu.
08Module 8: Vi Phân Ma Trận, Đồ Thị Tính Toán & Autograd
(Matrix Calculus, Computational Graphs & Automatic Differentiation)
Backprop không “đạo hàm cả mạng trong một lần”; nó đi ngược đồ thị và tại mỗi nút chỉ nhân gradient đi vào với đạo hàm cục bộ.
$\nabla_xL$: gradient; $J$: Jacobian; $v^TJ$: vector–Jacobian product.
1. Từ Đạo Hàm Vô Hướng Đến Đạo Hàm Tensor
Ở mạng sâu, đầu vào, trọng số và kích hoạt đều là vectơ hoặc ma trận. Vì vậy câu hỏi đầu tiên không phải “đạo hàm bằng bao nhiêu?” mà là “gradient có shape gì?”.
Ở đây $\delta=\partial L/\partial z\in\mathbb R^m$ là tín hiệu lỗi đến từ tầng phía sau. Chỉ bốn công thức trên đã giải thích gần như toàn bộ backward của Linear/Dense.
2. Đồ Thị Tính Toán: Chia Một Công Thức Lớn Thành Các Nút Nhỏ
Giả sử đầu ra nhị phân:
$$z=w_1x_1+w_2x_2+b,\qquad p=\sigma(z),\qquad L=-y\log p-(1-y)\log(1-p).$$
Backward dùng các đạo hàm cục bộ:
$$\frac{\partial L}{\partial z}=p-y,\qquad \frac{\partial z}{\partial w_i}=x_i,\qquad \frac{\partial z}{\partial x_i}=w_i.$$
Suy ra:
$$\frac{\partial L}{\partial w_i}=(p-y)x_i,\qquad \frac{\partial L}{\partial x_i}=(p-y)w_i,\qquad \frac{\partial L}{\partial b}=p-y.$$
Vì sao sigmoid + BCE cho gradient đẹp?
Đạo hàm sigmoid $p(1-p)$ xuất hiện rồi triệt tiêu với mẫu số của BCE. Kết quả chỉ còn $p-y$: “xác suất dự đoán trừ nhãn thật”. Softmax + cross-entropy cũng có dạng tương tự $\hat{\mathbf y}-\mathbf y$.
Backprop dưới kính hiển vi — nhìn cả forward lẫn gradient
Đổi dữ liệu, rồi cho tham số đi đúng một bước gradient—
Việc cần làm: ① Đặt $y=1$ rồi làm $z$ âm: $p-y<0$, vì vậy gradient descent tăng logit. ② Đổi dấu $x_1$: gradient của $w_1=(p-y)x_1$ cũng đổi dấu — cùng một lỗi nhưng đặc trưng khác hướng sẽ kéo trọng số theo hướng khác. ③ Bấm Một bước gradient: loss phải giảm nếu $\eta$ chưa quá lớn.
3. Jacobian, VJP và Vì Sao Autograd Không Lưu Một Ma Trận Khổng Lồ
Với hàm vectơ $y=f(x)$, Jacobian là:
$$J_f(x)_{ij}=\frac{\partial y_i}{\partial x_j}.$$
Nếu $x,y\in\mathbb R^d$, Jacobian có $d^2$ phần tử. Mạng thực tế không tạo toàn bộ ma trận ấy. Vì loss cuối cùng là một scalar, reverse-mode autodiff chỉ cần tính:
$$v^T J_f(x),\qquad v=\frac{\partial L}{\partial y},$$
tức vector–Jacobian product (VJP). Backprop truyền một vectơ gradient ngược qua từng operator; đây là lý do chi phí backward thường cùng bậc với forward thay vì bùng nổ theo bình phương số chiều.
Ví dụ số tính tay VJP qua một tầng Linear $2\times 2$: Cho $x = \begin{bmatrix} 2 \\ -1 \end{bmatrix}$, $W = \begin{bmatrix} 3 & 1 \\ -2 & 4 \end{bmatrix}$, $b = \begin{bmatrix} 0{,}5 \\ -0{,}5 \end{bmatrix}$.
• Forward: $z = Wx + b = \begin{bmatrix} 3(2) + 1(-1) + 0{,}5 \\ -2(2) + 4(-1) - 0{,}5 \end{bmatrix} = \begin{bmatrix} 5{,}5 \\ -8{,}5 \end{bmatrix}$.
• Giả sử từ tầng sau truyền về tín hiệu lỗi $\delta = \dfrac{\partial L}{\partial z} = \begin{bmatrix} 0{,}4 \\ -0{,}2 \end{bmatrix}$.
• Gradient theo trọng số (Outer product $\delta x^T$): $$\frac{\partial L}{\partial W} = \begin{bmatrix} 0{,}4 \\ -0{,}2 \end{bmatrix} \begin{bmatrix} 2 & -1 \end{bmatrix} = \begin{bmatrix} 0{,}8 & -0{,}4 \\ -0{,}4 & 0{,}2 \end{bmatrix} \quad (\text{đúng shape } 2\times 2 \text{ của } W)$$ • Gradient truyền ngược về đầu vào ($W^T \delta$): $$\frac{\partial L}{\partial x} = \begin{bmatrix} 3 & -2 \\ 1 & 4 \end{bmatrix} \begin{bmatrix} 0{,}4 \\ -0{,}2 \end{bmatrix} = \begin{bmatrix} 1{,}6 \\ -0{,}4 \end{bmatrix} \quad (\text{đúng shape } 2\times 1 \text{ của } x)$$
4. Gradient Checking: Dùng Sai Phân Hữu Hạn Để Bắt Lỗi
Với tham số vô hướng $\theta$:
$$\frac{\partial L}{\partial\theta}\approx\frac{L(\theta+\varepsilon)-L(\theta-\varepsilon)}{2\varepsilon}.$$
Đây không phải cách train model — mỗi tham số cần hai forward — nhưng rất hữu ích để kiểm tra một backward tự viết. Chọn $\varepsilon$ quá lớn gây sai số xấp xỉ; quá nhỏ gây sai số làm tròn.
Gradient của scalar theo tensor luôn có cùng shape với tensor đó.
Nếu bias được broadcast qua batch, backward phải cộng gradient theo các trục đã broadcast.
Dùng
log_softmax/BCEWithLogits thay vì tự sigmoid rồi log ở vùng logit rất lớn.Ghép shape cho attention
X có T hàng token. Dùng các ma trận chiếu đã cho để tìm shape ở bốn bước; chiều trong phải khớp khi nhân.
Gợi ý và điều cần nhớ
Muốn nhân (a × b) với (b × c), kết quả là (a × c). Softmax theo hàng giữ nguyên shape. Kᵀ đổi chỗ hai chiều.
Tự tính một bước backprop
Dự đoán gradient của w₁ và giá trị w₁ sau một bước. Dùng sigmoid + BCE, cập nhật đồng thời các tham số. Sai số cho phép: 0,00005.
Sau khi kiểm tra, bạn sẽ thấy loss trước và sau bước cập nhật.
Gợi ý và điều cần nhớ
z = w₁x₁ + w₂x₂ + b; p = sigmoid(z); ∂L/∂w₁ = (p − y)x₁; w₁ mới = w₁ − η∂L/∂w₁. Dấu gradient và dấu bước đi ngược nhau. Kiểm tra số dùng [L(w₁+ε) − L(w₁−ε)]/(2ε).
09Module 9: Mạng Nơ-Ron Sâu & Dòng Chảy Gradient
(Deep Networks, Initialization, Normalization & Residual Paths)
Mạng sâu không chỉ cần “đủ neuron”; nó cần giữ phương sai của tín hiệu và gradient trong một khoảng lành mạnh khi đi qua hàng chục phép biến đổi.
$h_{\ell+1}=h_\ell+F_\ell(\operatorname{Norm}(h_\ell))$.
1. Mạng Sâu Là Một Chuỗi Hàm Hợp Học Biểu Diễn
MLP $L$ tầng:
$$h_0=x,\qquad h_{\ell}=\phi(W_\ell h_{\ell-1}+b_\ell),\qquad \hat y=W_{L+1}h_L+b_{L+1}.$$
Mỗi tầng đổi hệ tọa độ rồi cắt/uốn không gian bằng $\phi$. Một tầng tuyến tính duy nhất vẫn chỉ là tuyến tính vì $W_2(W_1x)=W'x$; phi tuyến mới làm việc xếp chồng có ý nghĩa.
2. Hàm Kích Hoạt: Không Chỉ Là “Bẻ Cong”
| Hàm | Công thức | Dòng gradient | Dùng để nhớ |
|---|---|---|---|
| Sigmoid | $\sigma(x)$ | Bão hòa ở hai đầu, $\sigma'\le 0.25$ | Xác suất/cổng; hiếm dùng làm hidden activation sâu |
| Tanh | $\tanh x$ | Zero-centered nhưng vẫn bão hòa | RNN cổ điển |
| ReLU | $\max(0,x)$ | Đạo hàm 1 ở nửa dương, 0 ở nửa âm | Đơn giản, thưa, giảm bão hòa dương |
| GELU | $x\Phi(x)$ | Trơn, “giữ theo xác suất” | BERT-style và nhiều Transformer về sau; Transformer gốc dùng ReLU |
| SiLU/Swish | $x\sigma(x)$ | Trơn, có vùng âm nhỏ | Khối hiện đại và SwiGLU |
3. Gradient Qua Độ Sâu Là Tích Của Nhiều Jacobian
Trong mô hình scalar đơn giản $h_\ell=\phi(w_\ell h_{\ell-1})$:
$$\frac{\partial h_L}{\partial h_0}=\prod_{\ell=1}^{L} w_\ell\phi'(z_\ell).$$
Nếu trị tuyệt đối trung bình của mỗi thừa số là $0.8$, sau 50 tầng còn $0.8^{50}\approx1.4\times10^{-5}$. Nếu là $1.2$, gradient tăng thành $1.2^{50}\approx9100$. Đó là vanishing/exploding gradient dưới dạng cô đọng nhất.
4. Khởi Tạo Xavier/He: Giữ Phương Sai Không Co Hoặc Nổ
Với $z_j=\sum_iw_{ji}x_i$, nếu các thành phần độc lập và trung bình 0:
$$\operatorname{Var}(z_j)\approx n_{\text{in}}\operatorname{Var}(w)\operatorname{Var}(x).$$
Muốn $\operatorname{Var}(z)\approx\operatorname{Var}(x)$, ta chọn $\operatorname{Var}(w)\approx1/n_{\text{in}}$ (Xavier). Với ReLU làm mất khoảng nửa năng lượng, He initialization dùng gần $2/n_{\text{in}}$.
Ví dụ số (Tại sao khởi tạo sai làm hỏng tầng đầu tiên): Giả sử tầng ẩn nhận đầu vào $n_{\text{in}} = 512$ chiều với $\operatorname{Var}(x_i) = 1$.
• Nếu khởi tạo ngây thơ $w_{ji} \sim \mathcal{N}(0, 1)$ ($\operatorname{Var}(w)=1$): phương sai của tổng tiền kích hoạt vọt lên $\operatorname{Var}(z_j) = 512 \times 1 \times 1 = 512$, tức độ lệch chuẩn $\sigma_z = \sqrt{512} \approx 22{,}6$! Đưa $z_j \approx \pm 22{,}6$ vào hàm $\tanh$ hay $\sigma(z)$ sẽ rơi thẳng vào vùng bão hòa phẳng lì ($\sigma'(22{,}6) \approx 1{,}5 \times 10^{-10}$), khóa cứng mạng ngay từ bước 1.
• Nếu dùng khởi tạo He cho ReLU $\operatorname{Var}(w) = 2/512 \implies \sigma_w = \sqrt{2/512} = 1/16 = 0{,}0625$: sau phép chiếu và cắt nửa âm của ReLU, phương sai đầu ra được giữ ổn định quanh $\approx 1{,}0$.
5. Residual và Normalization: Hai “Đường Cao Tốc” Khác Nhau
Residual block:
$$h_{\ell+1}=h_\ell+F_\ell(h_\ell),\qquad \frac{\partial h_{\ell+1}}{\partial h_\ell}=I+J_{F_\ell}.$$
Thành phần $I$ tạo một đường gần đồng nhất; gradient không bắt buộc phải đi qua toàn bộ biến đổi phi tuyến.
Dòng gradient qua 40 tầng — bão hòa, nổ và đường residual
Thay activation, độ sâu và scale trọng số—
Việc cần làm: ① Chọn sigmoid, tăng độ sâu: đường gradient rơi nhanh xuống dưới. ② Chọn ReLU với $w>1$ và đầu vào dương: gradient có thể nổ. ③ Bật residual: mỗi đạo hàm cục bộ có thêm thành phần 1, nên tín hiệu thường đi xa hơn — nhưng residual không bảo đảm tuyệt đối ổn định nếu nhánh $F$ quá lớn.
6. Convolution: Phép Tuyến Tính Có Cấu Trúc, Chia Sẻ Trọng Số
Trong mạng tích chập 1D, mỗi đầu ra là một tích vô hướng giữa cùng một kernel và một cửa sổ cục bộ. Các thư viện Deep Learning thường thực hiện cross-correlation (không lật kernel) nhưng vẫn gọi lớp là convolution:
$$y_t=b+\sum_{r=0}^{K-1}w_r\,x_{t\,s-p+r\,d}.$$
Ở đây $K$ là kích thước kernel, $s$ là stride, $p$ là padding và $d$ là dilation. Độ dài đầu ra:
$$L_{out}=\left\lfloor\frac{L_{in}+2p-d(K-1)-1}{s}\right\rfloor+1.$$
Với nhiều channel, kernel có shape $C_{out}\times C_{in}\times K$ và:
$$Y_{c_o,t}=b_{c_o}+\sum_{c_i=1}^{C_{in}}\sum_{r=0}^{K-1}W_{c_o,c_i,r}\,X_{c_i,t\,s-p+r\,d}.$$
Nhìn convolution như một ma trận thưa
Toàn bộ phép trượt vẫn là một phép tuyến tính $y=Ax$. Ma trận $A$ có cấu trúc Toeplitz/banded: mỗi hàng dùng lại cùng các hệ số kernel nhưng dịch sang phải. CNN không bỏ đại số tuyến tính; nó áp một inductive bias cục bộ và chia sẻ tham số lên ma trận tuyến tính.
Kernel trượt — mỗi output là một dot product cục bộ
Đổi kernel, stride, dilation và nhìn receptive field—
Việc cần làm: ① Chọn kernel cạnh $[-1,0,1]$ và kéo vị trí $t$: output lớn ở nơi tín hiệu thay đổi nhanh. ② Chọn Làm mượt: mỗi output trở thành trung bình cục bộ. ③ Đổi dilation lên 2: ba trọng số nhìn một vùng rộng hơn mà số tham số vẫn là 3. ④ Bấm Dịch input +1 với stride 1: feature map dịch theo, trừ khác biệt ở biên. ⑤ Bật “lật kernel”: dấu của bộ phát hiện cạnh đổi — phân biệt convolution toán học với cross-correlation trong thư viện DL.
7. Dropout: Nhiễu Có Kiểm Soát, Không Phải “Tắt Neuron Vĩnh Viễn”
Khi train:
$$\tilde h=\frac{m\odot h}{1-p},\qquad m_i\sim\operatorname{Bernoulli}(1-p).$$
Hệ số $1/(1-p)$ giữ kỳ vọng của kích hoạt. Khi inference, mask bị bỏ. Dropout là một nguồn nhiễu/regularization; trong nhiều Transformer lớn, vị trí và mức dropout phụ thuộc regime dữ liệu, không có một giá trị đúng cho mọi mô hình.
10Module 10: Từ RNN/LSTM Đến Cơ Chế Attention
(Sequence Models, Memory Paths & Content-Based Retrieval)
RNN nén quá khứ qua một đường tuần tự dài; attention tạo đường nối trực tiếp, có trọng số, từ truy vấn hiện tại tới mọi vị trí nguồn.
RNN: trạng thái $h_t$. Attention: tập các cặp key–value.
1. RNN: Cùng Một Phép Biến Đổi Lặp Theo Thời Gian
$$h_t=\phi(W_xx_t+W_hh_{t-1}+b),\qquad y_t=W_oh_t.$$
Các ma trận được chia sẻ ở mọi bước. Đây là inductive bias mạnh: quy tắc xử lý token thứ 5 và token thứ 500 là cùng một quy tắc.
2. BPTT và Đường Gradient Dài
Trong RNN tuyến tính đơn giản $h_t=\rho h_{t-1}+x_t$, ảnh hưởng của $x_{t-k}$ lên $h_t$ là:
$$\frac{\partial h_t}{\partial x_{t-k}}=\rho^k.$$
$|\rho|<1$ làm ký ức suy giảm theo hàm mũ; $|\rho|>1$ làm nó nổ. Trong RNN phi tuyến, $\rho^k$ được thay bằng tích nhiều Jacobian.
Ký ức theo khoảng cách — một lũy thừa quyết định nhớ hay quên
So đường RNN vanilla với đường cell/gate gần đồng nhất—
Việc cần làm: ① Đặt $\rho=0.8$, $T=60$: tín hiệu đầu chuỗi gần như biến mất. ② Đặt $f=0.99$: cell state giữ một đường gần đồng nhất lâu hơn. ③ Đặt $|\rho|>1$: ảnh hưởng tăng theo hàm mũ — gradient clipping chỉ chặn độ lớn cập nhật, không tự sửa động lực bên trong.
3. LSTM/GRU: Học Cách Mở Và Đóng Đường Bộ Nhớ
Một dạng cốt lõi của LSTM:
$$c_t=f_t\odot c_{t-1}+i_t\odot g_t.$$
Forget gate $f_t$ quyết định giữ bao nhiêu ký ức cũ; input gate $i_t$ quyết định ghi gì mới. Đạo hàm trực tiếp $\partial c_t/\partial c_{t-1}=f_t$ tạo một đường kiểm soát được, thay vì luôn nhân cùng một ma trận hồi quy.
4. Seq2Seq Trước Attention: Một Vectơ Phải Gánh Cả Câu
Encoder RNN đọc nguồn thành trạng thái cuối $c$; decoder sinh đích từ $c$. Với câu dài, một vectơ cố định trở thành nút thắt thông tin. Attention thay $c$ cố định bằng một context thay đổi theo từng bước decoder.
5. Attention: Tra Cứu Bộ Nhớ Theo Nội Dung
Với query $q_t$, các key $k_s$ và value $v_s$:
$$e_{t,s}=\operatorname{score}(q_t,k_s),\qquad \alpha_{t,:}=\operatorname{softmax}(e_{t,:}),\qquad c_t=\sum_s\alpha_{t,s}v_s.$$
Query không “lấy một ô nhớ” cứng; nó tạo một phân phối mềm trên các vị trí rồi lấy trung bình có trọng số. Vì vậy mọi vị trí nguồn có đường truyền ngắn trực tiếp tới bước đích.
Ví dụ số (Từ truy vấn cứng sang truy xuất mềm): Giả sử có 3 khoá $k_1 = [1, 0]^T$, $k_2 = [0, 1]^T$, $k_3 = [1, 1]^T$ đi kèm 3 giá trị $v_1 = 10$, $v_2 = 20$, $v_3 = 50$. Với truy vấn $q_t = [2, 0]^T$:
• Điểm tương hợp: $e_{t,:} = [q_t^T k_1, q_t^T k_2, q_t^T k_3] = [2, 0, 2]$.
• Trọng số softmax: $\alpha_{t,:} = \dfrac{1}{e^2 + e^0 + e^2}[e^2, 1, e^2] \approx [0{,}468, 0{,}064, 0{,}468]$.
• Ngữ cảnh thu được: $c_t = 0{,}468(10) + 0{,}064(20) + 0{,}468(50) \approx 29{,}36$ — tự động gom thông tin từ vị trí 1 và 3 có thành phần thứ nhất khớp với $q_t$.
Liên hệ kernel — dùng đúng mức
Nếu đặt $K(q,k)=\exp(q^Tk)$, công thức trên có dạng normalized kernel smoother. Nhưng trong attention, $q,k,v$ được học, có nhiều head, mask, residual và FFN; phép so sánh với Nadaraya–Watson chỉ giải thích phần “trọng số chuẩn hóa rồi lấy trung bình”.
6. So Sánh Đường Truyền Thông Tin
| Mô hình | Đường từ token xa tới hiện tại | Song song khi train | Inductive bias |
|---|---|---|---|
| RNN | $O(T)$ bước tuần tự | Thấp | Trạng thái nén, thứ tự tự nhiên |
| LSTM/GRU | $O(T)$ nhưng có đường gated | Thấp | Bộ nhớ điều khiển được |
| Self-attention | Một cạnh trực tiếp trong một layer | Cao | Tra cứu theo nội dung, cần mã vị trí |
11Module 11: Giải Phẫu Transformer Từ Tensor Đến Một Block Hoàn Chỉnh
(QKV, Scaled Dot-Product Attention, Masks, Multi-Head & FFN)
Một Transformer block luân phiên hai phép: trộn thông tin giữa các token bằng attention và biến đổi từng token độc lập bằng FFN, cả hai nằm trong residual path.
$X\in\mathbb R^{T\times d_{model}}$ — $T$ token, mỗi token một hidden vector.
1. Từ Token ID Đến Ma Trận Hidden State
Tokenizer biến chuỗi thành ID; embedding table $E\in\mathbb R^{V\times d}$ lấy một hàng cho mỗi ID:
$$X=E[\text{ids}]\in\mathbb R^{T\times d}.$$
Embedding không phải “ý nghĩa cố định” của từ. Nó là tọa độ ban đầu được cập nhật cùng toàn bộ model; sau mỗi block, hidden state của cùng một token thay đổi theo ngữ cảnh.
2. Q, K, V: Ba Vai Trò Khác Nhau Của Cùng Hidden State
$$Q=XW_Q,\qquad K=XW_K,\qquad V=XW_V.$$
Không nên đồng nhất key với value: hai token có thể được chọn bằng một tiêu chí nhưng gửi một biểu diễn khác.
3. Scaled Dot-Product Attention
$$S=\frac{QK^T}{\sqrt{d_h}},\qquad A=\operatorname{softmax}(S+M),\qquad O=AV.$$
Nếu các thành phần của $q,k$ độc lập, trung bình 0 và phương sai 1 thì:
$$\operatorname{Var}(q^Tk)=\sum_{r=1}^{d_h}\operatorname{Var}(q_rk_r)\approx d_h.$$
Chia cho $\sqrt{d_h}$ giữ độ lệch chuẩn của score gần 1. Không chia, logits lớn làm softmax quá nhọn và gradient nhỏ ở hầu hết phần tử.
4. Softmax, Nhiệt Độ và Log-Sum-Exp Ổn Định
$$\operatorname{softmax}(z)_i=\frac{e^{z_i}}{\sum_je^{z_j}}=\frac{e^{z_i-m}}{\sum_je^{z_j-m}},\qquad m=\max_jz_j.$$
Trừ cùng một hằng số không đổi xác suất, nhưng tránh overflow. Nhiệt độ $\tau$ dùng $z/\tau$: $\tau<1$ làm phân phối nhọn hơn; $\tau>1$ làm phẳng hơn.
Attention playground — query xoay, trọng số dịch chuyển
Nhìn dot product biến thành một weighted average—
Việc cần làm: ① Xoay query: token có key cùng hướng nhận dot product lớn hơn. ② Hạ $\tau$: softmax gần “chọn một”; tăng $\tau$: output trở thành trung bình đều hơn. ③ Tắt scaling và tăng độ dài query: score phình ra, phân phối bão hòa — đây là trực giác của $1/\sqrt{d_h}$.
5. Mask: Cộng $-\infty$ Trước Softmax
Mask không xóa token sau softmax. Nó sửa logit:
$$S'_{ij}=\begin{cases}S_{ij},&\text{được phép}\cr-\infty,&\text{bị chặn}\end{cases}\quad\Rightarrow\quad \operatorname{softmax}(S'_{i,:})_j=0\ \text{nếu bị chặn}.$$
Padding mask chặn ô đệm. Causal mask chặn $j>i$, bảo đảm token hiện tại không nhìn tương lai khi train language model.
Ví dụ tính bằng tay: 1 Attention Head với Causal Mask ($T=3, d_h=4$)
Xét 3 token có ma trận Query và Key sau khi chiếu vào không gian head $d_h=4$ ($\sqrt{d_h}=2$):
$$Q = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 \\ 0 & 2 & 2 & 0 \end{bmatrix}, \quad K = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 2 & 2 & 0 \end{bmatrix}, \quad V = \begin{bmatrix} 1.0 & 0.0 \\ 0.0 & 2.0 \\ 3.0 & 1.0 \end{bmatrix}$$- Tính raw score & chia $\sqrt{d_h}=2$: $$S = \frac{QK^T}{2} = \frac{1}{2}\begin{bmatrix} 4 & 0 & 0 \\ 2 & 2 & 2 \\ 0 & 4 & 8 \end{bmatrix} = \begin{bmatrix} 2 & 0 & 0 \\ 1 & 1 & 1 \\ 0 & 2 & 4 \end{bmatrix}$$
- Cộng Causal Mask $M$ ($j > i \mapsto -\infty$): $$S + M = \begin{bmatrix} 2 & -\infty & -\infty \\ 1 & 1 & -\infty \\ 0 & 2 & 4 \end{bmatrix}$$
- Lấy Softmax theo từng hàng:
- Hàng 1 (chỉ nhìn token 1): $A_{1,:} = [1,\; 0,\; 0]$.
- Hàng 2 (nhìn token 1, 2 với score bằng nhau $1, 1$): $A_{2,:} = [0.5,\; 0.5,\; 0]$.
- Hàng 3 (score $[0, 2, 4]$, trừ max $m=4 \implies [-4, -2, 0]$): $e^{-4}\approx 0.018,\; e^{-2}\approx 0.135,\; e^0=1 \implies A_{3,:} \approx [0.016,\; 0.117,\; 0.867]$.
- Nhân với Value $O = AV$:
- Token 1: $o_1 = 1.0 v_1 = [1.0,\; 0.0]$.
- Token 2: $o_2 = 0.5 v_1 + 0.5 v_2 = [0.5,\; 1.0]$ (trung bình ngữ cảnh 2 token đầu).
- Token 3: $o_3 = 0.016 v_1 + 0.117 v_2 + 0.867 v_3 \approx [2.617,\; 1.101]$ (chú ý mạnh vào token 3 và một phần token 2).
Causal mask — vì sao ma trận attention là tam giác dưới?
Chọn một hàng query và nhìn xác suất trước/sau mask—
Việc cần làm: ① Chọn token đầu: với causal mask, nó chỉ được nhìn chính nó. ② Chọn token cuối: toàn bộ quá khứ hợp lệ. ③ Giảm “số token hợp lệ”: padding mask chặn cả các ô nằm bên trái nhưng thuộc phần đệm.
6. Multi-Head Attention: Nhiều Không Gian Chiếu Song Song
$$\operatorname{head}_h=\operatorname{softmax}\left(\frac{Q_hK_h^T}{\sqrt{d_h}}+M\right)V_h,$$
$$\operatorname{MHA}(X)=\operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_H)W_O.$$
Mỗi head có ma trận chiếu riêng, nên có thể học tiêu chí tương hợp khác nhau. Không nên diễn giải cứng rằng một head “luôn là cú pháp” hay “luôn là coreference”; chức năng có thể phân tán và thay đổi theo layer/input.
7. FFN, Residual và Một Block Hoàn Chỉnh
Attention trộn giữa token; FFN áp dụng cùng một MLP cho từng token độc lập:
$$\operatorname{FFN}(x)=\phi(xW_1+b_1)W_2+b_2.$$
Ở đây $x$ là một hàng token, cùng quy ước với $X\in\mathbb R^{T\times d}$. Một pre-norm decoder block thường viết:
$$X' = X+\operatorname{MHA}(\operatorname{Norm}(X)),\qquad X''=X'+\operatorname{FFN}(\operatorname{Norm}(X')).$$
8. Ba Họ Kiến Trúc
| Họ | Attention | Objective điển hình | Tác vụ |
|---|---|---|---|
| Encoder-only | Hai chiều, không causal | Masked-token / discriminative | Phân loại, NER, embedding |
| Decoder-only | Causal self-attention | Next-token prediction | Sinh văn bản, completion |
| Encoder–decoder | Encoder hai chiều + decoder causal + cross-attention | $p(y\mid x)$ | Dịch máy, tóm tắt, chuyển đổi chuỗi |
9. Độ Phức Tạp Của Attention Chuẩn
Ma trận $QK^T$ có $T^2$ score. Với hidden dimension $d$, compute điển hình là $O(T^2d)$ và việc lưu attention matrix ngây thơ là $O(T^2)$. Đây là lý do context dài tác động mạnh tới bộ nhớ/throughput; Module 12 tách rõ thay đổi kiến trúc khỏi tối ưu kernel exact.
Chặn đường nhìn vào tương lai
Ba token A, B, C là dữ liệu thật; token cuối là PAD. Bấm từng ô để chặn tương lai và padding. Bỏ qua hoàn toàn hàng query PAD.
Hàng = query đang đọc · cột = key được nhìn. Nút “Mở” cho phép attention đi qua.
Gợi ý và điều cần nhớ
Ở hàng i hợp lệ, chỉ mở cột j ≤ i và j không phải PAD. Mỗi hàng hợp lệ cần ít nhất một key; sau softmax tổng bằng 1. Hàng query PAD được bỏ qua, hiển thị toàn 0 và không được coi là một phân phối xác suất.
12Module 12: Vị Trí, Norm, FFN Hiện Đại, GQA & KV Cache
(Positional Geometry and Practical Transformer Building Blocks)
Các cải tiến hiện đại thường không thay “linh hồn” attention; chúng thay cách mã hóa vị trí, chuẩn hóa, cấp phát FFN và chia sẻ key/value để ổn định hoặc tiết kiệm hơn.
Kiến trúc · objective · thuật toán kernel · định dạng số là bốn lớp khác nhau.
1. Self-Attention Thuần Không Tự Biết Thứ Tự
Nếu hoán vị các hàng của $X$ và hoán vị output tương ứng, self-attention không có tín hiệu nào phân biệt “token thứ 1” với “token thứ 7”. Ta phải đưa vị trí vào hidden state hoặc trực tiếp vào score.
2. Sinusoidal Positional Encoding
$$PE(pos,2i)=\sin\left(pos/10000^{2i/d}\right),\qquad PE(pos,2i+1)=\cos\left(pos/10000^{2i/d}\right).$$
Mỗi cặp chiều là một đồng hồ quay với tần số khác nhau. Tổng embedding token + positional vector cho attention một dấu vết về vị trí tuyệt đối.
3. RoPE: Mã Hóa Vị Trí Bằng Phép Quay Q/K
Trong một cặp chiều 2D:
$$q_m=R(m\omega)q,\qquad k_n=R(n\omega)k.$$
Khi tính dot product:
$$q_m^Tk_n=q^TR((n-m)\omega)k.$$
Hai vị trí tuyệt đối xuất hiện qua hiệu $n-m$: dịch cả hai token cùng một lượng không đổi score trong cặp chiều lý tưởng. Nhiều cặp tần số cho model một phổ khoảng cách.
Ví dụ tính bằng tay: Tại sao RoPE bất biến khi dịch vị trí tương đối?
Giả sử trong một cặp chiều 2D với tần số $\omega = \frac{\pi}{4}$ ($45^\circ$/bước), ta có $q = [1, 0]^T$ và $k = [1, 0]^T$:
- Trường hợp A: Query ở vị trí $m=1$ (góc $45^\circ$), Key ở vị trí $n=3$ (góc $135^\circ$). Hiệu vị trí $n-m = 2$ (góc lệch $90^\circ$): $$q_1 = \begin{bmatrix}\cos 45^\circ \\ \sin 45^\circ\end{bmatrix} = \begin{bmatrix}\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2}\end{bmatrix}, \quad k_3 = \begin{bmatrix}\cos 135^\circ \\ \sin 135^\circ\end{bmatrix} = \begin{bmatrix}-\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2}\end{bmatrix} \implies q_1^T k_3 = -\frac{1}{2} + \frac{1}{2} = 0.$$
- Trường hợp B (dịch cả câu đi $+10$ vị trí): Query ở $m=11$, Key ở $n=13$. Hiệu vị trí vẫn là $n-m = 2$: $$q_{11}^T k_{13} = q^T R((13-11)\omega) k = q^T R(90^\circ) k = 0.$$
Nhờ tính chất trực giao $R(m\omega)^T R(n\omega) = R((n-m)\omega)$, attention score chỉ phụ thuộc vào khoảng cách tương đối $n-m$ mà không cần ma trận khoảng cách $T\times T$ riêng biệt!
RoPE bằng hình học 2D — dịch cả hai vị trí, dot product không đổi
Quan sát góc tương đối thay vì học thuộc công thức quay—
Việc cần làm: ① Ghi nhớ dot product rồi bấm +1 cho cả m và n: hiệu vị trí không đổi nên score không đổi. ② Chỉ tăng $n$: vector key quay thêm và score thay đổi theo khoảng cách tương đối. ③ Tăng $\omega$: cùng một khoảng cách tạo góc lớn hơn — các cặp chiều tần số cao nhạy với quan hệ gần.
4. LayerNorm và RMSNorm
LayerNorm vừa trừ trung bình vừa chia độ lệch chuẩn; RMSNorm chỉ chia root-mean-square. Cả hai có tham số scale học được. RMSNorm đơn giản hơn, nhưng “đơn giản hơn” không có nghĩa luôn tốt hơn trong mọi kiến trúc.
5. Từ ReLU/GELU Đến SwiGLU
Một FFN gated, dùng vector hàng $x\in\mathbb R^{1\times d}$, $W_g,W_v\in\mathbb R^{d\times h}$ và $W_o\in\mathbb R^{h\times d}$:
$$\operatorname{SwiGLU}(x)=\left[\operatorname{SiLU}(xW_g)\odot(xW_v)\right]W_o.$$
Một nhánh tạo cổng, một nhánh mang nội dung. Phép nhân từng phần tử cho model cơ chế điều biến feature linh hoạt hơn một activation đơn.
6. MHA, MQA và GQA: Query Nhiều, Key/Value Có Thể Chia Sẻ
| Biến thể | Số nhóm K/V | Ý nghĩa |
|---|---|---|
| MHA | $H_{kv}=H_q$ | Mỗi query head có K/V riêng |
| GQA | $1<H_{kv}<H_q$ | Nhiều query head dùng chung một nhóm K/V |
| MQA | $H_{kv}=1$ | Mọi query head dùng chung K/V |
Với GQA chia nhóm đều trong lab này, $H_q$ phải chia hết cho $H_{kv}$; K và V có cùng số head.
Giảm $H_{kv}$ không giảm số query head nhưng giảm kích thước KV cache và băng thông đọc khi decode.
7. KV Cache: Đổi Bộ Nhớ Lấy Việc Không Tính Lại Quá Khứ
Trong autoregressive decoding, key/value của token cũ không đổi. Ta lưu chúng cho mỗi layer. Dung lượng xấp xỉ:
$$\text{bytes}=2\times L\times B\times T\times H_{kv}\times d_h\times \text{bytes/element}.$$
Hệ số 2 là K và V. Công thức chưa tính allocator, padding, metadata hoặc cache phụ.
Ví dụ tính bằng tay: GQA cắt giảm KV Cache 4 lần trên cấu hình cỡ Llama-3 8B
Xét mô hình có $L=32$ layer, $H_q=32$ query heads, $d_h=128$, suy luận ở `fp16`/`bf16` ($2\text{ bytes/element}$), batch $B=4$, độ dài ngữ cảnh $T=8192$ token:
- Nếu dùng MHA chuẩn ($H_{kv}=32$): $$\text{KV Cache}_{\text{MHA}} = 2 \times 32 \times 4 \times 8192 \times 32 \times 128 \times 2\text{ B} = 17{,}179{,}869{,}184\text{ B} = \mathbf{16.0\text{ GiB}}.$$ Riêng KV cache đã ngốn đúng 16 GiB VRAM (bằng cả trọng số mô hình 8B ở fp16!).
- Khi chuyển sang GQA ($H_{kv}=8$, mỗi 4 query head dùng chung 1 cặp K/V): $$\text{KV Cache}_{\text{GQA}} = \frac{16.0\text{ GiB}}{32 / 8} = \mathbf{4.0\text{ GiB}}.$$ Tiết kiệm ngay $12\text{ GiB}$ VRAM và giảm $4\times$ băng thông đọc bộ nhớ ở mỗi bước sinh token!
Máy tính KV cache — MHA, GQA và MQA khác nhau bao nhiêu?
Thay context, số layer và số KV head—
Việc cần làm: ① Giữ $H_q=32$, đổi $H_{kv}$ từ 32 xuống 8 rồi 1: cache giảm tuyến tính theo số KV head. ② Tăng context gấp đôi: cache gấp đôi, dù attention score trong prefill có compute gần bậc hai. ③ Tăng batch: mỗi sequence cần cache riêng.
8. FlashAttention: Cùng Một Phép Toán, Lịch Đọc/Ghi Bộ Nhớ Khác
FlashAttention không phải một approximation và không thay công thức $\operatorname{softmax}(QK^T)V$. Nó chia phép tính thành tile để không ghi toàn bộ ma trận attention ra bộ nhớ HBM, đồng thời dùng online softmax chính xác. Đây là tối ưu thuật toán/kernel theo hệ phân cấp bộ nhớ, khác với sparse/linear attention vốn thay cấu trúc phép toán.
Đổi vị trí, giữ tương quan
Cặp gốc là (m, n) = (2, 7), ω = 12° và góc gốc = 35°. Tìm cặp mới có cả hai vị trí từ 20 trở lên, giữ nguyên khoảng cách tương đối và dot product.
q: màu nhấn · k: màu ngọc
Gợi ý và điều cần nhớ
Góc giữa hai vector là 35° + (n − m) × 12°. Dịch chung giữ n − m = 5. Bài này yêu cầu giữ cả chênh lệch vị trí; chỉ trùng cos do tính tuần hoàn chưa đủ.
Thiết kế trong ngân sách KV cache
Giữ model 32 layer, 32 query heads, head dim 128, batch 1, KV ở FP16 (2 byte/phần tử). Chọn context đủ dài và giữ số KV head lớn nhất có thể trong ngân sách.
Ngân sách chỉ tính K và V; chưa gồm trọng số model, activation, allocator hay metadata. Không phải tổng VRAM cần để chạy model.
Gợi ý và điều cần nhớ
KV bytes = 2 × layer × batch × token × KV heads × head dim × bytes/phần tử. Trong GQA chia nhóm đều, 32 phải chia hết cho số KV head. Với context tối thiểu đã cho, thử tăng số head đến khi ngân sách không còn đủ.
13Module 13: Huấn Luyện & Suy Luận Transformer — CE, PPL, AdamW và Giải Mã
(Objectives, Stable Training, Autoregressive Decoding & Applied NLP)
Transformer chỉ trở thành language model khi ta gắn một phân phối xác suất lên logits, chọn objective theo kiểu dữ liệu và tách rõ chế độ train (teacher forcing) khỏi chế độ sinh tự hồi quy.
Hidden → logits → softmax → NLL → gradient → update → decode.
1. Ba Objective Phổ Biến
2. Teacher Forcing: Train Song Song, Decode Tuần Tự
Khi train seq2seq/causal LM, token trước đưa vào decoder là token thật đã dịch phải một vị trí. Nhờ causal mask, mọi vị trí có thể tính song song trong một forward. Khi inference, token thật tương lai không tồn tại; model phải dùng chính token vừa sinh, nên lỗi có thể tích lũy.
3. Cross-Entropy và Perplexity
Với logits $z\in\mathbb R^V$ và token đúng $y$:
$$L=-\log\frac{e^{z_y}}{\sum_je^{z_j}}=-z_y+\operatorname{logsumexp}(z).$$
Perplexity trên corpus:
$$\operatorname{PPL}=\exp\left(\frac1N\sum_{i=1}^{N}L_i\right).$$
PPL thấp hơn nghĩa model gán xác suất trung bình cao hơn cho token đúng. Nhưng PPL chỉ so sánh trực tiếp khi dataset, tiền xử lý và tokenizer tương thích; đổi đơn vị token làm đổi số hạng $N$.
Ví dụ tính bằng tay: Từ Logits đến Cross-Entropy, Perplexity và Gradient
Giả sử từ vựng có $V=3$ token $\{\text{A}, \text{B}, \text{C}\}$. Tại bước $t=1$, model xuất logits $z = [2.0,\; 1.0,\; 0.0]$ và token đúng là $y = \text{A}$ (chỉ số 1):
- Xác suất Softmax: $e^2\approx 7.389,\; e^1\approx 2.718,\; e^0=1.0 \implies \sum e^{z_j} \approx 11.107$. $$p(\text{A}) = \frac{7.389}{11.107} \approx 0.665, \quad p(\text{B}) \approx 0.245, \quad p(\text{C}) \approx 0.090.$$
- Token NLL (Cross-Entropy): $$L_1 = -\ln(0.665) \approx 0.408\text{ nats}.$$
- Gradient theo logits $\nabla_z L_1 = p - y_{\text{one-hot}}$: $$\frac{\partial L_1}{\partial z} = [0.665 - 1,\; 0.245 - 0,\; 0.090 - 0] = [-0.335,\; +0.245,\; +0.090].$$ Cập nhật gradient descent sẽ tăng $z_{\text{A}}$ và hạ $z_{\text{B}}, z_{\text{C}}$ đúng theo tỷ lệ xác suất mà chúng chiếm!
- Perplexity trên chuỗi $N=2$ token: Giả sử ở bước $t=2$, model phân vân hơn với $p(y_2) = 0.25 \implies L_2 = -\ln(0.25) \approx 1.386$. Trung bình loss $\bar{L} = \frac{0.408 + 1.386}{2} = 0.897$, suy ra: $$\operatorname{PPL} = e^{0.897} \approx \mathbf{2.45}.$$ Trực giác: trung bình ở mỗi bước, độ bất định của model tương đương với việc gieo xúc xắc đồng đều giữa $\approx 2.45$ lựa chọn.
Logits → Softmax → Cross-Entropy → Perplexity
Cộng cùng hằng số vào mọi logit để thấy softmax bất biến—
Việc cần làm: ① Hạ logit token đúng: CE tăng theo $-\log p$. ② Bấm +2 vào mọi logit: xác suất và loss không đổi. ③ Hạ nhiệt độ: nếu token đúng đang đứng đầu, CE giảm; nếu model tự tin sai, CE tăng mạnh.
4. Label Smoothing
Một quy ước phổ biến thay one-hot $y$ bằng:
$$y'_k=(1-\varepsilon)y_k+\frac{\varepsilon}{V}.$$
Nó giảm mục tiêu “xác suất đúng phải bằng 1”, có thể cải thiện regularization/calibration nhưng làm thay đổi diễn giải log-likelihood thuần và đôi khi làm probability kém sắc nét hơn.
5. AdamW, Warm-up, Schedule và Gradient Clipping
Adam dùng moment bậc nhất/bậc hai để scale cập nhật; AdamW thêm phép co trọng số tách rời. Điểm cần nhớ:
- $L_2$ penalty là một hạng trong objective và có diễn giải MAP dưới prior Gaussian.
- Decoupled weight decay là phép biến đổi trực tiếp lên tham số; dưới optimizer thích ứng, nó không đồng nhất với $L_2$ penalty.
- Warm-up tránh cập nhật quá mạnh khi thống kê optimizer/activation chưa ổn định; schedule giảm learning rate giúp giai đoạn cuối hội tụ tinh hơn.
- Gradient clipping đặt trần norm của gradient cập nhật; nó xử lý triệu chứng bùng nổ tại bước đó, không thay thế initialization/norm/residual tốt.
6. Padding Mask và Loss Mask Là Hai Việc Khác Nhau
Attention mask ngăn token đệm được dùng làm key/value. Loss mask quyết định vị trí nào đóng góp vào trung bình CE. Một batch có nhiều padding mà chia loss sai mẫu số có thể làm learning rate hiệu dụng thay đổi theo độ dài câu.
7. Từ Phân Phối Token Đến Một Chuỗi
| Chiến lược | Quy tắc | Điểm mạnh | Rủi ro |
|---|---|---|---|
| Greedy | Chọn argmax mỗi bước | Nhanh, xác định | Tối ưu cục bộ, không tìm chuỗi tốt nhất |
| Beam search | Giữ $B$ prefix có log-prob cao | Hữu ích cho MT có đầu ra tương đối xác định | Đắt hơn, bias theo độ dài, tối ưu xác suất model chứ không bảo đảm chất lượng |
| Sampling | Lấy mẫu từ phân phối đã chỉnh | Đa dạng | Biến thiên, nhạy temperature/filter |
| Top-k / Top-p | Cắt đuôi trước khi lấy mẫu | Loại token xác suất rất thấp | Tham số không chuyển nguyên xi giữa model/tác vụ |
Ví dụ tính bằng tay: Tại sao Greedy Search bị "sập bẫy" tối ưu cục bộ so với Beam Search ($B=2$)?
Xét bài toán dịch cụm từ sang chuỗi 2 token $(y_1, y_2)$:
- Bước 1: Model dự đoán $p(y_1=\text{"Học"}) = \mathbf{0.55}$ và $p(y_1=\text{"Máy"}) = \mathbf{0.45}$.
- Bước 2 (theo sau "Học"): Mọi lựa chọn đều phân tán, cao nhất là $p(y_2=\text{"tập"} \mid \text{"Học"}) = 0.40 \implies P(\text{"Học tập"}) = 0.55 \times 0.40 = \mathbf{0.220}$.
- Bước 2 (theo sau "Máy"): Cụm cố định rất chắc chắn $p(y_2=\text{"học"} \mid \text{"Máy"}) = 0.80 \implies P(\text{"Máy học"}) = 0.45 \times 0.80 = \mathbf{0.360}$.
Kết quả: Greedy chốt ngay $\text{"Học"}$ ở bước 1 (vì $0.55 > 0.45$) nên kẹt ở chuỗi có xác suất $0.220$. Ngược lại, Beam Search ($B=2$) giữ cả hai ứng viên $\text{"Học"}$ và $\text{"Máy"}$ sau bước 1, sang bước 2 phát hiện $\text{"Máy học"}$ đạt tổng xác suất $0.360 > 0.220$ và chọn đúng chuỗi tối ưu toàn cục!
Greedy, beam và sampling trên cùng một cây xác suất
Ví dụ được thiết kế để greedy rơi vào bẫy cục bộ—
Việc cần làm: ① Greedy chọn A ở bước đầu vì 0,60 > 0,40, nhưng chuỗi cuối chỉ có xác suất 0,15. ② Beam width 2 giữ cả A và B, sau đó tìm được BAA với xác suất 0,361. ③ Sampling với temperature/top-k/top-p tạo nhiều đường hợp lệ; bấm Sinh lại để đổi seed.
8. KV Cache Khi Decode: Mỗi Token Mới Vẫn Phải Nhìn Toàn Bộ Cache
Cache tránh tính lại K/V của prefix, nhưng query mới vẫn dot-product với mọi key cũ. Do đó chi phí mỗi bước tăng gần tuyến tính theo context và tổng chi phí sinh $T$ token vẫn gần bậc hai với attention chuẩn. MQA/GQA giảm băng thông/cache; FlashAttention tối ưu prefill/training; hai giải pháp nhắm vào nút thắt khác nhau.
9. Bản Đồ Áp Dụng Cho MT, NER và Term Verification
| Bài toán | Kiến trúc toán học | Loss | Điểm cần kiểm tra |
|---|---|---|---|
| Dịch zh→vi | Encoder–decoder hoặc decoder-only có điều kiện | Token CE; có thể thêm distillation/auxiliary loss | Padding/loss mask, length bias, beam, entity constraints |
| NER | Encoder + token head; tùy chọn CRF | Token CE hoặc sequence NLL | Alignment tokenizer–label, class imbalance, span metric |
| Term verifier | GBDT trên feature hoặc contextual encoder nhỏ | BCE/multiclass CE/ranking loss | Calibration, threshold theo utility, leakage theo novel/source |
10. Checklist Đọc Bất Kỳ Mô Hình ML/DL Nào
Tensor nào đại diện dữ liệu? Shape, dtype và mask?
Thông tin trộn theo chiều feature, token hay thời gian?
Model định nghĩa $p(y\mid x)$ hay chỉ một score?
Loss là NLL, surrogate, ranking hay reconstruction?
Gradient chảy qua đâu? Conditioning, norm, schedule?
Split có sạch? Metric có khớp mục tiêu sản phẩm?
Argmax, threshold, beam hay sampling? Có cache?
Nút thắt compute, memory, bandwidth hay I/O?
11. Nguồn Kỹ Thuật Chính Cho Phần Mở Rộng
- Vaswani et al., Attention Is All You Need — scaled dot-product attention, multi-head, encoder–decoder Transformer.
- Ba, Kiros & Hinton, Layer Normalization.
- Loshchilov & Hutter, Decoupled Weight Decay Regularization — phân biệt $L_2$ với weight decay dưới adaptive optimizer.
- Zhang & Sennrich, Root Mean Square Layer Normalization.
- Su et al., RoFormer / Rotary Position Embedding.
- Shazeer, GLU Variants Improve Transformer.
- Dao et al., FlashAttention — exact attention với lịch I/O-aware.
Điểm kết thúc của bản đồ
Từ đây, CNN, diffusion, reinforcement learning hay state-space model không còn là “một thế giới toán khác”. Chúng vẫn dùng cùng bộ khung: representation → probability/score → loss → gradient → optimizer → generalization; chỉ thay cấu trúc truyền thông tin và giả định về dữ liệu.
Tìm đường greedy bỏ lỡ
Trên cây ba bước của lab M13, chọn chuỗi xác suất lớn nhất. Tất cả chuỗi dài đúng 3 token; không có EOS hoặc phạt độ dài. Sau đó chọn lý do greedy có thể bỏ lỡ nó.
Ở gốc: A ≈ 0,60 · B ≈ 0,40 · C ≈ 0,0001
Sau A: (0,50; 0,30; 0,20), bước sau nữa: (0,50; 0,25; 0,25)
Sau B: (0,95; 0,03; 0,02) ở cả hai bước. Sau C: (0,34; 0,33; 0,33).
Thứ tự luôn là A, B, C. Phân phối gốc được chuẩn hóa vì các số cho trước có tổng 1,0001.Gợi ý và điều cần nhớ
P(t₁t₂t₃) = P(t₁)P(t₂|t₁)P(t₃|t₁t₂). So sánh tích cả đường đi. Beam là tìm kiếm gần đúng; bài nhỏ này có thể vét cạn 27 chuỗi để biết nghiệm thật. Xác suất trong mô hình đồ chơi không đo chất lượng ngôn ngữ.