Nền tảnggiáo trình tự học
Toàn văn~327 phút đọc

Nền tảng học máy

Toàn bộ giáo trình trên một trang — tiện cho Ctrl+F, đọc ngoại tuyến hoặc in ra giấy.

Giáo trình 1 của lộ trình

Giáo trình mở đầu lộ trình bằng phần toán và các thuật toán học máy cổ điển mà mọi giáo trình phía sau đều dùng tới. Nội dung đi theo một mạch: nhắc lại đại số tuyến tính và xác suất ở mức cần dùng, học hồi quy và phân loại tuyến tính cùng cách tối ưu chúng, học cách đánh giá và chống overfitting, hiểu vì sao các hàm mất mát quen thuộc có dạng như vậy qua ước lượng hợp lý cực đại, rồi đi qua tối ưu lồi để tới SVM, và kết thúc bằng các phương pháp không giám sát: giảm chiều, phân cụm và hệ thống gợi ý.

Cách trình bày. Mỗi khái niệm đi theo một trình tự: bài toán cần giải, định nghĩa, suy luận, ví dụ tính tay, rồi thí nghiệm kiểm chứng bằng mã. Các định nghĩa, định lý và ví dụ quan trọng được đặt trong hộp riêng để dễ tra lại.

Về số liệu. Mọi con số trong giáo trình được sinh bởi hai script trong code/nentang/ với hạt giống cố định, nên chạy lại cho kết quả giống hệt. Một phần kết quả là kiểm chứng đẳng thức, chẳng hạn ridge trùng với ước lượng MAP khi tiên nghiệm là Gauss, và các kết quả đó khớp tới sai số của máy tính.

0Ký hiệu và quy ước#

Để đọc giáo trình này, người học cần biết đạo hàm của hàm một biến, phép nhân ma trận và đọc được mã Python dùng NumPy. Kiến thức đại số tuyến tính và xác suất ở mức cần thiết được nhắc lại trong Chương 2 và Chương 3, nên không đòi hỏi học trước.

0.1Bảng ký hiệu#

Ký hiệu Ý nghĩa
x∈Rdx \in \mathbb{R}^{d} một điểm dữ liệu đầu vào có dd đặc trưng
X∈Rn×dX \in \mathbb{R}^{n \times d} ma trận dữ liệu gồm nn điểm, mỗi điểm là một hàng
yiy_i, y^i\hat{y}_i nhãn thật và giá trị dự đoán của điểm thứ ii
ww, bb vector trọng số và hệ số chặn của mô hình tuyến tính
θ\theta ký hiệu chung cho mọi tham số của mô hình
L(θ)L(\theta) hàm mất mát
η\eta tốc độ học (learning rate)
λ\lambda hệ số regularization
∇θL\nabla_\theta L gradient của LL theo θ\theta
L\mathcal{L} hàm hợp lý (Chương 10) hoặc hàm Lagrange (Chương 12, 13)
Σ\Sigma ma trận hiệp phương sai
λi\lambda_i, viv_i trị riêng và vector riêng thứ ii
did_i giá trị suy biến thứ ii trong phân tích SVD
κ\kappa số điều kiện của ma trận
αi\alpha_i nhân tử Lagrange ứng với ràng buộc thứ ii
KK số lớp trong bài toán phân loại
kk số cụm, số láng giềng hoặc số chiều giữ lại, tuỳ ngữ cảnh

Chữ λ\lambda được dùng cho hai việc: hệ số regularization (Chương 9) và trị riêng (Chương 2, Chương 14). Hai cách dùng không xuất hiện trong cùng một công thức, trừ Mục 9.3 là nơi trị riêng được viết qua giá trị suy biến did_i để tránh nhầm.

0.2Quy ước thuật ngữ#

Giáo trình dùng thuật ngữ theo cách phổ biến trong cộng đồng học máy tiếng Việt, có tham khảo bản dịch tiếng Việt các cheatsheet CS229 và CS230 của Đại học Stanford. Thuật ngữ nào đã có tên tiếng Việt thông dụng thì dùng tiếng Việt; thuật ngữ nào người làm nghề vẫn gọi bằng tiếng Anh thì giữ nguyên tiếng Anh.

Tiếng Anh Dùng trong giáo trình
supervised / unsupervised learning học có giám sát / học không giám sát
regression / classification hồi quy / phân loại
loss function hàm mất mát
learning rate tốc độ học
normal equations phương trình chuẩn
training / validation / test set tập huấn luyện / tập xác thực / tập kiểm tra
confusion matrix ma trận nhầm lẫn
accuracy độ chính xác (accuracy)
precision, recall, F1 score precision, recall, điểm F1
bias (của một ước lượng) độ chệch
variance phương sai
overfitting / underfitting overfitting / underfitting
regularization regularization
cross-validation cross-validation
gradient descent, momentum, mini-batch giữ nguyên tiếng Anh
likelihood hàm hợp lý (likelihood)
prior / posterior phân phối tiên nghiệm / phân phối hậu nghiệm
cross-entropy cross-entropy
eigenvalue / eigenvector trị riêng / vector riêng
singular value decomposition phân tích giá trị suy biến (SVD)
support vector machine máy vector hỗ trợ (SVM)
kernel, margin kernel, lề
principal component analysis phân tích thành phần chính (PCA)

Chữ bias trong tiếng Anh có hai nghĩa khác nhau. Nghĩa thứ nhất là sai lệch có hệ thống của một ước lượng so với giá trị thật; giáo trình gọi là độ chệch, theo cách gọi "ước lượng không chệch" quen thuộc của thống kê. Nghĩa thứ hai là tham số cộng thêm bb trong w⊤x+bw^\top x + b; giáo trình gọi là hệ số chặn. Bảng đối chiếu đầy đủ nằm ở trang Từ điển thuật ngữ.

0.3Quy ước về chiều và cách viết số#

Ma trận dữ liệu XX có nn hàng ứng với nn điểm dữ liệu và dd cột ứng với dd đặc trưng, đúng như X.shape == (n, d) trong NumPy. Trong công thức, xx là vector cột nên tích với trọng số viết là w⊤xw^\top x; trong mã, cả tập dữ liệu nhân với trọng số viết là X @ w. Hai cách viết chỉ khác nhau một phép chuyển vị.

Phần chữ dùng dấu phẩy thập phân theo lối Việt Nam (0,15). Phần mã và kết quả in ra từ script giữ dấu chấm như Python (0.15).


1Tổng quan về học máy#

Có rất nhiều thuật toán học máy mang tên khác nhau, và người mới dễ có cảm giác phải học thuộc từng cái một. Thực ra phần lớn chúng được ghép từ cùng ba thành phần, và khi đã hiểu ba thành phần ấy thì học một thuật toán mới chỉ còn là trả lời ba câu hỏi. Trước khi đi vào từng thuật toán ở các chương sau, ta dựng khung đó, bắt đầu từ câu hỏi học máy là gì.

1.1Khái niệm học máy#

Một định nghĩa hay được trích dẫn là của Tom Mitchell (1997): một chương trình được gọi là học từ kinh nghiệm EE đối với một lớp nhiệm vụ TT và một thước đo hiệu năng PP, nếu hiệu năng của nó trên các nhiệm vụ trong TT, đo bằng PP, tăng lên theo kinh nghiệm EE. Với bài toán lọc thư rác, TT là việc gắn nhãn "rác" hoặc "không rác" cho một thư, PP là tỉ lệ thư được gắn nhãn đúng, còn EE là tập thư đã được người dùng đánh dấu.

Định nghĩa trên đúng nhưng chưa nói cách làm. Để thấy cách làm, ta nhìn vào cấu tạo của các thuật toán. Mỗi thuật toán học có giám sát đều gồm ba thành phần, như Hình 1 minh hoạ.

Hình 1
Hình 1. Ba thành phần của một thuật toán học có giám sát, và năm thuật toán quen thuộc đọc theo ba thành phần ấy.

Thành phần thứ nhất là mô hình, tập các hàm fθf_\theta mà ta cho phép thuật toán chọn. Hồi quy tuyến tính chỉ cho phép các hàm tuyến tính, chính xác hơn là affine, của đầu vào; cây quyết định cho phép các hàm hằng trên từng vùng; mạng nơ-ron cho phép hợp của nhiều phép biến đổi tuyến tính xen với các hàm phi tuyến. Thành phần thứ hai là hàm mất mát, đo mức sai của một dự đoán so với nhãn thật. Đây là nơi ta nói ra điều mình thực sự muốn: sai lệch lớn có bị phạt nặng hơn không, đoán sai lớp dương có đắt hơn đoán sai lớp âm không. Thành phần thứ ba là thuật toán tối ưu, cách tìm tham số θ\theta làm tổng mất mát trên dữ liệu huấn luyện nhỏ nhất. Có bài toán giải được bằng công thức, có bài toán phải lặp như gradient descent.

Khung ba thành phần biến việc học một thuật toán mới thành việc trả lời ba câu hỏi: mô hình là họ hàm nào, mất mát là gì, tối ưu bằng cách nào. Với bài toán định giá căn hộ theo diện tích ở Chương 4, câu trả lời là: mô hình là các đường thẳng f(x)=w0+w1xf(x) = w_0 + w_1 x, mất mát là bình phương độ lệch giữa giá dự đoán và giá thật, còn tối ưu bằng một công thức đóng, hoặc bằng gradient descent ở Chương 5. Nó cũng cho thấy nhiều thuật toán mang tên khác nhau thực ra rất gần nhau. Chương 6 sẽ chỉ ra rằng perceptron, hồi quy logistic và SVM dùng chung một mô hình là hàm tuyến tính và chung một cách tối ưu là gradient descent; chúng chỉ khác nhau ở hàm mất mát.

Định nghĩa 1.1 (Bài toán học có giám sát)

Cho tập huấn luyện D={(xi,yi)}i=1n\mathcal{D} = \{(x_i, y_i)\}_{i=1}^{n}, một họ hàm {fθ}\{f_\theta\} và một hàm mất mát ℓ\ell. Bài toán học có giám sát là tìm

θ^=arg⁡min⁡θ  1n∑i=1nℓ(yi,fθ(xi)),\hat\theta = \arg\min_\theta \; \frac{1}{n}\sum_{i=1}^{n} \ell\big(y_i, f_\theta(x_i)\big),

với mục đích cuối cùng là fθ^f_{\hat\theta} dự đoán tốt trên những điểm dữ liệu chưa gặp khi huấn luyện.

Vế cuối của định nghĩa là chỗ tạo ra toàn bộ độ khó của học máy. Tối thiểu hoá mất mát trên dữ liệu huấn luyện chỉ là phương tiện; mục tiêu thật là khả năng tổng quát hoá (generalization) sang dữ liệu mới. Một mô hình ghi nhớ nguyên văn tập huấn luyện có mất mát huấn luyện bằng 0 nhưng có thể vô dụng trên dữ liệu mới. Hiện tượng này gọi là overfitting và được bàn kỹ ở Chương 9.

1.2Các dạng bài toán học máy#

Cách phân loại thông dụng nhất dựa vào việc dữ liệu có nhãn hay không. Trong học có giám sát (supervised learning), mỗi điểm dữ liệu xix_i đi kèm một nhãn yiy_i. Nếu nhãn là số thực, như giá nhà hay nhiệt độ ngày mai, bài toán là hồi quy; nếu nhãn thuộc một tập hữu hạn các lớp, như thư rác hay không, ảnh chứa chữ số nào, bài toán là phân loại. Trong học không giám sát (unsupervised learning), ta chỉ có xix_i mà không có nhãn, và mục tiêu là tìm cấu trúc trong dữ liệu: gom các điểm giống nhau thành cụm, tìm vài hướng chứa phần lớn thông tin, hay ước lượng mật độ phân phối. Dạng thứ ba là học tăng cường (reinforcement learning), trong đó một tác tử tương tác với môi trường và nhận tín hiệu thưởng thay vì nhận nhãn đúng cho từng đầu vào; giáo trình Biểu diễn & Căn chỉnh trình bày dạng này.

Bảng sau xếp các chương của giáo trình theo cách phân loại trên.

Có nhãn yy Không có nhãn
Dự đoán một số thực hồi quy (Chương 4)
Dự đoán một lớp phân loại (Chương 6, 7, 13) phân cụm (Chương 15)
Tìm cấu trúc, giảm chiều LDA (Mục 14.4) PCA, SVD (Chương 14)
Điền giá trị còn thiếu phân rã ma trận (Chương 16)

Ranh giới giữa hai cột không cứng. Trong hệ thống gợi ý ở Chương 16, các ô đánh giá đã biết đóng vai trò nhãn, nhưng phần lớn ma trận là ô trống cần điền, nên bài toán nằm giữa hai loại. Ngoài ra còn các dạng lai như học bán giám sát, khi chỉ một phần nhỏ dữ liệu có nhãn, và học tự giám sát, khi nhãn được tạo ra từ chính dữ liệu, chẳng hạn đoán từ tiếp theo trong câu. Học tự giám sát là cách các mô hình ngôn ngữ lớn được huấn luyện, và được trình bày trong giáo trình Biểu diễn & Căn chỉnh.

Ba ví dụ nhỏ đi suốt giáo trình, mỗi ví dụ ứng với một dạng bài toán. Bốn căn hộ với diện tích và giá là bài toán hồi quy, xuất hiện từ Chương 2 tới Chương 11. Sáu sinh viên với số giờ ôn thi và kết quả đỗ hay trượt là bài toán phân loại, từ Chương 6 tới Chương 13. Bốn cửa hàng cần đặt hai kho hàng là bài toán phân cụm ở Chương 15. Các ví dụ đủ nhỏ để tính tay, nên mỗi công thức được kiểm tra trên chúng trước khi đi tới thí nghiệm trên dữ liệu lớn hơn.

1.3Các yếu tố cần xét trước khi chọn thuật toán#

Trước khi chọn một mô hình cụ thể, có ba câu hỏi về dữ liệu và mục tiêu ảnh hưởng tới lựa chọn nhiều hơn bản thân thuật toán.

Câu hỏi đầu tiên là số điểm dữ liệu so với số đặc trưng. Tỉ lệ n/dn/d quyết định mô hình được phép linh hoạt tới mức nào. Khi nn lớn hơn dd rất nhiều, ta có thể dùng mô hình nhiều tham số mà ít lo overfitting. Khi nn xấp xỉ hoặc nhỏ hơn dd, regularization trở thành bắt buộc (Chương 9), và một số phương pháp không dùng được nữa: Mục 4.3 cho thấy phương trình chuẩn của hồi quy tuyến tính không có nghiệm duy nhất khi các cột của XX phụ thuộc tuyến tính, điều chắc chắn xảy ra khi d>nd > n.

Câu hỏi thứ hai là dữ liệu có cấu trúc gì. Ảnh có tính cục bộ, vì điểm ảnh gần nhau liên quan với nhau, và bất biến theo dịch chuyển, vì con mèo ở góc trái hay góc phải vẫn là con mèo. Văn bản và chuỗi thời gian có thứ tự. Dữ liệu dạng bảng, như bảng thông tin khách hàng, không có cấu trúc nào như vậy: đổi thứ tự các cột không làm thay đổi ý nghĩa. Mạng nơ-ron tích chập và Transformer mạnh vì khai thác được cấu trúc của ảnh và chuỗi. Trên dữ liệu dạng bảng, mô hình tuyến tính và các mô hình dựa trên cây quyết định thường cho kết quả tương đương hoặc tốt hơn mạng nơ-ron với chi phí thấp hơn nhiều.

Câu hỏi thứ ba là mục tiêu là dự đoán hay giải thích. Có bài toán chỉ cần dự đoán đúng, chẳng hạn xếp hạng quảng cáo. Có bài toán cần trả lời câu hỏi "đặc trưng này ảnh hưởng tới kết quả bao nhiêu", chẳng hạn đánh giá tác dụng của một chính sách. Hai mục tiêu có thể dẫn tới hai lựa chọn khác nhau. Mục 4.4 đo một trường hợp cụ thể: khi hai đặc trưng gần như trùng nhau, độ dao động của hệ số hồi quy tăng khoảng 25 lần trong khi độ dao động của dự đoán gần như không đổi. Nếu chỉ cần dự đoán thì hiện tượng này vô hại; nếu cần đọc ý nghĩa của hệ số thì các hệ số đó không đáng tin.

1.4Vị trí của giáo trình trong lộ trình#

Giáo trình này là chặng đầu của một lộ trình sáu giáo trình, xây dựng theo roadmap AI Engineer của roadmap.sh và bổ sung phần kiến thức nền mà roadmap đó giả định người học đã có.

Hình 13
Hình 13. Sáu giáo trình của lộ trình và thứ tự đọc đề nghị. Mũi tên chỉ thứ tự ít phải quay lại nhất, không phải thứ tự bắt buộc.

Kiến thức của giáo trình này được dùng lại ở nhiều chỗ trong các giáo trình sau. Gradient descent ở Chương 5 là nền cho Chương 5 của Học sâu, nơi thuật toán được mở rộng thành momentum, Adam và lan truyền ngược qua nhiều lớp. Hồi quy logistic ở Chương 6 là một mạng nơ-ron một lớp, và Chương 4 của Học sâu bắt đầu bằng việc chồng nhiều lớp như vậy lên nhau. Regularization ở Chương 9 và ước lượng MAP ở Chương 10 giải thích nguồn gốc của weight decay, kỹ thuật được dùng mặc định khi huấn luyện mạng sâu (Chương 5 của Học sâu). Các độ đo đánh giá ở Chương 8 là nền cho việc đánh giá mô hình trong sản xuất ở Chương 6 của MLOps. Tích vô hướng, cosine và PCA ở Chương 2 và Chương 14 là công cụ để hiểu embedding và tìm kiếm vector trong giáo trình Biểu diễn & Căn chỉnh và Ứng dụng LLM. Còn SVD ở Mục 2.6 là công cụ để đọc Chương 11 của Quantization, nơi các phương pháp như GPTQ dựa trên phân rã ma trận.

1.5Quy trình giải một bài toán học máy#

Các chương sau đi sâu vào từng thuật toán. Mục này mô tả quy trình bao quanh thuật toán, vì trên thực tế phần lớn lỗi nằm ở quy trình chứ không nằm ở thuật toán.

Mọi thứ bắt đầu từ việc xác định bài toán và thước đo: viết rõ đầu vào, đầu ra và thước đo thành công trước khi đụng tới dữ liệu. Thước đo phải phản ánh chi phí thật. Với bài toán phát hiện gian lận, bỏ sót một ca gian lận thường đắt hơn nhiều so với báo động nhầm, nên độ chính xác không phải thước đo phù hợp (Mục 8.1).

Bước tiếp theo là thu thập và chia dữ liệu. Dữ liệu được chia thành tập huấn luyện, tập xác thực và tập kiểm tra ngay từ đầu. Tập huấn luyện dùng để học tham số, tập xác thực dùng để chọn siêu tham số và so sánh mô hình, còn tập kiểm tra chỉ dùng một lần ở cuối để báo cáo kết quả. Cách chia phải khớp với cách mô hình sẽ được dùng, chẳng hạn dữ liệu có yếu tố thời gian thì chia theo thời gian (Mục 8.5).

Trước khi thử mô hình phức tạp, nên dựng một mô hình cơ sở đơn giản nhất có thể: đoán giá trị trung bình, đoán lớp phổ biến nhất, hoặc một mô hình tuyến tính. Mô hình cơ sở cho biết một mô hình phức tạp hơn có thật sự mang lại gì hay không. Sau đó mới tới xây dựng đặc trưng và huấn luyện: chuẩn hoá đặc trưng, mã hoá biến hạng mục, xử lý giá trị thiếu. Mọi phép biến đổi có tham số, như trung bình và độ lệch chuẩn khi chuẩn hoá, chỉ được ước lượng trên tập huấn luyện.

Mô hình được đánh giá và điều chỉnh trên tập xác thực hoặc bằng cross-validation (Mục 9.5) để chọn siêu tham số. Khi đánh giá, nên xem lỗi theo từng nhóm dữ liệu chứ không chỉ một con số tổng. Cuối cùng, mô hình được đo trên tập kiểm tra đúng một lần rồi mới triển khai. Sau khi triển khai, mô hình cần được giám sát vì phân phối dữ liệu thay đổi theo thời gian; giáo trình MLOps trình bày phần này.

Lưu ý

Nếu tập kiểm tra được dùng nhiều lần để chọn mô hình, nó trở thành một tập xác thực thứ hai và con số báo cáo sẽ lạc quan hơn thực tế. Đây là lỗi phổ biến nhất khi so sánh mô hình, và Mục 9.5 nói cách tránh.

1.6Tóm tắt#

Mỗi thuật toán học có giám sát gồm ba thành phần: mô hình là họ hàm được phép chọn, hàm mất mát đo mức sai, và thuật toán tối ưu tìm tham số. Mục tiêu thật của học máy là tổng quát hoá sang dữ liệu chưa gặp, không phải tối thiểu hoá mất mát trên dữ liệu huấn luyện. Bài toán học máy chia theo việc có nhãn hay không thành học có giám sát, gồm hồi quy và phân loại, học không giám sát, và học tăng cường; bốn căn hộ, sáu sinh viên và bốn cửa hàng là ba ví dụ của ba dạng đó, đi cùng các chương sau. Trước khi chọn thuật toán cần xét tỉ lệ số điểm trên số đặc trưng, cấu trúc của dữ liệu, và mục tiêu là dự đoán hay giải thích. Quy trình bao quanh thuật toán, từ chọn thước đo, chia dữ liệu tới dùng tập kiểm tra đúng một lần, là nơi xảy ra phần lớn lỗi.

Để làm việc với cả ba thành phần, ta cần một ngôn ngữ chung: dữ liệu là ma trận, mô hình tuyến tính là phép nhân ma trận với vector, và tối ưu cần đạo hàm theo vector. Chương 2 nhắc lại phần đại số tuyến tính cần cho ngôn ngữ đó.


2Đại số tuyến tính#

Mọi thuật toán trong giáo trình đều viết bằng ngôn ngữ vector và ma trận, và nhiều kết luận quan trọng ở các chương sau thực ra là hệ quả của vài định lý đại số tuyến tính. Chẳng hạn, việc hồi quy tuyến tính có nghiệm duy nhất hay không phụ thuộc vào hạng của ma trận dữ liệu, còn tốc độ của gradient descent phụ thuộc vào tỉ số giữa trị riêng lớn nhất và nhỏ nhất. Ở đây ta nhắc lại những khái niệm đó, mỗi khái niệm kèm lý do nó cần thiết. Các khái niệm được minh hoạ trên cùng một ma trận dữ liệu nhỏ, diện tích của bốn căn hộ, ma trận mà Chương 4 sẽ dùng để định giá căn hộ. Người đã vững đại số tuyến tính có thể đọc lướt bảng ở Mục 2.1 rồi chuyển sang Chương 3.

2.1Vector, ma trận và hạng#

Một vector x∈Rdx \in \mathbb{R}^d là một danh sách dd số thực, quy ước viết thành cột. Trong học máy, mỗi điểm dữ liệu là một vector: một căn nhà được mô tả bằng diện tích, số phòng và khoảng cách tới trung tâm là một vector ba chiều. Một ma trận X∈Rn×dX \in \mathbb{R}^{n \times d} là một bảng nn hàng, dd cột; ma trận dữ liệu xếp nn điểm dữ liệu thành nn hàng.

Tích ma trận với vector có hai cách đọc, và cả hai đều được dùng:

Xw=(x1⊤w⋮xn⊤w)=w1X:,1+w2X:,2+⋯+wdX:,d.Xw = \begin{pmatrix} x_1^\top w \\ \vdots \\ x_n^\top w \end{pmatrix} = w_1 X_{:,1} + w_2 X_{:,2} + \dots + w_d X_{:,d}.

Đọc theo hàng, XwXw là vector chứa dự đoán của mô hình tuyến tính cho từng điểm dữ liệu. Đọc theo cột, XwXw là một tổ hợp tuyến tính của các cột của XX. Tập mọi tổ hợp tuyến tính như vậy gọi là không gian cột của XX, và hồi quy tuyến tính chính là tìm điểm trong không gian cột gần yy nhất (Chương 4).

Bốn căn hộ có diện tích 40, 60, 80 và 100 m² cho thấy cả hai cách đọc. Thêm một cột hằng 1 cho hệ số chặn, ma trận dữ liệu và một vector tham số là

X=(1401601801100),w=(0,570,024).X = \begin{pmatrix}1&40\\1&60\\1&80\\1&100\end{pmatrix}, \qquad w = \begin{pmatrix}0{,}57\\0{,}024\end{pmatrix}.

Đọc theo hàng, Xw=(1,53; 2,01; 2,49; 2,97)Xw = (1{,}53;\ 2{,}01;\ 2{,}49;\ 2{,}97) là giá dự đoán, tính bằng tỉ đồng, của bốn căn: căn 40 m² được đoán 0,57+0,024⋅40=1,530{,}57 + 0{,}024 \cdot 40 = 1{,}53 tỉ. Đọc theo cột, cùng vector đó là 0,57 lần cột hằng cộng 0,024 lần cột diện tích. Chương 4 sẽ chỉ ra vì sao ww này là lựa chọn tốt nhất cho bốn căn hộ.

Định nghĩa 2.1 (Hạng)

Hạng của ma trận XX, ký hiệu rank⁡(X)\operatorname{rank}(X), là số cột độc lập tuyến tính lớn nhất của XX (bằng số hàng độc lập tuyến tính lớn nhất). Ma trận X∈Rn×dX \in \mathbb{R}^{n \times d} gọi là đủ hạng cột nếu rank⁡(X)=d\operatorname{rank}(X) = d, tức không cột nào là tổ hợp tuyến tính của các cột còn lại.

Vì hạng không vượt quá số hàng, một ma trận có nhiều cột hơn hàng (d>nd > n) không thể đủ hạng cột. Đó chính là cơ sở toán học của nhận xét ở Mục 1.3 rằng dữ liệu có nhiều đặc trưng hơn số điểm cần được xử lý đặc biệt. Ma trận XX của bốn căn hộ có hai cột không tỉ lệ với nhau, nên có hạng 2 và đủ hạng cột. Thêm một cột ghi diện tích bằng dm², tức 100 lần cột diện tích, thì ma trận có ba cột nhưng hạng vẫn là 2 và không còn đủ hạng cột; Mục 4.3 xét đúng tình huống đặc trưng trùng lặp này.

Bảng sau liệt kê các khái niệm của chương và nơi chúng được dùng.

Khái niệm Dùng ở đâu
Tích vô hướng w⊤xw^\top x mọi mô hình tuyến tính (Chương 4, 6, 13)
Chuẩn ∣w∣2|w|_2, ∣w∣1|w|_1 regularization (Chương 9), lề của SVM (Chương 13)
Hạng của ma trận điều kiện có nghiệm của phương trình chuẩn (Mục 4.3)
Trị riêng, vector riêng PCA (Chương 14), số điều kiện (Mục 5.3)
Ma trận xác định dương hàm lồi bậc hai (Chương 11)
Phân tích SVD PCA, ridge, phân rã ma trận (Chương 9, 14, 16)
Đạo hàm theo vector mọi phép suy ra công thức cập nhật tham số

2.2Tích vô hướng và siêu phẳng#

Định nghĩa 2.2 (Tích vô hướng)

Tích vô hướng của hai vector w,x∈Rdw, x \in \mathbb{R}^d là

w⊤x=∑j=1dwjxj=∥w∥2 ∥x∥2cos⁡ϑ,w^\top x = \sum_{j=1}^{d} w_j x_j = \|w\|_2\,\|x\|_2\cos\vartheta,

trong đó ϑ\vartheta là góc giữa hai vector.

Hai cách viết ứng với hai cách hiểu. Theo cách đại số, w⊤xw^\top x là tổng có trọng số của các đặc trưng: đặc trưng nào có trọng số lớn thì đóng góp nhiều vào kết quả. Theo cách hình học, w⊤xw^\top x bằng độ dài hình chiếu của xx lên hướng của ww nhân với độ dài của ww. Khi hai vector cùng hướng, tích vô hướng lớn và dương; khi vuông góc, nó bằng 0; khi ngược hướng, nó âm. Chia cho tích hai độ dài ta được cos⁡ϑ\cos\vartheta, gọi là độ tương đồng cosine, thước đo dùng khắp nơi khi so sánh embedding.

Cách hiểu hình học cho biết tập nghiệm của phương trình w⊤x+b=0w^\top x + b = 0 là gì. Đó là tập các điểm mà hình chiếu lên hướng ww có cùng một giá trị, tức một siêu phẳng vuông góc với ww. Trong không gian hai chiều, siêu phẳng là một đường thẳng; trong ba chiều, là một mặt phẳng. Vector ww gọi là vector pháp tuyến của siêu phẳng. Mọi bộ phân loại tuyến tính ở Chương 6 và Chương 13 đều chia không gian bằng một siêu phẳng như vậy: phía w⊤x+b>0w^\top x + b > 0 là một lớp, phía còn lại là lớp kia.

Định lý 2.1 (Khoảng cách từ một điểm tới siêu phẳng)

Khoảng cách từ điểm x0x_0 tới siêu phẳng w⊤x+b=0w^\top x + b = 0 là

dist⁡(x0)=∣w⊤x0+b∣∥w∥2.\operatorname{dist}(x_0) = \frac{|w^\top x_0 + b|}{\|w\|_2}.

Chứng minh

Gọi xpx_p là hình chiếu vuông góc của x0x_0 lên siêu phẳng. Vì x0−xpx_0 - x_p vuông góc với siêu phẳng nên nó cùng phương với ww: x0−xp=t w/∥w∥x_0 - x_p = t\,w/\|w\| với ∣t∣|t| là khoảng cách cần tìm. Nhân vô hướng hai vế với ww và dùng w⊤xp=−bw^\top x_p = -b ta được w⊤x0+b=t ∥w∥w^\top x_0 + b = t\,\|w\|, suy ra ∣t∣=∣w⊤x0+b∣/∥w∥|t| = |w^\top x_0 + b|/\|w\|.

Ví dụ 2.1

Cho w=(3,4)w = (3, 4), b=−5b = -5 và điểm x0=(2,1)x_0 = (2, 1). Ta có w⊤x0+b=6+4−5=5w^\top x_0 + b = 6 + 4 - 5 = 5 và ∥w∥=9+16=5\|w\| = \sqrt{9 + 16} = 5, nên khoảng cách từ x0x_0 tới đường thẳng 3x1+4x2=53x_1 + 4x_2 = 5 bằng 1. Dấu của w⊤x0+bw^\top x_0 + b là dương, nên x0x_0 nằm về phía mà ww chỉ tới.

Công thức khoảng cách xuất hiện lại ở Mục 13.2. Trong SVM, khoảng cách từ điểm dữ liệu gần nhất tới siêu phẳng tỉ lệ nghịch với ∥w∥\|w\|, nên cực đại khoảng cách đó tương đương với cực tiểu ∥w∥\|w\|.

2.3Chuẩn của vector#

Chuẩn là cách đo độ dài của một vector. Ba chuẩn hay gặp là

∥w∥1=∑j∣wj∣,∥w∥2=∑jwj2,∥w∥∞=max⁡j∣wj∣.\|w\|_1 = \sum_j |w_j|, \qquad \|w\|_2 = \sqrt{\textstyle\sum_j w_j^2}, \qquad \|w\|_\infty = \max_j |w_j|.

Chuẩn ℓ2\ell_2 là độ dài Euclid thông thường. Chuẩn ℓ1\ell_1 là tổng trị tuyệt đối, còn gọi là khoảng cách Manhattan khi dùng để đo khoảng cách giữa hai điểm, vì giống cách đi theo các khối nhà vuông góc. Chuẩn ℓ∞\ell_\infty là thành phần có trị tuyệt đối lớn nhất. Chẳng hạn với w=(3,−4,0)w = (3, -4, 0): ∥w∥1=7\|w\|_1 = 7, ∥w∥2=5\|w\|_2 = 5, ∥w∥∞=4\|w\|_\infty = 4.

Cách dễ nhất để thấy khác biệt giữa các chuẩn là vẽ quả cầu đơn vị {w:∥w∥≤1}\{w : \|w\| \le 1\} trong hai chiều. Với ℓ2\ell_2 đó là hình tròn. Với ℓ1\ell_1 đó là hình vuông xoay 45 độ, có bốn đỉnh nằm trên các trục toạ độ. Với ℓ∞\ell_\infty đó là hình vuông có cạnh song song với các trục.

Nghe như ba cách đo cùng một thứ, nhưng khi dùng làm thành phần regularization, chọn ℓ1\ell_1 hay ℓ2\ell_2 cho ra hai thuật toán có hành vi khác nhau về bản chất. Mục 9.4 đo được rằng phạt ℓ2\ell_2 (ridge) không bao giờ đưa một hệ số về đúng 0, còn phạt ℓ1\ell_1 (lasso) thì có: ở λ=100\lambda = 100, lasso đưa đúng 9 trong 12 hệ số về 0, trùng với số hệ số bằng 0 của mô hình sinh ra dữ liệu. Về hình học, các đỉnh nhọn của quả cầu ℓ1\ell_1 nằm trên trục toạ độ và nghiệm tối ưu hay rơi vào các đỉnh đó; về giải tích, hàm ∣w∣|w| không khả vi tại 0. Mục 9.4 trình bày cả hai cách giải thích.

2.4Trị riêng và vector riêng#

Định nghĩa 2.3 (Trị riêng, vector riêng)

Cho ma trận vuông A∈Rd×dA \in \mathbb{R}^{d \times d}. Số λ\lambda là một trị riêng và vector khác không vv là một vector riêng tương ứng nếu

Av=λv.A v = \lambda v.

Phép nhân với AA nói chung vừa xoay vừa kéo dãn một vector. Vector riêng là những hướng đặc biệt mà AA không xoay, chỉ kéo dãn với hệ số λ\lambda, hoặc lật ngược nếu λ<0\lambda < 0. Trong học máy, ma trận ta gặp nhiều nhất là ma trận hiệp phương sai và ma trận X⊤XX^\top X, và cả hai đều đối xứng. Với ma trận đối xứng có một kết quả rất mạnh.

Định lý 2.2 (Định lý phổ)

Mọi ma trận đối xứng thực A∈Rd×dA \in \mathbb{R}^{d\times d} có dd trị riêng thực λ1,…,λd\lambda_1, \dots, \lambda_d và một hệ dd vector riêng trực chuẩn v1,…,vdv_1, \dots, v_d. Viết V=[v1,…,vd]V = [v_1, \dots, v_d] và Λ=diag⁡(λ1,…,λd)\Lambda = \operatorname{diag}(\lambda_1, \dots, \lambda_d) thì

A=VΛV⊤=∑i=1dλivivi⊤.A = V \Lambda V^\top = \sum_{i=1}^{d} \lambda_i v_i v_i^\top.

Định lý phổ nói rằng một ma trận đối xứng chỉ làm một việc đơn giản: trong hệ toạ độ gồm các vector riêng, nó kéo dãn mỗi trục một hệ số λi\lambda_i. Đây là nền tảng của PCA ở Chương 14, vì các thành phần chính chính là các vector riêng của ma trận hiệp phương sai.

Ví dụ 2.2

Ma trận A=(2112)A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} có hai trị riêng λ1=3\lambda_1 = 3 và λ2=1\lambda_2 = 1, với vector riêng v1=12(1,1)v_1 = \tfrac{1}{\sqrt2}(1, 1) và v2=12(1,−1)v_2 = \tfrac{1}{\sqrt2}(1, -1). Kiểm tra: Av1=12(3,3)=3v1A v_1 = \tfrac{1}{\sqrt2}(3, 3) = 3 v_1. Như vậy AA kéo dãn gấp ba theo đường chéo x1=x2x_1 = x_2 và giữ nguyên theo đường chéo x1=−x2x_1 = -x_2.

Hai đẳng thức sau được dùng thường xuyên về sau:

tr⁡(A)=∑iλi,det⁡(A)=∏iλi.\operatorname{tr}(A) = \sum_i \lambda_i, \qquad \det(A) = \prod_i \lambda_i.

Với ma trận ở Ví dụ 2.2, vết bằng 2+2=4=3+12 + 2 = 4 = 3 + 1 và định thức bằng 4−1=3=3×14 - 1 = 3 = 3 \times 1.

Định nghĩa 2.4 (Số điều kiện)

Với ma trận đối xứng xác định dương AA, số điều kiện là tỉ số giữa trị riêng lớn nhất và nhỏ nhất:

κ(A)=λmax⁡λmin⁡≥1.\kappa(A) = \frac{\lambda_{\max}}{\lambda_{\min}} \ge 1.

Số điều kiện đo độ "dẹt" của ma trận: κ=1\kappa = 1 nghĩa là AA kéo dãn mọi hướng như nhau, còn κ\kappa lớn nghĩa là có hướng bị kéo rất mạnh và có hướng gần như bị ép dẹt. Với bốn căn hộ, X⊤X=(428028021 600)X^\top X = \begin{pmatrix}4 & 280\\ 280 & 21\,600\end{pmatrix} có hai trị riêng khoảng 21 604 và 0,37, nên κ≈58 340\kappa \approx 58\,340: theo một hướng, ma trận kéo dãn mạnh hơn hướng kia khoảng 58 nghìn lần. Đại lượng này quyết định tốc độ của gradient descent. Mục 5.3 đo được rằng số vòng lặp cần thiết tỉ lệ thuận với κ\kappa: khi κ\kappa tăng từ 1 lên 10 000, số vòng lặp tăng từ 1 lên 92 104. Cũng ở mục đó, chỉ cần trừ trung bình rồi chia diện tích cho độ lệch chuẩn là κ\kappa của bài toán bốn căn hộ giảm từ 58 340 xuống 1.

2.5Ma trận xác định dương#

Định nghĩa 2.5 (Ma trận xác định dương)

Ma trận đối xứng AA gọi là xác định dương nếu z⊤Az>0z^\top A z > 0 với mọi z≠0z \neq 0, và nửa xác định dương nếu z⊤Az≥0z^\top A z \ge 0 với mọi zz. Tương đương: mọi trị riêng của AA dương (tương ứng, không âm).

Sự tương đương với trị riêng suy ra ngay từ định lý phổ: viết zz trong hệ toạ độ vector riêng, z=∑iciviz = \sum_i c_i v_i, thì z⊤Az=∑iλici2z^\top A z = \sum_i \lambda_i c_i^2. Tổng này dương với mọi z≠0z \ne 0 khi và chỉ khi mọi λi>0\lambda_i > 0.

Các chương sau cần tới khái niệm này ở ba chỗ. Thứ nhất, hàm bậc hai f(z)=12z⊤Az+c⊤zf(z) = \tfrac12 z^\top A z + c^\top z là hàm lồi khi và chỉ khi AA nửa xác định dương (Chương 11), và khi AA xác định dương thì ff có đúng một điểm cực tiểu. Thứ hai, ma trận X⊤XX^\top X luôn nửa xác định dương, vì z⊤X⊤Xz=∥Xz∥22≥0z^\top X^\top X z = \|Xz\|_2^2 \ge 0; nó xác định dương khi và chỉ khi Xz≠0Xz \ne 0 với mọi z≠0z \ne 0, tức khi XX đủ hạng cột. Đó chính là điều kiện để phương trình chuẩn của hồi quy tuyến tính có nghiệm duy nhất (Mục 4.3). Với bốn căn hộ, hai trị riêng 21 604 và 0,37 của X⊤XX^\top X đều dương, nên ma trận này xác định dương. Thứ ba, nếu AA nửa xác định dương và λ>0\lambda > 0 thì A+λIA + \lambda I xác định dương, vì z⊤(A+λI)z=z⊤Az+λ∥z∥2>0z^\top (A + \lambda I) z = z^\top A z + \lambda\|z\|^2 > 0 với mọi z≠0z \ne 0; các trị riêng của A+λIA + \lambda I là λi+λ\lambda_i + \lambda, đều lớn hơn hoặc bằng λ\lambda. Nhờ tính chất này, hồi quy ridge luôn có nghiệm duy nhất, kể cả khi hồi quy tuyến tính thông thường không có (Mục 9.2).

2.6Phân tích giá trị suy biến (SVD)#

Định lý phổ chỉ áp dụng cho ma trận vuông đối xứng. Ma trận dữ liệu XX thường chữ nhật, và công cụ tương ứng cho nó là SVD.

Định lý 2.3 (Phân tích giá trị suy biến)

Mọi ma trận X∈Rn×dX \in \mathbb{R}^{n \times d} viết được dưới dạng

X=UDV⊤,X = U D V^\top,

trong đó U∈Rn×nU \in \mathbb{R}^{n \times n} và V∈Rd×dV \in \mathbb{R}^{d \times d} là ma trận trực giao, còn D∈Rn×dD \in \mathbb{R}^{n \times d} có các phần tử trên đường chéo d1≥d2≥⋯≥0d_1 \ge d_2 \ge \dots \ge 0 và bằng 0 ở mọi chỗ khác. Các số did_i gọi là giá trị suy biến của XX.

Về mặt hình học, SVD nói rằng mọi phép biến đổi tuyến tính đều gồm ba bước: xoay (nhân V⊤V^\top), kéo dãn theo các trục toạ độ (nhân DD), rồi xoay lần nữa (nhân UU). Các chương sau dùng ba hệ quả của nó.

Hệ quả thứ nhất là liên hệ với trị riêng. Ta có X⊤X=VD⊤D V⊤X^\top X = V D^\top D\, V^\top, nên các vector riêng của X⊤XX^\top X là các cột của VV và các trị riêng là di2d_i^2. Khi XX đã được trừ trung bình theo cột, ma trận hiệp phương sai mẫu là X⊤X/(n−1)X^\top X/(n-1), nên trị riêng của nó bằng di2/(n−1)d_i^2/(n-1). Mục 14.2 kiểm chứng điều này bằng số: tính theo hai cách, kết quả lệch nhau 7,1×10−157{,}1 \times 10^{-15}.

Hệ quả thứ hai là số điều kiện bị bình phương. Vì trị riêng của X⊤XX^\top X là bình phương giá trị suy biến của XX, ta có κ(X⊤X)=κ(X)2\kappa(X^\top X) = \kappa(X)^2, trong đó κ(X)=d1/dmin⁡\kappa(X) = d_1/d_{\min}. Nếu κ(X)=100\kappa(X) = 100 thì κ(X⊤X)=104\kappa(X^\top X) = 10^4. Với bốn căn hộ, hai giá trị suy biến của XX là khoảng 146,98 và 0,609, nên κ(X)≈241,5\kappa(X) \approx 241{,}5 và κ(X⊤X)≈241,52≈58 340\kappa(X^\top X) \approx 241{,}5^2 \approx 58\,340, đúng số điều kiện ở Mục 2.4. Khi giải một hệ tuyến tính có số điều kiện κ\kappa bằng số thực dấu phẩy động, ta có thể mất khoảng log⁡10κ\log_{10}\kappa chữ số có nghĩa, nên lập X⊤XX^\top X làm mất gấp đôi số chữ số so với làm việc trực tiếp trên XX. Vì vậy các thư viện giải bài toán bình phương tối thiểu bằng phân tích QR hoặc SVD của XX thay vì dùng công thức (X⊤X)−1X⊤y(X^\top X)^{-1}X^\top y.

Hệ quả thứ ba là xấp xỉ hạng thấp tốt nhất. Giữ lại kk giá trị suy biến lớn nhất và đặt các giá trị còn lại bằng 0 cho ma trận hạng kk gần XX nhất theo chuẩn Frobenius; đây là định lý Eckart–Young, và Mục 14.3 kiểm chứng đẳng thức sai số của nó tới 10−1310^{-13}.

2.7Đạo hàm theo vector#

Hầu hết thuật toán học máy tìm tham số bằng cách cho gradient của hàm mất mát bằng 0 hoặc đi ngược hướng gradient. Vì vậy cần tính được đạo hàm của hàm nhiều biến.

Định nghĩa 2.6 (Gradient)

Với hàm f:Rd→Rf: \mathbb{R}^d \to \mathbb{R}, gradient của ff tại ww là vector các đạo hàm riêng

∇wf=(∂f∂w1,…,∂f∂wd)⊤.\nabla_w f = \Big(\frac{\partial f}{\partial w_1}, \dots, \frac{\partial f}{\partial w_d}\Big)^\top.

Ma trận các đạo hàm riêng cấp hai [∂2f/∂wj∂wk]\big[\partial^2 f / \partial w_j \partial w_k\big] gọi là ma trận Hessian, ký hiệu ∇2f\nabla^2 f.

Bốn công thức trong bảng dưới đủ cho toàn bộ giáo trình.

Hàm f(w)f(w) Gradient ∇wf\nabla_w f
a⊤wa^\top w aa
w⊤Aww^\top A w (A+A⊤)w(A + A^\top)w, bằng 2Aw2Aw khi AA đối xứng
∣w∣22=w⊤w|w|_2^2 = w^\top w 2w2w
∣y−Xw∣22|y - Xw|_2^2 −2X⊤(y−Xw)-2X^\top(y - Xw)

Công thức cuối được dùng nhiều nhất, và suy ra được từ ba công thức đầu. Khai triển

∥y−Xw∥22=(y−Xw)⊤(y−Xw)=y⊤y−2 (X⊤y)⊤w+w⊤(X⊤X) w.\begin{aligned} \|y - Xw\|_2^2 &= (y - Xw)^\top(y - Xw) \\ &= y^\top y - 2\,(X^\top y)^\top w + w^\top (X^\top X)\, w. \end{aligned}

Số hạng đầu không phụ thuộc ww nên có gradient bằng 0. Số hạng thứ hai có dạng a⊤wa^\top w với a=−2X⊤ya = -2X^\top y. Số hạng thứ ba có dạng w⊤Aww^\top A w với A=X⊤XA = X^\top X đối xứng, nên gradient là 2X⊤Xw2X^\top X w. Cộng lại, ta được

∇w∥y−Xw∥22=−2X⊤y+2X⊤Xw=−2X⊤(y−Xw).\nabla_w \|y - Xw\|_2^2 = -2X^\top y + 2X^\top X w = -2X^\top (y - Xw).

Cho gradient này bằng 0 ta được phương trình chuẩn của Chương 4. Với bốn căn hộ, giá thật là y=(1,5; 2,1; 2,4; 3,0)y = (1{,}5;\ 2{,}1;\ 2{,}4;\ 3{,}0) tỉ, và với w=(0,57; 0,024)w = (0{,}57;\ 0{,}024) ở Mục 2.1, phần dư y−Xwy - Xw là (−0,03; 0,09; −0,09; 0,03)(-0{,}03;\ 0{,}09;\ -0{,}09;\ 0{,}03). Thành phần thứ nhất của X⊤(y−Xw)X^\top(y - Xw) là tổng các phần dư, bằng 0; thành phần thứ hai là tổng có trọng số theo diện tích, −1,2+5,4−7,2+3,0=0-1{,}2 + 5{,}4 - 7{,}2 + 3{,}0 = 0. Gradient bằng 0, nên ww này là nghiệm, đúng như Chương 4 sẽ tìm ra. Ma trận Hessian của hàm này là 2X⊤X2X^\top X, nửa xác định dương theo Mục 2.5, nên hàm lồi và mọi điểm có gradient bằng 0 đều là cực tiểu.

Lưu ý

Công thức gradient tự suy ra bằng tay rất dễ sai dấu hoặc thiếu hệ số 2. Cách kiểm tra đáng tin là so sánh với đạo hàm tính bằng sai phân hữu hạn. Mục 5.5 trình bày cách làm và cách chọn bước sai phân ε\varepsilon, trong đó ε\varepsilon quá nhỏ lại cho kết quả kém hơn.

2.8Tóm tắt#

Ma trận dữ liệu xếp mỗi điểm thành một hàng, và tích XwXw vừa là vector dự đoán vừa là tổ hợp tuyến tính của các cột. Hạng của XX cho biết các cột có độc lập hay không, nên quyết định hồi quy tuyến tính có nghiệm duy nhất hay không. Tích vô hướng đo độ chiếu của vector này lên vector kia, và mặt w⊤x+b=0w^\top x + b = 0 là một siêu phẳng với khoảng cách từ một điểm tới nó bằng ∣w⊤x0+b∣/∥w∥|w^\top x_0 + b|/\|w\|. Chuẩn ℓ1\ell_1 và ℓ2\ell_2 khác nhau ở hình dạng quả cầu đơn vị, và khác biệt đó quyết định hành vi của lasso và ridge. Ma trận đối xứng chỉ kéo dãn các trục vector riêng của nó, số điều kiện đo độ dẹt của phép kéo dãn đó, và SVD mở rộng ý tưởng này cho ma trận chữ nhật. Cuối cùng, gradient của ∥y−Xw∥2\|y - Xw\|^2 là −2X⊤(y−Xw)-2X^\top(y - Xw), công thức sẽ dùng ngay ở Chương 4. Ma trận của bốn căn hộ minh hoạ cả chương: XwXw cho giá dự đoán, XX đủ hạng cột, κ(X⊤X)≈58 340\kappa(X^\top X) \approx 58\,340 là bình phương của κ(X)≈241,5\kappa(X) \approx 241{,}5, và gradient bằng 0 tại w=(0,57; 0,024)w = (0{,}57;\ 0{,}024).

Đại số tuyến tính mô tả dữ liệu và mô hình, nhưng chưa nói gì về nhiễu. Dữ liệu thật luôn có nhiễu, và mô hình học từ một mẫu hữu hạn nên kết quả của nó cũng ngẫu nhiên. Chương 3 nhắc lại các công cụ xác suất để mô tả sự không chắc chắn đó.


3Xác suất và thống kê#

Chương 2 mô tả dữ liệu và mô hình bằng vector và ma trận, như thể mọi con số đều chính xác. Thực tế thì không: hai căn nhà cùng diện tích vẫn có giá khác nhau, nhãn do người gán có lúc sai, và mỗi lần thu thập lại dữ liệu ta được một mẫu khác. Mô hình học từ một mẫu hữu hạn như vậy, nên bản thân nó cũng là một đại lượng ngẫu nhiên. Xác suất là ngôn ngữ để nói về sự không chắc chắn đó, và nó còn trả lời được hai câu hỏi mà đại số tuyến tính không trả lời được: vì sao hàm mất mát có dạng như vậy, và vì sao regularization có tác dụng.

3.1Vai trò của xác suất trong học máy#

Xác suất xuất hiện trong giáo trình theo ba cách. Cách thứ nhất là mô tả dự đoán không chắc chắn. Hồi quy logistic (Chương 6) trả về xác suất một điểm thuộc lớp dương chứ không chỉ một nhãn, và nhờ có xác suất, ta chọn được ngưỡng quyết định theo chi phí của từng loại sai (Chương 8). Cách thứ hai là giải thích nguồn gốc của hàm mất mát. Bình phương sai số và cross-entropy không phải hai lựa chọn tuỳ ý; Chương 10 chỉ ra rằng chúng là hệ quả của nguyên lý hợp lý cực đại dưới hai giả thiết khác nhau về nhiễu. Cách thứ ba là giải thích nguồn gốc của regularization: Mục 10.4 chỉ ra rằng hồi quy ridge trùng với ước lượng hậu nghiệm cực đại khi tiên nghiệm của trọng số là phân phối Gauss, và kiểm chứng điều này bằng số.

3.2Kỳ vọng và phương sai#

Định nghĩa 3.1 (Kỳ vọng, phương sai)

Với biến ngẫu nhiên XX có hàm xác suất (hoặc hàm mật độ) pp, kỳ vọng của XX là

E[X]=∑xx p(x)(rời rạc),E[X]=∫x p(x) dx(lieˆn tục),\begin{aligned} \mathbb{E}[X] &= \sum_x x\,p(x) && \text{(rời rạc)}, \\ \mathbb{E}[X] &= \int x\,p(x)\,dx && \text{(liên tục)}, \end{aligned}

và phương sai của XX là Var⁡(X)=E[(X−EX)2]=E[X2]−(EX)2\operatorname{Var}(X) = \mathbb{E}\big[(X - \mathbb{E}X)^2\big] = \mathbb{E}[X^2] - (\mathbb{E}X)^2.

Kỳ vọng là giá trị trung bình nếu lặp lại phép thử rất nhiều lần. Phương sai đo mức phân tán quanh giá trị trung bình đó; căn bậc hai của nó là độ lệch chuẩn, có cùng đơn vị với XX.

Các tính chất sau được dùng nhiều lần. Với hằng số a,ba, b,

E[aX+b]=a E[X]+b,Var⁡(aX+b)=a2Var⁡(X).\mathbb{E}[aX + b] = a\,\mathbb{E}[X] + b, \qquad \operatorname{Var}(aX + b) = a^2 \operatorname{Var}(X).

Kỳ vọng của tổng luôn bằng tổng các kỳ vọng, không cần điều kiện gì: E[X+Y]=E[X]+E[Y]\mathbb{E}[X + Y] = \mathbb{E}[X] + \mathbb{E}[Y]. Phương sai của tổng thì phụ thuộc vào mức độ hai biến liên quan với nhau:

Var⁡(X+Y)=Var⁡(X)+Var⁡(Y)+2Cov⁡(X,Y),\operatorname{Var}(X + Y) = \operatorname{Var}(X) + \operatorname{Var}(Y) + 2\operatorname{Cov}(X, Y),

trong đó hiệp phương sai Cov⁡(X,Y)=E[(X−EX)(Y−EY)]\operatorname{Cov}(X, Y) = \mathbb{E}\big[(X - \mathbb{E}X)(Y - \mathbb{E}Y)\big]. Chuẩn hoá hiệp phương sai bằng tích hai độ lệch chuẩn ta được hệ số tương quan ρ=Cov⁡(X,Y)/(σXσY)∈[−1,1]\rho = \operatorname{Cov}(X,Y)/(\sigma_X\sigma_Y) \in [-1, 1]. Chỉ khi XX và YY không tương quan (ρ=0\rho = 0), chẳng hạn khi chúng độc lập, phương sai của tổng mới bằng tổng các phương sai.

Ví dụ 3.1 (Trung bình của nhiều mô hình)

Giả sử có nn mô hình, dự đoán của mỗi mô hình là một biến ngẫu nhiên có phương sai σ2\sigma^2, và mỗi cặp mô hình có hệ số tương quan ρ\rho. Phương sai của trung bình nn dự đoán là

Var⁡(1n∑i=1nXi)=ρ σ2+1−ρn σ2.\operatorname{Var}\Big(\frac1n\sum_{i=1}^n X_i\Big) = \rho\,\sigma^2 + \frac{1-\rho}{n}\,\sigma^2.

Với σ2=1\sigma^2 = 1 và n=10n = 10: nếu các mô hình không tương quan (ρ=0\rho = 0), phương sai giảm còn 0,10{,}1; nếu ρ=0,5\rho = 0{,}5, phương sai chỉ giảm còn 0,5+0,05=0,550{,}5 + 0{,}05 = 0{,}55. Dù có thêm bao nhiêu mô hình, phương sai không xuống dưới ρσ2\rho\sigma^2.

Ví dụ này là cơ sở lý thuyết của phương pháp bagging và rừng ngẫu nhiên: lấy trung bình nhiều mô hình chỉ giảm phương sai hiệu quả khi các mô hình ít tương quan với nhau. Rừng ngẫu nhiên chọn ngẫu nhiên một tập con đặc trưng ở mỗi nhát cắt của cây chính là để giảm ρ\rho. Mục 3.3 của Học sâu đo hiện tượng này trên dữ liệu.

3.3Ma trận hiệp phương sai#

Khi dữ liệu có nhiều chiều, ta cần biết phương sai của từng chiều và hiệp phương sai giữa mọi cặp chiều. Các con số đó được xếp vào một ma trận.

Định nghĩa 3.2 (Ma trận hiệp phương sai)

Với vector ngẫu nhiên x∈Rdx \in \mathbb{R}^d có kỳ vọng μ\mu, ma trận hiệp phương sai là

Σ=E[(x−μ)(x−μ)⊤]∈Rd×d,Σjk=Cov⁡(xj,xk).\Sigma = \mathbb{E}\big[(x - \mu)(x - \mu)^\top\big] \in \mathbb{R}^{d \times d}, \qquad \Sigma_{jk} = \operatorname{Cov}(x_j, x_k).

Từ nn điểm dữ liệu, gọi XcX_c là ma trận dữ liệu đã trừ trung bình của từng cột, ước lượng mẫu của Σ\Sigma là

Σ^=1n−1Xc⊤Xc.\hat\Sigma = \frac{1}{n-1} X_c^\top X_c.

Đường chéo của Σ\Sigma chứa phương sai của từng đặc trưng; các phần tử ngoài đường chéo chứa hiệp phương sai giữa từng cặp đặc trưng. Ma trận này có ba tính chất, ứng với ba chỗ dùng ở các chương sau. Trước hết, Σ\Sigma đối xứng và nửa xác định dương, vì z⊤Σz=Var⁡(z⊤x)≥0z^\top \Sigma z = \operatorname{Var}(z^\top x) \ge 0 với mọi zz. Theo định lý phổ, Σ\Sigma có hệ vector riêng trực chuẩn, và đó là các thành phần chính của PCA (Chương 14). Tiếp theo, trị riêng lớn nhất của Σ\Sigma là phương sai lớn nhất mà một phép chiếu lên một hướng đơn vị có thể đạt được, và hướng đạt giá trị đó là vector riêng tương ứng. Cuối cùng, giả thiết "naive" của thuật toán Naive Bayes Gauss tương đương với việc ép Σ\Sigma của mỗi lớp thành ma trận đường chéo, tức coi mọi cặp đặc trưng là không tương quan khi đã biết lớp; Mục 7.4 kiểm chứng điều này bằng số và cho thấy Naive Bayes, LDA và QDA chỉ khác nhau ở ràng buộc đặt lên Σ\Sigma.

Bốn căn hộ của Chương 2 cho một ma trận hiệp phương sai cụ thể. Lấy hai đặc trưng là diện tích và giá; trừ trung bình 70 m² và 2,25 tỉ, các hàng của XcX_c là (−30; −0,75)(-30;\ -0{,}75), (−10; −0,15)(-10;\ -0{,}15), (10; 0,15)(10;\ 0{,}15) và (30; 0,75)(30;\ 0{,}75), nên

Σ^=13Xc⊤Xc=(666,716160,39).\hat\Sigma = \frac13 X_c^\top X_c = \begin{pmatrix}666{,}7 & 16\\ 16 & 0{,}39\end{pmatrix}.

Phương sai của diện tích là 666,7, tức độ lệch chuẩn khoảng 25,8 m²; phương sai của giá là 0,39, tức độ lệch chuẩn khoảng 0,62 tỉ. Hiệp phương sai 16 dương, tức căn rộng hơn thì đắt hơn, và hệ số tương quan 16/666,7×0,39≈0,99216/\sqrt{666{,}7 \times 0{,}39} \approx 0{,}992 cho thấy giá gần như tỉ lệ thuận với diện tích. Tỉ số 16/666,7=0,02416/666{,}7 = 0{,}024 là con số sẽ gặp lại ở Chương 4: đó là độ dốc của đường thẳng khớp bốn căn hộ tốt nhất. Hai phần tử trên đường chéo chênh nhau khoảng 1 700 lần chỉ vì đơn vị đo, mét vuông so với tỉ đồng, nên vector riêng ứng với trị riêng lớn nhất gần như trùng với trục diện tích; Mục 14.2 cho thấy vì sao cần chuẩn hoá trước khi dùng các vector riêng này.

Mẫu số n−1n - 1 thay cho nn trong ước lượng mẫu có lý do, được giải thích ở Ví dụ 3.4.

3.4Phân phối Gauss#

Phân phối Gauss, hay phân phối chuẩn, là phân phối được dùng nhiều nhất, vì hai lý do. Về lý thuyết, định lý giới hạn trung tâm nói rằng tổng của nhiều biến ngẫu nhiên độc lập nhỏ xấp xỉ phân phối Gauss, nên nhiễu tổng hợp từ nhiều nguồn thường có dạng Gauss. Về tính toán, logarit của mật độ Gauss là một hàm bậc hai, nên các bài toán tối ưu dẫn xuất từ nó thường có nghiệm dạng đóng.

Định nghĩa 3.3 (Phân phối Gauss)

Biến ngẫu nhiên một chiều x∼N(μ,σ2)x \sim \mathcal{N}(\mu, \sigma^2) có mật độ

p(x)=12πσ2exp⁡ ⁣(−(x−μ)22σ2).p(x) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right).

Vector ngẫu nhiên x∈Rdx \in \mathbb{R}^d có phân phối Gauss nhiều chiều N(μ,Σ)\mathcal{N}(\mu, \Sigma), với Σ\Sigma xác định dương, nếu có mật độ

p(x)=1(2π)d/2∣Σ∣1/2exp⁡ ⁣(−12(x−μ)⊤Σ−1(x−μ)).p(x) = \frac{1}{(2\pi)^{d/2}|\Sigma|^{1/2}}\exp\!\left(-\tfrac12 (x-\mu)^\top \Sigma^{-1}(x-\mu)\right).

Đại lượng trong hàm mũ, Δ2(x)=(x−μ)⊤Σ−1(x−μ)\Delta^2(x) = (x-\mu)^\top \Sigma^{-1}(x-\mu), gọi là bình phương khoảng cách Mahalanobis từ xx tới μ\mu. Các điểm có cùng khoảng cách Mahalanobis nằm trên một đường elip, có các trục là vector riêng của Σ\Sigma và độ dài bán trục tỉ lệ với căn bậc hai của trị riêng tương ứng.

Ví dụ 3.2

Cho μ=0\mu = 0 và Σ=diag⁡(4,1)\Sigma = \operatorname{diag}(4, 1), tức độ lệch chuẩn theo trục thứ nhất là 2 và theo trục thứ hai là 1. Hai điểm a=(2,0)a = (2, 0) và b=(0,2)b = (0, 2) cùng cách gốc 2 đơn vị theo khoảng cách Euclid. Nhưng Δ2(a)=22/4=1\Delta^2(a) = 2^2/4 = 1 còn Δ2(b)=22/1=4\Delta^2(b) = 2^2/1 = 4, tức aa cách tâm 1 độ lệch chuẩn còn bb cách tâm 2 độ lệch chuẩn. Theo phân phối này, điểm aa bình thường hơn điểm bb nhiều.

Ví dụ trên cho thấy khoảng cách Mahalanobis là khoảng cách Euclid sau khi đã quy mỗi hướng về đơn vị độ lệch chuẩn của dữ liệu theo hướng đó. Đi một đơn vị theo hướng dữ liệu trải rộng thì "gần", còn theo hướng dữ liệu co hẹp thì "xa".

Lấy logarit của mật độ Gauss ta được

log⁡p(x)=−12(x−μ)⊤Σ−1(x−μ)+ha˘ˋng soˆˊ,\log p(x) = -\tfrac12 (x-\mu)^\top \Sigma^{-1}(x-\mu) + \text{hằng số},

một hàm bậc hai của xx. Nhận xét đơn giản này có hai hệ quả lớn: hợp lý cực đại dưới giả thiết nhiễu Gauss dẫn tới bài toán bình phương tối thiểu (Mục 10.2), và bộ phân loại dùng phân phối Gauss cho mỗi lớp có biên quyết định là mặt bậc hai (Mục 7.4).

3.5Định lý Bayes#

Định lý 3.1 (Định lý Bayes)

Với hai biến cố (hoặc biến ngẫu nhiên) AA và BB, p(B)>0p(B) > 0:

p(A∣B)=p(B∣A) p(A)p(B),p(B)=∑A′p(B∣A′) p(A′).p(A \mid B) = \frac{p(B \mid A)\, p(A)}{p(B)}, \qquad p(B) = \sum_{A'} p(B \mid A')\,p(A').

Định lý Bayes cho phép đổi chiều một xác suất có điều kiện: biết xác suất quan sát được BB khi AA xảy ra, suy ra xác suất AA xảy ra khi đã quan sát được BB. Hai chiều này rất khác nhau, và nhầm lẫn chúng là lỗi suy luận phổ biến.

Ví dụ 3.3 (Xét nghiệm bệnh hiếm)

Một bệnh có tỉ lệ mắc 1% dân số. Xét nghiệm cho kết quả dương tính với 99% người mắc bệnh, và dương tính nhầm với 5% người không mắc bệnh. Một người có kết quả dương tính. Xác suất người đó thật sự mắc bệnh là

p(bệnh∣+)=0,99×0,010,99×0,01+0,05×0,99=0,00990,0594≈0,167.p(\text{bệnh} \mid +) = \frac{0{,}99 \times 0{,}01}{0{,}99 \times 0{,}01 + 0{,}05 \times 0{,}99} = \frac{0{,}0099}{0{,}0594} \approx 0{,}167.

Chỉ khoảng 1 trong 6 người có kết quả dương tính thật sự mắc bệnh, dù xét nghiệm "đúng 99%". Lý do là số người khoẻ rất lớn, nên 5% dương tính nhầm của họ vẫn nhiều hơn số người bệnh được phát hiện.

Hiện tượng trong Ví dụ 3.3 xuất hiện lại ở Chương 8 dưới tên gọi khác: khi lớp dương hiếm, precision của bộ phân loại có thể rất thấp dù tỉ lệ báo động nhầm nhỏ.

Trong học máy, định lý Bayes được dùng với AA là tham số θ\theta của mô hình và BB là dữ liệu D\mathcal{D}:

p(θ∣D)⏟hậu nghiệm=p(D∣θ)⏞hợp lyˊ  p(θ)⏞tieˆn nghiệmp(D)⏟ba˘ˋng chứng.\underbrace{p(\theta \mid \mathcal{D})}_{\text{hậu nghiệm}} = \frac{\overbrace{p(\mathcal{D} \mid \theta)}^{\text{hợp lý}} \; \overbrace{p(\theta)}^{\text{tiên nghiệm}}}{\underbrace{p(\mathcal{D})}_{\text{bằng chứng}}}.

Phân phối tiên nghiệm p(θ)p(\theta) mô tả hiểu biết về tham số trước khi thấy dữ liệu. Hàm hợp lý p(D∣θ)p(\mathcal{D} \mid \theta) cho biết dữ liệu quan sát được có khả năng xảy ra tới mức nào nếu tham số là θ\theta. Phân phối hậu nghiệm p(θ∣D)p(\theta \mid \mathcal{D}) là hiểu biết đã được cập nhật sau khi thấy dữ liệu. Mẫu số p(D)p(\mathcal{D}) không phụ thuộc θ\theta, nên khi tìm θ\theta làm hậu nghiệm lớn nhất có thể bỏ qua nó:

arg⁡max⁡θp(θ∣D)=arg⁡max⁡θ  p(D∣θ) p(θ)=arg⁡min⁡θ  [−log⁡p(D∣θ)−log⁡p(θ)].\begin{aligned} \arg\max_\theta p(\theta \mid \mathcal{D}) &= \arg\max_\theta \; p(\mathcal{D} \mid \theta)\,p(\theta) \\ &= \arg\min_\theta \;\big[-\log p(\mathcal{D} \mid \theta) - \log p(\theta)\big]. \end{aligned}

Vế phải có dạng "mất mát cộng thành phần phạt". Chương 10 khai triển đẳng thức này và cho thấy thành phần phạt chính là regularization.

3.6Ước lượng tham số: độ chệch và phương sai#

Học một mô hình từ dữ liệu là ước lượng tham số của nó. Vì dữ liệu là một mẫu ngẫu nhiên, ước lượng thu được cũng là ngẫu nhiên: lấy một mẫu khác thì được một giá trị khác.

Định nghĩa 3.4 (Độ chệch, phương sai của ước lượng)

Một ước lượng θ^\hat\theta của tham số θ\theta là một hàm của dữ liệu. Độ chệch (bias) và phương sai của nó là

Bias⁡(θ^)=E[θ^]−θ,Var⁡(θ^)=E[(θ^−Eθ^)2].\operatorname{Bias}(\hat\theta) = \mathbb{E}[\hat\theta] - \theta, \qquad \operatorname{Var}(\hat\theta) = \mathbb{E}\big[(\hat\theta - \mathbb{E}\hat\theta)^2\big].

Ước lượng có độ chệch bằng 0 gọi là ước lượng không chệch.

Ở đây kỳ vọng được lấy trên mọi tập dữ liệu có thể rút ra từ cùng một phân phối, không phải trên các điểm trong một tập dữ liệu. Để hình dung, hãy lặp lại việc thu thập dữ liệu và huấn luyện rất nhiều lần: độ chệch là khoảng cách từ trung bình các kết quả tới giá trị thật, còn phương sai là mức các kết quả tản ra quanh trung bình của chúng.

Định lý 3.2 (Phân tích sai số bình phương trung bình)

Với mọi ước lượng θ^\hat\theta,

E[(θ^−θ)2]=Bias⁡(θ^)2+Var⁡(θ^).\mathbb{E}\big[(\hat\theta - \theta)^2\big] = \operatorname{Bias}(\hat\theta)^2 + \operatorname{Var}(\hat\theta).

Chứng minh

Đặt m=E[θ^]m = \mathbb{E}[\hat\theta]. Viết θ^−θ=(θ^−m)+(m−θ)\hat\theta - \theta = (\hat\theta - m) + (m - \theta) rồi bình phương và lấy kỳ vọng. Số hạng chéo 2(m−θ) E[θ^−m]2(m - \theta)\,\mathbb{E}[\hat\theta - m] bằng 0 vì E[θ^−m]=0\mathbb{E}[\hat\theta - m] = 0. Hai số hạng còn lại là Var⁡(θ^)\operatorname{Var}(\hat\theta) và (m−θ)2(m - \theta)^2.

Ví dụ 3.4 (Vì sao chia cho n−1n-1)

Với nn quan sát độc lập có phương sai σ2\sigma^2, ước lượng σ^n2=1n∑i(xi−xˉ)2\hat\sigma^2_n = \frac1n\sum_i (x_i - \bar x)^2 có kỳ vọng n−1nσ2\frac{n-1}{n}\sigma^2, tức luôn nhỏ hơn giá trị thật. Nguyên nhân là xˉ\bar x được tính từ chính dữ liệu, nên các điểm luôn gần xˉ\bar x hơn so với gần giá trị trung bình thật. Chia cho n−1n - 1 thay cho nn cho ước lượng không chệch. Với n=5n = 5 và σ2=1\sigma^2 = 1, mô phỏng 200 000 lần cho giá trị trung bình của σ^n2\hat\sigma^2_n là 0,8020{,}802, khớp với 4/5=0,84/5 = 0{,}8.

Định lý 3.2 cho thấy một ước lượng không chệch chưa chắc là ước lượng tốt: nếu phương sai lớn, sai số tổng vẫn lớn. Ngược lại, chấp nhận một chút độ chệch để đổi lấy phương sai nhỏ hơn nhiều có thể làm sai số tổng giảm. Hồi quy ridge ở Chương 9 là ví dụ điển hình: nó là ước lượng có chệch, trong khi bình phương tối thiểu thông thường là ước lượng không chệch, vậy mà ridge thường có sai số nhỏ hơn. Mục 9.3 chỉ ra phần phương sai mà ridge cắt đi nằm ở những hướng nào.

Cùng ý tưởng này áp dụng cho dự đoán của cả mô hình, dưới tên gọi đánh đổi độ chệch – phương sai (bias–variance tradeoff). Chương 2 của Học sâu trình bày đầy đủ phân tích đó và đo từng thành phần trên 250 tập huấn luyện mô phỏng.

3.7Tóm tắt#

Kỳ vọng và phương sai mô tả giá trị trung bình và mức phân tán của một đại lượng ngẫu nhiên. Phương sai của tổng phụ thuộc vào hiệp phương sai, nên lấy trung bình nhiều mô hình chỉ giảm phương sai xuống tới mức ρσ2\rho\sigma^2. Ma trận hiệp phương sai gom phương sai và hiệp phương sai của mọi cặp đặc trưng; nó đối xứng, nửa xác định dương, và các vector riêng của nó là các thành phần chính của PCA. Với bốn căn hộ, hiệp phương sai 16 giữa diện tích và giá chia cho phương sai 666,7 của diện tích cho đúng độ dốc 0,024 của Chương 4. Logarit mật độ Gauss là một hàm bậc hai, điều sẽ biến hợp lý cực đại thành bình phương tối thiểu. Định lý Bayes đổi chiều xác suất có điều kiện, như ví dụ xét nghiệm bệnh hiếm cho thấy chỉ khoảng 16,7% người dương tính thật sự mắc bệnh, và viết hậu nghiệm thành dạng mất mát cộng thành phần phạt. Cuối cùng, sai số bình phương của một ước lượng tách thành độ chệch bình phương cộng phương sai, nên một ước lượng có chệch nhưng ít dao động có thể tốt hơn một ước lượng không chệch.

Có đại số tuyến tính và xác suất, ta đã đủ công cụ cho thuật toán học máy đầu tiên. Chương 4 xét hồi quy tuyến tính, bài toán đơn giản tới mức có nghiệm dạng đóng, nên mọi hiện tượng của nó quan sát được trực tiếp.


4Hồi quy tuyến tính#

Ta bắt đầu với một bài toán quen thuộc: định giá căn hộ. Bảng dưới ghi diện tích và giá bán của bốn căn hộ trong cùng một khu, chính là bốn căn hộ của ma trận dữ liệu ở Mục 2.1. Đây là số liệu minh hoạ, chọn tròn để tính tay được.

Căn hộ Diện tích xx (m²) Giá yy (tỉ đồng)
A 40 1,5
B 60 2,1
C 80 2,4
D 100 3,0

Nếu được hỏi một căn 90 m² trong khu này đáng giá bao nhiêu, hầu hết mọi người sẽ trả lời khoảng 2,7 tỉ, vì giá tăng gần đều theo diện tích. Hồi quy tuyến tính biến trực giác "tăng gần đều" đó thành một quy trình chính xác: chọn một đường thẳng, đo xem đường thẳng khớp dữ liệu tới mức nào, rồi tìm đường khớp nhất. Đây là thuật toán học có giám sát đơn giản nhất, nhưng đáng học kỹ vì bài toán có nghiệm dạng đóng. Nhờ vậy, những hiện tượng sẽ gặp lại ở mọi mô hình phức tạp hơn, như overfitting, regularization, ảnh hưởng của số điều kiện và đánh đổi độ chệch – phương sai, đều quan sát được trực tiếp mà không bị lẫn với câu hỏi thuật toán tối ưu có hội tụ hay không.

4.1Bài toán hồi quy tuyến tính#

Mô hình đơn giản nhất cho bảng trên là một đường thẳng,

f(x)=w0+w1x.f(x) = w_0 + w_1 x.

Hệ số w1w_1 là phần giá tăng thêm khi diện tích tăng 1 m², còn w0w_0 là điểm đường thẳng cắt trục tung. Học từ dữ liệu ở đây nghĩa là chọn w0w_0 và w1w_1. Nhưng trước khi chọn, ta cần một cách nói đường thẳng nào tốt hơn đường thẳng nào.

Với mỗi căn hộ, đường thẳng mắc một sai số yi−f(xi)y_i - f(x_i), tức chênh lệch giữa giá thật và giá dự đoán. Cộng thẳng các sai số thì không dùng được, vì sai số dương và sai số âm triệt tiêu nhau: một đường dự đoán quá cao cho nửa số căn và quá thấp cho nửa còn lại vẫn có thể cho tổng bằng 0. Cách phổ biến nhất là lấy trung bình bình phương sai số,

L(w0,w1)=1n∑i=1n(yi−w0−w1xi)2.L(w_0, w_1) = \frac1n\sum_{i=1}^{n}\big(y_i - w_0 - w_1 x_i\big)^2.

Bình phương làm mọi sai số thành số dương, phạt sai số lớn nặng hơn nhiều so với sai số nhỏ, và cho một hàm trơn, dễ lấy đạo hàm. Còn vì sao là bình phương mà không phải trị tuyệt đối thì có một câu trả lời chính xác hơn, trình bày ở Mục 10.2: bình phương sai số là hệ quả của giả thiết nhiễu có phân phối Gauss.

Có hàm LL, ta so sánh được các đường thẳng bằng số. Đường f(x)=0,03xf(x) = 0{,}03x, tức giá 30 triệu đồng mỗi mét vuông, dự đoán 1,2; 1,8; 2,4 và 3,0 tỉ cho bốn căn. Sai số là 0,3; 0,3; 0 và 0, nên L=(0,09+0,09)/4=0,045L = (0{,}09 + 0{,}09)/4 = 0{,}045. Đường f(x)=0,6+0,024xf(x) = 0{,}6 + 0{,}024x dự đoán 1,56; 2,04; 2,52 và 3,0 tỉ, với sai số −0,06-0{,}06; 0,060{,}06; −0,12-0{,}12 và 00, nên L=0,0216/4=0,0054L = 0{,}0216/4 = 0{,}0054, nhỏ hơn khoảng tám lần. Đường thứ hai tốt hơn hẳn. Câu hỏi còn lại là có đường nào tốt hơn nữa không, và đường tốt nhất là đường nào. Mục 4.2 trả lời câu hỏi đó.

Trước khi giải, ta viết bài toán ở dạng tổng quát. Giá căn hộ còn phụ thuộc số phòng, tầng và khoảng cách tới trung tâm, nên mỗi điểm dữ liệu thường là một vector đặc trưng xi∈Rdx_i \in \mathbb{R}^d chứ không phải một số. Để công thức gọn, ta thêm vào mỗi xix_i một thành phần hằng bằng 1 ở vị trí đầu. Khi đó hệ số chặn trở thành trọng số w0w_0 ứng với thành phần này, và mô hình viết được là fw(x)=w⊤xf_w(x) = w^\top x. Xếp các xix_i thành các hàng của ma trận XX và các nhãn thành vector yy, toàn bộ dự đoán trên tập dữ liệu là XwXw. Giáo trình dùng quy ước này ở mọi chỗ: cột đầu tiên của ma trận dữ liệu XX gồm toàn số 1.

Một cách tốt để nắm ký hiệu là tự kiểm tra kích thước. Với nn điểm dữ liệu, XX có nn hàng và dd cột, vector ww có dd thành phần, nên XwXw là vector nn chiều, cùng kích thước với yy, đúng như cần để so từng dự đoán với nhãn của nó. Trong ví dụ căn hộ, n=4n = 4, d=2d = 2, và hàng đầu tiên của XX là (1; 40)(1;\ 40).

Định nghĩa 4.1 (Hồi quy tuyến tính bình phương tối thiểu)

Với ma trận dữ liệu X∈Rn×dX \in \mathbb{R}^{n\times d} và vector nhãn y∈Rny \in \mathbb{R}^n, hồi quy tuyến tính tìm

w^=arg⁡min⁡wL(w),L(w)=1n∑i=1n(yi−w⊤xi)2=1n ∥y−Xw∥22.\begin{aligned} \hat w &= \arg\min_w L(w), \\ L(w) &= \frac1n\sum_{i=1}^{n}\big(y_i - w^\top x_i\big)^2 = \frac1n\,\|y - Xw\|_2^2. \end{aligned}

Phương pháp này còn gọi là bình phương tối thiểu thông thường (ordinary least squares, OLS).

Theo khung ở Hình 1, đây là đủ ba thành phần của một thuật toán học: mô hình là họ hàm tuyến tính w⊤xw^\top x, hàm mất mát là bình phương sai số, còn thuật toán tối ưu là cách tìm w^\hat w mà Mục 4.2 sẽ trình bày.

Bài toán còn có một cách hiểu hình học, sẽ dùng nhiều ở các mục sau. Khi ww chạy khắp Rd\mathbb{R}^d, vector dự đoán XwXw chạy khắp không gian cột của XX (Mục 2.1). Trong ví dụ căn hộ, yy là một vector trong R4\mathbb{R}^4, còn không gian cột là mặt phẳng hai chiều sinh bởi (1;1;1;1)(1; 1; 1; 1) và (40;60;80;100)(40; 60; 80; 100): dự đoán của mọi đường thẳng đều nằm trên mặt phẳng này. Cực tiểu ∥y−Xw∥2\|y - Xw\|_2 nghĩa là tìm điểm trên mặt phẳng gần yy nhất, tức hình chiếu vuông góc của yy lên không gian cột. Vector phần dư r=y−Xw^r = y - X\hat w vì thế phải vuông góc với mọi cột của XX.

4.2Phương trình chuẩn#

Ta tìm đường thẳng tốt nhất cho ví dụ căn hộ trước, rồi mới tổng quát hoá. Hàm L(w0,w1)L(w_0, w_1) là hàm bậc hai của hai biến và có dạng một cái chén: đi xa theo hướng nào nó cũng tăng. Đáy chén là điểm mà đạo hàm riêng theo cả hai biến đều bằng 0.

Đạo hàm theo w0w_0 cho

∂L∂w0=−2n∑i=1n(yi−w0−w1xi)=0⟺yˉ=w0+w1xˉ,\frac{\partial L}{\partial w_0} = -\frac2n\sum_{i=1}^{n}\big(y_i - w_0 - w_1 x_i\big) = 0 \quad\Longleftrightarrow\quad \bar y = w_0 + w_1 \bar x,

với xˉ\bar x và yˉ\bar y là trung bình của các xix_i và các yiy_i. Phương trình này đã cho biết một điều cụ thể: đường thẳng tốt nhất luôn đi qua điểm trung bình (xˉ,yˉ)(\bar x, \bar y) của dữ liệu. Đạo hàm theo w1w_1 cho

∂L∂w1=−2n∑i=1nxi(yi−w0−w1xi)=0.\frac{\partial L}{\partial w_1} = -\frac2n\sum_{i=1}^{n}x_i\big(y_i - w_0 - w_1 x_i\big) = 0.

Thay w0=yˉ−w1xˉw_0 = \bar y - w_1\bar x vào phương trình thứ hai, mỗi số hạng trong tổng trở thành xi[(yi−yˉ)−w1(xi−xˉ)]x_i\big[(y_i - \bar y) - w_1(x_i - \bar x)\big], và giải ra

w1=∑i(xi−xˉ)(yi−yˉ)∑i(xi−xˉ)2,w0=yˉ−w1xˉ.w_1 = \frac{\sum_i (x_i - \bar x)(y_i - \bar y)}{\sum_i (x_i - \bar x)^2}, \qquad w_0 = \bar y - w_1\bar x.

Ở bước cuối, thừa số xix_i đứng trước được thay bằng xi−xˉx_i - \bar x. Phép thay không làm đổi tử số và mẫu số, vì ∑ixˉ (yi−yˉ)=0\sum_i \bar x\,(y_i - \bar y) = 0 và ∑ixˉ (xi−xˉ)=0\sum_i \bar x\,(x_i - \bar x) = 0.

Công thức có một cách đọc quen thuộc từ Chương 3. Chia cả tử và mẫu cho n−1n - 1, hệ số góc chính là hiệp phương sai mẫu giữa xx và yy chia cho phương sai mẫu của xx; với bốn căn hộ, đó là tỉ số 16/666,716/666{,}7 ở Mục 3.3. Hệ số góc lớn khi yy biến thiên cùng chiều với xx và mạnh so với độ phân tán của xx.

Với bốn căn hộ, xˉ=70\bar x = 70 và yˉ=2,25\bar y = 2{,}25. Các độ lệch xi−xˉx_i - \bar x là −30-30; −10-10; 1010; 3030 và các độ lệch yi−yˉy_i - \bar y là −0,75-0{,}75; −0,15-0{,}15; 0,150{,}15; 0,750{,}75, nên tử số bằng 22,5+1,5+1,5+22,5=4822{,}5 + 1{,}5 + 1{,}5 + 22{,}5 = 48 và mẫu số bằng 900+100+100+900=2 000900 + 100 + 100 + 900 = 2\,000. Do đó w1=0,024w_1 = 0{,}024 tỉ đồng mỗi mét vuông, tức 24 triệu đồng, và w0=2,25−0,024⋅70=0,57w_0 = 2{,}25 - 0{,}024 \cdot 70 = 0{,}57. Đường thẳng này dự đoán 1,53; 2,01; 2,49 và 2,97 tỉ cho bốn căn, với sai số −0,03-0{,}03; 0,090{,}09; −0,09-0{,}09; 0,030{,}03 và L=0,018/4=0,0045L = 0{,}018/4 = 0{,}0045, nhỏ hơn cả đường thứ hai ở Mục 4.1. Căn 90 m² được định giá 0,57+0,024⋅90=2,730{,}57 + 0{,}024 \cdot 90 = 2{,}73 tỉ, khớp với ước đoán bằng mắt ở đầu chương.

Hệ số chặn w0=0,57w_0 = 0{,}57 tỉ không có nghĩa một căn hộ 0 m² đáng giá 570 triệu đồng. Nó chỉ là điểm đường thẳng cắt trục tung, cần có để đường thẳng khớp dữ liệu trong khoảng 40 tới 100 m². Dùng mô hình cho những điểm nằm xa ngoài khoảng dữ liệu đã thấy, gọi là ngoại suy (extrapolation), luôn cần thận trọng.

Cách làm vừa rồi tổng quát hoá trực tiếp sang dd đặc trưng nhờ ký hiệu ma trận. Viết bình phương chuẩn thành tích vô hướng rồi khai triển như khai triển (a−b)2(a - b)^2:

L(w)=1n(y−Xw)⊤(y−Xw)=1n(y⊤y−2 w⊤X⊤y+w⊤X⊤X w).\begin{aligned} L(w) &= \frac1n(y - Xw)^\top(y - Xw) \\ &= \frac1n\big(y^\top y - 2\,w^\top X^\top y + w^\top X^\top X\,w\big). \end{aligned}

Hai số hạng chéo y⊤Xwy^\top X w và w⊤X⊤yw^\top X^\top y gộp được làm một vì chúng là cùng một số: một số thực bằng chuyển vị của chính nó. Áp dụng hai quy tắc đạo hàm ở Mục 2.7, ∇w(w⊤a)=a\nabla_w(w^\top a) = a và ∇w(w⊤Aw)=2Aw\nabla_w(w^\top A w) = 2Aw với AA đối xứng, ta được

∇wL=1n(2X⊤X w−2X⊤y)=−2nX⊤(y−Xw).\nabla_w L = \frac1n\big(2X^\top X\,w - 2X^\top y\big) = -\frac{2}{n}X^\top(y - Xw).

Cho gradient bằng 0:

X⊤X w=X⊤y.X^\top X\,w = X^\top y.

Hệ phương trình tuyến tính này gọi là phương trình chuẩn (normal equations). Nó có đúng dd phương trình và dd ẩn, bất kể có bao nhiêu điểm dữ liệu. Với một đặc trưng, hai phương trình của nó chính là hai phương trình đạo hàm riêng ở trên.

Viết dưới dạng X⊤(y−Xw)=0X^\top(y - Xw) = 0, phương trình chuẩn giải thích được tên gọi của nó và cho thấy nghiệm có tính chất gì. Đặt r=y−Xwr = y - Xw là vector phần dư. Thành phần thứ jj của X⊤rX^\top r bằng ∑ixijri\sum_i x_{ij} r_i, tích vô hướng giữa cột đặc trưng thứ jj và phần dư. Phương trình chuẩn đòi hỏi mọi tích vô hướng này bằng 0, tức phần dư vuông góc (normal) với mọi cột của XX, đúng như cách hiểu hình học ở Mục 4.1. Theo cách nhìn thống kê, ở nghiệm tối ưu phần dư không còn tương quan tuyến tính với đặc trưng nào. Nếu còn, ta chưa ở điểm tốt nhất: chỉnh trọng số theo đặc trưng đó còn giảm được sai số. Riêng cột hằng số cho ∑iri=0\sum_i r_i = 0, nên với mọi mô hình có hệ số chặn, tổng phần dư bằng 0. Bốn sai số −0,03-0{,}03; 0,090{,}09; −0,09-0{,}09; 0,030{,}03 ở ví dụ căn hộ đúng là có tổng bằng 0.

Định lý 4.1 (Nghiệm của bình phương tối thiểu)

Nếu XX đủ hạng cột thì X⊤XX^\top X khả nghịch và bài toán ở Định nghĩa 4.1 có nghiệm duy nhất

w^=(X⊤X)−1X⊤y.\hat w = (X^\top X)^{-1}X^\top y.

Nghiệm này là cực tiểu chứ không phải cực đại hay điểm yên ngựa, vì ma trận Hessian của LL bằng 2nX⊤X\tfrac{2}{n}X^\top X, nửa xác định dương theo Mục 2.5. Do đó LL là hàm lồi và mọi điểm có gradient bằng 0 đều là cực tiểu toàn cục. Khi XX đủ hạng cột, Hessian xác định dương và cực tiểu là duy nhất. Chương 11 trình bày tính lồi một cách đầy đủ.

Ví dụ 4.1

Với bốn căn hộ ở đầu chương, ma trận dữ liệu và các tích cần thiết là

X=(1401601801100),X⊤X=(428028021 600),X⊤y=(9678).\begin{gathered} X = \begin{pmatrix}1&40\\1&60\\1&80\\1&100\end{pmatrix}, \\ X^\top X = \begin{pmatrix}4&280\\280&21\,600\end{pmatrix}, \qquad X^\top y = \begin{pmatrix}9\\678\end{pmatrix}. \end{gathered}

Định thức của X⊤XX^\top X là 4⋅21 600−2802=8 0004 \cdot 21\,600 - 280^2 = 8\,000, nên

w^=18 000(21 600−280−2804)(9678)=18 000(4 560192)=(0,570,024),\begin{aligned} \hat w &= \frac{1}{8\,000}\begin{pmatrix}21\,600&-280\\-280&4\end{pmatrix}\begin{pmatrix}9\\678\end{pmatrix} \\ &= \frac{1}{8\,000}\begin{pmatrix}4\,560\\192\end{pmatrix} = \begin{pmatrix}0{,}57\\0{,}024\end{pmatrix}, \end{aligned}

trùng với kết quả tính bằng trung bình, hiệp phương sai và phương sai ở trên.

Trên dữ liệu lớn hơn, ta có thể kiểm tra rằng các cách tính khác nhau cho cùng một nghiệm. Thí nghiệm trong code/nentang/experiments.py sinh 200 điểm với bốn hệ số thật (2;−1,5;0,8;3)(2; -1{,}5; 0{,}8; 3) cộng nhiễu, rồi giải bằng ba cách.

Cách giải w0w_0 w1w_1 w2w_2 w3w_3
Phương trình chuẩn 1,9906 −1,4985 0,7992 2,9749
Giả nghịch đảo Moore–Penrose 1,9906 −1,4985 0,7992 2,9749
lstsq (phân tích QR/SVD) 1,9906 −1,4985 0,7992 2,9749

Ba cách lệch nhau lớn nhất 1,2×10−151{,}2 \times 10^{-15}, tức bằng nhau tới sai số làm tròn của máy tính. Các hệ số ước lượng cũng gần hệ số thật, và sai lệch còn lại là do nhiễu.

Lưu ý

Công thức (X⊤X)−1X⊤y(X^\top X)^{-1}X^\top y dùng để suy luận, không nên dùng để tính trong mã. Theo Mục 2.6, κ(X⊤X)=κ(X)2\kappa(X^\top X) = \kappa(X)^2, nên lập ma trận X⊤XX^\top X làm mất khoảng gấp đôi số chữ số có nghĩa so với làm việc trực tiếp với XX. Hàm np.linalg.lstsq giải bài toán bằng phân tích SVD của XX và tránh được vấn đề này.

4.3Trường hợp ma trận X⊤XX^\top X suy biến#

Định lý 4.1 cần một điều kiện: XX đủ hạng cột, tức không cột nào biểu diễn được qua các cột còn lại. Theo Mục 2.5, đó cũng là điều kiện để X⊤XX^\top X khả nghịch. Trong thực tế có hai tình huống khiến điều kiện này không thoả. Tình huống thứ nhất là số đặc trưng lớn hơn số điểm dữ liệu (d>nd > n): hạng của XX không vượt quá n<dn < d, nên XX không thể đủ hạng cột. Tình huống thứ hai là có đặc trưng phụ thuộc tuyến tính vào các đặc trưng khác. Nếu bảng căn hộ có thêm cột diện tích tính bằng feet vuông, cột đó đúng bằng 10,764 lần cột diện tích tính bằng mét vuông, và dữ liệu không có cách nào tách ảnh hưởng của hai cột ra khỏi nhau. Một trường hợp hay gặp hơn là mã hoá one-hot một biến hạng mục có KK giá trị thành đủ KK cột trong khi vẫn giữ cột hằng số, vì tổng KK cột one-hot đúng bằng cột hằng số; cách xử lý thông thường là bỏ một cột one-hot, hoặc bỏ cột hằng số.

Thí nghiệm sau sao chép một cột của XX rồi thử giải.

Văn bản
hang cua X = 4 nhung X co 5 cot  ->  X^T X suy bien
  solve: BAO LOI 'Singular matrix'
  pinv : van cho mot nghiem, chuan ||w|| = 3.8176
  mot nghiem khac cung du bao y het: ||w|| = 4.0711 (sai so du bao lech 0.00e+00)

Dòng cuối cho thấy bản chất của trường hợp suy biến. Bài toán không vô nghiệm mà có vô số nghiệm cho cùng một dự đoán: cộng một lượng tt vào hệ số của cột gốc và trừ đi đúng lượng đó ở cột bản sao thì XwXw không đổi. Tập nghiệm là một đường thẳng, tổng quát là một không gian affine, trong không gian tham số.

Khi có nhiều nghiệm, ta cần một quy tắc chọn. Giả nghịch đảo Moore–Penrose X+X^{+} chọn nghiệm có chuẩn ℓ2\ell_2 nhỏ nhất: X+yX^{+}y là nghiệm của phương trình chuẩn có ∥w∥2\|w\|_2 nhỏ nhất trong mọi nghiệm. Trong thí nghiệm, nghiệm của pinv có chuẩn 3,8176, nhỏ hơn nghiệm khác có chuẩn 4,0711 dù hai nghiệm cho cùng dự đoán. Quy tắc này hợp lý, và Mục 9.2 sẽ cho thấy nó trùng với giới hạn của hồi quy ridge khi hệ số regularization λ\lambda tiến về 0 từ phía dương.

4.4Đa cộng tuyến#

Phụ thuộc tuyến tính chính xác dễ phát hiện, vì thuật toán giải báo lỗi. Khó hơn là trường hợp các cột gần phụ thuộc tuyến tính mà không phụ thuộc hẳn, như diện tích sàn xây dựng và diện tích sử dụng của một căn hộ: hai con số gần tỉ lệ với nhau nhưng không đúng tỉ lệ. Khi đó XX vẫn đủ hạng cột và nghiệm vẫn duy nhất, nhưng không ổn định. Hiện tượng này gọi là đa cộng tuyến (multicollinearity). Thí nghiệm sau dựng hai đặc trưng có hệ số tương quan ρ\rho tăng dần. Với mỗi ρ\rho, ma trận XX được giữ cố định và nhãn được sinh lại 300 lần với nhiễu khác nhau, để đo xem hệ số và dự đoán dao động bao nhiêu.

Hình 2
Hình 2. Trái: số điều kiện của X⊤XX^\top X theo mức tương quan giữa hai cột. Phải: độ lệch chuẩn của hệ số w1w_1 và của dự đoán qua 300 lần sinh lại nhiễu.
Tương quan hai cột cond(X⊤X)\mathrm{cond}(X^\top X) Độ lệch chuẩn của w1w_1 Độ lệch chuẩn của dự đoán
0,000 1,3 0,0324 0,0586
0,900 20,0 0,0772 0,0588
0,990 180,3 0,2373 0,0590
0,999 1958,9 0,8196 0,0585

Khi tương quan tăng từ 0 lên 0,999, độ lệch chuẩn của hệ số w1w_1 tăng khoảng 25 lần, trong khi độ lệch chuẩn của dự đoán gần như không đổi, từ 0,0586 xuống 0,0585.

Nguyên nhân nằm ở chỗ khi hai cột gần trùng nhau, dữ liệu chỉ xác định được tổng ảnh hưởng của hai đặc trưng, còn cách chia ảnh hưởng đó cho từng đặc trưng thì gần như tuỳ ý. Tổng ảnh hưởng ổn định nên dự đoán ổn định; cách chia phụ thuộc vào nhiễu nên từng hệ số dao động mạnh.

Mức tăng này có thể dự đoán bằng lý thuyết. Với mô hình có hệ số chặn, phương sai của hệ số wjw_j bằng phương sai khi các đặc trưng không tương quan nhân với hệ số phóng đại phương sai (variance inflation factor)

VIFj=11−Rj2,\text{VIF}_j = \frac{1}{1 - R_j^2},

trong đó Rj2R_j^2 là hệ số xác định khi hồi quy đặc trưng jj theo các đặc trưng còn lại. Với hai đặc trưng có tương quan ρ\rho thì Rj2=ρ2R_j^2 = \rho^2, nên độ lệch chuẩn của hệ số tăng theo VIF=1/1−ρ2\sqrt{\text{VIF}} = 1/\sqrt{1-\rho^2}, tức khoảng 2,3; 7,1 và 22,4 lần tại ρ=0,9\rho = 0{,}9; 0,990{,}99; 0,9990{,}999. Số đo trong bảng là 2,4; 7,3 và 25,3 lần. Chênh lệch nhỏ đến từ việc mỗi hàng dùng một ma trận XX sinh ngẫu nhiên riêng, nên tương quan mẫu và phương sai mẫu của các cột không đúng bằng giá trị danh nghĩa.

Như vậy đa cộng tuyến là vấn đề của việc diễn giải hệ số, không phải của dự đoán. Nếu mô hình chỉ dùng để dự đoán trên dữ liệu có cùng cấu trúc tương quan, không cần xử lý gì. Nếu cần đọc hệ số để kết luận "đặc trưng này ảnh hưởng bao nhiêu", các hệ số đó không đáng tin, và cách xử lý là dùng hồi quy ridge (Chương 9), gộp các đặc trưng tương quan thành một, hoặc bỏ bớt đặc trưng. Quy tắc kinh nghiệm thường dùng là VIF lớn hơn 10 cho thấy đa cộng tuyến đáng kể.

4.5Các giả định của mô hình#

Phương pháp bình phương tối thiểu luôn cho ra một nghiệm, nhưng việc diễn giải nghiệm đó, như khoảng tin cậy của hệ số hay kiểm định ý nghĩa thống kê, dựa trên ba giả định.

Giả định đầu tiên là mô hình tuyến tính theo tham số, tức kỳ vọng của yy là hàm tuyến tính của ww. Cần chú ý là tuyến tính theo tham số chứ không nhất thiết theo đầu vào: y=w0+w1x+w2x2y = w_0 + w_1 x + w_2 x^2 vẫn là hồi quy tuyến tính vì nó tuyến tính theo ww, chỉ cần coi x2x^2 là một đặc trưng mới. Để kiểm tra, ta vẽ phần dư theo giá trị dự đoán; nếu thấy dạng cong có hệ thống thì giả định bị vi phạm và cần thêm đặc trưng phi tuyến. Chẳng hạn, nếu giá căn hộ tăng nhanh dần theo diện tích, một đường thẳng sẽ dự đoán thấp ở hai đầu và cao ở giữa, và đồ thị phần dư có dạng chữ U.

Giả định thứ hai là phương sai của nhiễu không đổi. Độ lớn của nhiễu thay đổi theo xx, hiện tượng gọi là phương sai thay đổi, rất hay gặp với dữ liệu tiền tệ: sai số dự đoán giá một căn nhà đắt lớn hơn sai số với căn nhà rẻ. Khi đó bình phương tối thiểu vẫn cho ước lượng không chệch, nhưng không còn là ước lượng có phương sai nhỏ nhất, và các khoảng tin cậy tính theo công thức chuẩn bị sai. Cách xử lý thường dùng là lấy logarit của yy, hoặc dùng bình phương tối thiểu có trọng số.

Giả định thứ ba là các quan sát độc lập. Dữ liệu chuỗi thời gian hầu như luôn vi phạm giả định này, vì sai số ở các thời điểm liền nhau thường tương quan.

Giả định thứ hai và thứ ba không ảnh hưởng tới giá trị của w^\hat w, mà ảnh hưởng tới độ tin cậy ta gán cho nó. Khi mục tiêu chỉ là dự đoán, vi phạm hai giả định này ít nghiêm trọng hơn; khi mục tiêu là suy luận thống kê về hệ số, chúng cần được kiểm tra.

4.6Tóm tắt#

Hồi quy tuyến tính chọn đường thẳng, hay tổng quát là siêu phẳng, có trung bình bình phương sai số nhỏ nhất. Với một đặc trưng, đường tốt nhất đi qua điểm trung bình của dữ liệu và có hệ số góc bằng hiệp phương sai chia phương sai; trong ví dụ căn hộ, hệ số góc là 24 triệu đồng mỗi mét vuông. Với nhiều đặc trưng, cho gradient bằng 0 được phương trình chuẩn X⊤Xw=X⊤yX^\top X w = X^\top y, nói rằng phần dư vuông góc với mọi cột của XX, tức Xw^X\hat w là hình chiếu vuông góc của yy lên không gian cột. Phương trình có nghiệm duy nhất khi XX đủ hạng cột; trong mã nên giải bằng lstsq thay vì lập X⊤XX^\top X, vì số điều kiện bị bình phương. Khi XX không đủ hạng cột, bài toán có vô số nghiệm cho cùng dự đoán, và giả nghịch đảo chọn nghiệm có chuẩn nhỏ nhất. Khi các cột gần phụ thuộc tuyến tính, hệ số dao động mạnh, gấp khoảng 25 lần ở tương quan 0,999 trong thí nghiệm, trong khi dự đoán gần như không đổi; hệ số phóng đại phương sai dự đoán được mức tăng này. Việc diễn giải hệ số còn dựa trên các giả định về tính tuyến tính, phương sai không đổi và tính độc lập của nhiễu.

Hồi quy tuyến tính giải được bằng một công thức, nhưng công thức đó đòi hỏi giải một hệ dd phương trình, còn hầu hết các mô hình khác không có công thức nào cả. Chương 5 trình bày phương pháp lặp được dùng cho gần như mọi mô hình học máy: gradient descent.


5Gradient descent#

Chương 4 tìm đường thẳng tốt nhất cho bốn căn hộ bằng một công thức. Phần lớn bài toán học máy không có công thức như vậy: chỉ cần đổi hàm mất mát sang cross-entropy của hồi quy logistic là phương trình "gradient bằng 0" đã không giải tường minh được nữa. Khi đó ta tìm nghiệm bằng cách đi từng bước nhỏ xuống dốc của hàm mất mát. Để thấy cách làm này vận hành ra sao, ta giải lại bài toán căn hộ như thể không biết công thức, rồi dùng chính ví dụ đó để trả lời hai câu hỏi thực tế: cần bao nhiêu bước, và làm sao biết mình đã tính gradient đúng.

5.1Lý do dùng phương pháp lặp#

Có ba lý do khiến ta dùng phương pháp lặp thay cho nghiệm dạng đóng. Lý do đầu tiên là nhiều bài toán không có nghiệm dạng đóng: cho gradient của hàm mất mát logistic bằng 0 dẫn tới một hệ phương trình phi tuyến không giải được bằng biểu thức tường minh, và mọi mạng nơ-ron cũng thuộc loại này. Lý do thứ hai là nghiệm dạng đóng có thể quá đắt. Lập và giải X⊤Xw=X⊤yX^\top X w = X^\top y tốn khoảng O(nd2+d3)O(nd^2 + d^3) phép tính; với d=106d = 10^6 đặc trưng, riêng d3=1018d^3 = 10^{18} đã vượt khả năng tính toán thông thường, trong khi một bước gradient chỉ tốn O(nd)O(nd). Lý do thứ ba là dữ liệu có thể không vừa bộ nhớ, và các biến thể ngẫu nhiên của gradient descent (Mục 5.6) chỉ cần một phần nhỏ dữ liệu ở mỗi bước.

5.2Thuật toán gradient descent#

Gradient của hàm LL tại một điểm chỉ hướng mà LL tăng nhanh nhất. Muốn giảm LL, ta đi một bước nhỏ theo hướng ngược lại, rồi lặp lại.

Định nghĩa 5.1 (Gradient descent)

Bắt đầu từ θ0\theta_0, lặp

θt+1=θt−η ∇θL(θt),t=0,1,2,…\theta_{t+1} = \theta_t - \eta\,\nabla_\theta L(\theta_t), \qquad t = 0, 1, 2, \dots

trong đó η>0\eta > 0 là tốc độ học (learning rate). Thuật toán dừng khi gradient đủ nhỏ hoặc khi đạt số vòng lặp tối đa.

Vì sao hướng ngược gradient là hướng giảm nhanh nhất? Với bước dịch chuyển nhỏ δ\delta, khai triển Taylor bậc nhất cho

L(θ+δ)≈L(θ)+∇L(θ)⊤δ.L(\theta + \delta) \approx L(\theta) + \nabla L(\theta)^\top \delta.

Trong mọi δ\delta có cùng độ dài, số hạng ∇L⊤δ\nabla L^\top \delta âm nhất khi δ\delta ngược hướng với ∇L\nabla L, theo bất đẳng thức Cauchy–Schwarz. Lập luận này chỉ đúng cục bộ, vì xấp xỉ bậc nhất chỉ chính xác khi bước đi đủ nhỏ. Nếu η\eta quá lớn, bước đi có thể vượt qua cực tiểu và làm LL tăng lên.

Ta thử thuật toán trên bốn căn hộ của Chương 4. Để các con số gọn, đổi biến diện tích thành u=(x−70)/10u = (x - 70)/10, tức độ lệch so với diện tích trung bình, tính bằng chục mét vuông; bốn căn có uu lần lượt là −3-3; −1-1; 11; 33. Mô hình là f(u)=a+buf(u) = a + bu, trong đó bb là phần giá tăng thêm cho mỗi 10 m². Nghiệm của Chương 4 khi đó ứng với a=2,25a = 2{,}25, đúng bằng giá trung bình vì đường thẳng tốt nhất đi qua điểm trung bình, và b=0,24b = 0{,}24.

Vì các uiu_i có trung bình bằng 0, hàm mất mát tách được thành

L(a,b)=(a−2,25)2+5 (b−0,24)2+0,0045.L(a, b) = (a - 2{,}25)^2 + 5\,(b - 0{,}24)^2 + 0{,}0045.

Khi khai triển (yi−a−bui)2(y_i - a - bu_i)^2 và lấy trung bình, các số hạng chéo giữa aa và uiu_i có tổng bằng 0, còn trung bình của ui2u_i^2 bằng 5; có thể kiểm tra tại điểm (0,0)(0, 0), nơi cả hai cách tính đều cho L=5,355L = 5{,}355. Dạng này cho thấy ngay hình dạng của bài toán: một cái chén có đáy tại (2,25; 0,24)(2{,}25;\ 0{,}24), cong theo hướng bb gấp 5 lần theo hướng aa. Gradient là

∇L=(2(a−2,25); 10(b−0,24)),\nabla L = \big(2(a - 2{,}25);\ 10(b - 0{,}24)\big),

và tại (0,0)(0, 0) nó bằng (−4,5; −2,4)(-4{,}5;\ -2{,}4): cả hai thành phần âm, nên bước đầu tiên tăng cả aa lẫn bb.

Với η=0,1\eta = 0{,}1, bước đầu tiên đưa (a,b)(a, b) từ (0,0)(0, 0) tới (0,45; 0,24)(0{,}45;\ 0{,}24), và mất mát giảm từ 5,355 xuống 3,2445. Hệ số góc đã đúng ngay sau một bước, còn hệ số chặn thì chưa. Lý do nằm ở cách mỗi bước tác động lên từng toạ độ. Thay gradient vào quy tắc cập nhật,

at+1−2,25=(1−2η)(at−2,25),bt+1−0,24=(1−10η)(bt−0,24).\begin{aligned} a_{t+1} - 2{,}25 &= (1 - 2\eta)(a_t - 2{,}25), \\ b_{t+1} - 0{,}24 &= (1 - 10\eta)(b_t - 0{,}24). \end{aligned}

Mỗi bước nhân khoảng cách tới đáy theo hướng aa với 1−2η=0,81 - 2\eta = 0{,}8, theo hướng bb với 1−10η=01 - 10\eta = 0. Vì vậy bb tới đích sau một bước, còn aa đi các giá trị 0,45; 0,81; 1,098; 1,3284 và cần 35 bước mới cách 2,25 dưới 0,001.

Thử tăng tốc độ học lên η=0,2\eta = 0{,}2 thì hệ số co theo hướng aa tốt lên thành 0,60{,}6, nhưng theo hướng bb thành 1−10⋅0,2=−11 - 10 \cdot 0{,}2 = -1: bb nhảy qua lại giữa 0,48 và 0 mãi mãi, và thuật toán không hội tụ. Ví dụ nhỏ này chứa gần như mọi điều cần biết về tốc độ học. Mỗi hướng có độ cong λ\lambda co sai số theo hệ số 1−ηλ1 - \eta\lambda mỗi bước, nên hội tụ khi và chỉ khi 0<η<2/λ0 < \eta < 2/\lambda. Hướng cong nhất đặt giới hạn trên cho η\eta, còn hướng phẳng nhất quyết định thuật toán chạy chậm tới đâu. Mục 5.3 và 5.4 tổng quát hoá hai nhận xét này.

5.3Tốc độ hội tụ và số điều kiện#

Ví dụ căn hộ cho thấy khó khăn của hàm nhiều biến: mỗi hướng cần một tốc độ học riêng, mà thuật toán chỉ có một. Tốc độ học tốt nhất cân bằng hai hướng, ∣1−2η∣=∣1−10η∣|1 - 2\eta| = |1 - 10\eta|, cho η=1/6\eta = 1/6, và khi đó cả hai hướng cùng co sai số theo hệ số 2/32/3 mỗi bước. Để thấy hệ số này phụ thuộc vào điều gì, xét hàm bậc hai hai biến

f(x)=12(x12+κ x22),κ≥1,f(x) = \tfrac12\big(x_1^2 + \kappa\, x_2^2\big), \qquad \kappa \ge 1,

có cực tiểu tại gốc. Ma trận Hessian là diag⁡(1,κ)\operatorname{diag}(1, \kappa), nên số điều kiện đúng bằng κ\kappa (Định nghĩa 2.4). Các đường mức của ff là elip, dẹt theo trục x2x_2 khi κ\kappa lớn. Một bước gradient descent cập nhật hai toạ độ độc lập với nhau:

x1←(1−η) x1,x2←(1−ηκ) x2.x_1 \leftarrow (1 - \eta)\,x_1, \qquad x_2 \leftarrow (1 - \eta\kappa)\,x_2.

Toạ độ x2x_2 chỉ hội tụ nếu ∣1−ηκ∣<1|1 - \eta\kappa| < 1, tức η<2/κ\eta < 2/\kappa. Nhưng với η\eta nhỏ như vậy, toạ độ x1x_1 chỉ co lại theo hệ số 1−η≈1−2/κ1 - \eta \approx 1 - 2/\kappa mỗi bước, rất chậm. Tốc độ học tối ưu cân bằng hai hệ số co, ∣1−η∣=∣1−ηκ∣|1 - \eta| = |1 - \eta\kappa|, cho η=2/(κ+1)\eta = 2/(\kappa + 1) và hệ số co chung

ρ=κ−1κ+1≈1−2κ.\rho = \frac{\kappa - 1}{\kappa + 1} \approx 1 - \frac{2}{\kappa}.

Sai số sau tt bước là ρt\rho^t lần sai số ban đầu. Để giảm sai số đi 10810^8 lần cần t≈κ2ln⁡108t \approx \frac{\kappa}{2}\ln 10^8 bước; với κ=104\kappa = 10^4, con số này là 92 10392\,103.

Một cải tiến đơn giản làm giảm đáng kể con số đó là momentum, còn gọi là phương pháp heavy ball của Polyak. Momentum cộng thêm vào bước cập nhật một phần của bước trước, θt+1=θt−η∇L(θt)+β(θt−θt−1)\theta_{t+1} = \theta_t - \eta\nabla L(\theta_t) + \beta(\theta_t - \theta_{t-1}). Với tham số chọn tối ưu cho hàm bậc hai, hệ số co trở thành (κ−1)/(κ+1)(\sqrt\kappa - 1)/(\sqrt\kappa + 1), nên số vòng lặp chỉ còn tỉ lệ với κ\sqrt\kappa thay vì κ\kappa.

Hình 3
Hình 3. Số vòng lặp để đạt sai số 10−810^{-8} theo số điều kiện κ\kappa, hai trục thang logarit. Momentum làm số vòng lặp tăng theo κ\sqrt\kappa thay vì κ\kappa.
κ\kappa Gradient descent Có momentum Tỉ số κ\sqrt\kappa
1 1 1 1,00 1,00
10 92 34 2,71 3,16
100 922 117 7,88 10,00
1 000 9 211 391 23,56 31,62
10 000 92 104 1 297 71,01 100,00

Bảng khớp với phân tích ở trên theo ba cách. Cột gradient descent tăng đúng 10 lần mỗi khi κ\kappa tăng 10 lần, và ở κ=104\kappa = 10^4 số đo 92 104 gần như trùng với ước lượng 92 103. Cột momentum tăng khoảng 3,3 lần mỗi hàng, xấp xỉ 10≈3,16\sqrt{10} \approx 3{,}16. Còn tỉ số giữa hai cột tăng theo κ\sqrt\kappa với hệ số khoảng 0,7.

Như vậy tốc độ hội tụ của gradient descent phụ thuộc vào hình dạng của hàm mất mát, đo bằng số điều kiện, chứ không phụ thuộc vào số chiều. Một bài toán một triệu chiều có κ\kappa nhỏ dễ hơn nhiều một bài toán hai chiều có κ\kappa lớn. Với hồi quy tuyến tính, κ\kappa lớn thường do các đặc trưng có thang đo rất khác nhau, chẳng hạn một cột tính bằng mét và một cột tính bằng milimét, hoặc do đặc trưng không được trừ trung bình. Bốn căn hộ cho thấy mức độ của vấn đề. Nếu để diện tích nguyên đơn vị mét vuông, từ 40 tới 100, và không trừ trung bình, Hessian của hàm mất mát có hai trị riêng khoảng 10 802 và 0,185, nên κ≈58 340\kappa \approx 58\,340. Tốc độ học khi đó phải nhỏ hơn 1,85×10−41{,}85 \times 10^{-4}, và theo công thức trên cần khoảng 537 000 bước để giảm sai số 10810^8 lần. Chỉ chia diện tích cho 100, κ\kappa còn khoảng 45; trừ trung bình rồi chia cho 10 như ở Mục 5.2, κ=5\kappa = 5; còn chia cho độ lệch chuẩn 22,36 thì κ=1\kappa = 1, và gradient descent với η=0,5\eta = 0{,}5 tới nghiệm sau đúng một bước. Chuẩn hoá đặc trưng về cùng thang đo, như trừ trung bình rồi chia độ lệch chuẩn, vì vậy là cách rẻ nhất để giảm κ\kappa và tăng tốc huấn luyện.

5.4Chọn tốc độ học#

Ví dụ căn hộ ở Mục 5.2 cho thấy với hàm bậc hai, hướng có độ cong λ\lambda hội tụ khi và chỉ khi 0<η<2/λ0 < \eta < 2/\lambda. Với hàm bậc hai nhiều biến, mỗi hướng riêng của Hessian có một điều kiện như vậy, và hướng khắt khe nhất là hướng có trị riêng lớn nhất:

0<η<2λmax⁡.0 < \eta < \frac{2}{\lambda_{\max}}.

Vượt ngưỡng này thì thuật toán chắc chắn phân kỳ theo hướng đó, không chỉ là chậm. Với bốn căn hộ, λmax⁡=10\lambda_{\max} = 10 nên ngưỡng là 0,20{,}2: đúng tại ngưỡng, hệ số góc dao động mãi giữa hai giá trị như đã thấy, còn vượt ngưỡng một chút là nó phân kỳ. Với hàm không phải bậc hai, không có ngưỡng chính xác như vậy, nhưng đường cong mất mát vẫn cho biết khá rõ tốc độ học đang ở mức nào, như bảng dưới tóm tắt.

Tốc độ học Hiện tượng Dấu hiệu trên đường cong mất mát
Quá nhỏ hội tụ nhưng rất chậm mất mát giảm đều và chậm, chưa phẳng khi hết số vòng lặp
Phù hợp hội tụ nhanh mất mát giảm nhanh lúc đầu rồi phẳng dần
Hơi lớn dao động quanh cực tiểu mất mát giảm rồi dao động, không phẳng hẳn
Quá lớn phân kỳ mất mát tăng, rồi thành inf hoặc nan

Trong thực tế, ta thử các giá trị cách nhau 3 tới 10 lần, chẳng hạn 0,3; 0,1; 0,03; 0,01, chạy một số vòng lặp ngắn, rồi chọn giá trị lớn nhất mà mất mát vẫn giảm ổn định. Nhiều quy trình huấn luyện còn giảm dần tốc độ học theo thời gian. Chương 5 của Học sâu trình bày các lịch tốc độ học và các thuật toán tự điều chỉnh tốc độ học theo từng tham số như RMSProp, Adam và AdamW.

5.5Kiểm tra gradient bằng sai phân hữu hạn#

Suy ra công thức gradient bằng tay, hoặc cài đặt nó trong mã, rất dễ sai: sai dấu, thiếu hệ số, nhầm chiều ma trận. Một lỗi như vậy thường không làm chương trình báo lỗi, mà chỉ làm mô hình học kém đi một cách khó giải thích. Cách phát hiện đáng tin cậy là so sánh gradient tính bằng công thức với gradient xấp xỉ bằng sai phân hữu hạn:

sai phaˆn tieˆˊn:f(x+ε)−f(x)ε,sai phaˆn trung taˆm:f(x+ε)−f(x−ε)2ε.\begin{aligned} &\text{sai phân tiến:} && \frac{f(x+\varepsilon) - f(x)}{\varepsilon}, \\ &\text{sai phân trung tâm:} && \frac{f(x+\varepsilon) - f(x-\varepsilon)}{2\varepsilon}. \end{aligned}

Với hàm nhiều biến, ta áp dụng công thức cho từng toạ độ, mỗi lần dịch chuyển một toạ độ một lượng ε\varepsilon.

Thử trên ví dụ căn hộ tại điểm (a,b)=(0,0)(a, b) = (0, 0), nơi công thức cho gradient (−4,5; −2,4)(-4{,}5;\ -2{,}4). Sai phân trung tâm với ε=10−5\varepsilon = 10^{-5} cho khoảng −4,500000000007-4{,}500000000007 và −2,40000000002-2{,}40000000002, lệch khỏi công thức cỡ 10−1110^{-11}. Với hàm bậc hai như hàm mất mát này, sai phân trung tâm đúng tuyệt đối về mặt toán học, nên phần lệch nhỏ đó hoàn toàn do làm tròn số. Với hàm tổng quát, xấp xỉ còn mắc thêm sai số cắt cụt, và việc chọn ε\varepsilon cần cân nhắc.

Câu hỏi là chọn ε\varepsilon bao nhiêu. Theo định nghĩa đạo hàm, ε\varepsilon càng nhỏ thì xấp xỉ càng chính xác. Trên máy tính điều đó không đúng, vì có hai nguồn sai số ngược chiều nhau.

Hình 4
Hình 4. Sai số của gradient xấp xỉ theo ε\varepsilon, hai trục thang logarit. Đồ thị có dạng chữ V: nhánh phải là sai số cắt cụt, nhánh trái là sai số làm tròn.
ε\varepsilon Sai phân trung tâm Sai phân tiến
10−110^{-1} 2,22×10−32{,}22 \times 10^{-3} 6,08×10−26{,}08 \times 10^{-2}
10−410^{-4} 2,23×10−92{,}23 \times 10^{-9} 5,86×10−55{,}86 \times 10^{-5}
3,2×10−63{,}2 \times 10^{-6} 1,72×10−111{,}72 \times 10^{-11} 1,85×10−61{,}85 \times 10^{-6}
10−1010^{-10} 4,25×10−74{,}25 \times 10^{-7} 8,01×10−78{,}01 \times 10^{-7}
10−1310^{-13} 6,27×10−46{,}27 \times 10^{-4} 9,38×10−49{,}38 \times 10^{-4}

Nguồn thứ nhất là sai số cắt cụt, sinh ra do bỏ các số hạng bậc cao trong khai triển Taylor. Khai triển f(x±ε)f(x \pm \varepsilon) tới bậc ba cho thấy sai số này tỉ lệ với ε\varepsilon ở sai phân tiến và với ε2\varepsilon^2 ở sai phân trung tâm, vì các số hạng bậc chẵn triệt tiêu nhau khi lấy hiệu. Sai số này giảm khi ε\varepsilon nhỏ đi. Nguồn thứ hai là sai số làm tròn, sinh ra do mỗi giá trị ff chỉ được lưu với độ chính xác tương đối khoảng u≈2,22×10−16u \approx 2{,}22 \times 10^{-16}, tức epsilon máy của số thực 64 bit. Lấy hiệu hai số gần bằng nhau rồi chia cho ε\varepsilon khuếch đại sai số này lên cỡ u/εu/\varepsilon, nên nó tăng khi ε\varepsilon nhỏ đi.

Tổng sai số của sai phân trung tâm có dạng C1ε2+C2u/εC_1\varepsilon^2 + C_2 u/\varepsilon. Đạo hàm theo ε\varepsilon và cho bằng 0 được điểm tối ưu ε∗∝u1/3\varepsilon^* \propto u^{1/3}. Làm tương tự với sai phân tiến, C1ε+C2u/εC_1\varepsilon + C_2u/\varepsilon, được ε∗∝u1/2\varepsilon^* \propto u^{1/2}:

εtrung taˆm∗∼u1/3≈6,06×10−6,εtieˆˊn∗∼u1/2≈1,49×10−8.\varepsilon^{*}_{\text{trung tâm}} \sim u^{1/3} \approx 6{,}06 \times 10^{-6}, \qquad \varepsilon^{*}_{\text{tiến}} \sim u^{1/2} \approx 1{,}49 \times 10^{-8}.

Giá trị đo được trong thí nghiệm là 5,62×10−65{,}62 \times 10^{-6} và 1,78×10−81{,}78 \times 10^{-8}, khớp với lý thuyết trong phạm vi độ mịn của lưới quét. Tại điểm tối ưu của từng cách, sai số của sai phân trung tâm xuống tới 1,2×10−111{,}2 \times 10^{-11}, còn sai số của sai phân tiến chỉ xuống tới khoảng 4×10−84 \times 10^{-8}, kém hơn hơn ba bậc độ lớn. Sai phân trung tâm tốn gấp đôi số lần tính ff, nhưng độ chính xác tăng thêm xứng đáng với chi phí đó.

Lưu ý (Quy tắc kiểm tra gradient)

Dùng sai phân trung tâm với ε\varepsilon khoảng 10−510^{-5} tới 10−610^{-6} khi tính bằng số thực 64 bit. So sánh bằng sai số tương đối

∣gcoˆng thức−gsoˆˊ∣max⁡(∣gcoˆng thức∣,∣gsoˆˊ∣,10−8).\frac{|g_{\text{công thức}} - g_{\text{số}}|}{\max\big(|g_{\text{công thức}}|, |g_{\text{số}}|, 10^{-8}\big)}.

Sai số tương đối dưới 10−710^{-7} cho thấy công thức đúng; trên 10−410^{-4} gần như chắc chắn có lỗi. Không chọn ε=10−12\varepsilon = 10^{-12} với suy nghĩ nhỏ hơn là chính xác hơn: bảng trên cho thấy ε=10−13\varepsilon = 10^{-13} cho sai số lớn gấp khoảng 5×1075 \times 10^{7} lần so với ε\varepsilon tối ưu.

5.6Batch, stochastic và mini-batch gradient descent#

Với hàm mất mát là trung bình trên nn điểm dữ liệu, L(θ)=1n∑iℓi(θ)L(\theta) = \frac1n\sum_i \ell_i(\theta), gradient cũng là trung bình của nn gradient thành phần. Ba biến thể của gradient descent khác nhau ở số điểm dữ liệu dùng để tính gradient mỗi bước.

Biến thể Mỗi bước dùng Ưu điểm Nhược điểm
Batch gradient descent toàn bộ nn điểm gradient chính xác, đường đi trơn mỗi bước đắt, cần toàn bộ dữ liệu trong bộ nhớ
Stochastic gradient descent (SGD) 1 điểm chọn ngẫu nhiên mỗi bước rất rẻ gradient nhiễu lớn, đường đi dao động
Mini-batch gradient descent BB điểm chọn ngẫu nhiên cân bằng hai cách trên, tận dụng tính toán song song thêm siêu tham số BB

Bốn căn hộ cho thấy gradient tính trên một điểm dữ liệu có thể khác gradient đầy đủ tới mức nào. Tại (a,b)=(0,0)(a, b) = (0, 0), gradient tính riêng trên căn A, B, C, D lần lượt là (−3; 9)(-3;\ 9), (−4,2; 4,2)(-4{,}2;\ 4{,}2), (−4,8; −4,8)(-4{,}8;\ -4{,}8) và (−6; −18)(-6;\ -18). Thành phần theo bb đi từ −18-18 tới 99, thậm chí đổi dấu, nên một bước SGD có thể đi sai hướng hẳn. Nhưng trung bình của bốn vector đúng bằng gradient đầy đủ (−4,5; −2,4)(-4{,}5;\ -2{,}4).

Gradient tính trên một mini-batch chọn ngẫu nhiên là một ước lượng không chệch của gradient đầy đủ, vì kỳ vọng của nó đúng bằng ∇L\nabla L. Phương sai của ước lượng này giảm tỉ lệ với 1/B1/B, nên tăng kích thước mini-batch làm hướng đi chính xác hơn, nhưng lợi ích giảm dần: tăng BB gấp 4 lần chỉ giảm độ lệch chuẩn của gradient đi 2 lần.

Vì gradient ngẫu nhiên luôn có nhiễu, SGD với tốc độ học cố định không hội tụ hẳn về cực tiểu mà dao động trong một vùng quanh nó. Muốn hội tụ, tốc độ học phải giảm dần theo thời gian. Điều kiện cổ điển của Robbins và Monro (1951) là ∑tηt=∞\sum_t \eta_t = \infty, để đi đủ xa mà tới được cực tiểu, và ∑tηt2<∞\sum_t \eta_t^2 < \infty, để nhiễu bị dập dần; chẳng hạn ηt∝1/t\eta_t \propto 1/t.

Mini-batch được dùng phổ biến nhất trên thực tế, chủ yếu vì lý do phần cứng: nhân một ma trận B×dB \times d với vector trọng số tận dụng GPU tốt hơn nhiều so với BB phép nhân vector riêng lẻ. Nhiễu của gradient ngẫu nhiên còn có ích với các bài toán không lồi như mạng nơ-ron, vì nó giúp thuật toán thoát khỏi các điểm yên ngựa và các cực tiểu địa phương nông. Với bài toán lồi, nhiễu chỉ là thứ phải chấp nhận để đổi lấy các bước tính rẻ.

5.7Tóm tắt#

Gradient descent đi từng bước ngược hướng gradient, và tốc độ học quyết định nó hội tụ, dao động hay phân kỳ. Trên bốn căn hộ, mỗi bước nhân khoảng cách tới đáy theo một hướng với 1−ηλ1 - \eta\lambda, trong đó λ\lambda là độ cong theo hướng đó; vì vậy với hàm bậc hai, điều kiện hội tụ là η<2/λmax⁡\eta < 2/\lambda_{\max}, và ở ví dụ này ngưỡng là 0,2. Số vòng lặp cần thiết tỉ lệ với số điều kiện κ\kappa, tăng từ 1 lên 92 104 khi κ\kappa tăng từ 1 lên 10410^4 trong thí nghiệm, còn momentum hạ con số đó xuống tỉ lệ với κ\sqrt\kappa. Chuẩn hoá đặc trưng là cách tăng tốc rẻ nhất: với diện tích để nguyên mét vuông, bài toán căn hộ có κ≈58 340\kappa \approx 58\,340; sau khi chuẩn hoá, κ=1\kappa = 1. Gradient tự tính cần được kiểm tra bằng sai phân trung tâm với ε\varepsilon cỡ 10−510^{-5} tới 10−610^{-6}, vì ε\varepsilon quá nhỏ làm sai số làm tròn lấn át. Mini-batch là cách dùng phổ biến nhất: gradient trên từng điểm có thể lệch hẳn hướng, nhưng trung bình của chúng không chệch, và phương sai giảm theo 1/B1/B.

Có công cụ tối ưu cho các hàm mất mát không giải được bằng công thức, ta chuyển sang loại bài toán cần tới nó nhiều nhất: phân loại. Chương 6 dùng lại mô hình tuyến tính, thay đổi hàm mất mát, và thấy mỗi lựa chọn hàm mất mát cho một thuật toán khác nhau.


6Phân loại tuyến tính#

Chương 4 và 5 dự đoán giá căn hộ, một số thực. Phần lớn bài toán thực tế lại cần dự đoán một lớp: thư là rác hay không, giao dịch có gian lận không, sinh viên đỗ hay trượt. Ta lấy một ví dụ nhỏ để đi suốt chương: sáu sinh viên, số giờ mỗi người ôn thi và kết quả.

Sinh viên 1 2 3 4 5 6
Giờ ôn xx 1 2 3 4 5 6
Kết quả trượt trượt đỗ trượt đỗ đỗ

Nhìn chung ôn nhiều thì dễ đỗ hơn, nhưng sinh viên 3 ôn 3 giờ đã đỗ còn sinh viên 4 ôn 4 giờ lại trượt, nên không có ngưỡng giờ ôn nào chia đúng cả sáu người. Dữ liệu thật thường như vậy, và cách mỗi thuật toán xử lý những điểm chồng lấn như sinh viên 3 và 4 là chỗ chúng khác nhau.

Cách đơn giản nhất là dùng lại mô hình tuyến tính, nhưng lấy dấu của w⊤x+bw^\top x + b làm nhãn. Ba thuật toán kinh điển làm đúng như vậy: perceptron, hồi quy logistic và hồi quy softmax. Chúng dùng chung mô hình và chung cách tối ưu, chỉ khác nhau ở hàm mất mát, và chính khác biệt đó quyết định perceptron có hội tụ hay không, hồi quy logistic có cho ra xác suất hay không. Ta bắt đầu bằng việc đặt các hàm mất mát cạnh nhau.

6.1Mô hình tuyến tính và các hàm mất mát cho phân loại#

Xét bài toán phân loại hai lớp với nhãn yi∈{−1,+1}y_i \in \{-1, +1\}. Một bộ phân loại tuyến tính tính điểm số s=w⊤x+bs = w^\top x + b rồi dự đoán lớp +1+1 nếu s>0s > 0 và lớp −1-1 nếu s<0s < 0. Theo Mục 2.2, biên quyết định w⊤x+b=0w^\top x + b = 0 là một siêu phẳng. Với sáu sinh viên, một bộ phân loại tự nhiên là s=x−3,5s = x - 3{,}5, tức dự đoán đỗ khi ôn hơn 3,5 giờ; nó đoán sai đúng hai người, sinh viên 3 và 4.

Định nghĩa 6.1 (Lề của một điểm)

Lề (margin) của điểm (xi,yi)(x_i, y_i) đối với bộ phân loại (w,b)(w, b) là

mi=yi (w⊤xi+b).m_i = y_i\,(w^\top x_i + b).

Lề dương nghĩa là điểm được phân loại đúng, lề âm nghĩa là phân loại sai, và trị tuyệt đối của lề cho biết điểm nằm xa biên quyết định tới mức nào, tỉ lệ với khoảng cách ở Định lý 2.1. Với bộ phân loại s=x−3,5s = x - 3{,}5 và nhãn đỗ là +1+1, trượt là −1-1, lề của sáu sinh viên là 2,5; 1,5; −0,5-0{,}5; −0,5-0{,}5; 1,5; 2,5. Hai người bị đoán sai có lề âm, còn hai người ở hai đầu, ôn 1 giờ và 6 giờ, nằm xa biên nhất. Mọi hàm mất mát cho phân loại hai lớp trong chương này đều viết được như một hàm của lề, như Hình 5 và bảng dưới cho thấy.

Hình 5
Hình 5. Bốn hàm mất mát theo lề mm. Mất mát 0–1 là thứ ta thực sự muốn giảm; ba hàm còn lại là các hàm thay thế lồi của nó.
Hàm mất mát Công thức Tính chất Thuật toán tương ứng
0–1 1[m≤0]\mathbb{1}[m \le 0] không lồi, đạo hàm bằng 0 hầu khắp nơi không tối ưu trực tiếp được
Perceptron max⁡(0,−m)\max(0, -m) lồi, bằng 0 khi m≥0m \ge 0 perceptron
Hinge max⁡(0,1−m)\max(0, 1-m) lồi, bằng 0 khi m≥1m \ge 1 SVM (Chương 13)
Logistic log⁡2(1+e−m)\log_2(1 + e^{-m}) lồi, trơn, luôn dương hồi quy logistic

Áp dụng bốn hàm mất mát cho sáu sinh viên với bộ phân loại s=x−3,5s = x - 3{,}5:

Hàm mất mát Sinh viên 1 và 6 (m=2,5m = 2{,}5) Sinh viên 2 và 5 (m=1,5m = 1{,}5) Sinh viên 3 và 4 (m=−0,5m = -0{,}5)
0–1 0 0 1
Perceptron 0 0 0,5
Hinge 0 0 1,5
Logistic 0,114 0,291 1,405

Bảng cho thấy mỗi hàm mất mát chú ý tới ai. Perceptron chỉ phạt hai người bị đoán sai, và phạt nhẹ vì họ nằm sát biên. Hinge cũng chỉ phạt hai người đó nhưng nặng hơn, và sẽ phạt cả người được đoán đúng nếu lề của họ nhỏ hơn 1. Logistic phạt tất cả, kể cả người được đoán đúng ở xa biên, chỉ là phạt rất nhẹ: nó luôn còn lý do để đẩy các điểm ra xa biên hơn nữa.

Mất mát 0–1 đếm số điểm bị phân loại sai, đúng là thứ ta muốn giảm. Nhưng nó là hàm bậc thang: đạo hàm bằng 0 ở mọi chỗ khả vi và không tồn tại tại m=0m = 0, nên gradient không chỉ ra hướng nào để cải thiện. Hơn nữa, bài toán cực tiểu hoá mất mát 0–1 trên một tập dữ liệu là bài toán NP-khó. Vì vậy người ta thay nó bằng một hàm thay thế lồi (convex surrogate) để có thể tối ưu bằng gradient.

Hinge và logistic viết theo logarit cơ số 2 còn là chặn trên của mất mát 0–1: với mọi mm, giá trị của chúng lớn hơn hoặc bằng 1[m≤0]\mathbb{1}[m \le 0]. Do đó làm nhỏ tổng mất mát hinge hoặc logistic kéo theo làm nhỏ số điểm bị phân loại sai trên tập huấn luyện. Mất mát perceptron không có tính chất này: tại m=0m = 0 nó bằng 0 trong khi mất mát 0–1 bằng 1, và với lề âm rất nhỏ nó gần bằng 0. Đây là một cách nhìn vì sao perceptron yếu hơn hai thuật toán kia, như Mục 6.2 sẽ cho thấy bằng thí nghiệm. Dùng logarit tự nhiên thay cho cơ số 2 chỉ nhân hàm mất mát logistic với hằng số ln⁡2\ln 2, không làm thay đổi nghiệm.

6.2Perceptron#

Perceptron (Rosenblatt, 1958) là thuật toán học đầu tiên cho bộ phân loại tuyến tính. Để đơn giản, ta gộp hệ số chặn vào ww bằng cách thêm thành phần hằng 1 vào xx như ở Chương 4.

Định nghĩa 6.2 (Thuật toán perceptron)

Khởi tạo w=0w = 0. Lần lượt duyệt các điểm dữ liệu; mỗi khi gặp một điểm bị phân loại sai hoặc nằm đúng trên biên, tức yi w⊤xi≤0y_i\, w^\top x_i \le 0, cập nhật

w←w+yixi.w \leftarrow w + y_i x_i.

Dừng khi một lượt duyệt toàn bộ dữ liệu không có cập nhật nào.

Bước cập nhật có ý nghĩa trực quan: nếu một điểm lớp +1+1 bị đoán sai, cộng xix_i vào ww làm tăng w⊤xiw^\top x_i thêm ∥xi∥2\|x_i\|^2, kéo điểm số của nó về phía dương. Quy tắc này chính là SGD trên mất mát perceptron với tốc độ học 1, vì đạo hàm của max⁡(0,−mi)\max(0, -m_i) theo ww bằng −yixi-y_i x_i khi mi<0m_i < 0 và bằng 0 khi mi>0m_i > 0.

Với dữ liệu tách được tuyến tính, perceptron có một bảo đảm hội tụ rất gọn.

Định lý 6.1 (Novikoff, 1962)

Giả sử mọi điểm dữ liệu thoả ∥xi∥≤R\|x_i\| \le R, và tồn tại vector đơn vị uu sao cho yi u⊤xi≥γ>0y_i\,u^\top x_i \ge \gamma > 0 với mọi ii (dữ liệu tách được với lề γ\gamma). Khi đó perceptron thực hiện không quá (R/γ)2(R/\gamma)^2 lần cập nhật.

Chặn trên trong định lý không phụ thuộc số điểm dữ liệu nn hay số chiều dd, mà chỉ phụ thuộc tỉ số giữa kích thước của dữ liệu và độ rộng của lề. Thí nghiệm sinh dữ liệu tách được với lề γ\gamma cho trước để kiểm tra.

Lề γ\gamma R=max⁡i∣xi∣R = \max_i|x_i| Chặn (R/γ)2(R/\gamma)^2 Số lần cập nhật đo được Hội tụ
0,300 1,3273 19,5 4 có
0,201 1,2631 39,5 4 có
0,100 1,1703 136,8 10 có
0,050 1,1519 526,9 14 có

Ở cả bốn trường hợp, số lần cập nhật nằm dưới chặn lý thuyết, và tăng lên khi lề hẹp lại, đúng xu hướng mà định lý dự báo. Chặn khá lỏng so với số đo, điều thường gặp với các chặn trong trường hợp xấu nhất.

Trên dữ liệu không tách được tuyến tính, tình hình khác hẳn:

Văn bản
hoi tu = False, so lan sai sau 2000 luot = 17,977

Thuật toán không dừng. Định lý Novikoff chỉ áp dụng cho dữ liệu tách được; ngoài trường hợp đó, perceptron không có bảo đảm nào và có thể dao động mãi mãi. Nguyên nhân nhìn thấy được trên Hình 5: mất mát perceptron bằng 0 ngay khi m≥0m \ge 0, nên thuật toán ngừng điều chỉnh một điểm ngay khi điểm đó vừa được phân loại đúng, dù nó nằm sát biên. Khi các lớp chồng lấn, sửa một điểm sai này lại làm một điểm khác thành sai, và quá trình lặp lại không kết thúc. Sáu sinh viên là phiên bản nhỏ nhất của tình huống này: muốn đoán đúng sinh viên 3 thì ngưỡng phải dưới 3 giờ, muốn đoán đúng sinh viên 4 thì ngưỡng phải trên 4 giờ, nên mỗi lần perceptron sửa cho người này thì người kia lại sai.

6.3Hồi quy logistic#

Hồi quy logistic khắc phục hạn chế của perceptron bằng một hàm mất mát trơn và không bao giờ bằng 0. Thay vì chỉ đưa ra nhãn, mô hình đưa ra xác suất. Trong mục này ta dùng nhãn yi∈{0,1}y_i \in \{0, 1\}, cách viết thuận tiện hơn cho xác suất.

Định nghĩa 6.3 (Hồi quy logistic)

Mô hình hồi quy logistic cho xác suất lớp dương là

p(y=1∣x)=σ(w⊤x),σ(z)=11+e−z,p(y = 1 \mid x) = \sigma(w^\top x), \qquad \sigma(z) = \frac{1}{1 + e^{-z}},

trong đó σ\sigma là hàm sigmoid. Tham số được học bằng cách cực tiểu hoá hàm mất mát cross-entropy

L(w)=−1n∑i=1n[yilog⁡pi+(1−yi)log⁡(1−pi)],pi=σ(w⊤xi).\begin{aligned} L(w) &= -\frac{1}{n}\sum_{i=1}^{n}\Big[y_i \log p_i + (1-y_i)\log(1-p_i)\Big], \\ p_i &= \sigma(w^\top x_i). \end{aligned}

Hàm sigmoid ép mọi số thực vào khoảng (0,1)(0, 1), với σ(0)=0,5\sigma(0) = 0{,}5. Nghịch đảo của nó cho một cách hiểu hệ số rất cụ thể: w⊤x=log⁡p1−pw^\top x = \log\frac{p}{1-p}, tức mô hình tuyến tính đang dự đoán log tỉ lệ cược (log-odds). Tăng đặc trưng xjx_j thêm một đơn vị làm log tỉ lệ cược tăng wjw_j, tức nhân tỉ lệ cược với ewje^{w_j}. Tên gọi "hồi quy" đến từ đây: mô hình hồi quy log tỉ lệ cược theo xx, dù bài toán là phân loại.

Ví dụ 6.1

Với w=1w = 1 và hệ số chặn −3,5-3{,}5, xác suất đỗ mà mô hình gán cho sáu sinh viên là σ(x−3,5)\sigma(x - 3{,}5):

0,076;0,182;0,378;0,622;0,818;0,924.0{,}076;\quad 0{,}182;\quad 0{,}378;\quad 0{,}622;\quad 0{,}818;\quad 0{,}924.

Sinh viên 3 được cho 38% khả năng đỗ dù thực tế đã đỗ, sinh viên 4 được cho 62% dù đã trượt. Mỗi giờ ôn thêm nhân tỉ lệ cược đỗ với e1≈2,72e^1 \approx 2{,}72. Cross-entropy cộng −log⁡pi-\log p_i cho người đỗ và −log⁡(1−pi)-\log(1 - p_i) cho người trượt; sáu số hạng là 0,079; 0,201; 0,974; 0,974; 0,201; 0,079, trung bình L=0,418L = 0{,}418. Hai người bị đoán sai đóng góp hơn ba phần tư tổng mất mát.

Gradient của cross-entropy có dạng rất gọn. Dùng tính chất σ′(z)=σ(z) (1−σ(z))\sigma'(z) = \sigma(z)\,(1 - \sigma(z)), đạo hàm của số hạng thứ ii theo ww là

∂∂w[−yilog⁡pi−(1−yi)log⁡(1−pi)]=−yi(1−pi) xi+(1−yi) pi xi=(pi−yi) xi.\begin{aligned} &\frac{\partial}{\partial w}\Big[-y_i\log p_i - (1-y_i)\log(1-p_i)\Big] \\ &\qquad = -y_i(1-p_i)\,x_i + (1-y_i)\,p_i\, x_i = (p_i - y_i)\,x_i. \end{aligned}

Lấy trung bình trên mọi điểm, ta được

∇wL=1nX⊤(p−y).\nabla_w L = \frac{1}{n}X^\top(p - y).

Mỗi điểm dữ liệu kéo trọng số theo hướng xix_i của chính nó, với độ mạnh bằng sai lệch pi−yip_i - y_i giữa xác suất dự đoán và nhãn: điểm được đoán gần đúng gần như không kéo, điểm bị đoán sai kéo mạnh nhất. Ở Ví dụ 6.1, các sai lệch là 0,076; 0,182; −0,622-0{,}622; 0,622; −0,182-0{,}182; −0,076-0{,}076. Chúng có tổng bằng 0, nên đạo hàm theo hệ số chặn bằng 0, còn đạo hàm theo ww là 16∑i(pi−yi) xi≈−0,051\tfrac16\sum_i (p_i - y_i)\,x_i \approx -0{,}051. Đạo hàm âm nên tăng ww còn giảm được mất mát. Chạy tối ưu tới hội tụ được w≈1,214w \approx 1{,}214 và hệ số chặn ≈−4,249\approx -4{,}249: biên quyết định vẫn ở 3,5 giờ, mất mát giảm còn 0,413, và mỗi giờ ôn thêm nhân tỉ lệ cược với khoảng 3,37.

Công thức có cùng dạng với gradient của hồi quy tuyến tính, 2nX⊤(Xw−y)\tfrac{2}{n}X^\top(Xw - y): ma trận dữ liệu chuyển vị nhân với vector sai lệch giữa dự đoán và nhãn. Đây không phải trùng hợp. Mục 10.3 giải thích rằng cả hai đều là mô hình tuyến tính tổng quát với hàm liên kết chính tắc, và mọi mô hình như vậy đều có gradient dạng này.

Hàm mất mát cross-entropy của hồi quy logistic là hàm lồi theo ww (Mục 11.4 kiểm tra bằng số), nên gradient descent với tốc độ học phù hợp hội tụ về cực tiểu toàn cục, nếu cực tiểu đó tồn tại. Mục 6.5 trình bày trường hợp nó không tồn tại.

Lưu ý (Vì sao không dùng bình phương sai số cho phân loại)

Có hai lý do. Thứ nhất, ∑i(yi−σ(w⊤xi))2\sum_i (y_i - \sigma(w^\top x_i))^2 không lồi theo ww, nên mất bảo đảm hội tụ về cực tiểu toàn cục. Thứ hai, khi mô hình đoán sai với độ tự tin cao, ví dụ pi≈0p_i \approx 0 trong khi yi=1y_i = 1, đạo hàm của bình phương sai số chứa thừa số σ′(z)=pi(1−pi)≈0\sigma'(z) = p_i(1-p_i) \approx 0 nên gần như triệt tiêu, và mô hình học rất chậm từ chính những lỗi nặng nhất. Gradient của cross-entropy là (pi−yi)xi≈−xi(p_i - y_i)x_i \approx -x_i, không bị triệt tiêu.

6.4Hồi quy softmax#

Khi kết quả có nhiều hơn hai mức, chẳng hạn trượt, đỗ và đỗ loại giỏi, ta có K>2K > 2 lớp. Mỗi lớp kk có một vector trọng số wkw_k và một điểm số sk=wk⊤xs_k = w_k^\top x. Hàm softmax biến KK điểm số thành KK xác suất.

Định nghĩa 6.4 (Hồi quy softmax)

Mô hình hồi quy softmax cho

p(y=k∣x)=exp⁡(wk⊤x)∑j=1Kexp⁡(wj⊤x),k=1,…,K,p(y = k \mid x) = \frac{\exp(w_k^\top x)}{\sum_{j=1}^{K}\exp(w_j^\top x)}, \qquad k = 1, \dots, K,

và được huấn luyện bằng cross-entropy nhiều lớp L=−1n∑ilog⁡p(y=yi∣xi)L = -\frac1n\sum_i \log p(y = y_i \mid x_i).

Softmax có một tính chất cần biết: cộng cùng một vector cc vào mọi wkw_k không làm thay đổi xác suất, vì cả tử số và mẫu số đều nhân thêm exp⁡(c⊤x)\exp(c^\top x). Do đó chỉ hiệu giữa các vector trọng số được dữ liệu xác định, còn bản thân từng vector thì không. Trên thực tế người ta cố định một vector bằng 0, hoặc thêm regularization để chọn ra một nghiệm.

Tính chất này dẫn tới một liên hệ quan trọng. Với K=2K = 2,

p(y=1∣x)=ew1⊤xew1⊤x+ew0⊤x=11+e−(w1−w0)⊤x=σ((w1−w0)⊤x).p(y = 1 \mid x) = \frac{e^{w_1^\top x}}{e^{w_1^\top x} + e^{w_0^\top x}} = \frac{1}{1 + e^{-(w_1 - w_0)^\top x}} = \sigma\big((w_1 - w_0)^\top x\big).

Vậy hồi quy softmax với hai lớp chính là hồi quy logistic, với vector trọng số w=w1−w0w = w_1 - w_0. Thí nghiệm khớp cả hai mô hình trên cùng dữ liệu, không dùng regularization, chạy tới hội tụ:

Văn bản
Sai khac lon nhat giua xac suat cua logistic va cua softmax(K=2): 3.331e-16
Hieu hai cot trong so cua softmax:  [ 0.10864027  1.53215349 -1.83422929]
Trong so cua hoi quy logistic:      [ 0.10864027  1.53215349 -1.83422929]
  -> lech 1.554e-15
Tong hai cot trong so cua softmax (phai bang 0): 6.661e-16

Hai mô hình cho xác suất lệch nhau 3,3×10−163{,}3 \times 10^{-16} và trọng số lệch nhau 1,6×10−151{,}6 \times 10^{-15}, tức trùng nhau tới sai số làm tròn. Dòng cuối cho thấy thuật toán, xuất phát từ w0=w1=0w_0 = w_1 = 0, luôn giữ tổng hai vector bằng 0, vì gradient của hai lớp luôn đối nhau.

Lưu ý (Tính softmax ổn định số học)

Khi các điểm số lớn, exp⁡(sk)\exp(s_k) có thể vượt quá giới hạn của số thực dấu phẩy động. Vì cộng cùng một hằng số vào mọi điểm số không đổi kết quả, các thư viện luôn tính softmax⁡(s−max⁡ksk)\operatorname{softmax}(s - \max_k s_k) để số mũ lớn nhất bằng 0.

6.5Dữ liệu tách được và sự cần thiết của regularization#

Có một trường hợp hồi quy logistic không có nghiệm, và trường hợp này gặp trên thực tế nhiều hơn người ta nghĩ.

Giả sử dữ liệu tách được hoàn toàn: tồn tại ww sao cho mọi điểm lớp 1 có w⊤x>0w^\top x > 0 và mọi điểm lớp 0 có w⊤x<0w^\top x < 0. Nhân ww với một số c>1c > 1 không đổi biên quyết định, nhưng đẩy mọi xác suất pip_i về gần 0 hoặc 1 hơn, tức gần nhãn đúng hơn, nên hàm mất mát giảm. Hàm mất mát giảm mãi khi c→∞c \to \infty mà không bao giờ đạt giá trị nhỏ nhất. Do đó không tồn tại nghiệm hữu hạn, và gradient descent làm ∥w∥\|w\| tăng không giới hạn.

Sáu sinh viên cho thấy điều này bằng số. Đổi kết quả của sinh viên 3 và 4 cho nhau thì dữ liệu tách được ở ngưỡng 3,5 giờ. Giữ biên ở 3,5 giờ và tăng dần độ dốc ww, cross-entropy là 0,2515 ở w=1w = 1, 0,1229 ở w=2w = 2, 0,0431 ở w=4w = 4 và 0,0061 ở w=8w = 8: càng dốc càng tốt, không có điểm dừng. Thí nghiệm dưới chạy gradient descent trên một tập dữ liệu tách được lớn hơn.

Số vòng lặp ∣w∣|w| khi λ=0\lambda = 0 ∣w∣|w| khi λ=0,01\lambda = 0{,}01
500 10,164 3,993
2 000 15,930 3,993
10 000 24,703 3,993
50 000 34,784 3,993

Không có regularization, chuẩn của ww tăng chậm dần nhưng không có dấu hiệu dừng. Về lý thuyết, trên dữ liệu tách được, gradient descent làm ∥w∥\|w\| tăng theo logarit của số vòng lặp, còn hướng của ww tiến dần tới hướng của siêu phẳng có lề lớn nhất (Soudry và cộng sự, 2018). Thêm thành phần regularization λ∥w∥2\lambda\|w\|^2 với λ=0,01\lambda = 0{,}01 làm hàm mất mát có cực tiểu duy nhất, và ∥w∥\|w\| đứng yên ở 3,993 từ vòng lặp thứ 500.

Hiện tượng này có mấy hệ quả thực tế. LogisticRegression của scikit-learn mặc định dùng regularization ℓ2\ell_2 với C=1,0C = 1{,}0, trong đó CC là nghịch đảo của cường độ regularization, và đây là lựa chọn có chủ đích. Khi thấy hệ số hồi quy logistic lớn bất thường, nên kiểm tra xem có đặc trưng nào làm lộ nhãn không, vì dữ liệu tách được hoàn toàn thường là dấu hiệu của rò rỉ dữ liệu. Và hiện tượng tương tự xuất hiện với mạng nơ-ron phân loại, là một trong các lý do dùng weight decay (xem Chương 6 của Học sâu).

6.6Các lỗi thường gặp#

Bảng dưới gom các phát biểu sai hay gặp về phân loại tuyến tính, cùng điều đúng tương ứng.

Phát biểu sai Thực tế
Hồi quy logistic là thuật toán hồi quy. Nó là thuật toán phân loại. Chữ "hồi quy" đến từ việc nó hồi quy log tỉ lệ cược theo xx (Mục 6.3).
Perceptron và SVM là hai loại mô hình khác nhau. Cả hai dùng mô hình tuyến tính. Khác biệt nằm ở hàm mất mát: hinge bằng 0 khi m≥1m \ge 1 thay vì m≥0m \ge 0, và khác biệt đó sinh ra khái niệm lề.
Softmax với KK lớp có KK vector trọng số độc lập. Chỉ K−1K - 1 vector là tự do, vì cộng cùng một vector vào tất cả không đổi kết quả (Mục 6.4).
Xác suất do hồi quy logistic đưa ra là xác suất thật. Chỉ đúng khi mô hình được hiệu chuẩn (calibrated) tốt. Regularization mạnh kéo xác suất về gần 0,5; lấy mẫu lại để cân bằng lớp làm xác suất lệch khỏi tỉ lệ thật. Kiểm tra bằng biểu đồ độ tin cậy (reliability diagram) và hiệu chỉnh bằng Platt scaling hoặc hồi quy isotonic trên tập xác thực.
Perceptron không hội tụ thì giảm tốc độ học. Trên dữ liệu không tách được, perceptron dao động với mọi tốc độ học (khởi tạo từ 0, tốc độ học chỉ nhân ww với một hằng số). Vấn đề nằm ở hàm mất mát.

6.7Tóm tắt#

Perceptron, hồi quy logistic và hồi quy softmax dùng chung mô hình tuyến tính và khác nhau ở hàm mất mát, viết được như hàm của lề m=y(w⊤x+b)m = y(w^\top x + b). Mất mát 0–1 không tối ưu trực tiếp được, nên được thay bằng các hàm lồi; hinge và logistic là chặn trên của nó, còn mất mát perceptron thì không. Với sáu sinh viên, perceptron và hinge chỉ phạt hai người bị đoán sai, còn logistic phạt cả những người được đoán đúng nhưng chưa đủ xa biên. Perceptron hội tụ sau không quá (R/γ)2(R/\gamma)^2 lần cập nhật trên dữ liệu tách được, nhưng dao động mãi trên dữ liệu chồng lấn. Hồi quy logistic dự đoán log tỉ lệ cược, có gradient 1nX⊤(p−y)\tfrac1n X^\top(p - y) cùng dạng với hồi quy tuyến tính, trong đó mỗi điểm kéo trọng số theo sai lệch của chính nó; softmax hai lớp trùng với nó tới sai số làm tròn. Trên dữ liệu tách được hoàn toàn, hồi quy logistic không có nghiệm hữu hạn và cần regularization.

Cả ba thuật toán trên đều học trực tiếp một biên quyết định. Chương 7 xét hai cách tiếp cận khác: không học tham số nào mà tra cứu những điểm gần nhất, hoặc mô tả dữ liệu của từng lớp rồi suy ngược bằng định lý Bayes.


7k láng giềng gần nhất và Naive Bayes#

Cả ba thuật toán ở Chương 6 đều học trực tiếp một biên quyết định tuyến tính. Trở lại sáu sinh viên và hỏi: một người ôn 3,6 giờ có đỗ không? Có hai cách trả lời rất khác với cách của Chương 6. Cách thứ nhất không học tham số nào cả: xem những người ôn số giờ gần 3,6 nhất đã đỗ hay trượt. Cách thứ hai mô tả số giờ ôn của nhóm đỗ và của nhóm trượt trông như thế nào, rồi dùng định lý Bayes để xem người này giống nhóm nào hơn. Hai cách này lần lượt dẫn tới k láng giềng gần nhất và Naive Bayes, và cách thứ hai còn cho thấy Naive Bayes, LDA và QDA thực ra là cùng một mô hình với ba ràng buộc khác nhau.

7.1Mô hình phân biệt và mô hình sinh#

Có hai cách để xây dựng một bộ phân loại theo xác suất. Mô hình phân biệt (discriminative model) mô hình hoá trực tiếp p(y∣x)p(y \mid x), tức xác suất của nhãn khi đã biết đầu vào. Hồi quy logistic ở Chương 6 là ví dụ điển hình; SVM và cây quyết định cũng được xếp vào nhóm này, dù chúng học thẳng biên quyết định mà không qua xác suất. Mô hình sinh (generative model) thì mô hình hoá p(x∣y)p(x \mid y) và p(y)p(y), tức mô tả dữ liệu của mỗi lớp trông như thế nào và mỗi lớp phổ biến tới đâu, rồi dùng định lý Bayes để tính p(y∣x)∝p(x∣y) p(y)p(y \mid x) \propto p(x \mid y)\,p(y). Naive Bayes, LDA và QDA thuộc nhóm này. Với sáu sinh viên, hồi quy logistic mô hình hoá thẳng xác suất đỗ theo số giờ ôn; một mô hình sinh thì mô tả số giờ ôn của những người đỗ, của những người trượt và tỉ lệ đỗ chung, rồi mới suy ra xác suất đỗ. Bảng dưới đặt hai cách cạnh nhau.

Mô hình hoá Ví dụ Thường phù hợp khi
Phân biệt p(y∣x)p(y \mid x) hồi quy logistic, SVM, cây quyết định nhiều dữ liệu, chỉ cần dự đoán nhãn
Sinh p(x∣y)p(x \mid y) và p(y)p(y) Naive Bayes, LDA, QDA ít dữ liệu, cần sinh mẫu mới hoặc xử lý giá trị thiếu

Mô hình sinh đặt nhiều giả định hơn về dữ liệu. Khi giả định đúng, nó cần ít dữ liệu hơn để đạt hiệu năng tốt; khi giả định sai, nó bị giới hạn bởi chính giả định đó. Ng và Jordan (2002) so sánh cặp Naive Bayes và hồi quy logistic và thấy đúng xu hướng này: Naive Bayes đạt tới mức sai số tiệm cận của nó nhanh hơn theo số mẫu, nhưng hồi quy logistic thường đạt mức sai số tiệm cận thấp hơn khi có đủ dữ liệu.

7.2Thuật toán k láng giềng gần nhất#

Định nghĩa 7.1 (k láng giềng gần nhất, k-NN)

Để phân loại một điểm mới xx, tìm kk điểm trong tập huấn luyện gần xx nhất theo một khoảng cách cho trước, rồi dự đoán lớp chiếm đa số trong kk điểm đó. Với hồi quy, dự đoán trung bình nhãn của kk điểm đó.

k-NN không có bước huấn luyện theo nghĩa thông thường: nó chỉ lưu lại dữ liệu. Vì vậy nó được gọi là phương pháp lười (lazy learning) và phi tham số, vì "tham số" chính là toàn bộ dữ liệu và tăng theo nn. Toàn bộ chi phí dồn vào lúc dự đoán: tìm láng giềng gần nhất bằng cách so với mọi điểm tốn O(nd)O(nd) cho mỗi truy vấn.

Với người ôn 3,6 giờ, láng giềng gần nhất là sinh viên 4, cách 0,4 giờ và đã trượt, nên 1-NN đoán trượt. Ba láng giềng gần nhất là sinh viên 4, 3 và 5, gồm hai người đỗ và một người trượt, nên 3-NN đoán đỗ; năm láng giềng gần nhất có ba người đỗ, nên 5-NN cũng đoán đỗ. Nhìn trên cả trục giờ ôn, 1-NN chia trục thành bốn đoạn: trượt dưới 2,5 giờ, đỗ từ 2,5 tới 3,5 giờ, trượt từ 3,5 tới 4,5 giờ, rồi đỗ từ 4,5 giờ trở lên. Đoạn trượt quanh 4 giờ tồn tại chỉ vì một người, sinh viên 4. Với k=3k = 3, biên chỉ còn một điểm ở 3,5 giờ, đúng chỗ hồi quy logistic đặt biên ở Chương 6.

Chất lượng của k-NN phụ thuộc vào ba lựa chọn. Lựa chọn quan trọng nhất là số láng giềng kk. Với k=1k = 1, biên quyết định bám theo từng điểm dữ liệu và rất gồ ghề: độ chệch thấp nhưng phương sai cao, vì chỉ cần một điểm nhiễu là đủ đổi dự đoán của cả vùng quanh nó, như sinh viên 4 ở trên. Tăng kk làm biên trơn hơn, phương sai giảm và độ chệch tăng; ở cực điểm k=nk = n, mọi dự đoán đều là lớp phổ biến nhất. Đây là đánh đổi độ chệch – phương sai ở dạng dễ thấy nhất, và kk được chọn bằng cross-validation (Mục 9.5). Lựa chọn thứ hai là khoảng cách. Khoảng cách Euclid là lựa chọn mặc định, nhưng nó chỉ có nghĩa khi các đặc trưng cùng thang đo: nếu một đặc trưng là thu nhập tính bằng đồng, cỡ hàng triệu, và một đặc trưng là tuổi, cỡ hàng chục, thì khoảng cách gần như chỉ phản ánh thu nhập. Lựa chọn thứ ba là cách bỏ phiếu: có thể cho mỗi láng giềng một phiếu như nhau, hoặc cho láng giềng gần hơn trọng số lớn hơn, chẳng hạn tỉ lệ với nghịch đảo khoảng cách.

Lưu ý

Luôn chuẩn hoá đặc trưng trước khi dùng k-NN hoặc bất kỳ phương pháp nào dựa trên khoảng cách (K-means ở Chương 15 cũng vậy). Tham số chuẩn hoá (trung bình, độ lệch chuẩn) chỉ ước lượng trên tập huấn luyện.

Dù đơn giản, k-NN có một bảo đảm lý thuyết khá mạnh. Gọi sai số Bayes R∗R^* là sai số nhỏ nhất mà bất kỳ bộ phân loại nào có thể đạt được trên phân phối dữ liệu.

Định lý 7.1 (Cover và Hart, 1967)

Với bài toán hai lớp, khi số điểm huấn luyện n→∞n \to \infty, sai số R1-NNR_{1\text{-NN}} của bộ phân loại 1 láng giềng gần nhất thoả

R∗≤R1-NN≤2R∗(1−R∗)≤2R∗.R^* \le R_{1\text{-NN}} \le 2R^*(1 - R^*) \le 2R^*.

Như vậy, với đủ dữ liệu, chỉ nhìn vào một láng giềng gần nhất đã cho sai số không quá hai lần sai số tốt nhất có thể. Nhưng "đủ dữ liệu" có thể là một lượng không tưởng khi số chiều lớn, vì một hiện tượng gọi là lời nguyền số chiều (curse of dimensionality). Giả sử dữ liệu phân bố đều trong hình lập phương đơn vị [0,1]d[0, 1]^d. Để một hình lập phương con quanh một điểm chứa được tỉ lệ ff số điểm dữ liệu, cạnh của nó phải dài f1/df^{1/d}. Với f=0,01f = 0{,}01, tức láng giềng là 1% dữ liệu gần nhất, cạnh cần dài 0,10{,}1 khi d=2d = 2, 0,630{,}63 khi d=10d = 10 và 0,9550{,}955 khi d=100d = 100. Ở 100 chiều, "vùng lân cận" chứa 1% dữ liệu trải gần hết chiều dài mỗi cạnh, tức láng giềng gần nhất không còn gần theo nghĩa thông thường. Một hệ quả liên quan là ở số chiều cao, khoảng cách từ một điểm tới điểm gần nhất và tới điểm xa nhất trở nên gần bằng nhau, nên thứ hạng theo khoảng cách mang ít thông tin.

Vì vậy k-NN trên dữ liệu thô chỉ hiệu quả ở số chiều thấp. Ở số chiều cao, người ta áp dụng nó sau khi giảm chiều (Chương 14), hoặc trong một không gian embedding đã được học sao cho khoảng cách phản ánh độ giống nhau về nghĩa. Tìm kiếm ảnh, tìm kiếm văn bản theo ngữ nghĩa và bước truy xuất trong hệ thống RAG đều là k-NN trong không gian embedding, kết hợp với các chỉ mục tìm kiếm gần đúng để tránh chi phí O(nd)O(nd) mỗi truy vấn. Giáo trình Ứng dụng LLM trình bày các chỉ mục đó.

7.3Naive Bayes#

Theo định lý Bayes, bộ phân loại tối ưu chọn lớp có hậu nghiệm lớn nhất:

y^=arg⁡max⁡k  p(y=k∣x)=arg⁡max⁡k  p(x∣y=k) p(y=k).\hat y = \arg\max_k \; p(y = k \mid x) = \arg\max_k \; p(x \mid y = k)\,p(y = k).

Ước lượng p(y=k)p(y = k) thì đơn giản: tỉ lệ các điểm thuộc lớp kk trong tập huấn luyện. Khó khăn nằm ở p(x∣y=k)p(x \mid y = k) khi xx có nhiều chiều. Với dd đặc trưng nhị phân, một phân phối tổng quát trên xx cần 2d−12^d - 1 tham số cho mỗi lớp, quá nhiều để ước lượng từ dữ liệu.

Định nghĩa 7.2 (Giả thiết Naive Bayes)

Các đặc trưng độc lập có điều kiện khi đã biết lớp:

p(x∣y=k)=∏j=1dp(xj∣y=k).p(x \mid y = k) = \prod_{j=1}^{d} p(x_j \mid y = k).

Với giả thiết này, thay vì một phân phối dd chiều ta chỉ cần ước lượng dd phân phối một chiều cho mỗi lớp, và số tham số giảm từ cấp số mũ xuống tuyến tính theo dd. Mỗi phân phối một chiều có thể là Bernoulli với đặc trưng nhị phân, như từ có xuất hiện trong thư hay không, là đa thức với số lần xuất hiện của từ, hoặc là Gauss với đặc trưng liên tục.

Cần chú ý chữ "có điều kiện". Giả thiết không nói các đặc trưng độc lập với nhau, mà nói chúng độc lập khi đã biết lớp. Trong một thư rác, từ "miễn phí" và từ "khuyến mãi" hay cùng xuất hiện, tức không độc lập; Naive Bayes giả định rằng trong riêng nhóm thư rác, biết thư có "miễn phí" không cho thêm thông tin gì về việc có "khuyến mãi". Giả thiết này gần như luôn sai với dữ liệu thật. Tuy vậy Naive Bayes vẫn thường phân loại tốt, vì để chọn đúng nhãn chỉ cần thứ tự của các p(y=k∣x)p(y = k \mid x) đúng, không cần giá trị của chúng đúng. Ngược lại, các xác suất do Naive Bayes đưa ra thường bị đẩy về gần 0 hoặc 1 quá mức, vì những bằng chứng tương quan với nhau bị đếm nhiều lần như thể độc lập, nên không nên dùng đầu ra của nó như xác suất đã hiệu chuẩn.

Ví dụ 7.1 (Lọc thư rác với hai từ)

Tập huấn luyện có 4 thư rác và 6 thư thường. Từ "miễn phí" xuất hiện trong 3 thư rác và 1 thư thường; từ "cuộc họp" xuất hiện trong 0 thư rác và 4 thư thường. Dùng mô hình Bernoulli và ước lượng mỗi xác suất bằng tần suất:

p(mieˆ˜n phıˊ∣raˊc)=34,p(mieˆ˜n phıˊ∣thường)=16,p(cuộc họp∣raˊc)=0,p(cuộc họp∣thường)=46.\begin{aligned} p(\text{miễn phí} \mid \text{rác}) &= \tfrac34, & p(\text{miễn phí} \mid \text{thường}) &= \tfrac16, \\ p(\text{cuộc họp} \mid \text{rác}) &= 0, & p(\text{cuộc họp} \mid \text{thường}) &= \tfrac46. \end{aligned}

Mô hình Bernoulli tính cả những từ vắng mặt: thư không chứa "cuộc họp" nhận thừa số 1−p(cuộc họp∣lớp)1 - p(\text{cuộc họp} \mid \text{lớp}). Một thư mới chỉ chứa "miễn phí" mà không chứa "cuộc họp". Điểm của lớp rác là 0,4×34×1=0,30{,}4 \times \tfrac34 \times 1 = 0{,}3, điểm của lớp thường là 0,6×16×13≈0,0330{,}6 \times \tfrac16 \times \tfrac13 \approx 0{,}033, nên p(raˊc∣x)=0,9p(\text{rác} \mid x) = 0{,}9. Một thư khác chứa cả hai từ thì điểm của lớp rác là 0,4×34×0=00{,}4 \times \tfrac34 \times 0 = 0, và p(raˊc∣x)=0p(\text{rác} \mid x) = 0.

Kết quả thứ hai không ổn. Vì Naive Bayes nhân các xác suất, một thừa số bằng 0 làm cả tích bằng 0: mọi thư chứa "cuộc họp" sẽ có xác suất là rác bằng đúng 0, bất kể nó chứa bao nhiêu từ đáng ngờ khác, chỉ vì "cuộc họp" chưa từng xuất hiện trong 4 thư rác của tập huấn luyện. Một từ chưa từng gặp trong một lớp đủ để phủ quyết mọi bằng chứng còn lại. Cách khắc phục là cộng thêm một lượng nhỏ vào mọi ô đếm. Với đặc trưng rời rạc có VV giá trị,

p(xj=v∣y=k)=Nkjv+αNk+αV,p(x_j = v \mid y = k) = \frac{N_{kjv} + \alpha}{N_k + \alpha V},

trong đó NkjvN_{kjv} là số lần đặc trưng jj nhận giá trị vv trong lớp kk, và NkN_k là số điểm của lớp kk. Với α=1\alpha = 1 ta có làm trơn Laplace; với 0<α<10 < \alpha < 1, cách làm gọi là làm trơn Lidstone. Mục 10.4 chỉ ra rằng công thức này là một ước lượng MAP với tiên nghiệm Dirichlet.

Tính lại Ví dụ 7.1 với α=1\alpha = 1; mỗi từ là đặc trưng nhị phân nên V=2V = 2:

p(mieˆ˜n phıˊ∣raˊc)=3+14+2=0,667,p(mieˆ˜n phıˊ∣thường)=1+16+2=0,25,p(cuộc họp∣raˊc)=0+14+2=0,167,p(cuộc họp∣thường)=4+16+2=0,625.\begin{aligned} p(\text{miễn phí} \mid \text{rác}) &= \tfrac{3+1}{4+2} = 0{,}667, \\ p(\text{miễn phí} \mid \text{thường}) &= \tfrac{1+1}{6+2} = 0{,}25, \\ p(\text{cuộc họp} \mid \text{rác}) &= \tfrac{0+1}{4+2} = 0{,}167, \\ p(\text{cuộc họp} \mid \text{thường}) &= \tfrac{4+1}{6+2} = 0{,}625. \end{aligned}

Với thư chứa cả hai từ, điểm của lớp rác giờ là 0,4×0,667×0,167=0,04440{,}4 \times 0{,}667 \times 0{,}167 = 0{,}0444 và điểm của lớp thường là 0,6×0,25×0,625=0,09380{,}6 \times 0{,}25 \times 0{,}625 = 0{,}0938. Chuẩn hoá, p(raˊc∣x)=0,0444/(0,0444+0,0938)≈0,32p(\text{rác} \mid x) = 0{,}0444/(0{,}0444 + 0{,}0938) \approx 0{,}32: thư được xếp là thư thường, nhưng bằng chứng từ "miễn phí" vẫn được tính. Với thư chỉ chứa "miễn phí", điểm của hai lớp là 0,4×0,667×0,833=0,2220{,}4 \times 0{,}667 \times 0{,}833 = 0{,}222 và 0,6×0,25×0,375=0,0560{,}6 \times 0{,}25 \times 0{,}375 = 0{,}056, cho p(raˊc∣x)≈0,80p(\text{rác} \mid x) \approx 0{,}80 thay vì 0,9: sau khi làm trơn, các ước lượng bớt cực đoan hơn.

Lưu ý (Tính trong không gian logarit)

Tích của hàng nghìn xác suất nhỏ nhanh chóng nhỏ hơn số dương nhỏ nhất biểu diễn được bằng số thực dấu phẩy động và bị làm tròn về 0. Các cài đặt thực tế luôn cộng logarit thay vì nhân xác suất: log⁡p(y=k)+∑jlog⁡p(xj∣y=k)\log p(y=k) + \sum_j \log p(x_j \mid y = k).

7.4Naive Bayes, LDA và QDA#

Khi đặc trưng liên tục, lựa chọn tự nhiên cho p(x∣y=k)p(x \mid y = k) là phân phối Gauss nhiều chiều N(μk,Σk)\mathcal{N}(\mu_k, \Sigma_k). Mô hình này gọi chung là phân tích biệt thức Gauss (Gaussian discriminant analysis). Ba thuật toán quen thuộc là ba cách ràng buộc các ma trận hiệp phương sai Σk\Sigma_k, như bảng dưới cho thấy.

Mô hình Ràng buộc trên Σk\Sigma_k Biên quyết định Độ chính xác đo được
Naive Bayes Gauss riêng từng lớp, đường chéo bậc hai 0,8550
LDA (Linear Discriminant Analysis) dùng chung cho mọi lớp, đầy đủ tuyến tính 0,8550
QDA (Quadratic Discriminant Analysis) riêng từng lớp, đầy đủ bậc hai 0,8600
Naive Bayes, Σ\Sigma đường chéo dùng chung dùng chung, đường chéo tuyến tính 0,8550

Dòng đầu thể hiện ý chính của mục này: với đặc trưng Gauss, giả thiết độc lập có điều kiện của Naive Bayes tương đương với việc ép Σk\Sigma_k thành ma trận đường chéo. Lý do là một phân phối Gauss nhiều chiều có ma trận hiệp phương sai đường chéo phân tích được thành tích các phân phối Gauss một chiều, và ngược lại. Naive Bayes Gauss vì vậy không phải một thuật toán riêng biệt, mà là bộ phân loại Gauss với một ràng buộc cụ thể.

Thí nghiệm kiểm tra điều này bằng hai cài đặt độc lập: một bên nhân các mật độ Gauss một chiều lại với nhau đúng như định nghĩa Naive Bayes, không đụng tới ma trận hiệp phương sai; một bên dùng mật độ Gauss nhiều chiều với Σ\Sigma đường chéo.

Văn bản
sai khac lon nhat cua hieu diem phan biet: 1.222e-08
hai mo hinh du bao giong nhau o 100.0% so mau
ham quyet dinh cua LDA co TUYEN TINH khong? sai so khop tuyen tinh = 4.441e-15  -> co
con QDA thi sao? sai so khop tuyen tinh = 1.780e+01 -> khong, no bac hai

Hai cài đặt cho hàm phân biệt lệch nhau 1,2×10−81{,}2 \times 10^{-8}, giới hạn bởi lượng nhỏ thêm vào đường chéo để nghịch đảo ma trận ổn định, và dự đoán trùng nhau trên 100% số mẫu.

Hai dòng cuối kiểm chứng một kết quả lý thuyết. Viết logarit tỉ số hậu nghiệm của hai lớp:

log⁡p(y=1∣x)p(y=0∣x)=−12(x−μ1)⊤Σ1−1(x−μ1)+12(x−μ0)⊤Σ0−1(x−μ0)+ha˘ˋng soˆˊ.\begin{aligned} \log\frac{p(y=1 \mid x)}{p(y=0 \mid x)} &= -\tfrac12 (x-\mu_1)^\top\Sigma_1^{-1}(x-\mu_1) \\ &\quad + \tfrac12 (x-\mu_0)^\top\Sigma_0^{-1}(x-\mu_0) + \text{hằng số}. \end{aligned}

Khai triển hai dạng toàn phương, số hạng bậc hai theo xx là −12x⊤(Σ1−1−Σ0−1) x-\tfrac12 x^\top(\Sigma_1^{-1} - \Sigma_0^{-1})\,x. Nếu hai lớp dùng chung ma trận hiệp phương sai, Σ1=Σ0=Σ\Sigma_1 = \Sigma_0 = \Sigma, số hạng này triệt tiêu và phần còn lại tuyến tính theo xx:

log⁡p(y=1∣x)p(y=0∣x)=(μ1−μ0)⊤Σ−1x+ha˘ˋng soˆˊ.\log\frac{p(y=1 \mid x)}{p(y=0 \mid x)} = (\mu_1 - \mu_0)^\top \Sigma^{-1} x + \text{hằng số}.

Vì vậy LDA có biên quyết định tuyến tính: trong thí nghiệm, khớp hàm quyết định của LDA bằng một hàm tuyến tính cho sai số 4,4×10−154{,}4 \times 10^{-15}. Khi mỗi lớp có ma trận riêng, số hạng bậc hai còn lại và biên là mặt bậc hai: khớp tuyến tính cho sai số 17,8.

Công thức trên còn cho thấy hậu nghiệm của LDA có dạng p(y=1∣x)=σ(w⊤x+b)p(y = 1 \mid x) = \sigma(w^\top x + b), đúng dạng của hồi quy logistic. Hai phương pháp cho ra cùng họ hàm nhưng ước lượng tham số theo hai cách: LDA ước lượng μk\mu_k và Σ\Sigma rồi suy ra ww, còn hồi quy logistic tối ưu trực tiếp ww trên p(y∣x)p(y \mid x). Khi dữ liệu đúng là Gauss với Σ\Sigma chung, LDA dùng dữ liệu hiệu quả hơn; khi giả định sai, hồi quy logistic thường bền vững hơn. Đây là một trường hợp cụ thể của so sánh giữa mô hình sinh và mô hình phân biệt ở Mục 7.1.

Sáu sinh viên cho thấy khác biệt đó bằng số. Gọi đỗ là lớp 1 và trượt là lớp 0. Với một đặc trưng là số giờ ôn, trung bình của nhóm trượt là μ0=7/3≈2,33\mu_0 = 7/3 \approx 2{,}33 giờ, của nhóm đỗ là μ1=14/3≈4,67\mu_1 = 14/3 \approx 4{,}67 giờ, và phương sai chung ước lượng bằng hợp lý cực đại là σ2=14/9≈1,56\sigma^2 = 14/9 \approx 1{,}56. Ở một chiều, hệ số của xx trong công thức trên là (μ1−μ0)/σ2=(7/3)/(14/9)=1,5(\mu_1 - \mu_0)/\sigma^2 = (7/3)/(14/9) = 1{,}5. Hằng số là −(μ12−μ02)/(2σ2)=−5,25-(\mu_1^2 - \mu_0^2)/(2\sigma^2) = -5{,}25, cộng thêm log⁡(π1/π0)\log(\pi_1/\pi_0) với πk\pi_k là tỉ lệ của lớp kk, ở đây bằng 0 vì hai nhóm đông như nhau. Vậy log tỉ lệ cược của LDA là 1,5x−5,251{,}5x - 5{,}25. Biên quyết định nằm ở 3,5 giờ, trùng với hồi quy logistic ở Chương 6, nhưng độ dốc 1,5 lớn hơn độ dốc 1,214 của hồi quy logistic: với người ôn 3 giờ, LDA cho xác suất đỗ 0,321, còn hồi quy logistic cho 0,353. Hai nhóm ở đây tình cờ có cùng phương sai 14/914/9, nên QDA cho đúng kết quả của LDA; và với một đặc trưng duy nhất, ma trận hiệp phương sai nào cũng là đường chéo, nên Naive Bayes Gauss cũng cho cùng kết quả.

Về chi phí, QDA cần ước lượng KK ma trận hiệp phương sai, mỗi ma trận có d(d+1)/2d(d+1)/2 tham số, trong khi LDA chỉ cần một ma trận. Với d=100d = 100 và K=10K = 10, QDA cần khoảng 50 000 tham số cho các ma trận hiệp phương sai, LDA cần khoảng 5 000 và Naive Bayes Gauss chỉ cần 1 000. Khi nn nhỏ, QDA dễ overfitting và ma trận ước lượng có thể suy biến.

7.5Tóm tắt#

Mô hình phân biệt học trực tiếp p(y∣x)p(y \mid x), còn mô hình sinh học p(x∣y)p(x \mid y) và p(y)p(y) rồi suy ngược bằng định lý Bayes; mô hình sinh cần ít dữ liệu hơn khi giả định đúng nhưng bị giới hạn khi giả định sai. k-NN không học tham số mà tra cứu các điểm gần nhất: với sáu sinh viên, 1-NN tạo ra một đoạn trượt quanh 4 giờ chỉ vì một người, còn 3-NN cho lại biên 3,5 giờ. Nó cần chuẩn hoá đặc trưng, chọn kk theo đánh đổi độ chệch – phương sai, và mất tác dụng ở số chiều cao vì lời nguyền số chiều. Naive Bayes giả định các đặc trưng độc lập khi đã biết lớp, nên chỉ cần ước lượng các phân phối một chiều; nó vẫn phân loại tốt dù giả định sai, nhưng cho xác suất quá tự tin, và nếu không làm trơn Laplace thì một số đếm bằng 0 đủ để phủ quyết mọi bằng chứng khác. Với đặc trưng Gauss, Naive Bayes, LDA và QDA là cùng một mô hình với ba ràng buộc trên ma trận hiệp phương sai, và ma trận dùng chung làm biên của LDA tuyến tính; trên sáu sinh viên, LDA đặt biên ở đúng chỗ hồi quy logistic đặt, chỉ khác độ dốc.

Đến đây ta đã có năm bộ phân loại. Câu hỏi tự nhiên tiếp theo là làm sao so sánh chúng, và câu hỏi đó khó hơn vẻ ngoài: Ví dụ 3.3 đã cho thấy một xét nghiệm "đúng 99%" có thể sai ở 5 trên 6 ca dương tính. Chương 8 bàn về cách đánh giá một mô hình phân loại.


8Đánh giá mô hình phân loại#

Một mô hình chỉ tốt hay xấu so với một thước đo, và chọn sai thước đo thì so sánh mô hình cũng sai theo. Ta dùng một ví dụ nhỏ suốt chương: trong 1 000 giao dịch thẻ có 50 giao dịch gian lận, và một mô hình đánh dấu 60 giao dịch là đáng ngờ, trong đó 40 giao dịch đúng là gian lận. Mô hình này tốt tới đâu? Thước đo quen thuộc nhất là độ chính xác, và nó đặc biệt dễ đánh lừa khi lớp cần quan tâm là lớp hiếm, mà trong thực tế lớp cần quan tâm thường là lớp hiếm: giao dịch gian lận, thiết bị sắp hỏng, bệnh hiếm gặp. Ta bắt đầu bằng việc xem độ chính xác nói gì về mô hình này và che đi điều gì, rồi xây dựng các thước đo thay thế, và kết thúc bằng những lỗi chia dữ liệu làm mọi thước đo mất ý nghĩa.

8.1Hạn chế của độ chính xác#

Độ chính xác (accuracy) là tỉ lệ điểm được phân loại đúng. Mô hình trong ví dụ bỏ sót 10 vụ gian lận và đánh dấu nhầm 20 giao dịch hợp lệ, nên phân loại đúng 970 giao dịch, độ chính xác 970/1000=0,97970/1000 = 0{,}97. Một mô hình không làm gì cả, luôn trả lời "không gian lận", phân loại đúng cả 950 giao dịch hợp lệ và đạt 950/1000=0,95950/1000 = 0{,}95. Một bên phát hiện được 40 trong 50 vụ gian lận, bên kia không phát hiện được vụ nào, vậy mà độ chính xác của hai bên chỉ chênh nhau 2 điểm phần trăm. Thước đo này dễ hiểu nhưng có một điểm yếu lớn: nó không phân biệt các loại lỗi. Bỏ sót một vụ gian lận và chặn nhầm một giao dịch hợp lệ đều chỉ là một lỗi, và khi lớp dương chỉ chiếm 5%, đoán âm cho tất cả đã đúng 95%.

Khi lớp dương còn hiếm hơn, điểm yếu này đủ để đảo ngược kết luận.

Thí nghiệm dựng 20 000 điểm dữ liệu, trong đó 0,98% thuộc lớp dương, và một bộ phân loại cho điểm số cao hơn một chút với lớp dương. Bảng dưới so sánh bộ phân loại này ở ba ngưỡng với một bộ phân loại luôn đoán lớp âm.

Bộ phân loại Độ chính xác Precision Recall F1
Luôn đoán lớp âm 0,9902 không xác định 0,0000 0,0000
Ngưỡng 2,6 0,9900 0,4928 0,5204 0,5062
Ngưỡng 1,0 0,8408 0,0559 0,9592 0,1056
Ngưỡng −1,0 0,1699 0,0117 1,0000 0,0231

Bộ phân loại luôn đoán lớp âm không phát hiện được ca dương nào, nhưng có độ chính xác 0,9902, cao hơn bộ phân loại ở ngưỡng 2,6 (0,9900) vốn phát hiện được hơn một nửa số ca dương. Nếu chọn mô hình theo độ chính xác, ta sẽ chọn mô hình vô dụng. Muốn phân biệt hai mô hình này, thước đo phải tách được các loại lỗi khác nhau, và việc tách đó bắt đầu từ ma trận nhầm lẫn.

8.2Ma trận nhầm lẫn, precision và recall#

Với bài toán hai lớp, mỗi dự đoán rơi vào một trong bốn ô, tuỳ theo nhãn thật và nhãn dự đoán. Coi gian lận là lớp dương, bốn ô của ví dụ giao dịch là:

Dự đoán dương Dự đoán âm
Thật sự dương TP (dương thật) = 40 FN (âm giả) = 10
Thật sự âm FP (dương giả) = 20 TN (âm thật) = 930

Bảng này gọi là ma trận nhầm lẫn (confusion matrix), và các thước đo phổ biến đều tính từ bốn ô của nó. Độ chính xác chỉ dùng tổng hai ô trên đường chéo, (TP+TN)/n(TP + TN)/n, nên không biết 30 lỗi còn lại nằm ở ô nào. Các thước đo dưới đây nhìn vào từng ô.

Định nghĩa 8.1 (Precision, recall, F1)

precision=TPTP+FP,recall=TPTP+FN,\text{precision} = \frac{TP}{TP + FP}, \qquad \text{recall} = \frac{TP}{TP + FN},

F1=2⋅precision⋅recallprecision+recall.F_1 = \frac{2\cdot \text{precision}\cdot\text{recall}}{\text{precision} + \text{recall}}.

Recall còn gọi là độ nhạy (sensitivity) hoặc tỉ lệ dương thật (true positive rate, TPR). Tỉ lệ dương giả (false positive rate) là FPR=FP/(FP+TN)\text{FPR} = FP/(FP + TN).

Người mới hay nhầm precision với recall. Cách nhớ đúng bản chất là đặt mỗi thước đo thành một câu hỏi. Precision trả lời câu hỏi: trong những trường hợp mô hình báo là dương, bao nhiêu phần đúng là dương? Mẫu số của nó là những gì mô hình khẳng định. Recall trả lời câu hỏi: trong những trường hợp thật sự dương, mô hình phát hiện được bao nhiêu phần? Mẫu số của nó là những gì thực tế có.

Ví dụ 8.1

Trên 1 000 giao dịch có 50 giao dịch gian lận, mô hình ở trên cho TP = 40, FN = 10, FP = 20, TN = 930. Precision =40/60=0,667= 40/60 = 0{,}667: hai phần ba số giao dịch bị đánh dấu đúng là gian lận. Recall =40/50=0,80= 40/50 = 0{,}80: mô hình phát hiện được bốn phần năm số vụ gian lận. Từ hai số đó, F1=2⋅0,667⋅0,8/(0,667+0,8)≈0,727F_1 = 2 \cdot 0{,}667 \cdot 0{,}8/(0{,}667 + 0{,}8) \approx 0{,}727. Mô hình luôn đoán "không gian lận" có recall bằng 0 và precision không xác định, vì nó không đánh dấu giao dịch nào. Độ chính xác 0,97 và 0,95 gần như không phân biệt được hai mô hình, còn recall 0,80 và 0 thì tách hẳn chúng ra.

Precision và recall đánh đổi nhau qua ngưỡng quyết định. Muốn bắt nốt 10 vụ gian lận còn sót trong ví dụ giao dịch, ta phải hạ ngưỡng, và ngưỡng thấp hơn cũng đánh dấu thêm những giao dịch hợp lệ có điểm số cao. Bảng ở Mục 8.1 cho thấy khi hạ ngưỡng từ 2,6 xuống 1,0 rồi −1,0, recall tăng từ 0,52 lên 0,96 rồi 1,00, còn precision giảm từ 0,49 xuống 0,056 rồi 0,012. Không có ngưỡng nào tốt nhất cho cả hai, và chọn ngưỡng là một quyết định dựa trên chi phí của từng loại lỗi: bỏ sót một ca gian lận tốn bao nhiêu so với chặn nhầm một giao dịch hợp lệ.

F1F_1 là trung bình điều hoà của precision và recall. Trung bình điều hoà bị kéo mạnh về phía giá trị nhỏ hơn, nên F1F_1 chỉ cao khi cả hai cùng cao: ở ngưỡng −1,0, recall bằng 1,00 nhưng F1F_1 chỉ bằng 0,023. Khi hai loại lỗi có chi phí khác nhau, ta dùng dạng tổng quát

Fβ=(1+β2)⋅precision⋅recallβ2⋅precision+recall,F_\beta = \frac{(1 + \beta^2)\cdot\text{precision}\cdot\text{recall}}{\beta^2\cdot\text{precision} + \text{recall}},

trong đó β>1\beta > 1 coi recall quan trọng hơn precision, như F2F_2 trong sàng lọc bệnh, còn β<1\beta < 1 coi precision quan trọng hơn. Ở ví dụ giao dịch, recall 0,80 cao hơn precision 0,667, nên F2≈0,769F_2 \approx 0{,}769 cao hơn F1F_1, còn F0,5≈0,690F_{0{,}5} \approx 0{,}690 thấp hơn: cùng một mô hình được chấm cao hơn khi người dùng coi trọng việc không bỏ sót.

8.3Đường cong ROC và đường cong precision–recall#

Mỗi ngưỡng cho một cặp giá trị thước đo. Để đánh giá mô hình mà không phụ thuộc vào một ngưỡng cụ thể, ta quét mọi ngưỡng và vẽ đường cong. Đường cong ROC vẽ TPR (recall) theo FPR khi ngưỡng thay đổi. Diện tích dưới đường cong, ROC-AUC, bằng xác suất một điểm dương chọn ngẫu nhiên được mô hình cho điểm số cao hơn một điểm âm chọn ngẫu nhiên; bộ phân loại ngẫu nhiên có ROC-AUC bằng 0,5, bộ phân loại hoàn hảo có ROC-AUC bằng 1.

Ví dụ 8.2 (ROC-AUC của sáu sinh viên)

Ở Ví dụ 6.1, hồi quy logistic cho ba người đỗ các xác suất 0,378; 0,818; 0,924 và cho ba người trượt 0,076; 0,182; 0,622. Ghép mỗi người đỗ với mỗi người trượt được 9 cặp. Người đỗ được cho điểm cao hơn ở 8 cặp; cặp duy nhất bị xếp ngược là sinh viên 3 (0,378) với sinh viên 4 (0,622). Vậy ROC-AUC =8/9≈0,889= 8/9 \approx 0{,}889. Quét ngưỡng từ cao xuống thấp cũng ra con số đó: hai người đầu danh sách đều đỗ nên TPR lên 2/3 trong khi FPR vẫn bằng 0; người thứ ba trượt nên FPR lên 1/3; người thứ tư đỗ nên TPR lên 1; hai người cuối trượt. Diện tích dưới đường bậc thang này là 13⋅23+23⋅1=89{\tfrac13 \cdot \tfrac23 + \tfrac23 \cdot 1 = \tfrac89}.

ROC-AUC chỉ phụ thuộc vào thứ tự của các điểm số chứ không phụ thuộc vào giá trị của chúng: mô hình tối ưu ở Mục 6.3, với độ dốc 1,214, xếp sáu sinh viên theo đúng thứ tự trên nên cũng có ROC-AUC bằng 8/9.

Đường cong precision–recall (PR) vẽ precision theo recall, và diện tích dưới nó, PR-AUC, thường tính bằng average precision. PR-AUC của bộ phân loại ngẫu nhiên bằng tỉ lệ lớp dương trong dữ liệu. Với sáu sinh viên, average precision lấy trung bình precision tại vị trí của từng người đỗ trong danh sách xếp theo điểm số, tức 1, 1 và 3/4, được 0,917, so với mốc 0,5 vì một nửa số sinh viên đỗ.

Hình 6
Hình 6. Cùng một bộ phân loại trên cùng dữ liệu mất cân bằng. Trái: đường cong ROC. Phải: đường cong precision–recall.

Trên dữ liệu của Mục 8.1, hai con số này là

ROC-AUC=0,9715,PR-AUC=0,4931.\text{ROC-AUC} = 0{,}9715, \qquad \text{PR-AUC} = 0{,}4931.

Chúng chênh nhau nhiều vì mẫu số của FPR là toàn bộ lớp âm:

FPR=FPFP+TN.\text{FPR} = \frac{FP}{FP + TN}.

Ví dụ giao dịch cho thấy cơ chế này ở quy mô nhỏ. Ở đó FPR=20/950≈0,021\text{FPR} = 20/950 \approx 0{,}021. Thêm 20 dương giả nữa, FPR chỉ tăng lên 40/950≈0,04240/950 \approx 0{,}042, một bước dịch nhỏ trên trục hoành của đồ thị ROC, nhưng precision giảm từ 40/60=0,66740/60 = 0{,}667 xuống 40/80=0,540/80 = 0{,}5. Lớp âm trong thí nghiệm có 19 804 điểm, nên thêm 100 dương giả chỉ làm FPR tăng khoảng 0,005, gần như không thấy trên đồ thị ROC. Cũng 100 dương giả đó có thể làm precision giảm mạnh, vì mẫu số của precision chỉ gồm những điểm được báo là dương, và số điểm này nhỏ.

Để đọc đúng hai con số, cần so với mốc của bộ phân loại ngẫu nhiên. ROC-AUC = 0,9715 được so với mốc 0,5. PR-AUC = 0,4931 được so với mốc bằng tỉ lệ lớp dương, tức 0,0100: mô hình tốt hơn đoán ngẫu nhiên khoảng 49 lần, nhưng vẫn còn nhiều dương giả so với số ca dương thật.

Từ đó có thể chọn thước đo theo bài toán. Khi hai lớp tương đối cân bằng và cả hai đều quan trọng, ROC-AUC là thước đo phù hợp. Khi lớp dương hiếm và điều cần quan tâm là chất lượng của các cảnh báo dương, PR-AUC phản ánh thực tế tốt hơn, vì ROC-AUC có thể rất cao trong khi phần lớn cảnh báo là sai (Davis và Goadrich, 2006; Saito và Rehmsmeier, 2015).

8.4Đánh giá bài toán nhiều lớp#

Với K>2K > 2 lớp, precision, recall và F1 được tính cho từng lớp theo cách "lớp đó so với tất cả các lớp còn lại", rồi gộp lại theo một trong ba cách trong bảng dưới.

Cách gộp Tính thế nào Khi nào dùng
Macro tính thước đo cho từng lớp rồi lấy trung bình không trọng số mọi lớp quan trọng như nhau, kể cả lớp hiếm
Micro cộng dồn TP, FP, FN của mọi lớp rồi tính một lần quan tâm hiệu năng tổng thể; lớp đông chi phối kết quả
Weighted trung bình có trọng số theo số điểm của mỗi lớp cân bằng giữa hai cách trên, nhưng che khuất lớp hiếm

Trở lại ba mức kết quả ở Mục 6.4: trượt, đỗ và đỗ loại giỏi, gọi tắt là giỏi. Một mô hình phân loại 100 sinh viên, trong đó 20 người trượt, 70 người đỗ và 10 người giỏi, cho ma trận nhầm lẫn dưới đây; mỗi hàng là kết quả thật, mỗi cột là dự đoán.

Dự đoán trượt Dự đoán đỗ Dự đoán giỏi
Thật sự trượt 14 6 0
Thật sự đỗ 5 62 3
Thật sự giỏi 0 6 4

Mô hình đúng ở 14+62+4=8014 + 62 + 4 = 80 người, độ chính xác 0,80. Tính precision, recall và F1 cho từng lớp theo cách lớp đó so với phần còn lại, chẳng hạn precision của lớp trượt là 14 người trượt thật trong 19 người bị đoán trượt:

Lớp Precision Recall F1
Trượt 14/19 = 0,737 14/20 = 0,700 0,718
Đỗ 62/74 = 0,838 62/70 = 0,886 0,861
Giỏi 4/7 = 0,571 4/10 = 0,400 0,471

Lớp giỏi chỉ được nhận ra 4 trong 10 người. Macro-F1 là trung bình không trọng số của cột F1, bằng 0,683, và bị lớp giỏi kéo xuống. Weighted-F1 lấy trọng số theo số người của mỗi lớp, 20, 70 và 10, nên bằng 0,793, sát độ chính xác và gần như không cho thấy lớp giỏi đang bị bỏ sót. Micro-F1 cộng dồn ba lớp được 80 dương thật, 20 dương giả và 20 âm giả, nên bằng 80/100 = 0,80, đúng bằng độ chính xác.

Sự trùng nhau cuối cùng không phải ngẫu nhiên. Với bài toán phân loại đơn nhãn nhiều lớp, tức mỗi điểm thuộc đúng một lớp, micro-F1 bằng đúng độ chính xác. Lý do là mỗi dự đoán sai đồng thời là một dương giả của lớp được dự đoán và một âm giả của lớp thật, nên tổng FP bằng tổng FN, kéo theo micro-precision bằng micro-recall bằng tỉ lệ dự đoán đúng. Báo cáo micro-F1 cho bài toán đơn nhãn vì vậy không cung cấp thêm thông tin gì so với độ chính xác.

8.5Chia dữ liệu và rò rỉ dữ liệu#

Mọi thước đo ở chương này chỉ có ý nghĩa nếu tập kiểm tra phản ánh đúng dữ liệu mà mô hình sẽ gặp khi sử dụng. Rò rỉ dữ liệu (data leakage) là khi thông tin không có ở thời điểm dự đoán lọt vào quá trình huấn luyện, làm kết quả đánh giá tốt hơn thực tế. Có ba dạng rò rỉ hay gặp nhất.

Dạng thứ nhất là chuẩn hoá trước khi chia dữ liệu. Tính trung bình và độ lệch chuẩn trên toàn bộ dữ liệu rồi mới chia tập là đã đưa thông tin của tập kiểm tra vào tập huấn luyện. Với bốn căn hộ ở Chương 4, nếu giữ căn 100 m² làm dữ liệu kiểm tra thì trung bình dùng để chuẩn hoá phải tính trên ba căn còn lại, bằng 60 m², chứ không phải 70 m² của cả bốn căn. Mọi bước tiền xử lý có tham số, như chuẩn hoá, điền giá trị thiếu hay chọn đặc trưng, chỉ được khớp trên tập huấn luyện, rồi áp dụng nguyên vẹn cho tập kiểm tra.

Dạng thứ hai là chia ngẫu nhiên dữ liệu có yếu tố thời gian. Với bài toán dự báo, mô hình chỉ được dùng quá khứ để dự đoán tương lai, nhưng chia ngẫu nhiên cho phép nó học từ các điểm nằm sau thời điểm cần dự đoán. Cách đúng là chia theo thời gian: huấn luyện trên giai đoạn trước, kiểm tra trên giai đoạn sau. Một mô hình phát hiện gian lận sẽ chạy trên giao dịch của tháng tới cần được kiểm tra trên một tháng nằm sau toàn bộ dữ liệu huấn luyện, vì kiểu gian lận thay đổi theo thời gian.

Dạng thứ ba là chia ngẫu nhiên khi dữ liệu có nhóm. Nếu một bệnh nhân có nhiều lần khám, một chủ thẻ có nhiều giao dịch, hoặc một người dùng có nhiều phiên, các bản ghi của cùng một người rất giống nhau. Chia ngẫu nhiên theo bản ghi khiến mô hình được kiểm tra trên chính những người nó đã thấy, nên cần chia theo nhóm, tức theo bệnh nhân, theo chủ thẻ hay theo người dùng.

Cả ba lỗi làm kết quả đánh giá tốt lên giả tạo, và thường chỉ bị phát hiện khi mô hình đã được đưa vào sử dụng. Chương 4 của MLOps trình bày cách bảo đảm đặc trưng được tính đúng theo thời điểm để tránh dạng rò rỉ thứ hai.

8.6Tóm tắt#

Độ chính xác không phân biệt các loại lỗi: trên 1 000 giao dịch có 50 vụ gian lận, một mô hình phát hiện được 40 vụ chỉ hơn mô hình không làm gì 2 điểm phần trăm, và trên dữ liệu có 0,98% lớp dương, mô hình luôn đoán lớp âm còn đạt độ chính xác cao hơn một mô hình phát hiện được nửa số ca dương. Ma trận nhầm lẫn tách bốn loại kết quả; precision hỏi trong những gì mô hình báo dương bao nhiêu là đúng, còn recall hỏi trong những gì thật sự dương mô hình phát hiện được bao nhiêu, và hai thước đo đánh đổi nhau qua ngưỡng. ROC-AUC là xác suất một điểm dương được xếp trên một điểm âm, bằng 8/9 với sáu sinh viên, và chỉ phụ thuộc vào thứ tự điểm số. Nó có thể rất cao trên dữ liệu mất cân bằng, như 0,9715 so với PR-AUC 0,4931 trong thí nghiệm, vì mẫu số của FPR là toàn bộ lớp âm; khi lớp dương hiếm, PR-AUC phản ánh thực tế tốt hơn. Với nhiều lớp, macro-F1 làm lộ ra lớp hiếm bị bỏ sót, weighted-F1 che nó đi, còn micro-F1 của bài toán đơn nhãn chỉ là độ chính xác. Mọi con số chỉ có ý nghĩa khi dữ liệu được chia đúng, không rò rỉ qua chuẩn hoá, thời gian hay nhóm.

Thước đo đúng cho biết mô hình tốt tới đâu trên dữ liệu mới. Chương 9 xét lý do một mô hình có thể rất tốt trên dữ liệu huấn luyện mà kém trên dữ liệu mới, và cách kiểm soát điều đó.


9Overfitting và regularization#

Chương 8 nhấn mạnh việc đo trên dữ liệu mà mô hình chưa thấy. Lý do của yêu cầu đó là hiện tượng quan trọng nhất của học máy: một mô hình có thể khớp dữ liệu huấn luyện rất tốt mà vẫn dự đoán dữ liệu mới rất tệ. Bốn căn hộ của Chương 4 đủ để thấy điều này. Đường thẳng ở Chương 4 có sai số huấn luyện 0,0045; một đa thức bậc ba đi qua đúng cả bốn căn nên có sai số huấn luyện bằng 0, nhưng lại đoán một căn 20 m² có giá 0 đồng. Ta gọi tên hiện tượng đó trước, rồi xét công cụ chính để kiểm soát nó là regularization. Hồi quy tuyến tính một lần nữa là nơi thấy cơ chế rõ nhất, vì ridge và lasso đều phân tích được chính xác, và trên bốn căn hộ chúng tính được bằng tay. Cuối cùng là câu hỏi chọn cường độ regularization, và câu trả lời là cross-validation.

9.1Overfitting và underfitting#

Định nghĩa 9.1 (Overfitting, underfitting)

Mô hình bị overfitting (quá khớp) khi nó khớp tốt dữ liệu huấn luyện nhưng dự đoán kém trên dữ liệu mới: sai số huấn luyện nhỏ, sai số trên tập xác thực lớn hơn nhiều. Mô hình bị underfitting (chưa khớp) khi nó quá đơn giản để nắm được quan hệ trong dữ liệu: cả sai số huấn luyện lẫn sai số xác thực đều lớn.

Ví dụ 9.1 (Đa thức bậc ba qua bốn căn hộ)

Dùng lại biến u=(x−70)/10u = (x - 70)/10 của Mục 5.2, bốn căn hộ có u=−3,−1,1,3{u = -3, -1, 1, 3} và giá 1,5; 2,1; 2,4; 3,0 tỉ. Đa thức bậc ba có bốn hệ số, đủ để đi qua đúng bốn điểm; giải hệ bốn phương trình được

p(u)=2,25+0,1375 u+0,0125 u3.p(u) = 2{,}25 + 0{,}1375\,u + 0{,}0125\,u^3.

Sai số huấn luyện bằng 0. Với căn 120 m², tức u=5u = 5, đa thức dự đoán 4,5 tỉ, còn đường thẳng của Chương 4 dự đoán 3,45 tỉ. Với căn 20 m², tức u=−5u = -5, đa thức dự đoán đúng 0 đồng, và với căn 10 m² nó cho giá âm, −1,275-1{,}275 tỉ.

Đa thức bậc ba khớp cả phần nhiễu trong bốn mức giá, và vì vậy nó rất nhạy với nhiễu. Tăng giá căn 80 m² thêm 0,1 tỉ, dự đoán của đường thẳng cho căn 120 m² chỉ đổi 0,05 tỉ, từ 3,45 lên 3,5, còn dự đoán của đa thức bậc ba đổi 0,6 tỉ, từ 4,5 xuống 3,9.

Ví dụ kinh điển cho thấy cùng hiện tượng với nhiều điểm hơn: khớp đa thức vào 10 điểm dữ liệu có nhiễu sinh từ một đường cong trơn. Đa thức bậc 1 là đường thẳng, không theo được độ cong, nên underfitting. Đa thức bậc 3 theo được hình dạng chung mà bỏ qua nhiễu. Đa thức bậc 9 có đủ 10 hệ số để đi qua chính xác mọi điểm, kể cả phần nhiễu, và dao động mạnh giữa các điểm: sai số huấn luyện bằng 0 nhưng dự đoán ở các điểm mới rất tệ.

Theo ngôn ngữ của Mục 3.6, overfitting là tình trạng phương sai cao: mô hình thay đổi nhiều khi tập huấn luyện thay đổi, như đa thức bậc ba ở trên, vì nó đủ linh hoạt để khớp cả nhiễu của từng tập. Underfitting là tình trạng độ chệch cao: dù có bao nhiêu dữ liệu, mô hình vẫn sai theo cùng một cách vì họ hàm của nó không chứa quan hệ thật. Chương 2 của Học sâu trình bày phân tích độ chệch – phương sai đầy đủ và đo từng thành phần trên dữ liệu.

Cách chẩn đoán thông dụng là so sánh sai số trên tập huấn luyện và tập xác thực, như bảng dưới.

Sai số huấn luyện Sai số xác thực Chẩn đoán Hướng xử lý
lớn lớn, gần sai số huấn luyện underfitting mô hình linh hoạt hơn, thêm đặc trưng, giảm regularization
nhỏ lớn hơn nhiều overfitting thêm dữ liệu, mô hình đơn giản hơn, tăng regularization
nhỏ nhỏ, gần sai số huấn luyện phù hợp

Regularization là cách xử lý overfitting mà không cần đổi họ mô hình: giữ nguyên mô hình, nhưng thêm vào hàm mất mát một thành phần phạt các tham số lớn, để mô hình ưu tiên các nghiệm "đơn giản" hơn.

9.2Hồi quy ridge#

Định nghĩa 9.2 (Hồi quy ridge)

Hồi quy ridge thêm thành phần phạt bình phương chuẩn ℓ2\ell_2 của trọng số vào bình phương tối thiểu:

L(w)=∥y−Xw∥22+λ∥w∥22,λ>0.L(w) = \|y - Xw\|_2^2 + \lambda\|w\|_2^2, \qquad \lambda > 0.

Cho gradient bằng 0 được nghiệm

w^ridge=(X⊤X+λI)−1X⊤y.\hat w_{\text{ridge}} = (X^\top X + \lambda I)^{-1}X^\top y.

Gradient của thành phần phạt là 2λw2\lambda w (Mục 2.7), nên phương trình chuẩn chỉ thay đổi một chỗ: X⊤XX^\top X được cộng thêm λI\lambda I. Thay đổi nhỏ này có ba tác dụng. Trước hết, ridge luôn có nghiệm duy nhất: theo Mục 2.5, X⊤X+λIX^\top X + \lambda I xác định dương với mọi λ>0\lambda > 0, kể cả khi XX không đủ hạng cột, nên ridge giải được cả những bài toán mà bình phương tối thiểu thông thường không có nghiệm duy nhất, như d>nd > n hoặc đặc trưng trùng lặp (Mục 4.3). Tiếp theo, số điều kiện được cải thiện: trị riêng của X⊤X+λIX^\top X + \lambda I là λi+λ\lambda_i + \lambda, nên số điều kiện giảm từ λmax⁡/λmin⁡\lambda_{\max}/\lambda_{\min} xuống (λmax⁡+λ)/(λmin⁡+λ)(\lambda_{\max} + \lambda)/(\lambda_{\min} + \lambda), và gradient descent trên hàm mất mát ridge hội tụ nhanh hơn (Mục 5.3). Cuối cùng, ridge co các hệ số về phía 0, qua đó giảm phương sai của ước lượng; Mục 9.3 chỉ ra việc co này diễn ra không đều giữa các hướng.

Khi λ→0+\lambda \to 0^{+}, nghiệm ridge tiến tới nghiệm có chuẩn nhỏ nhất của bình phương tối thiểu, tức nghiệm của giả nghịch đảo ở Mục 4.3. Khi λ→∞\lambda \to \infty, mọi hệ số tiến về 0.

Bốn căn hộ cho thấy sự co này bằng số. Với biến uu, ta có ∑iui2=20\sum_i u_i^2 = 20 và ∑iui(yi−yˉ)=4,8\sum_i u_i(y_i - \bar y) = 4{,}8. Không phạt hệ số chặn, phương trình chuẩn của ridge cho độ dốc theo uu là

bridge=4,820+λ.b_{\text{ridge}} = \frac{4{,}8}{20 + \lambda}.

Với λ=0\lambda = 0 ta được lại độ dốc 0,24 của Chương 5; với λ=20\lambda = 20, độ dốc giảm một nửa còn 0,12; độ dốc chỉ tiến về 0 khi λ→∞\lambda \to \infty. Hệ số chặn vẫn là giá trung bình 2,25 tỉ, vì uu có trung bình bằng 0.

Lưu ý

Thành phần phạt λ∥w∥2\lambda\|w\|^2 phụ thuộc vào thang đo của các đặc trưng: một đặc trưng đo bằng milimét có hệ số nhỏ hơn 1 000 lần so với khi đo bằng mét, nên bị phạt ít hơn hẳn. Vì vậy cần chuẩn hoá đặc trưng trước khi dùng ridge hoặc lasso. Ngoài ra, hệ số chặn thường không bị phạt, vì dịch toàn bộ yy đi một hằng số không nên làm thay đổi mô hình.

9.3Hồi quy ridge nhìn qua SVD#

Để thấy ridge co các hệ số như thế nào, ta viết XX dưới dạng SVD, X=UDV⊤X = UDV^\top (Mục 2.6), với uiu_i, viv_i là các cột của UU, VV và did_i là các giá trị suy biến. Thay vào công thức nghiệm và rút gọn, ta được

w^ridge=∑ivi didi2+λ ui⊤y,w^OLS=∑ivi 1di ui⊤y.\hat w_{\text{ridge}} = \sum_{i} v_i \,\frac{d_i}{d_i^2 + \lambda}\, u_i^\top y, \qquad \hat w_{\text{OLS}} = \sum_{i} v_i \,\frac{1}{d_i}\, u_i^\top y.

So sánh từng số hạng, ridge nhân thành phần theo hướng viv_i của nghiệm bình phương tối thiểu với hệ số co

di2di2+λ∈(0,1).\frac{d_i^2}{d_i^2 + \lambda} \in (0, 1).

Với bốn căn hộ, khi hệ số chặn không bị phạt và uu có trung bình 0, phần bị phạt chỉ gồm một cột uu, nên chỉ có một giá trị suy biến, d1=∥u∥=20d_1 = \|u\| = \sqrt{20}. Hệ số co là 20/(20+λ)20/(20 + \lambda), đúng tỉ lệ giữa độ dốc ridge 4,8/(20+λ)4{,}8/(20 + \lambda) ở Mục 9.2 và độ dốc 0,24 của bình phương tối thiểu. Với nhiều đặc trưng, mỗi hướng viv_i có một hệ số co riêng.

Thí nghiệm dùng 80 điểm dữ liệu với 12 đặc trưng và λ=10\lambda = 10; nghiệm tính qua SVD khớp với nghiệm dạng đóng tới 2,3×10−152{,}3\times10^{-15}. Bảng liệt kê năm trong mười hai giá trị suy biến, gồm hai lớn nhất, một ở giữa và hai nhỏ nhất, cùng hệ số co tương ứng.

Giá trị suy biến did_i Hệ số co di2/(di2+λ)d_i^2/(d_i^2 + \lambda)
12,2680 0,9377
12,0678 0,9357
8,3651 0,8750
6,4450 0,8060
6,1730 0,7921

Hướng có giá trị suy biến lớn gần như giữ nguyên; hướng có giá trị suy biến nhỏ bị co mạnh hơn. Giá trị suy biến nhỏ nghĩa là dữ liệu trải rất ít theo hướng đó, nên dữ liệu cung cấp ít thông tin về thành phần của ww theo hướng đó, và ước lượng bình phương tối thiểu ui⊤y/diu_i^\top y/d_i có phương sai lớn, vì chia cho số nhỏ khuếch đại nhiễu. Ridge co mạnh nhất đúng những hướng ước lượng kém tin cậy nhất. Đây cũng là mối liên hệ với Mục 4.4: đa cộng tuyến tạo ra giá trị suy biến rất nhỏ, và ridge là một cách xử lý đa cộng tuyến.

Tổng các hệ số co, df⁡(λ)=∑idi2/(di2+λ)\operatorname{df}(\lambda) = \sum_i d_i^2/(d_i^2 + \lambda), gọi là số bậc tự do hiệu dụng của mô hình ridge. Nó bằng số đặc trưng dd khi λ=0\lambda = 0 và giảm dần về 0 khi λ\lambda tăng, cho một cách đo độ phức tạp của mô hình liên tục theo λ\lambda (Hastie, Tibshirani và Friedman, 2009).

9.4Lasso#

Định nghĩa 9.3 (Lasso)

Lasso (Tibshirani, 1996) dùng chuẩn ℓ1\ell_1 trong thành phần phạt:

L(w)=12∥y−Xw∥22+λ∥w∥1.L(w) = \tfrac12\|y - Xw\|_2^2 + \lambda\|w\|_1.

Hệ số 12\tfrac12 trước bình phương sai số là quy ước thường dùng cho lasso, và cũng là quy ước của thư viện scikit-learn sau khi nhân hàm mục tiêu của thư viện với nn; nó chỉ làm thay đổi thang đo của λ\lambda. Khác với ridge, lasso không có nghiệm dạng đóng tổng quát và được giải bằng các thuật toán lặp như coordinate descent.

Đổi ℓ2\ell_2 thành ℓ1\ell_1 nghe như một thay đổi nhỏ, nhưng hành vi của nghiệm khác hẳn, như Hình 7 cho thấy.

Hình 7
Hình 7. Đường đi của các hệ số theo λ\lambda. Trái: ridge co các hệ số dần về 0 nhưng không hệ số nào chạm 0. Phải: lasso đưa từng hệ số về đúng 0.

Thí nghiệm dùng dữ liệu 80 điểm, 12 đặc trưng, trong đó mô hình sinh dữ liệu chỉ có 3 hệ số khác 0 và 9 hệ số bằng 0.

λ\lambda ∣w∣2|w|_2 của ridge Số hệ số bằng 0, ridge Số hệ số bằng 0, lasso
0,01 4,0106 0 0
0,10 4,0056 0 1
1,00 3,9559 0 1
10,00 3,5234 0 7
100,00 1,7090 0 9

Ở λ=100\lambda = 100, lasso đưa đúng 9 hệ số về 0, trùng với 9 hệ số bằng 0 của mô hình thật. Ridge không đưa hệ số nào về 0 ở bất kỳ giá trị λ\lambda nào, dù chuẩn của vector trọng số giảm dần.

Có hai cách giải thích vì sao lasso cho nghiệm thưa, tức nhiều hệ số bằng đúng 0. Cách thứ nhất là giải tích. Xét trường hợp đơn giản các cột của XX trực chuẩn, X⊤X=IX^\top X = I, và gọi zj=(X⊤y)jz_j = (X^\top y)_j là nghiệm bình phương tối thiểu của hệ số thứ jj. Bài toán tách thành từng toạ độ, và nghiệm là

w^jridge=zj1+λ(với phạt λ∥w∥22),w^jlasso=sign⁡(zj) max⁡(∣zj∣−λ, 0).\begin{aligned} \hat w_j^{\text{ridge}} &= \frac{z_j}{1 + \lambda} && (\text{với phạt } \lambda\|w\|_2^2), \\ \hat w_j^{\text{lasso}} &= \operatorname{sign}(z_j)\,\max\big(|z_j| - \lambda,\ 0\big). \end{aligned}

Ridge nhân mọi hệ số với cùng một số nhỏ hơn 1, nên hệ số nào khác 0 vẫn khác 0. Lasso trừ mỗi hệ số đi một lượng λ\lambda và cắt về 0 những hệ số có trị tuyệt đối nhỏ hơn λ\lambda; phép toán này gọi là ngưỡng mềm (soft thresholding). Nguồn gốc của khác biệt nằm ở đạo hàm. Đạo hàm của w2w^2 là 2w2w, tiến về 0 khi ww tiến về 0, nên lực kéo về 0 yếu dần và không bao giờ kéo được tới đúng 0. Còn ∣w∣|w| không khả vi tại 0, và dưới vi phân của nó tại 0 là cả đoạn [−1,1][-1, 1]; muốn một hệ số rời khỏi 0, gradient của phần bình phương sai số phải lớn hơn λ\lambda, nếu không thì hệ số nằm yên ở 0.

Bốn căn hộ cho thấy hai công thức này bằng số. Cột uu có ∑iui2=20\sum_i u_i^2 = 20 chứ không bằng 1, và z=∑iui(yi−yˉ)=4,8z = \sum_i u_i(y_i - \bar y) = 4{,}8. Cùng lập luận cho độ dốc ridge 4,8/(20+λ)4{,}8/(20 + \lambda) như ở Mục 9.2, và độ dốc lasso

blasso=max⁡(4,8−λ, 0)20.b_{\text{lasso}} = \frac{\max(4{,}8 - \lambda,\ 0)}{20}.

Ngưỡng 4,8 chính là độ lớn gradient của phần bình phương sai số tại độ dốc bằng 0. Với λ=2,4\lambda = 2{,}4, lasso cho độ dốc 0,12, bằng độ dốc ridge ở λ=20\lambda = 20. Với mọi λ≥4,8\lambda \ge 4{,}8, lasso cho độ dốc đúng bằng 0: mô hình bỏ hẳn diện tích và đoán mọi căn hộ có giá 2,25 tỉ. Ridge không có giá trị λ\lambda hữu hạn nào cho độ dốc bằng 0.

Cách thứ hai là hình học. Bài toán có phạt tương đương với cực tiểu bình phương sai số trong một quả cầu chuẩn có bán kính phụ thuộc λ\lambda. Các đường mức của bình phương sai số là những elip quanh nghiệm bình phương tối thiểu, và nghiệm có ràng buộc là điểm đầu tiên elip chạm vào quả cầu. Quả cầu ℓ2\ell_2 tròn nên điểm chạm thường nằm ở vị trí bất kỳ. Quả cầu ℓ1\ell_1 là hình thoi có các đỉnh nhọn nằm trên trục toạ độ (Mục 2.3), nên elip hay chạm vào đúng các đỉnh, nơi một số toạ độ bằng 0.

Từ đó có thể chọn giữa hai phương pháp. Khi cần chọn đặc trưng, hoặc khi tin rằng chỉ một số ít đặc trưng thật sự có ảnh hưởng, nên dùng lasso. Khi nhiều đặc trưng đều có ảnh hưởng nhỏ, hoặc có các nhóm đặc trưng tương quan cao, nên dùng ridge. Với một nhóm đặc trưng tương quan cao, lasso có xu hướng chọn một đặc trưng đại diện và đưa các đặc trưng còn lại về 0, và đặc trưng được chọn phụ thuộc vào nhiễu. Elastic net (Zou và Hastie, 2005) kết hợp cả hai thành phần phạt, λ1∥w∥1+λ2∥w∥22\lambda_1\|w\|_1 + \lambda_2\|w\|_2^2, để vừa cho nghiệm thưa vừa giữ ổn định với các nhóm đặc trưng tương quan.

9.5Cross-validation#

Cường độ regularization λ\lambda không thể học từ tập huấn luyện: tăng λ\lambda luôn làm sai số huấn luyện tăng, nên cực tiểu sai số huấn luyện luôn chọn λ=0\lambda = 0. Ta cần ước lượng sai số trên dữ liệu mới cho từng giá trị λ\lambda rồi chọn giá trị tốt nhất. Nếu dữ liệu nhiều, một tập xác thực riêng là đủ. Nếu dữ liệu ít, giữ riêng một phần lớn cho xác thực làm lãng phí dữ liệu huấn luyện, và kết quả phụ thuộc nhiều vào cách chia. Cross-validation giải quyết vấn đề này.

Định nghĩa 9.4 (k-fold cross-validation)

Chia dữ liệu thành kk phần có kích thước gần bằng nhau. Lần lượt với j=1,…,kj = 1, \dots, k: huấn luyện mô hình trên k−1k - 1 phần, đo sai số trên phần thứ jj. Ước lượng cross-validation là trung bình của kk sai số đó.

Mỗi điểm dữ liệu được dùng để đánh giá đúng một lần và để huấn luyện k−1k - 1 lần. Để chọn λ\lambda, ta tính ước lượng cross-validation cho mỗi giá trị trong một lưới, chẳng hạn 10−3,10−2,…,10310^{-3}, 10^{-2}, \dots, 10^{3}, chọn giá trị cho sai số nhỏ nhất, rồi huấn luyện lại trên toàn bộ dữ liệu với giá trị đó. Cùng cách làm chọn được cả bậc của đa thức.

Ví dụ 9.2 (Leave-one-out trên bốn căn hộ)

Lấy k=4k = 4: mỗi lần bỏ ra một căn, khớp mô hình trên ba căn còn lại rồi dự đoán căn bị bỏ ra. Ta so sánh đường thẳng với đa thức bậc hai. Trên cả bốn căn, hai mô hình có cùng sai số huấn luyện 0,0045, vì hệ số bậc hai khớp được bằng 0.

Căn bị bỏ ra Giá thật Đường thẳng dự đoán Đa thức bậc hai dự đoán
40 m² 1,5 1,600 2,100
60 m² 2,1 1,971 1,900
80 m² 2,4 2,529 2,600
100 m² 3,0 2,900 2,400
Trung bình bình phương sai số 0,0133 0,2000

Với ba điểm, đa thức bậc hai đi qua đúng cả ba và cong mạnh ở hai đầu, nên đoán sai 0,6 tỉ cho căn nhỏ nhất và căn lớn nhất.

Sai số huấn luyện không phân biệt được hai mô hình, còn cross-validation cho thấy đường thẳng tốt hơn khoảng 15 lần. Trường hợp k=nk = n như trên gọi là leave-one-out; bảng dưới liệt kê nó cùng các biến thể thường dùng khác.

Biến thể Dùng khi
k-fold với k=5k = 5 hoặc 10 lựa chọn mặc định
Stratified k-fold phân loại, nhất là khi lớp mất cân bằng: giữ tỉ lệ các lớp trong mỗi phần
Leave-one-out (k=nk = n) dữ liệu rất ít; tốn nn lần huấn luyện và ước lượng có phương sai cao
Chia theo thời gian chuỗi thời gian: luôn huấn luyện trên quá khứ, đánh giá trên tương lai
Chia theo nhóm dữ liệu có nhóm tự nhiên như bệnh nhân hay người dùng (Mục 8.5)

Khi nhiều giá trị λ\lambda cho sai số cross-validation gần như nhau, một quy tắc thường dùng là quy tắc một độ lệch chuẩn: chọn mô hình đơn giản nhất, tức regularization mạnh nhất, có sai số không vượt quá sai số nhỏ nhất cộng một độ lệch chuẩn của ước lượng.

Lưu ý

Không dùng cùng một vòng cross-validation vừa để chọn siêu tham số vừa để báo cáo hiệu năng cuối cùng. Vì cấu hình được chọn là cấu hình tốt nhất trên chính các phần dữ liệu đó, sai số báo cáo sẽ lạc quan một cách có hệ thống, và càng thử nhiều cấu hình thì càng lạc quan. Cách đúng là dùng cross-validation lồng nhau (vòng trong chọn siêu tham số, vòng ngoài đánh giá), hoặc giữ riêng một tập kiểm tra chỉ dùng một lần ở bước cuối cùng.

9.6Tóm tắt#

Overfitting là khi mô hình khớp cả nhiễu của dữ liệu huấn luyện, tức phương sai cao: đa thức bậc ba đi qua đúng bốn căn hộ nhưng đoán căn 20 m² có giá 0 đồng, và chỉ 0,1 tỉ nhiễu ở một căn làm dự đoán của nó đổi 0,6 tỉ. Underfitting là khi họ hàm quá hẹp, tức độ chệch cao; so sánh sai số huấn luyện với sai số xác thực cho biết đang ở tình huống nào. Ridge cộng λI\lambda I vào X⊤XX^\top X, nên luôn có nghiệm duy nhất, cải thiện số điều kiện, và nhân thành phần theo mỗi hướng với di2/(di2+λ)d_i^2/(d_i^2 + \lambda), co mạnh nhất những hướng có giá trị suy biến nhỏ, nơi ước lượng kém tin cậy nhất. Lasso dùng chuẩn ℓ1\ell_1 nên cho nghiệm thưa: với bốn căn hộ, độ dốc lasso bằng đúng 0 khi λ≥4,8\lambda \ge 4{,}8, còn độ dốc ridge 4,8/(20+λ)4{,}8/(20 + \lambda) không bao giờ bằng 0; trong thí nghiệm 12 đặc trưng, lasso đưa đúng 9 hệ số về 0 như mô hình thật. Cường độ regularization, cũng như bậc của mô hình, được chọn bằng cross-validation, và hiệu năng cuối cùng phải được báo cáo trên dữ liệu không tham gia vào việc chọn.

Ridge thêm λ∥w∥2\lambda\|w\|^2, lasso thêm λ∥w∥1\lambda\|w\|_1, Naive Bayes cộng α\alpha vào mọi ô đếm. Tới đây, các thành phần phạt này trông như những mẹo có tác dụng. Chương 10 cho thấy chúng, cùng với bình phương sai số và cross-entropy, đều suy ra được từ hai nguyên lý thống kê.


10Ước lượng hợp lý cực đại và hậu nghiệm cực đại#

Đến đây ta đã dùng khá nhiều hàm mất mát và thành phần phạt: bình phương sai số, cross-entropy, phạt ℓ2\ell_2, phạt ℓ1\ell_1, làm trơn Laplace. Nhìn riêng lẻ, chúng giống một danh sách lựa chọn phải ghi nhớ, và câu hỏi "vì sao là bình phương mà không phải trị tuyệt đối" ở Mục 4.1 vẫn còn treo đó; con số 1 cộng vào mỗi ô đếm khi làm trơn Laplace ở Mục 7.3 cũng chưa có lý do. Thực ra phần lớn chúng suy ra được từ hai nguyên lý thống kê: ước lượng hợp lý cực đại cho ra hàm mất mát, còn ước lượng hậu nghiệm cực đại cho thêm thành phần regularization. Khi đã thấy điều này, câu hỏi "dùng hàm mất mát nào" được thay bằng một câu hỏi dễ trả lời hơn: dữ liệu có nhiễu dạng gì.

10.1Mô hình xác suất và hàm mất mát#

Ý tưởng chung của chương là mô tả quá trình sinh ra dữ liệu bằng một mô hình xác suất có tham số θ\theta, rồi chọn θ\theta làm dữ liệu quan sát được trở nên "hợp lý" nhất. Mỗi giả thiết về phân phối của nhiễu hay của nhãn sẽ cho ra một hàm mất mát cụ thể, như các mục sau lần lượt chỉ ra.

Ví dụ nhỏ nhất là một từ trong thư rác. Ở Ví dụ 7.1, từ "miễn phí" xuất hiện trong 3 trên 4 thư rác. Giả sử mỗi thư rác chứa từ này với cùng một xác suất θ\theta, độc lập với nhau. Xác suất để thấy đúng dữ liệu đã thấy, ba thư có từ và một thư không có, là θ3(1−θ)\theta^3(1 - \theta). Với θ=0,5\theta = 0{,}5 xác suất này là 0,0625, với θ=0,75\theta = 0{,}75 là 0,105, với θ=0,9\theta = 0{,}9 là 0,073. Giá trị θ=0,75\theta = 0{,}75 làm dữ liệu quan sát được hợp lý nhất trong ba giá trị, và nó đúng bằng tần suất 3/4 mà Mục 7.3 đã dùng.

10.2Ước lượng hợp lý cực đại#

Định nghĩa 10.1 (Hàm hợp lý, MLE)

Cho mô hình xác suất p(y∣x,θ)p(y \mid x, \theta) và dữ liệu độc lập D={(xi,yi)}i=1n\mathcal{D} = \{(x_i, y_i)\}_{i=1}^n. Hàm hợp lý (likelihood) là xác suất của dữ liệu quan sát được, xem như hàm của tham số:

L(θ)=p(D∣θ)=∏i=1np(yi∣xi,θ).\mathcal{L}(\theta) = p(\mathcal{D} \mid \theta) = \prod_{i=1}^{n} p(y_i \mid x_i, \theta).

Ước lượng hợp lý cực đại (maximum likelihood estimation, MLE) là tham số làm hàm hợp lý lớn nhất.

Tích của nhiều xác suất khó tối ưu và dễ bị làm tròn về 0 khi tính bằng máy. Vì logarit là hàm đồng biến, cực đại L\mathcal{L} tương đương cực đại log⁡L\log\mathcal{L}, và tương đương cực tiểu âm logarit của nó:

θ^MLE=arg⁡min⁡θ  −∑i=1nlog⁡p(yi∣xi,θ).\hat\theta_{\text{MLE}} = \arg\min_\theta \; -\sum_{i=1}^{n}\log p(y_i \mid x_i, \theta).

Đại lượng −log⁡p(yi∣xi,θ)-\log p(y_i \mid x_i, \theta) đóng vai trò hàm mất mát của điểm thứ ii, và bài toán có đúng dạng của Định nghĩa 1.1. Với từ "miễn phí", âm log hợp lý là −3log⁡θ−log⁡(1−θ)-3\log\theta - \log(1 - \theta). Cho đạo hàm −3/θ+1/(1−θ)-3/\theta + 1/(1 - \theta) bằng 0 được θ=3/4\theta = 3/4, nên giá trị 0,75 ở Mục 10.1 là tốt nhất trong mọi giá trị của θ\theta, chứ không riêng ba giá trị đã thử. Cùng phép tính với kk thư có từ trong NN thư cho θ^=k/N\hat\theta = k/N: tần suất là ước lượng hợp lý cực đại.

Định lý 10.1 (Nhiễu Gauss cho bình phương tối thiểu)

Giả sử yi=w⊤xi+ϵiy_i = w^\top x_i + \epsilon_i với ϵi∼N(0,σ2)\epsilon_i \sim \mathcal{N}(0, \sigma^2) độc lập. Khi đó ước lượng hợp lý cực đại của ww trùng với nghiệm bình phương tối thiểu.

Chứng minh

Theo giả thiết, yi∣xi∼N(w⊤xi,σ2)y_i \mid x_i \sim \mathcal{N}(w^\top x_i, \sigma^2), nên

−log⁡p(yi∣xi,w)=(yi−w⊤xi)22σ2+12log⁡(2πσ2).-\log p(y_i \mid x_i, w) = \frac{(y_i - w^\top x_i)^2}{2\sigma^2} + \tfrac12\log(2\pi\sigma^2).

Số hạng thứ hai không phụ thuộc ww, còn hệ số 1/(2σ2)1/(2\sigma^2) dương không đổi vị trí cực tiểu. Do đó cực tiểu tổng theo ww tương đương cực tiểu ∑i(yi−w⊤xi)2\sum_i (y_i - w^\top x_i)^2.

Định lý trả lời câu hỏi đã nêu ở Mục 4.1: bình phương sai số không phải một lựa chọn tuỳ ý, mà là hệ quả của giả thiết nhiễu Gauss. Cực tiểu theo σ2\sigma^2 cho thêm ước lượng σ^2=1n∑i(yi−w^⊤xi)2\hat\sigma^2 = \frac1n\sum_i (y_i - \hat w^\top x_i)^2, và giống Ví dụ 3.4, ước lượng hợp lý cực đại này có chệch: mẫu số không chệch là n−dn - d. Với bốn căn hộ, đường thẳng của Chương 4 chính là ước lượng hợp lý cực đại dưới nhiễu Gauss, và σ^2\hat\sigma^2 là sai số huấn luyện 0,0045, tức độ lệch chuẩn của nhiễu khoảng 0,067 tỉ. Mẫu số không chệch là n−d=4−2=2n - d = 4 - 2 = 2, cho ước lượng 0,009, gấp đôi.

Đổi giả thiết về nhiễu thì đổi hàm mất mát. Nếu nhiễu có phân phối Laplace, p(ϵ)∝e−∣ϵ∣/bp(\epsilon) \propto e^{-|\epsilon|/b}, thì −log⁡p=∣yi−w⊤xi∣/b+ha˘ˋng soˆˊ-\log p = |y_i - w^\top x_i|/b + \text{hằng số}, và MLE trở thành hồi quy trị tuyệt đối (least absolute deviations). Phân phối Laplace có đuôi dày hơn Gauss, tức coi các sai số lớn là bình thường hơn, nên hồi quy trị tuyệt đối ít bị ảnh hưởng bởi điểm ngoại lai hơn bình phương tối thiểu. Một điểm ngoại lai có sai số 10 đóng góp 100 vào bình phương sai số nhưng chỉ đóng góp 10 vào tổng trị tuyệt đối. Trên bốn căn hộ, hồi quy trị tuyệt đối cho đường y=0,5+0,025xy = 0{,}5 + 0{,}025x, khá gần đường bình phương tối thiểu y=0,57+0,024xy = 0{,}57 + 0{,}024x. Thêm một căn thứ năm, 70 m², bị ghi nhầm giá thành 4,0 tỉ. Căn này nằm đúng ở diện tích trung bình, nên nó kéo cả đường bình phương tối thiểu lên 0,35 tỉ mà không đổi độ dốc: hệ số chặn từ 0,57 thành 0,92. Đường hồi quy trị tuyệt đối thì không đổi chút nào.

10.3Cross-entropy là hợp lý cực đại với phân phối Bernoulli#

Với phân loại hai lớp, nhãn yi∈{0,1}y_i \in \{0, 1\} được mô hình như một biến Bernoulli có xác suất thành công pi=σ(w⊤xi)p_i = \sigma(w^\top x_i):

p(yi∣xi,w)=pi yi(1−pi)1−yi.p(y_i \mid x_i, w) = p_i^{\,y_i}(1-p_i)^{1-y_i}.

Lấy âm logarit, ta được

−log⁡p(yi∣xi,w)=−[yilog⁡pi+(1−yi)log⁡(1−pi)].-\log p(y_i \mid x_i, w) = -\big[y_i\log p_i + (1-y_i)\log(1-p_i)\big].

Vế phải đúng là số hạng của hàm mất mát cross-entropy ở Mục 6.3. Với sáu sinh viên ở Ví dụ 6.1, w=1w = 1 và hệ số chặn −3,5-3{,}5, tích sáu xác suất p(yi∣xi,w)p(y_i \mid x_i, w) là e−6×0,418≈0,081e^{-6 \times 0{,}418} \approx 0{,}081: cross-entropy trung bình 0,418 chính là âm log hợp lý chia cho số điểm. Nghiệm w≈1,214w \approx 1{,}214, hệ số chặn ≈−4,249\approx -4{,}249 ở Mục 6.3 làm cross-entropy nhỏ nhất, tức làm hợp lý lớn nhất, bằng e−6×0,413≈0,084e^{-6 \times 0{,}413} \approx 0{,}084. Vậy cross-entropy không phải một định nghĩa độc lập, mà là âm log hợp lý dưới giả thiết nhãn có phân phối Bernoulli. Tương tự, với KK lớp và nhãn có phân phối phân loại (categorical) với xác suất cho bởi softmax, âm log hợp lý là cross-entropy nhiều lớp của hồi quy softmax.

Cross-entropy còn có một cách hiểu theo lý thuyết thông tin. Với phân phối dữ liệu pp và phân phối của mô hình qq, cross-entropy H(p,q)=−Ep[log⁡q]H(p, q) = -\mathbb{E}_{p}[\log q] bằng entropy H(p)H(p) cộng với phân kỳ Kullback–Leibler KL⁡(p ∥ q)≥0\operatorname{KL}(p\,\|\,q) \ge 0. Entropy của dữ liệu không phụ thuộc mô hình, nên cực tiểu cross-entropy tương đương cực tiểu khoảng cách KL từ phân phối dữ liệu tới phân phối của mô hình.

Mục 6.3 đã nhận xét rằng gradient của hồi quy logistic, X⊤(p−y)/nX^\top(p - y)/n, có cùng dạng với gradient của hồi quy tuyến tính. Lý do chung là cả phân phối Gauss và phân phối Bernoulli đều thuộc họ số mũ (exponential family). Một mô hình trong đó yy có phân phối thuộc họ số mũ và tham số tự nhiên của phân phối là hàm tuyến tính của xx gọi là mô hình tuyến tính tổng quát (generalized linear model, GLM) với hàm liên kết chính tắc. Với mọi GLM như vậy, gradient của âm log hợp lý có dạng X⊤(y^−y)X^\top(\hat y - y), trong đó y^\hat y là kỳ vọng của yy theo mô hình. Hồi quy tuyến tính, hồi quy logistic, hồi quy softmax và hồi quy Poisson cho dữ liệu đếm đều là các trường hợp riêng.

10.4Ước lượng hậu nghiệm cực đại và regularization#

Hợp lý cực đại chỉ dùng dữ liệu, nên không có chỗ nào để đưa vào hiểu biết có sẵn, chẳng hạn "các hệ số hồi quy thường không quá lớn". Định lý Bayes ở Mục 3.5 cho ta chỗ đó.

Định nghĩa 10.2 (MAP)

Với phân phối tiên nghiệm p(θ)p(\theta), ước lượng hậu nghiệm cực đại (maximum a posteriori, MAP) là tham số làm hậu nghiệm lớn nhất:

θ^MAP=arg⁡max⁡θ  p(D∣θ) p(θ)=arg⁡min⁡θ  [−log⁡p(D∣θ)−log⁡p(θ)].\begin{aligned} \hat\theta_{\text{MAP}} &= \arg\max_\theta \; p(\mathcal{D}\mid\theta)\,p(\theta) \\ &= \arg\min_\theta\;\big[-\log p(\mathcal{D}\mid\theta) - \log p(\theta)\big]. \end{aligned}

Số hạng thứ nhất là hàm mất mát của MLE. Số hạng thứ hai chỉ phụ thuộc tham số, và đóng vai trò thành phần regularization.

Định lý 10.2 (Tiên nghiệm Gauss cho hồi quy ridge)

Với mô hình nhiễu Gauss của Định lý 10.1 và tiên nghiệm w∼N(0,τ2I)w \sim \mathcal{N}(0, \tau^2 I), ước lượng MAP của ww trùng với nghiệm hồi quy ridge với

λ=σ2τ2.\lambda = \frac{\sigma^2}{\tau^2}.

Chứng minh

Âm log tiên nghiệm là −log⁡p(w)=∥w∥22/(2τ2)+ha˘ˋng soˆˊ-\log p(w) = \|w\|_2^2/(2\tau^2) + \text{hằng số}. Cộng với âm log hợp lý ở Mục 10.2, bỏ hằng số và nhân với 2σ22\sigma^2, hàm cần cực tiểu là

∥y−Xw∥22+σ2τ2∥w∥22,\|y - Xw\|_2^2 + \frac{\sigma^2}{\tau^2}\|w\|_2^2,

đúng là hàm mất mát ridge ở Định nghĩa 9.2 với λ=σ2/τ2\lambda = \sigma^2/\tau^2.

Công thức λ=σ2/τ2\lambda = \sigma^2/\tau^2 có cách hiểu tự nhiên. Tiên nghiệm càng chặt, tức τ\tau nhỏ và ta tin chắc các hệ số nhỏ, thì λ\lambda càng lớn. Dữ liệu càng nhiễu, tức σ\sigma lớn và dữ liệu ít đáng tin, thì tiên nghiệm càng được coi trọng, và λ\lambda cũng càng lớn.

Với bốn căn hộ, lấy σ2=0,0045\sigma^2 = 0{,}0045 như ước lượng ở Mục 10.2. Giả sử trước khi xem dữ liệu ta tin rằng thêm 10 m² hiếm khi làm giá đổi quá 0,2 tỉ, và diễn đạt niềm tin đó bằng tiên nghiệm Gauss cho độ dốc theo uu với τ=0,1\tau = 0{,}1. Khi đó λ=0,0045/0,01=0,45\lambda = 0{,}0045/0{,}01 = 0{,}45, và theo Mục 9.2 độ dốc MAP là 4,8/(20+0,45)≈0,2354{,}8/(20 + 0{,}45) \approx 0{,}235, chỉ nhỏ hơn độ dốc 0,24 của MLE một chút. Nhiễu nhỏ nên dữ liệu gần như quyết định tất cả.

Thí nghiệm kiểm chứng định lý bằng hai cách tính độc lập: một bên giải hệ tuyến tính dạng đóng của ridge, một bên dùng thuật toán tối ưu BFGS cực tiểu trực tiếp âm log hậu nghiệm.

Văn bản
lambda ly thuyet = sigma^2/tau^2 = 1.0/0.49 = 2.040816
Sai khac giua ridge dang dong va MAP toi uu bang so: 1.973e-08

Hai nghiệm khớp nhau tới 2,0×10−82{,}0 \times 10^{-8}, giới hạn bởi dung sai dừng của thuật toán tối ưu.

Tương tự, tiên nghiệm Laplace cho từng hệ số, p(wj)∝e−∣wj∣/bp(w_j) \propto e^{-|w_j|/b}, cho −log⁡p(w)=∥w∥1/b+ha˘ˋng soˆˊ-\log p(w) = \|w\|_1/b + \text{hằng số}, tức ước lượng MAP là lasso. Hai tiên nghiệm diễn đạt hai niềm tin khác nhau: phân phối Gauss phẳng quanh 0 và nói "các hệ số nên nhỏ", còn phân phối Laplace có đỉnh nhọn tại 0 và nói "nhiều hệ số nên bằng 0". Hình dạng của tiên nghiệm tại 0 chính là nguồn gốc của khác biệt giữa ridge và lasso ở Mục 9.4.

Làm trơn Laplace của Naive Bayes (Mục 7.3) cũng là một ước lượng Bayes. Với biến rời rạc có VV giá trị và tiên nghiệm Dirichlet có mọi tham số bằng α+1\alpha + 1, ước lượng MAP của xác suất mỗi giá trị là (Nv+α)/(N+αV)(N_v + \alpha)/(N + \alpha V), đúng công thức làm trơn. Nếu lấy kỳ vọng hậu nghiệm thay vì điểm cực đại, tiên nghiệm Dirichlet với tham số α\alpha cho cùng công thức.

Từ "cuộc họp" ở Ví dụ 7.1 cho thấy điều này với V=2V = 2, khi tiên nghiệm Dirichlet trở thành phân phối Beta. Từ này xuất hiện trong 0 trên 4 thư rác, nên hợp lý là (1−θ)4(1 - \theta)^4 và MLE là θ=0\theta = 0, đúng số đếm bằng 0 đã phủ quyết cả thư ở Mục 7.3. Với α=1\alpha = 1, tiên nghiệm có hai tham số bằng 2 và mật độ tỉ lệ với θ(1−θ)\theta(1 - \theta). Mật độ này bằng 0 ở hai đầu, tức nó không tin một từ có xác suất xuất hiện đúng bằng 0 hay đúng bằng 1. Hậu nghiệm tỉ lệ với θ(1−θ)5\theta(1 - \theta)^5; cho đạo hàm của logarit, 1/θ−5/(1−θ)1/\theta - 5/(1 - \theta), bằng 0 được θ=1/6≈0,167\theta = 1/6 \approx 0{,}167, đúng xác suất sau làm trơn ở Ví dụ 7.1.

Bảng dưới gom các thành phần regularization và tiên nghiệm tương ứng.

Thành phần regularization Tiên nghiệm tương ứng Niềm tin được diễn đạt
ℓ2\ell_2 (ridge) Gauss N(0,τ2)\mathcal{N}(0, \tau^2) các hệ số nên nhỏ
ℓ1\ell_1 (lasso) Laplace nhiều hệ số nên bằng đúng 0
không có tiên nghiệm phẳng không có hiểu biết trước
làm trơn Laplace (Mục 7.3) Dirichlet mọi giá trị đều có thể xảy ra

10.5Tóm tắt#

Hai nguyên lý của chương gói gọn trong bảng dưới: mỗi giả thiết về dữ liệu, kèm hoặc không kèm một tiên nghiệm, cho ra một thuật toán quen thuộc.

Giả thiết về dữ liệu Tiên nghiệm Thuật toán thu được
Nhiễu Gauss không bình phương tối thiểu (Chương 4)
Nhiễu Gauss Gauss hồi quy ridge (Mục 9.2)
Nhiễu Gauss Laplace lasso (Mục 9.4)
Nhiễu Laplace không hồi quy trị tuyệt đối
Nhãn Bernoulli không hồi quy logistic (Mục 6.3)
Nhãn Bernoulli Gauss hồi quy logistic với regularization ℓ2\ell_2
Nhãn phân phối phân loại không hồi quy softmax (Mục 6.4)
Đặc trưng rời rạc độc lập có điều kiện Dirichlet Naive Bayes có làm trơn (Mục 7.3)

Cột trái là giả thiết về dữ liệu, cột phải là thuật toán. Đọc bảng theo chiều ngược lại cũng hữu ích: khi dùng một thuật toán, ta đang ngầm chấp nhận giả thiết tương ứng, và khi giả thiết đó sai rõ ràng, như nhiễu có nhiều điểm ngoại lai hay nhãn không phải nhị phân, đó là tín hiệu nên đổi hàm mất mát. Các ví dụ nhỏ của giáo trình nằm đúng trên bảng này: tần suất 3/4 của từ "miễn phí" là MLE của một biến Bernoulli, đường thẳng qua bốn căn hộ là MLE dưới nhiễu Gauss, nghiệm w≈1,214w \approx 1{,}214 của sáu sinh viên là MLE dưới nhãn Bernoulli, và xác suất 1/6 của từ "cuộc họp" sau làm trơn là MAP dưới tiên nghiệm Beta. Cùng với bảng, chương cho thấy mọi mô hình tuyến tính tổng quát với hàm liên kết chính tắc có gradient dạng X⊤(y^−y)X^\top(\hat y - y), và ridge trùng với MAP dưới tiên nghiệm Gauss khi λ=σ2/τ2\lambda = \sigma^2/\tau^2, khớp với nghiệm tối ưu bằng số tới 2,0×10−82{,}0 \times 10^{-8}.

Ước lượng MAP vẫn chưa phải suy luận Bayes đầy đủ. Suy luận Bayes giữ toàn bộ phân phối hậu nghiệm và lấy trung bình dự đoán trên phân phối đó; MAP chỉ lấy một điểm là đỉnh của hậu nghiệm. Vì vậy MAP không cho biết mức độ không chắc chắn của tham số, và khi hậu nghiệm lệch hoặc có nhiều đỉnh, điểm đỉnh có thể không đại diện cho phân phối. Một số thuật toán cũng nằm ngoài bảng trên: mất mát hinge của SVM (Chương 13) không phải là âm log hợp lý của một mô hình xác suất chuẩn hoá được, nên SVM không cho xác suất một cách trực tiếp.

Các hàm mất mát trong bảng còn một điểm chung chưa được nói ra: chúng đều lồi, nên gradient descent tìm được nghiệm tốt nhất từ bất kỳ điểm khởi tạo nào. Chương 11 xét chính xác tính lồi là gì và vì sao nó quan trọng tới vậy.


11Tập lồi và hàm lồi#

Tính lồi là ranh giới giữa những bài toán tối ưu có bảo đảm và những bài toán không có. Ở các chương trước, ta đã nhiều lần dựa vào nó mà chưa nói rõ. Ở Chương 5, gradient descent cho bốn căn hộ xuất phát từ (0,0)(0, 0), và ta coi điểm nó dừng là nghiệm tốt nhất mà không thử điểm xuất phát nào khác. Ở Chương 6, nghiệm w≈1,214w \approx 1{,}214 của sáu sinh viên cũng được tìm bằng một lần chạy tối ưu duy nhất. Cả hai lần, điều cho phép làm vậy là tính lồi. Ở đây ta định nghĩa tập lồi và hàm lồi cho chặt chẽ, học cách nhận ra một hàm lồi mà không phải chứng minh từ đầu, và thấy bằng thí nghiệm điều gì xảy ra với gradient descent khi tính lồi mất đi. Các khái niệm này cũng là nền cho lý thuyết đối ngẫu ở Chương 12 và SVM ở Chương 13.

11.1Vai trò của tính lồi trong tối ưu#

Với bài toán tối ưu lồi, mọi cực tiểu địa phương đều là cực tiểu toàn cục. Vì vậy điểm khởi tạo không ảnh hưởng tới chất lượng nghiệm, không cần chạy lại nhiều lần với các khởi tạo khác nhau, và khi thuật toán dừng ở một điểm có gradient bằng 0, ta biết chắc đó là nghiệm tốt nhất.

Hồi quy tuyến tính, hồi quy logistic, ridge, lasso và SVM đều là bài toán lồi. Hàm mất mát của mạng nơ-ron có từ hai lớp trở lên thì không lồi, nên không có bảo đảm nào như trên: kết quả phụ thuộc vào khởi tạo, và không có cách nào biết chắc còn nghiệm tốt hơn hay không. Phần lớn kỹ thuật huấn luyện mạng sâu, như khởi tạo cẩn thận, chuẩn hoá và kết nối tắt, tồn tại để xử lý hậu quả của việc mất tính lồi.

Chương này và Chương 12 còn là nền cho SVM. Không có lý thuyết đối ngẫu thì không suy ra được bài toán đối ngẫu của SVM, và không có bài toán đối ngẫu thì không thấy được kernel.

11.2Tập lồi#

Định nghĩa 11.1 (Tập lồi)

Tập C⊆RdC \subseteq \mathbb{R}^d là tập lồi nếu đoạn thẳng nối hai điểm bất kỳ của CC nằm trọn trong CC:

x,y∈C,  t∈[0,1]  ⟹  tx+(1−t)y∈C.x, y \in C,\; t \in [0,1] \;\Longrightarrow\; t x + (1-t) y \in C.

Bảng dưới cho vài ví dụ ở cả hai phía.

Tập lồi Tập không lồi
Hình cầu, hình hộp, nửa không gian {x:a⊤x≤b}\{x : a^\top x \le b\} Hình vành khuyên, hình chữ U
Siêu phẳng, giao của nhiều nửa không gian (khối đa diện) Hợp của hai hình tròn rời nhau
Bao lồi của một tập điểm bất kỳ Mặt cầu (chỉ phần vỏ)

Hình cầu {x:∥x−c∥≤r}\{x : \|x - c\| \le r\} lồi vì với x,yx, y trong hình cầu, bất đẳng thức tam giác cho ∥tx+(1−t)y−c∥≤t∥x−c∥+(1−t)∥y−c∥≤r\|tx + (1-t)y - c\| \le t\|x - c\| + (1-t)\|y - c\| \le r. Lập luận tương tự áp dụng cho quả cầu của mọi chuẩn, trong đó có hình thoi ℓ1\ell_1 ở Mục 2.3.

Chương 13 dùng hai tính chất của tập lồi. Giao của các tập lồi là tập lồi, vì nếu hai điểm cùng thuộc mọi tập thì đoạn nối chúng cũng thuộc mọi tập; do đó miền thoả mãn một hệ ràng buộc tuyến tính, là giao của các nửa không gian, luôn là tập lồi. Ngược lại, hợp của các tập lồi thường không lồi, như hai hình tròn rời nhau.

11.3Hàm lồi#

Định nghĩa 11.2 (Hàm lồi)

Hàm ff xác định trên một tập lồi là hàm lồi nếu với mọi x,yx, y và mọi t∈[0,1]t \in [0,1]:

f(tx+(1−t)y)  ≤  tf(x)+(1−t)f(y).f\big(t x + (1-t)y\big) \;\le\; t f(x) + (1-t) f(y).

ff là lồi chặt nếu bất đẳng thức là chặt với mọi x≠yx \ne y và t∈(0,1)t \in (0, 1).

Nói bằng lời, đoạn thẳng nối hai điểm trên đồ thị, tức dây cung, luôn nằm phía trên đồ thị. Lấy f(x)=x2f(x) = x^2, x=0x = 0, y=2y = 2 và t=1/2t = 1/2: đồ thị ở điểm giữa có độ cao f(1)=1f(1) = 1, còn trung điểm của dây cung ở độ cao (0+4)/2=2(0 + 4)/2 = 2, nên dây cung nằm trên. Với f(x)=x4−3x2f(x) = x^4 - 3x^2, lấy x=−1x = -1 và y=1y = 1: f(−1)=f(1)=−2f(-1) = f(1) = -2, nên dây cung là đoạn nằm ngang ở độ cao −2-2, trong khi f(0)=0f(0) = 0 cao hơn nó 2 đơn vị. Một bộ ba như vậy đủ để kết luận hàm không lồi.

Với hàm khả vi, có hai điều kiện tương đương dễ dùng hơn định nghĩa.

Định lý 11.1 (Điều kiện bậc nhất và bậc hai)

Cho ff khả vi trên tập lồi mở.

  1. ff lồi khi và chỉ khi với mọi x,yx, y:   f(y)≥f(x)+∇f(x)⊤(y−x)\;f(y) \ge f(x) + \nabla f(x)^\top (y - x).
  2. Nếu ff khả vi hai lần, ff lồi khi và chỉ khi ma trận Hessian ∇2f(x)\nabla^2 f(x) nửa xác định dương tại mọi xx. Với hàm một biến: f′′(x)≥0f''(x) \ge 0.

Điều kiện bậc hai cho lại kết luận về x4−3x2x^4 - 3x^2 mà không cần tìm bộ ba vi phạm: đạo hàm cấp hai 12x2−612x^2 - 6 âm khi ∣x∣<1/2≈0,707|x| < 1/\sqrt2 \approx 0{,}707, đúng vùng quanh điểm 0 nơi dây cung nằm dưới đồ thị. Điều kiện bậc nhất nói rằng tiếp tuyến, hay siêu phẳng tiếp xúc, tại mọi điểm luôn nằm dưới đồ thị. Từ đó suy ra ngay tính chất quan trọng nhất của hàm lồi.

Định lý 11.2 (Cực tiểu của hàm lồi)

Nếu ff lồi và khả vi thì mọi điểm x∗x^* có ∇f(x∗)=0\nabla f(x^*) = 0 là cực tiểu toàn cục. Nếu ff lồi chặt thì cực tiểu toàn cục, nếu tồn tại, là duy nhất.

Chứng minh

Thay ∇f(x∗)=0\nabla f(x^*) = 0 vào điều kiện bậc nhất: f(y)≥f(x∗)f(y) \ge f(x^*) với mọi yy. Nếu có hai cực tiểu x∗≠y∗x^* \ne y^* của hàm lồi chặt, điểm giữa của chúng có giá trị nhỏ hơn giá trị cực tiểu theo định nghĩa lồi chặt, mâu thuẫn.

Ví dụ 11.1

Hàm mất mát của hồi quy tuyến tính, f(w)=∥y−Xw∥22f(w) = \|y - Xw\|_2^2, có Hessian 2X⊤X2X^\top X, nửa xác định dương (Mục 2.5), nên ff lồi. Nếu XX đủ hạng cột thì Hessian xác định dương, ff lồi chặt và nghiệm duy nhất, đúng như Định lý 4.1. Với bốn căn hộ, hàm mất mát L(a,b)=(a−2,25)2+5 (b−0,24)2+0,0045L(a, b) = (a - 2{,}25)^2 + 5\,(b - 0{,}24)^2 + 0{,}0045 ở Mục 5.2 có Hessian diag⁡(2,10)\operatorname{diag}(2, 10), xác định dương, nên (2,25; 0,24)(2{,}25;\ 0{,}24) là cực tiểu toàn cục duy nhất, và gradient descent xuất phát từ đâu cũng về đó. Hàm f(x)=exf(x) = e^x có f′′(x)=ex>0f''(x) = e^x > 0 nên lồi chặt, nhưng không có cực tiểu: nó giảm dần về 0 khi x→−∞x \to -\infty. Ví dụ này cho thấy Định lý 11.2 chỉ nói về tính duy nhất, không bảo đảm cực tiểu tồn tại, và đây đúng là tình huống của hồi quy logistic trên dữ liệu tách được ở Mục 6.5.

11.4Kiểm tra tính lồi bằng thực nghiệm#

Định nghĩa 11.2 gợi ý một phép thử bằng số: chọn ngẫu nhiên nhiều cặp điểm x,yx, y và hệ số tt, rồi kiểm tra bất đẳng thức. Thí nghiệm thực hiện phép thử này trên 20 000 bộ ba cho mỗi hàm, với cột "vi phạm lớn nhất" là giá trị lớn nhất của f(tx+(1−t)y)−tf(x)−(1−t)f(y)f(tx + (1-t)y) - tf(x) - (1-t)f(y).

Hàm Vi phạm lớn nhất Tỉ lệ vi phạm Kết luận
x2x^2 −1,50×10−9-1{,}50\times10^{-9} 0,0000 lồi
∣x∣\lvert x\rvert 00 0,0000 lồi
exe^x −3,99×10−9-3{,}99\times10^{-9} 0,0000 lồi
log⁡(1+ex)\log(1+e^x) (mất mát logistic) −2,54×10−11-2{,}54\times10^{-11} 0,0000 lồi
x4−3x2x^4 - 3x^2 +2,237+2{,}237 0,2075 không lồi
sin⁡x\sin x +1,972+1{,}972 0,5051 không lồi
x3x^3 +13,17+13{,}17 0,4985 không lồi

Với bốn hàm đầu, giá trị vi phạm lớn nhất không dương: các số âm rất nhỏ chỉ là sai số làm tròn ở những bộ ba có hai điểm gần nhau. Với ba hàm sau, có hàng nghìn bộ ba vi phạm, và độ vi phạm lớn. Với x4−3x2x^4 - 3x^2, vi phạm lớn nhất tìm được là 2,237, cùng cỡ với vi phạm 2 của bộ ba x=−1x = -1, y=1y = 1, t=1/2t = 1/2 tính tay ở Mục 11.3.

Lưu ý

Phép thử này có thể bác bỏ tính lồi nhưng không chứng minh được nó. Không tìm thấy vi phạm trong 20 000 lần thử không loại trừ một vùng lõm hẹp ở đâu đó chưa được lấy mẫu. Ngược lại, chỉ một phản ví dụ là đủ để kết luận hàm không lồi. Với một hàm mất mát tự viết, đây là cách rẻ để phát hiện lỗi trước khi đi vào chứng minh.

Dòng thứ tư xác nhận bằng số điều mà Mục 11.5 sẽ chứng minh: mất mát logistic là hàm lồi, nên bài toán hồi quy logistic có regularization có nghiệm toàn cục duy nhất. Nhờ vậy hồi quy logistic không cần chạy nhiều lần với nhiều khởi tạo khác nhau như mạng nơ-ron.

11.5Các phép toán bảo toàn tính lồi#

Trên thực tế, người ta hiếm khi kiểm tra tính lồi bằng định nghĩa. Thay vào đó, hàm lồi được dựng từ những hàm đã biết là lồi bằng các phép toán bảo toàn tính lồi, liệt kê trong bảng dưới.

Phép toán Bảo toàn tính lồi
f1+f2f_1 + f_2 có
αf\alpha f với α≥0\alpha \ge 0 có
max⁡(f1,f2)\max(f_1, f_2) có
min⁡(f1,f2)\min(f_1, f_2) không
f(Ax+b)f(Ax + b), hợp với hàm affine có
g(f(x))g(f(x)) với ff lồi, gg lồi và không giảm có
f1⋅f2f_1 \cdot f_2 không, nói chung

Các phép toán này giải thích tính lồi của mọi hàm mất mát trong giáo trình. Mất mát hinge max⁡(0,1−m)\max(0, 1 - m) là max của hai hàm affine theo mm, mà m=y(w⊤x+b)m = y(w^\top x + b) là hàm affine theo (w,b)(w, b), nên hinge lồi theo tham số. Hàm ∥y−Xw∥2\|y - Xw\|^2 là hàm lồi ∥⋅∥2\|\cdot\|^2 hợp với ánh xạ affine w↦y−Xww \mapsto y - Xw. Mất mát logistic log⁡(1+e−m)\log(1 + e^{-m}) là một hàm lồi một biến, vì đạo hàm cấp hai của nó bằng σ(m)(1−σ(m))>0\sigma(m)(1-\sigma(m)) > 0, hợp với hàm affine mm của ww. Và tổng của một mất mát lồi với một thành phần regularization lồi như ∥w∥22\|w\|_2^2 hay ∥w∥1\|w\|_1 là hàm lồi. Vì vậy ridge, lasso, hồi quy logistic có regularization và SVM đều là bài toán tối ưu lồi.

Cross-entropy của sáu sinh viên ở Chương 6 là một trường hợp cụ thể. Khi nhãn được mã hoá là ±1\pm 1, nó là trung bình của sáu hàm log⁡(1+e−mi)\log(1 + e^{-m_i}), với lề mi=yi(wxi+b)m_i = y_i(w x_i + b) affine theo (w,b)(w, b). Mỗi số hạng lồi theo (w,b)(w, b), nên tổng lồi, và nghiệm w≈1,214w \approx 1{,}214, hệ số chặn ≈−4,249\approx -4{,}249 ở Mục 6.3 là cực tiểu toàn cục.

11.6Tính lồi và kết quả của gradient descent#

Điều gì xảy ra khi tính lồi mất đi? Thí nghiệm sau chạy cùng một thuật toán gradient descent từ 21 điểm xuất phát trên một hàm lồi và một hàm không lồi.

Hình 8
Hình 8. Cùng một thuật toán gradient descent chạy từ 21 điểm xuất phát. Trái: hàm lồi, mọi lần chạy đều về cùng một điểm. Phải: hàm không lồi, điểm dừng phụ thuộc điểm xuất phát.
Văn bản
ham LOI      x^2             : so diem dung khac nhau = 1
ham KHONG LOI x^4-3x^2+x/2   : so diem dung khac nhau = 2, tai x = -1.2645 va 1.1807
gia tri ham tai hai diem do  : -2.8725 va -1.6484

Với hàm không lồi x4−3x2+x/2x^4 - 3x^2 + x/2, gradient descent dừng ở hai điểm khác nhau tuỳ điểm xuất phát, và hai điểm này có giá trị hàm khác nhau: −2,8725-2{,}8725 và −1,6484-1{,}6484. Có thể biết trước điểm nào về đâu. Đạo hàm 4x3−6x+1/24x^3 - 6x + 1/2 bằng 0 tại ba điểm: hai cực tiểu x≈−1,2645x \approx -1{,}2645 và x≈1,1807x \approx 1{,}1807, và một cực đại địa phương x≈0,084x \approx 0{,}084 ngăn cách hai lòng chảo. Với bước học nhỏ, điểm xuất phát bên trái 0,084 trượt về cực tiểu bên trái, điểm bên phải trượt về cực tiểu bên phải: trong 21 điểm xuất phát cách đều từ −2,5-2{,}5 tới 2,52{,}5, 11 điểm từ 0 trở xuống về −1,2645-1{,}2645, 10 điểm còn lại về 1,18071{,}1807. Những lần chạy xuất phát ở phía dương đều dừng tại cực tiểu địa phương x≈1,18x \approx 1{,}18, không phải cực tiểu toàn cục, và thuật toán không có cách nào nhận ra điều đó, vì gradient tại đó cũng bằng 0.

Hàm mất mát của mạng nơ-ron không lồi, nên hiện tượng trên xảy ra ở quy mô lớn hơn nhiều. Tuy vậy, kinh nghiệm thực tế cho thấy với mạng đủ lớn, phần lớn cực tiểu địa phương có giá trị mất mát gần nhau, và trở ngại chính lại là tín hiệu co lại hoặc phình ra qua nhiều lớp. Chương 6 của Học sâu trình bày khởi tạo, chuẩn hoá và kết nối tắt, ba kỹ thuật xử lý trở ngại đó.

11.7Tóm tắt#

Tập lồi chứa trọn đoạn thẳng nối hai điểm bất kỳ của nó, và giao của các tập lồi vẫn lồi. Hàm lồi có dây cung nằm trên đồ thị, tương đương với tiếp tuyến nằm dưới đồ thị hoặc Hessian nửa xác định dương; một bộ ba điểm như x=−1x = -1, y=1y = 1 với x4−3x2x^4 - 3x^2 đủ để bác bỏ tính lồi. Với hàm lồi khả vi, mọi điểm có gradient bằng 0 là cực tiểu toàn cục; tính lồi chặt cho thêm tính duy nhất nhưng không bảo đảm cực tiểu tồn tại. Hàm mất mát của bốn căn hộ có Hessian diag⁡(2,10)\operatorname{diag}(2, 10) nên lồi chặt, còn cross-entropy của sáu sinh viên lồi vì là tổng các hàm lồi của lề affine, nên nghiệm tìm được ở Chương 5 và Chương 6 là nghiệm tốt nhất. Phép thử bằng số bác bỏ được tính lồi nhưng không chứng minh được nó; trong thực tế, tính lồi được suy ra từ các phép toán bảo toàn như cộng, lấy max và hợp với hàm affine, và nhờ vậy mọi hàm mất mát của giáo trình tới đây đều lồi. Trên hàm không lồi x4−3x2+x/2x^4 - 3x^2 + x/2, điểm dừng của gradient descent phụ thuộc vào việc điểm xuất phát nằm bên nào của cực đại địa phương ở x≈0,084x \approx 0{,}084.

Tính lồi bảo đảm tối ưu tốt khi không có ràng buộc. SVM lại là một bài toán tối ưu có ràng buộc, và Chương 12 trình bày công cụ để xử lý ràng buộc trong bài toán lồi: hàm Lagrange và bài toán đối ngẫu.


12Tối ưu lồi và đối ngẫu Lagrange#

SVM ở Chương 13 là một bài toán tối ưu có ràng buộc: tìm siêu phẳng có lề lớn nhất, với điều kiện mọi điểm nằm đúng phía. Gradient descent không xử lý trực tiếp được ràng buộc, nên ta cần một công cụ khác. Công cụ đó là phương pháp Lagrange, với ý tưởng thay việc cấm vi phạm ràng buộc bằng việc tính giá cho mỗi đơn vị vi phạm. Từ ý tưởng này sẽ ra bài toán đối ngẫu và điều kiện KKT, và từ điều kiện KKT sẽ ra khái niệm vector hỗ trợ. Một ví dụ một biến được dùng xuyên suốt chương để mọi khái niệm đều có thể tính tay.

12.1Bài toán tối ưu có ràng buộc#

Định nghĩa 12.1 (Dạng chuẩn)

Bài toán tối ưu có ràng buộc ở dạng chuẩn là

min⁡xf0(x)vớifi(x)≤0,i=1,…,m,hj(x)=0,j=1,…,p.\begin{aligned} \min_x \quad & f_0(x) \\ \text{với} \quad & f_i(x) \le 0, \quad i = 1, \dots, m, \\ & h_j(x) = 0, \quad j = 1, \dots, p. \end{aligned}

Điểm thoả mọi ràng buộc gọi là điểm chấp nhận được. Giá trị tối ưu ký hiệu là p∗p^*. Bài toán gọi là bài toán lồi nếu f0,f1,…,fmf_0, f_1, \dots, f_m là hàm lồi và mọi hjh_j là hàm affine.

Ràng buộc đẳng thức phải là affine, không chỉ lồi, vì tập {x:h(x)=0}\{x : h(x) = 0\} với hh lồi nhưng không affine thường không lồi. Chẳng hạn h(x)=∥x∥2−1h(x) = \|x\|^2 - 1 lồi, nhưng {x:∥x∥2=1}\{x : \|x\|^2 = 1\} là mặt cầu, không phải tập lồi.

Ví dụ 12.1 (Ví dụ xuyên suốt chương)

Tìm min⁡xx2\min_x x^2 với ràng buộc x≥1x \ge 1. Viết ở dạng chuẩn: f0(x)=x2f_0(x) = x^2, f1(x)=1−x≤0f_1(x) = 1 - x \le 0. Nghiệm hiển nhiên là x∗=1x^* = 1 với p∗=1p^* = 1: không có ràng buộc thì cực tiểu ở x=0x = 0, nhưng điểm này không chấp nhận được, nên nghiệm nằm ở biên của miền ràng buộc.

12.2Hàm Lagrange và hàm đối ngẫu#

Ý tưởng của phương pháp Lagrange là thay việc cấm vi phạm ràng buộc bằng việc tính giá cho mỗi đơn vị vi phạm. Ta gắn cho mỗi ràng buộc bất đẳng thức một giá αi≥0\alpha_i \ge 0 và cho mỗi ràng buộc đẳng thức một giá νj\nu_j.

Định nghĩa 12.2 (Hàm Lagrange, hàm đối ngẫu)

Hàm Lagrange của bài toán ở Định nghĩa 12.1 là

L(x,α,ν)=f0(x)+∑i=1mαifi(x)+∑j=1pνjhj(x),\mathcal{L}(x, \alpha, \nu) = f_0(x) + \sum_{i=1}^{m}\alpha_i f_i(x) + \sum_{j=1}^{p}\nu_j h_j(x),

với các nhân tử Lagrange αi≥0\alpha_i \ge 0 và νj∈R\nu_j \in \mathbb{R}. Hàm đối ngẫu là cực tiểu của hàm Lagrange theo xx:

g(α,ν)=inf⁡xL(x,α,ν).g(\alpha, \nu) = \inf_x \mathcal{L}(x, \alpha, \nu).

Điều kiện αi≥0\alpha_i \ge 0 là bắt buộc: khi ràng buộc bị vi phạm, tức fi(x)>0f_i(x) > 0, số hạng αifi(x)\alpha_i f_i(x) phải làm tăng giá trị hàm, nghĩa là một khoản phạt.

Hàm đối ngẫu gg luôn là hàm lõm theo (α,ν)(\alpha, \nu), kể cả khi bài toán gốc không lồi. Lý do là với mỗi xx cố định, L\mathcal{L} là hàm affine theo (α,ν)(\alpha, \nu), và cận dưới đúng (infimum) của một họ hàm affine luôn là hàm lõm. Nhờ vậy bài toán cực đại gg luôn là một bài toán tối ưu lồi, dù bài toán gốc khó tới đâu.

Ví dụ 12.2

Với Ví dụ 12.1, L(x,α)=x2+α(1−x)\mathcal{L}(x, \alpha) = x^2 + \alpha(1 - x). Cực tiểu theo xx: đạo hàm 2x−α=02x - \alpha = 0 cho x=α/2x = \alpha/2. Thay vào:

g(α)=α24+α(1−α2)=α−α24,α≥0.g(\alpha) = \frac{\alpha^2}{4} + \alpha\Big(1 - \frac{\alpha}{2}\Big) = \alpha - \frac{\alpha^2}{4}, \qquad \alpha \ge 0.

Đây là một parabol úp xuống, đúng là hàm lõm.

12.3Đối ngẫu yếu và đối ngẫu mạnh#

Định lý 12.1 (Đối ngẫu yếu)

Với mọi α≥0\alpha \ge 0 và mọi ν\nu: g(α,ν)≤p∗g(\alpha, \nu) \le p^*.

Chứng minh

Lấy xx bất kỳ chấp nhận được. Vì fi(x)≤0f_i(x) \le 0, αi≥0\alpha_i \ge 0 và hj(x)=0h_j(x) = 0, ta có L(x,α,ν)≤f0(x)\mathcal{L}(x, \alpha, \nu) \le f_0(x). Do đó g(α,ν)≤L(x,α,ν)≤f0(x)g(\alpha, \nu) \le \mathcal{L}(x, \alpha, \nu) \le f_0(x). Lấy cận dưới đúng theo mọi xx chấp nhận được, vế phải trở thành p∗p^*.

Mỗi giá trị của hàm đối ngẫu là một chặn dưới của giá trị tối ưu. Với ví dụ xuyên suốt, g(0)=0g(0) = 0, g(1)=0,75g(1) = 0{,}75, g(3)=0,75g(3) = 0{,}75 và g(4)=0g(4) = 0, đều không vượt quá p∗=1p^* = 1. Bài toán đối ngẫu là tìm chặn dưới tốt nhất:

d∗=max⁡α≥0, νg(α,ν)  ≤  p∗.d^{*} = \max_{\alpha \ge 0,\, \nu} g(\alpha, \nu) \;\le\; p^{*}.

Hiệu p∗−d∗≥0p^* - d^* \ge 0 gọi là khe đối ngẫu. Khi khe bằng 0 ta có đối ngẫu mạnh, và giải bài toán đối ngẫu cho đúng giá trị tối ưu của bài toán gốc.

Định lý 12.2 (Điều kiện Slater)

Nếu bài toán là lồi và tồn tại một điểm chấp nhận được thoả mọi ràng buộc bất đẳng thức một cách chặt, fi(x)<0f_i(x) < 0 với mọi ii, thì đối ngẫu mạnh xảy ra.

Điều kiện Slater yêu cầu miền chấp nhận được có "phần trong", và hầu hết các bài toán lồi trong học máy thoả điều kiện này. Chẳng hạn, với SVM lề cứng trên dữ liệu tách được, nhân một siêu phẳng tách đúng với một hệ số đủ lớn cho một điểm thoả mọi ràng buộc một cách chặt.

Ví dụ 12.3

Tiếp tục Ví dụ 12.2: g(α)=α−α2/4g(\alpha) = \alpha - \alpha^2/4 đạt cực đại tại α∗=2\alpha^* = 2, với d∗=g(2)=1d^* = g(2) = 1. Vậy d∗=p∗=1d^* = p^* = 1 và khe đối ngẫu bằng 0. Điều kiện Slater thoả vì điểm x=2x = 2 có f1(2)=−1<0f_1(2) = -1 < 0.

Có thể hiểu vì sao giá tốt nhất là 2. Với giá α\alpha, cực tiểu của hàm Lagrange theo xx là x=α/2x = \alpha/2. Giá quá thấp thì vi phạm ràng buộc vẫn có lời: với α=1\alpha = 1, cực tiểu là x=0,5x = 0{,}5, nằm ngoài miền x≥1x \ge 1. Giá quá cao thì ràng buộc bị thoả thừa: với α=3\alpha = 3, cực tiểu là x=1,5x = 1{,}5. Ở α=2\alpha = 2, cực tiểu rơi đúng vào x=1x = 1, điểm biên của ràng buộc, và chặn dưới chạm giá trị tối ưu.

12.4Điều kiện KKT#

Định lý 12.3 (Điều kiện Karush–Kuhn–Tucker)

Xét bài toán lồi có các hàm khả vi và thoả điều kiện Slater. Điểm x∗x^* là nghiệm tối ưu khi và chỉ khi tồn tại (α∗,ν∗)(\alpha^*, \nu^*) sao cho bốn nhóm điều kiện sau thoả:

Điều kiện Công thức Ý nghĩa
Chấp nhận được của bài toán gốc fi(x∗)≤0f_i(x^*) \le 0, hj(x∗)=0h_j(x^*) = 0 nghiệm thoả mọi ràng buộc
Chấp nhận được của bài toán đối ngẫu αi∗≥0\alpha_i^* \ge 0 giá không âm
Bù (complementary slackness) αi∗fi(x∗)=0\alpha_i^{*} f_i(x^{*}) = 0 ràng buộc không chặt thì giá bằng 0
Dừng ∇xL(x∗,α∗,ν∗)=0\nabla_x \mathcal{L}(x^*,\alpha^*,\nu^*) = 0 x∗x^* là điểm dừng của hàm Lagrange

Điều kiện bù là điều kiện quan trọng nhất cho Chương 13. Nó nói rằng với mỗi ràng buộc, một trong hai điều phải xảy ra: hoặc ràng buộc chặt tại nghiệm, fi(x∗)=0f_i(x^*) = 0, tức nghiệm nằm đúng trên biên của ràng buộc đó, hoặc giá của nó bằng 0, αi∗=0\alpha_i^* = 0. Một ràng buộc không chặt thì không ảnh hưởng tới nghiệm: bỏ nó đi, nghiệm không đổi.

Ví dụ 12.4

Với Ví dụ 12.1: điều kiện dừng 2x∗−α∗=02x^* - \alpha^* = 0, điều kiện bù α∗(1−x∗)=0\alpha^*(1 - x^*) = 0. Nếu α∗=0\alpha^* = 0 thì x∗=0x^* = 0, vi phạm ràng buộc x≥1x \ge 1. Vậy α∗>0\alpha^* > 0, kéo theo x∗=1x^* = 1 và α∗=2\alpha^* = 2, khớp với Ví dụ 12.3. Nếu đổi ràng buộc thành x≥−1x \ge -1, nghiệm là x∗=0x^* = 0, ràng buộc không chặt (0>−10 > -1), và điều kiện bù cho α∗=0\alpha^* = 0: ràng buộc này không có vai trò gì.

Nhân tử Lagrange còn có ý nghĩa giá bóng (shadow price): nó đo giá trị tối ưu thay đổi bao nhiêu khi ràng buộc được nới lỏng. Nếu ràng buộc fi(x)≤0f_i(x) \le 0 được nới thành fi(x)≤uf_i(x) \le u, thì ∂p∗/∂u=−αi∗\partial p^*/\partial u = -\alpha_i^*. Trong ví dụ, nới 1−x≤u1 - x \le u cho x≥1−ux \ge 1 - u và p∗(u)=(1−u)2p^*(u) = (1-u)^2, có đạo hàm tại u=0u = 0 bằng −2=−α∗-2 = -\alpha^*. Ràng buộc có giá lớn là ràng buộc đang "cản" nghiệm nhiều nhất.

Áp dụng vào SVM ở chương sau, điều kiện bù có nghĩa là chỉ những điểm dữ liệu nằm đúng trên lề mới có nhân tử αi>0\alpha_i > 0 và mới ảnh hưởng tới nghiệm. Đó là định nghĩa của vector hỗ trợ, và nó là hệ quả của điều kiện KKT chứ không phải một lựa chọn thiết kế.

12.5Ý nghĩa của bài toán đối ngẫu#

Có ba lý do để giải bài toán đối ngẫu thay vì bài toán gốc. Lý do đầu tiên là kích thước: bài toán gốc của SVM có dd biến là các trọng số, còn bài toán đối ngẫu có nn biến, mỗi điểm dữ liệu một nhân tử, nên khi dd lớn hơn nn nhiều thì bài toán đối ngẫu nhỏ hơn. Lý do thứ hai là chặn dưới: với bất kỳ α≥0\alpha \ge 0 nào, g(α)g(\alpha) là chặn dưới của p∗p^*, nên hiệu f0(x)−g(α)f_0(x) - g(\alpha) giữa một điểm chấp nhận được và một điểm đối ngẫu cho biết nghiệm hiện tại cách tối ưu tối đa bao xa, và nhiều thuật toán dùng khe này làm tiêu chí dừng. Với ví dụ xuyên suốt, điểm chấp nhận được x=1,2x = 1{,}2 có f0=1,44f_0 = 1{,}44 và g(1)=0,75g(1) = 0{,}75, nên x=1,2x = 1{,}2 cách tối ưu không quá 0,69 mà không cần biết p∗p^*; thực tế nó cách 0,44. Lý do thứ ba, quan trọng nhất, là cấu trúc: bài toán đối ngẫu của SVM chỉ phụ thuộc vào dữ liệu qua các tích vô hướng xi⊤xjx_i^\top x_j. Nhận xét này dẫn thẳng tới kernel, vì thay tích vô hướng bằng một hàm kernel là SVM làm việc được trong không gian đặc trưng phi tuyến. Ở dạng bài toán gốc, cấu trúc này không lộ ra.

12.6Tóm tắt#

Phương pháp Lagrange thay ràng buộc bằng khoản phạt có giá αi≥0\alpha_i \ge 0, và hàm đối ngẫu, cực tiểu của hàm Lagrange theo xx, luôn lõm. Mỗi giá trị của hàm đối ngẫu là một chặn dưới của giá trị tối ưu, và với bài toán lồi thoả điều kiện Slater, chặn dưới tốt nhất đúng bằng giá trị tối ưu. Điều kiện KKT đặc trưng cho nghiệm tối ưu, trong đó điều kiện bù nói rằng ràng buộc nào không chặt thì có giá bằng 0 và không ảnh hưởng tới nghiệm. Nhân tử Lagrange là giá bóng, đo giá trị tối ưu thay đổi bao nhiêu khi nới ràng buộc. Ví dụ min⁡x2\min x^2 với x≥1x \ge 1 cho x∗=1x^* = 1, α∗=2\alpha^* = 2 và khe đối ngẫu bằng 0; α∗=2\alpha^* = 2 là giá làm cực tiểu không ràng buộc của hàm Lagrange rơi đúng vào biên của ràng buộc.

Chương 13 áp dụng toàn bộ bộ công cụ này cho SVM: bài toán gốc tìm siêu phẳng có lề lớn nhất, điều kiện bù chỉ ra vector hỗ trợ, và bài toán đối ngẫu dẫn tới kernel.


13Máy vector hỗ trợ#

Quay lại perceptron ở Mục 6.2: trên dữ liệu tách được, nó dừng ở siêu phẳng tách đúng đầu tiên mà nó tìm được, trong khi có vô số siêu phẳng như vậy. Với phiên bản tách được của sáu sinh viên ở Mục 6.5, ba người ôn 1, 2, 3 giờ trượt và ba người ôn 4, 5, 6 giờ đỗ, nên mọi ngưỡng nằm giữa 3 và 4 giờ đều tách đúng. Perceptron xuất phát từ w=0w = 0, duyệt lần lượt sáu người theo thứ tự, và dừng ở w=3w = 3, hệ số chặn −10-10, tức ngưỡng 3133\tfrac13 giờ, cách sinh viên 3 chỉ một phần ba giờ. Máy vector hỗ trợ (support vector machine, SVM) đặt ra một tiêu chí để chọn giữa chúng: lấy siêu phẳng cách xa dữ liệu nhất. Tiêu chí đơn giản này dẫn tới một bài toán tối ưu có ràng buộc, và toàn bộ công cụ của Chương 11 và 12 giờ được dùng tới: bài toán là lồi, điều kiện bù chỉ ra những điểm quyết định nghiệm, và bài toán đối ngẫu mở đường cho kernel, cách để SVM vẽ được biên quyết định phi tuyến.

13.1Ý tưởng lề cực đại#

Khi dữ liệu tách được tuyến tính, có vô số siêu phẳng tách đúng hai lớp. Perceptron dừng ở siêu phẳng đầu tiên nó tìm được, và siêu phẳng đó có thể nằm sát một điểm dữ liệu. Một điểm mới ở gần điểm đó, chỉ lệch đi một chút vì nhiễu, có thể bị phân loại sai.

SVM chọn siêu phẳng có lề lớn nhất, tức khoảng cách từ siêu phẳng tới điểm dữ liệu gần nhất là lớn nhất. Siêu phẳng như vậy nằm "chính giữa" khoảng trống giữa hai lớp. Với sáu sinh viên tách được, đó là ngưỡng 3,5 giờ, cách đều sinh viên 3 và sinh viên 4 nửa giờ. Trực giác là biên càng xa dữ liệu thì càng chịu được nhiễu. Lý thuyết học thống kê (Vapnik, 1995) chính xác hoá trực giác này: với dữ liệu nằm trong hình cầu bán kính RR, chiều VC của lớp các siêu phẳng có lề ít nhất γ\gamma không vượt quá min⁡(⌈R2/γ2⌉,d)+1\min\big(\lceil R^2/\gamma^2\rceil, d\big) + 1. Khi lề đủ rộng, độ phức tạp của mô hình được kiểm soát bởi tỉ số R/γR/\gamma chứ không bởi số chiều. Tỉ số này cũng là đại lượng xuất hiện trong định lý Novikoff ở Mục 6.2.

13.2Bài toán tối ưu của SVM lề cứng#

Theo Định lý 2.1, khoảng cách từ xix_i tới siêu phẳng w⊤x+b=0w^\top x + b = 0 là ∣w⊤xi+b∣/∥w∥|w^\top x_i + b|/\|w\|. Siêu phẳng không đổi nếu nhân ww và bb với cùng một số dương, nên ta có thể chọn thang đo sao cho điểm gần nhất thoả ∣w⊤xi+b∣=1|w^\top x_i + b| = 1. Khi đó mọi điểm thoả yi(w⊤xi+b)≥1y_i(w^\top x_i + b) \ge 1, và khoảng cách giữa hai siêu phẳng w⊤x+b=+1w^\top x + b = +1 và w⊤x+b=−1w^\top x + b = -1, tức độ rộng của lề, bằng 2/∥w∥2/\|w\|.

Cực đại 2/∥w∥2/\|w\| tương đương cực tiểu ∥w∥\|w\|, và tương đương cực tiểu 12∥w∥2\tfrac12\|w\|^2, dạng thuận tiện hơn vì khả vi.

Định nghĩa 13.1 (SVM lề cứng)

Với dữ liệu tách được tuyến tính, SVM lề cứng giải bài toán

min⁡w,b  12∥w∥2vớiyi(w⊤xi+b)≥1,i=1,…,n.\min_{w,b} \;\tfrac12\|w\|^2 \qquad\text{với}\qquad y_i(w^\top x_i + b) \ge 1, \quad i = 1, \dots, n.

Hàm mục tiêu là hàm bậc hai lồi với Hessian bằng ma trận đơn vị, còn các ràng buộc là affine. Đây là một bài toán quy hoạch toàn phương lồi ở đúng dạng chuẩn của Mục 12.1, nên có nghiệm duy nhất và mọi công cụ của Chương 12 đều áp dụng được.

Với sáu sinh viên tách được, mỗi người có một ràng buộc yi(wxi+b)≥1y_i(w x_i + b) \ge 1, với yi=−1y_i = -1 cho người trượt và +1+1 cho người đỗ. Hai ràng buộc chặt nhất thuộc về hai người gần ngưỡng nhất: sinh viên 4 cần 4w+b≥14w + b \ge 1, sinh viên 3 cần 3w+b≤−13w + b \le -1. Trừ hai bất đẳng thức cho nhau được w≥2w \ge 2. Muốn 12w2\tfrac12 w^2 nhỏ nhất thì lấy w=2w = 2, kéo theo b=−7b = -7. Biên 2x−7=02x - 7 = 0 nằm ở 3,5 giờ, và lề rộng 2/w=12/w = 1 giờ, đúng khoảng trống từ 3 tới 4 giờ. Bốn người còn lại thoả ràng buộc với dư: sinh viên 2 và 5 có yi(wxi+b)=3y_i(w x_i + b) = 3, sinh viên 1 và 6 có 5.

13.3Bài toán đối ngẫu và vector hỗ trợ#

Viết ràng buộc ở dạng chuẩn, 1−yi(w⊤xi+b)≤01 - y_i(w^\top x_i + b) \le 0, và lập hàm Lagrange:

L(w,b,α)=12∥w∥2+∑i=1nαi[1−yi(w⊤xi+b)],αi≥0.\mathcal{L}(w, b, \alpha) = \tfrac12\|w\|^2 + \sum_{i=1}^n \alpha_i\big[1 - y_i(w^\top x_i + b)\big], \qquad \alpha_i \ge 0.

Cho đạo hàm theo ww và bb bằng 0, ta được

∇wL=w−∑iαiyixi=0  ⟹  w=∑iαiyixi,∂L∂b=−∑iαiyi=0.\begin{aligned} \nabla_w \mathcal{L} &= w - \sum_i \alpha_i y_i x_i = 0 \;\Longrightarrow\; w = \sum_{i}\alpha_i y_i x_i, \\ \frac{\partial\mathcal{L}}{\partial b} &= -\sum_i \alpha_i y_i = 0. \end{aligned}

Thay ww trở lại hàm Lagrange, số hạng chứa bb biến mất nhờ ∑iαiyi=0\sum_i \alpha_i y_i = 0, và ta được bài toán đối ngẫu.

Định lý 13.1 (Bài toán đối ngẫu của SVM lề cứng)

max⁡α∑iαi−12∑i,jαiαjyiyj xi⊤xjvớiαi≥0,∑iαiyi=0.\begin{aligned} \max_{\alpha} \quad & \sum_i \alpha_i - \tfrac12\sum_{i,j}\alpha_i\alpha_j y_i y_j \, x_i^\top x_j \\ \text{với} \quad & \alpha_i \ge 0, \quad \sum_i\alpha_i y_i = 0. \end{aligned}

Từ nghiệm α∗\alpha^*, trọng số là w∗=∑iαi∗yixiw^* = \sum_i \alpha_i^* y_i x_i, và bộ phân loại là f(x)=∑iαi∗yi xi⊤x+b∗f(x) = \sum_i \alpha_i^* y_i\, x_i^\top x + b^*.

Từ định lý rút ra ngay hai điều. Điều thứ nhất là w∗w^* là tổ hợp tuyến tính của các điểm dữ liệu, với trọng số αi∗yi\alpha_i^* y_i. Điều thứ hai đến từ điều kiện bù (Mục 12.4): αi∗ [1−yi(w∗⊤xi+b∗)]=0\alpha_i^*\,[1 - y_i(w^{*\top} x_i + b^*)] = 0, nên αi∗>0\alpha_i^* > 0 chỉ có thể xảy ra với những điểm có yi(w∗⊤xi+b∗)=1y_i(w^{*\top} x_i + b^*) = 1, tức nằm đúng trên lề. Các điểm đó gọi là vector hỗ trợ. Mọi điểm khác có αi∗=0\alpha_i^* = 0 và không đóng góp gì vào w∗w^*.

Hệ số chặn b∗b^* tính được từ một vector hỗ trợ bất kỳ: vì ys(w∗⊤xs+b∗)=1y_s(w^{*\top} x_s + b^*) = 1 và ys2=1y_s^2 = 1, ta có b∗=ys−w∗⊤xsb^* = y_s - w^{*\top} x_s. Trên thực tế người ta lấy trung bình trên mọi vector hỗ trợ để giảm sai số số học.

Với sáu sinh viên tách được, chỉ sinh viên 3 và 4 nằm trên lề, nên chỉ α3\alpha_3 và α4\alpha_4 có thể khác 0. Điều kiện ∑iαiyi=0\sum_i \alpha_i y_i = 0 cho α3=α4\alpha_3 = \alpha_4, và w=α4⋅4−α3⋅3=α4w = \alpha_4 \cdot 4 - \alpha_3 \cdot 3 = \alpha_4. Vì w=2w = 2, ta được α3=α4=2\alpha_3 = \alpha_4 = 2. Giá trị bài toán đối ngẫu là α3+α4−12w2=4−2=2\alpha_3 + \alpha_4 - \tfrac12 w^2 = 4 - 2 = 2, bằng giá trị 12w2=2\tfrac12 w^2 = 2 của bài toán gốc, và hệ số chặn tính từ sinh viên 4 là b=1−2⋅4=−7b = 1 - 2 \cdot 4 = -7. Bốn sinh viên còn lại có αi=0\alpha_i = 0: bỏ họ khỏi dữ liệu, nghiệm không đổi.

Thí nghiệm giải SVM bằng thư viện libsvm (qua scikit-learn) trên 120 điểm tách được, rồi kiểm tra các khẳng định trên từ nghiệm đối ngẫu:

Văn bản
Dung lai w tu nghiem doi ngau: lech so voi coef_ cua sklearn = 0.000e+00
Vector ho tro co thoa y_i(w.x_i + b) = 1 khong? lech lon nhat = 2.523e-08
So vector ho tro: 3 tren 120 diem (2.5%)

Doi ngau manh:
  gia tri bai toan goc  0.5*||w||^2  = 1.1037868651
  gia tri bai toan doi ngau          = 1.1037868254
  khe doi ngau                       = 3.961e-08
Le = 2/||w|| = 1.346085; khoang cach nho nhat tu diem toi sieu phang x 2 = 1.346085

Kết quả khớp với lý thuyết ở cả bốn điểm: công thức w=∑iαiyixiw = \sum_i\alpha_i y_i x_i cho đúng vector trọng số của thư viện; các vector hỗ trợ nằm trên lề với sai lệch 2,5×10−82{,}5\times10^{-8}; khe đối ngẫu bằng 4,0×10−84{,}0\times10^{-8}, tức bằng 0 trong phạm vi dung sai của bộ giải; và độ rộng lề 2/∥w∥2/\|w\| đúng bằng hai lần khoảng cách từ điểm gần nhất tới siêu phẳng.

Chỉ 3 trong 120 điểm là vector hỗ trợ. Bỏ 117 điểm còn lại khỏi tập huấn luyện và huấn luyện lại thì nghiệm không đổi. Tính thưa này của SVM là hệ quả trực tiếp của điều kiện bù.

13.4SVM lề mềm#

Bài toán ở Định nghĩa 13.1 vô nghiệm khi dữ liệu không tách được tuyến tính, và ngay cả khi tách được, một điểm nhiễu nằm lẫn sang lớp kia có thể ép lề hẹp lại rất nhiều. SVM lề mềm (Cortes và Vapnik, 1995) cho phép vi phạm lề nhưng tính giá cho mỗi vi phạm.

Định nghĩa 13.2 (SVM lề mềm)

Với các biến bù ξi≥0\xi_i \ge 0 và tham số C>0C > 0:

min⁡w,b,ξ12∥w∥2+C∑i=1nξivớiyi(w⊤xi+b)≥1−ξi,ξi≥0.\begin{aligned} \min_{w,b,\xi} \quad & \tfrac12\|w\|^2 + C\sum_{i=1}^n \xi_i \\ \text{với} \quad & y_i(w^\top x_i + b) \ge 1 - \xi_i, \quad \xi_i \ge 0. \end{aligned}

Biến bù ξi\xi_i đo mức vi phạm của điểm thứ ii: ξi=0\xi_i = 0 nếu điểm nằm ngoài lề và đúng phía, 0<ξi≤10 < \xi_i \le 1 nếu điểm nằm trong lề nhưng vẫn đúng phía, ξi>1\xi_i > 1 nếu điểm bị phân loại sai. Tại nghiệm tối ưu, ξi=max⁡(0,1−yi(w⊤xi+b))\xi_i = \max(0, 1 - y_i(w^\top x_i + b)), đúng bằng mất mát hinge ở Mục 6.1. Do đó bài toán tương đương với

min⁡w,b  12∥w∥2+C∑i=1nmax⁡(0, 1−yi(w⊤xi+b)),\min_{w,b}\; \tfrac12\|w\|^2 + C\sum_{i=1}^n \max\big(0,\ 1 - y_i(w^\top x_i + b)\big),

tức mất mát hinge cộng regularization ℓ2\ell_2. Cách viết này cho thấy SVM lề mềm nằm trong cùng khung với hồi quy logistic có regularization: cùng mô hình tuyến tính, cùng thành phần phạt ∥w∥2\|w\|^2, khác nhau ở hàm mất mát. Tham số CC đóng vai trò nghịch đảo của hệ số regularization: CC lớn nghĩa là phạt vi phạm nặng, tức regularization yếu.

Bài toán đối ngẫu của SVM lề mềm giống hệt Định lý 13.1, chỉ thêm chặn trên αi≤C\alpha_i \le C. Điều kiện KKT chia các điểm dữ liệu thành ba nhóm, như bảng dưới.

Nhân tử αi\alpha_i Vị trí của điểm Ảnh hưởng tới nghiệm
αi=0\alpha_i = 0 ngoài lề, đúng phía (yif(xi)≥1y_i f(x_i) \ge 1) không
0<αi<C0 < \alpha_i < C đúng trên lề (yif(xi)=1y_i f(x_i) = 1) có
αi=C\alpha_i = C vi phạm lề: trong lề hoặc sai phía (yif(xi)≤1y_i f(x_i) \le 1) có

Sáu sinh viên ban đầu, với sinh viên 3 đỗ và sinh viên 4 trượt, có đủ cả ba nhóm. Dữ liệu này không tách được nên SVM lề cứng vô nghiệm. Với lề mềm và mọi C≥1/3C \ge 1/3, nghiệm là w=2/3w = 2/3, b=−7/3b = -7/3: biên vẫn ở 3,5 giờ, hai mép lề ở 2 giờ và 5 giờ, lề rộng 3 giờ. Sinh viên 1 và 6 nằm ngoài lề, yif(xi)=5/3y_i f(x_i) = 5/3, nên αi=0\alpha_i = 0. Sinh viên 2 và 5 nằm đúng trên mép lề, yif(xi)=1y_i f(x_i) = 1, với 0<αi<C0 < \alpha_i < C; ở C=1C = 1 thì αi≈0,556\alpha_i \approx 0{,}556. Sinh viên 3 và 4 nằm sai phía, yif(xi)=−1/3y_i f(x_i) = -1/3, nên αi=C\alpha_i = C. Tăng CC thêm nữa không đổi nghiệm, vì tăng ww chỉ làm lề hẹp lại mà không cứu được sinh viên 3 và 4: không ngưỡng nào phân loại đúng cả hai người. Ngược lại, khi CC nhỏ thì vi phạm rẻ và lề rộng ra: ở C=0,1C = 0{,}1, w=0,4w = 0{,}4, hai mép lề ở 1 giờ và 6 giờ, và cả sáu sinh viên đều là vector hỗ trợ.

Thí nghiệm trên hai lớp chồng lấn nhau, với năm giá trị CC, đếm số điểm trong từng nhóm.

Hình 9
Hình 9. Trái và giữa: cùng một tập dữ liệu với hai giá trị CC; đường liền là biên quyết định, hai đường đứt là hai mép lề. Phải: SVM với kernel RBF trên dữ liệu hai đường tròn đồng tâm.
CC Lề 2/∣w∣2/|w| Số vector hỗ trợ Đúng trên lề Vi phạm lề Sai số huấn luyện Sai số kiểm tra
0,003 5,6121 114 0 114 0,1500 0,1795
0,030 2,6409 66 3 63 0,1750 0,1727
0,300 1,8286 48 3 45 0,1583 0,1790
3,000 1,7312 45 3 42 0,1667 0,1795
300,000 1,7311 45 3 42 0,1667 0,1795

Với CC nhỏ, vi phạm rẻ nên lề rộng (5,61) và rất nhiều điểm vi phạm lề: ở C=0,003C = 0{,}003, cả 114 vector hỗ trợ đều là điểm vi phạm, không điểm nào nằm đúng trên lề. Với CC lớn, vi phạm đắt nên lề hẹp lại (1,73) và số vector hỗ trợ giảm còn 45. Từ C=3C = 3 trở lên nghiệm gần như không đổi, vì các điểm vi phạm còn lại là những điểm nằm sâu trong vùng chồng lấn, không siêu phẳng nào tránh được, giống sinh viên 3 và 4 ở trên.

Sai số kiểm tra chỉ dao động trong khoảng 0,173 tới 0,180, tức CC ảnh hưởng ít tới chất lượng trong thí nghiệm này. Điều đó phản ánh bản chất của dữ liệu: biên tối ưu ở đây vốn là tuyến tính, và SVM tuyến tính không đủ linh hoạt để overfitting đáng kể. Với kernel phi tuyến, mô hình linh hoạt hơn nhiều, và CC trở thành siêu tham số quan trọng cần chọn bằng cross-validation.

13.5Kernel#

Bài toán đối ngẫu ở Định lý 13.1 và bộ phân loại f(x)=∑iαiyi xi⊤x+bf(x) = \sum_i \alpha_i y_i\, x_i^\top x + b chỉ dùng dữ liệu qua các tích vô hướng. Giả sử ta muốn biến đổi dữ liệu sang một không gian đặc trưng mới bằng ánh xạ φ\varphi, chẳng hạn thêm các đặc trưng bậc hai, rồi chạy SVM tuyến tính trong không gian mới. Khi đó ta chỉ cần tính được tích vô hướng trong không gian mới:

K(x,x′)=φ(x)⊤φ(x′).K(x, x') = \varphi(x)^\top \varphi(x').

Hàm KK gọi là kernel. Nếu KK tính được trực tiếp từ xx và x′x' mà không cần tính φ\varphi, ta làm việc được trong không gian đặc trưng mà không bao giờ phải dựng nó. Kỹ thuật này gọi là thủ thuật kernel (kernel trick).

Ví dụ 13.1

Với x∈R2x \in \mathbb{R}^2, xét K(x,z)=(x⊤z)2K(x, z) = (x^\top z)^2. Khai triển:

(x1z1+x2z2)2=x12z12+2x1x2z1z2+x22z22=φ(x)⊤φ(z),φ(x)=(x12, 2 x1x2, x22).\begin{aligned} (x_1 z_1 + x_2 z_2)^2 &= x_1^2 z_1^2 + 2x_1x_2 z_1z_2 + x_2^2 z_2^2 \\ &= \varphi(x)^\top\varphi(z), \qquad \varphi(x) = \big(x_1^2,\ \sqrt2\,x_1x_2,\ x_2^2\big). \end{aligned}

Tính KK trực tiếp tốn một tích vô hướng hai chiều và một phép bình phương. Chẳng hạn với x=(1,2)x = (1, 2) và z=(3,−1)z = (3, -1): x⊤z=1x^\top z = 1 nên K(x,z)=1K(x, z) = 1; còn φ(x)=(1; 22; 4)\varphi(x) = (1;\ 2\sqrt2;\ 4) và φ(z)=(9; −32; 1)\varphi(z) = (9;\ -3\sqrt2;\ 1) cho φ(x)⊤φ(z)=9−12+4=1\varphi(x)^\top\varphi(z) = 9 - 12 + 4 = 1. Với x∈Rdx \in \mathbb{R}^d và kernel đa thức bậc pp, không gian đặc trưng có số chiều cỡ dpd^p, trong khi KK vẫn chỉ tốn O(d)O(d).

Không phải hàm hai biến nào cũng là một kernel. Điều kiện cần và đủ, theo định lý Mercer, là với mọi tập điểm x1,…,xnx_1, \dots, x_n, ma trận kernel [K(xi,xj)]i,j[K(x_i, x_j)]_{i,j} đối xứng và nửa xác định dương. Điều kiện này bảo đảm bài toán đối ngẫu vẫn lồi. Bảng dưới liệt kê ba kernel thông dụng.

Kernel Công thức Không gian đặc trưng
Tuyến tính x⊤x′x^\top x' chính Rd\mathbb{R}^d
Đa thức bậc pp (γ x⊤x′+r)p(\gamma\, x^\top x' + r)^p mọi đơn thức bậc không quá pp
RBF (Gauss) exp⁡(−γ∣x−x′∣2)\exp(-\gamma|x - x'|^2) vô hạn chiều

Kernel RBF cho giá trị gần 1 khi hai điểm gần nhau và gần 0 khi chúng xa nhau, nên có thể hiểu nó như một thước đo độ giống nhau. Tham số γ\gamma quyết định "gần" là bao xa: γ\gamma lớn làm mỗi điểm chỉ ảnh hưởng một vùng rất nhỏ quanh nó, biên quyết định uốn lượn theo từng điểm và dễ overfitting; γ\gamma nhỏ làm biên trơn. Không gian đặc trưng của kernel RBF có vô hạn chiều, nhưng mỗi lần tính kernel chỉ tốn O(d)O(d).

Thí nghiệm trên dữ liệu hai đường tròn đồng tâm, loại dữ liệu không tách được bằng bất kỳ đường thẳng nào, cho kết quả sau.

Kernel Độ chính xác
Tuyến tính 0,6150
Đa thức bậc 2 1,0000
RBF 1,0000

Kernel đa thức bậc 2 đạt độ chính xác tuyệt đối vì không gian đặc trưng của nó chứa x12x_1^2 và x22x_2^2, nên chứa x12+x22x_1^2 + x_2^2, bình phương khoảng cách tới tâm, đúng là đại lượng phân biệt hai đường tròn. Ví dụ này minh hoạ một nguyên tắc chung: chọn kernel là đưa vào mô hình một giả thiết về dạng của biên quyết định.

13.6SVM nhiều lớp và chi phí tính toán#

SVM được thiết kế cho hai lớp. Có ba cách mở rộng sang KK lớp, tóm tắt trong bảng dưới.

Cách Số mô hình Ghi chú
Một chọi phần còn lại (one-vs-rest) KK đơn giản; điểm số của các mô hình không cùng thang đo
Một chọi một (one-vs-one) K(K−1)/2K(K-1)/2 mỗi mô hình chỉ học trên dữ liệu hai lớp; cách mặc định của libsvm
Crammer–Singer 1 một bài toán tối ưu chung cho mọi lớp; ít dùng hơn

Điểm yếu thật sự của SVM với kernel là chi phí tính toán. Huấn luyện cần làm việc với ma trận kernel n×nn \times n, và các thuật toán thực tế như SMO có chi phí trong khoảng O(n2)O(n^2) tới O(n3)O(n^3) tuỳ dữ liệu. Khi dự đoán, phải tính kernel giữa điểm mới và mọi vector hỗ trợ, mà số vector hỗ trợ thường tăng tuyến tính theo nn khi dữ liệu chồng lấn. Với nn cỡ hàng triệu, cả hai chi phí đều quá lớn, trong khi mỗi epoch của SGD trên mạng nơ-ron chỉ tốn chi phí tuyến tính theo nn. Vì vậy SVM với kernel ít được dùng cho dữ liệu rất lớn, và lý do không nằm ở độ chính xác.

SVM vẫn là lựa chọn tốt khi số điểm dữ liệu vừa phải, tới vài chục nghìn, số đặc trưng lớn so với số điểm, và cần một mô hình mạnh với ít siêu tham số. Với dữ liệu văn bản biểu diễn bằng vector TF-IDF, SVM tuyến tính đến nay vẫn là một mô hình cơ sở rất khó vượt qua.

13.7Tóm tắt#

SVM chọn siêu phẳng có lề lớn nhất, và với thang đo chọn sao cho điểm gần nhất có ∣w⊤x+b∣=1|w^\top x + b| = 1, bài toán trở thành cực tiểu 12∥w∥2\tfrac12\|w\|^2 dưới các ràng buộc affine, một bài toán lồi. Với sáu sinh viên tách được, SVM đặt ngưỡng ở 3,5 giờ với w=2w = 2, b=−7b = -7, trong khi perceptron dừng ở 3133\tfrac13 giờ. Bài toán đối ngẫu cho w=∑iαiyixiw = \sum_i \alpha_i y_i x_i, và điều kiện bù làm αi\alpha_i bằng 0 với mọi điểm không nằm trên lề, nên chỉ vài vector hỗ trợ quyết định nghiệm: sinh viên 3 và 4 với α3=α4=2\alpha_3 = \alpha_4 = 2 trong ví dụ, 3 trên 120 điểm trong thí nghiệm, với khe đối ngẫu cỡ 4×10−84 \times 10^{-8}. SVM lề mềm thêm biến bù và tương đương với mất mát hinge cộng regularization ℓ2\ell_2, với CC là nghịch đảo của cường độ regularization; trên sáu sinh viên ban đầu, nó chia các điểm thành ba nhóm của điều kiện KKT, với sinh viên 3 và 4 vi phạm lề ở mọi CC. Vì bài toán đối ngẫu chỉ dùng tích vô hướng, thay tích vô hướng bằng kernel cho biên phi tuyến mà không phải dựng không gian đặc trưng. Điểm yếu của SVM với kernel là chi phí tăng nhanh theo số điểm dữ liệu.

Mười ba chương đầu đều làm việc với dữ liệu có nhãn. Ba chương còn lại chuyển sang dữ liệu không có nhãn, bắt đầu bằng câu hỏi: trong hàng trăm đặc trưng, những hướng nào thật sự mang thông tin? Chương 14 trả lời bằng PCA.


14Giảm chiều dữ liệu#

Dữ liệu thật thường có hàng trăm đặc trưng, nhưng chỉ vài hướng trong số đó thật sự mang thông tin, phần còn lại là nhiễu hoặc lặp lại những gì đã có. Nếu tìm được các hướng đó, ta nén được dữ liệu, khử được nhiễu, và vẽ được dữ liệu lên mặt phẳng để nhìn. Phương pháp tuyến tính phổ biến nhất cho việc này là PCA, và nó hoá ra chỉ là phân tích trị riêng của ma trận hiệp phương sai ở Chương 3. Ta cũng sẽ thấy giới hạn của PCA khi dữ liệu có nhãn, và phương pháp thay thế có dùng nhãn là LDA. Một ví dụ hai chiều đủ nhỏ để tính tay mọi bước, điểm hai bài kiểm tra của bốn sinh viên, đi suốt chương.

14.1Mục đích của giảm chiều#

Giảm chiều là biến đổi dữ liệu từ dd chiều xuống k<dk < d chiều mà giữ lại càng nhiều thông tin hữu ích càng tốt. Lý do đầu tiên để làm việc này là tính toán: thuật toán chạy nhanh hơn và tốn ít bộ nhớ hơn trên dữ liệu ít chiều. Lý do thứ hai là thống kê: ít chiều hơn nghĩa là ít tham số hơn cho mô hình phía sau, nên phương sai của ước lượng nhỏ hơn, và theo nghĩa này giảm chiều là một dạng regularization. Lý do thứ ba là trực quan hoá: con người không nhìn được dữ liệu 100 chiều, nhưng nhìn được hình chiếu của nó lên mặt phẳng hai chiều. Ngoài ra, lời nguyền số chiều ở Mục 7.2 khiến khoảng cách mất dần ý nghĩa khi số chiều tăng, nên các phương pháp dựa trên khoảng cách như k-NN và K-means thường cần giảm chiều trước.

14.2Phân tích thành phần chính (PCA)#

PCA (Pearson, 1901) tìm các hướng mà dữ liệu trải rộng nhất. Hình dung một đám mây điểm có dạng hình elip dẹt trong mặt phẳng: trục dài của elip là hướng giữ được nhiều thông tin nhất về vị trí các điểm, và chiếu mọi điểm lên trục đó mất ít thông tin nhất.

Ví dụ của chương là điểm hai bài kiểm tra của bốn sinh viên A, B, C, D, đã trừ điểm trung bình của lớp ở mỗi bài:

Sinh viên A B C D
Bài 1, x1x_1 2 1 −1 −2
Bài 2, x2x_2 1 2 −2 −1

Bốn điểm nằm dọc theo đường chéo x1=x2x_1 = x_2: người làm tốt bài này thường cũng làm tốt bài kia. Đám mây điểm là một elip dẹt với trục dài nằm trên đường chéo đó.

Gọi XcX_c là ma trận dữ liệu đã trừ trung bình của từng cột, và Σ=1n−1Xc⊤Xc\Sigma = \frac{1}{n-1}X_c^\top X_c là ma trận hiệp phương sai mẫu (Mục 3.3). Chiếu dữ liệu lên hướng đơn vị vv cho các toạ độ XcvX_c v, có phương sai v⊤Σvv^\top \Sigma v. PCA tìm hướng làm phương sai này lớn nhất:

max⁡v  v⊤Σvvới∥v∥2=1.\max_{v} \; v^\top \Sigma v \qquad \text{với} \qquad \|v\|_2 = 1.

Ràng buộc ∥v∥=1\|v\| = 1 là cần thiết, vì không có nó thì nhân vv với số lớn làm phương sai lớn tuỳ ý. Lập hàm Lagrange v⊤Σv−λ(v⊤v−1)v^\top\Sigma v - \lambda(v^\top v - 1) và cho gradient theo vv bằng 0, ta được

2Σv−2λv=0  ⟺  Σv=λv.2\Sigma v - 2\lambda v = 0 \;\Longleftrightarrow\; \Sigma v = \lambda v.

Vậy hướng tối ưu là một vector riêng của Σ\Sigma, và phương sai đạt được v⊤Σv=λv⊤v=λv^\top \Sigma v = \lambda v^\top v = \lambda đúng bằng trị riêng tương ứng. Để phương sai lớn nhất, ta chọn vector riêng ứng với trị riêng lớn nhất.

Với bốn sinh viên, dữ liệu đã có trung bình bằng 0. Ma trận Xc⊤XcX_c^\top X_c có các phần tử ∑x12=10\sum x_1^2 = 10, ∑x22=10\sum x_2^2 = 10 và ∑x1x2=8\sum x_1 x_2 = 8, nên

Σ=13(108810).\Sigma = \frac13\begin{pmatrix}10 & 8\\ 8 & 10\end{pmatrix}.

Hai vector riêng là v1=(1,1)/2v_1 = (1, 1)/\sqrt2 với trị riêng λ1=6\lambda_1 = 6 và v2=(1,−1)/2v_2 = (1, -1)/\sqrt2 với λ2=2/3\lambda_2 = 2/3; có thể kiểm tra trực tiếp, chẳng hạn Σ (1,1)⊤=13(18,18)⊤=6 (1,1)⊤\Sigma\,(1, 1)^\top = \tfrac13(18, 18)^\top = 6\,(1, 1)^\top. Thành phần chính thứ nhất là hướng "làm tốt cả hai bài", thành phần thứ hai là hướng "làm bài 1 tốt hơn bài 2".

Định nghĩa 14.1 (Thành phần chính)

Gọi λ1≥λ2≥⋯≥λd≥0\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_d \ge 0 là các trị riêng của ma trận hiệp phương sai Σ\Sigma và v1,…,vdv_1, \dots, v_d là các vector riêng trực chuẩn tương ứng. Vector vjv_j gọi là thành phần chính (principal component) thứ jj. PCA với kk thành phần biểu diễn mỗi điểm xx bằng kk toạ độ zj=vj⊤(x−xˉ)z_j = v_j^\top(x - \bar x), j=1,…,kj = 1, \dots, k.

Thành phần thứ hai là hướng có phương sai lớn nhất trong các hướng vuông góc với thành phần thứ nhất, và cứ tiếp tục như vậy. Theo định lý phổ, các vector riêng của ma trận đối xứng Σ\Sigma trực giao với nhau, nên các thành phần chính tự động vuông góc, và các toạ độ zjz_j không tương quan với nhau. Tỉ lệ λj/∑iλi\lambda_j/\sum_i \lambda_i gọi là tỉ lệ phương sai được giải thích bởi thành phần thứ jj. Với bốn sinh viên, toạ độ theo thành phần thứ nhất là z1=(x1+x2)/2z_1 = (x_1 + x_2)/\sqrt2, bằng 3/23/\sqrt2 cho A và B, −3/2-3/\sqrt2 cho C và D. Phương sai của bốn toạ độ này là 4⋅4,5/3=64 \cdot 4{,}5/3 = 6, đúng bằng λ1\lambda_1, và thành phần thứ nhất giải thích 6/(6+2/3)=90%6/(6 + 2/3) = 90\% phương sai.

PCA tính được theo hai cách: bằng phân tích trị riêng của Σ\Sigma, hoặc bằng SVD của XcX_c, vì theo Mục 2.6 các vector riêng của Xc⊤XcX_c^\top X_c là các cột của VV và trị riêng của Σ\Sigma là di2/(n−1)d_i^2/(n-1). Thí nghiệm tính theo cả hai cách trên dữ liệu 8 chiều và in ra bốn trị riêng đầu:

Văn bản
tri rieng cua ma tran hiep phuong sai : [11.52671  4.855133  2.064187  0.142466]
d_i^2/(n-1) tu SVD                    : [11.52671  4.855133  2.064187  0.142466]
lech lon nhat tren ca 8 tri: 7.105e-15
goc giua cac truc chinh: [1. 1. 1. 1.]

Hai cách cho cùng trị riêng tới 7,1×10−157{,}1\times10^{-15}, và các trục chính trùng nhau: trị tuyệt đối cosine giữa các cặp trục tương ứng bằng 1, vì vector riêng chỉ xác định tới dấu. Trên thực tế nên dùng SVD của XcX_c, vì cách này không cần lập Xc⊤XcX_c^\top X_c, phép toán làm bình phương số điều kiện (Mục 2.6).

Lưu ý (Chuẩn hoá trước PCA)

PCA tìm hướng có phương sai lớn, nên kết quả phụ thuộc vào đơn vị đo. Nếu một đặc trưng đo bằng milimét và các đặc trưng khác đo bằng mét, phương sai của đặc trưng đó lớn hơn một triệu lần và thành phần chính thứ nhất gần như trùng với nó. Khi các đặc trưng có đơn vị khác nhau, cần chuẩn hoá mỗi đặc trưng về phương sai bằng 1 trước khi áp dụng PCA.

14.3Định lý Eckart–Young và sai số tái tạo#

Từ kk toạ độ z1,…,zkz_1, \dots, z_k có thể dựng lại gần đúng điểm ban đầu: x^=xˉ+∑j=1kzjvj\hat x = \bar x + \sum_{j=1}^k z_j v_j. Câu hỏi tự nhiên là dựng lại được chính xác tới đâu.

Định lý 14.1 (Eckart–Young, 1936)

Gọi XkX_k là ma trận tái tạo từ kk thành phần chính đầu tiên. Khi đó

∥Xc−Xk∥F2=(n−1)∑i>kλi,\|X_c - X_k\|_F^2 = (n-1)\sum_{i > k}\lambda_i,

và XkX_k là ma trận hạng kk gần XcX_c nhất theo chuẩn Frobenius: không có ma trận hạng kk nào cho sai số nhỏ hơn.

Vế phải của đẳng thức là tổng các trị riêng bị bỏ đi, nhân với n−1n - 1. Vậy sai số tái tạo bằng đúng phần phương sai không được giữ lại, và đây là đẳng thức chính xác chứ không phải xấp xỉ. Với bốn sinh viên và k=1k = 1, mỗi điểm được dựng lại bằng hình chiếu của nó lên v1v_1: A và B thành (1,5; 1,5)(1{,}5;\ 1{,}5), C và D thành (−1,5; −1,5)(-1{,}5;\ -1{,}5). Mỗi điểm lệch khỏi bản dựng lại một vector ±(0,5; −0,5)\pm(0{,}5;\ -0{,}5) có bình phương độ dài 0,5, nên ∥Xc−X1∥F2=4⋅0,5=2\|X_c - X_1\|_F^2 = 4 \cdot 0{,}5 = 2, đúng bằng (n−1)λ2=3⋅2/3(n - 1)\lambda_2 = 3 \cdot 2/3. Thí nghiệm dùng 300 điểm 8 chiều sinh từ 3 thành phần thật cộng nhiễu để kiểm tra đẳng thức trên dữ liệu lớn hơn.

Hình 10
Hình 10. Trái: phương sai giải thích bởi từng thành phần chính và phương sai tích luỹ. Phải: một tập dữ liệu mà thành phần chính thứ nhất vô dụng cho việc phân loại.
kk ∣Xc−Xk∣F2|X_c - X_k|_F^2 (n−1)∑i>kλi(n-1)\sum_{i>k}\lambda_i Chênh lệch Phương sai giữ lại
1 2242,010603 2242,010603 9,1×10−139{,}1\times10^{-13} 60,59%
2 790,325815 790,325815 4,6×10−134{,}6\times10^{-13} 86,11%
3 173,133807 173,133807 6,3×10−136{,}3\times10^{-13} 96,96%
4 130,536554 130,536554 4,3×10−134{,}3\times10^{-13} 97,71%
8 0,000000 0,000000 3,6×10−273{,}6\times10^{-27} 100,00%

Hai cột giữa trùng nhau tới 10−1210^{-12} ở mọi kk. Cột cuối cho thấy cách chọn kk: phương sai giữ lại tăng nhanh tới k=3k = 3 (96,96%) rồi gần như dừng lại (97,71% ở k=4k = 4). Chỗ đồ thị phương sai tích luỹ gãy gập là dấu hiệu của số chiều thật của dữ liệu, và ở đây nó khớp với 3 thành phần đã dùng để sinh dữ liệu. Một quy tắc thường dùng khác là chọn kk nhỏ nhất giữ được một tỉ lệ phương sai cho trước, như 90% hoặc 95%.

14.4Hạn chế của PCA và phân tích biệt thức tuyến tính (LDA)#

PCA không dùng nhãn. Nó tìm hướng có phương sai lớn, nhưng phương sai lớn không có nghĩa là hữu ích cho bài toán phân loại. Bốn sinh viên cho thấy điều này. Gắn cho mỗi người nhãn "sa sút" nếu điểm bài 2 thấp hơn bài 1 và "tiến bộ" nếu ngược lại: A và C sa sút, B và D tiến bộ. Theo thành phần chính thứ nhất, A và B có cùng toạ độ 3/23/\sqrt2, C và D cùng toạ độ −3/2-3/\sqrt2, nên hướng giữ 90% phương sai không phân biệt được hai nhóm chút nào. Toàn bộ thông tin về nhãn nằm ở thành phần thứ hai, chiếm 10% phương sai và bị PCA với k=1k = 1 bỏ đi: theo z2=(x1−x2)/2z_2 = (x_1 - x_2)/\sqrt2, hai người sa sút có toạ độ 1/21/\sqrt2, hai người tiến bộ có −1/2-1/\sqrt2.

Thí nghiệm dựng dữ liệu hai lớp có một hướng nhiễu biên độ lớn, theo đó hai lớp trộn lẫn, và một hướng tín hiệu biên độ nhỏ, theo đó hai lớp tách nhau:

Văn bản
truc chinh thu nhat cua PCA: [-1.  0.0067]   (giu 96.1% phuong sai)
huong cua LDA              : [0.0025  1.]
AUC khi chieu len truc PCA : 0.5020
AUC khi chieu len huong LDA: 0.9987

Thành phần chính thứ nhất giữ 96,1% phương sai, nhưng chiếu dữ liệu lên nó cho ROC-AUC 0,502, không tốt hơn đoán ngẫu nhiên. Hướng do LDA chọn gần như vuông góc với trục đó và cho AUC 0,9987, giống thành phần thứ hai của bốn sinh viên.

Phương pháp dùng nhãn để giải quyết vấn đề này là phân tích biệt thức tuyến tính (linear discriminant analysis, LDA; Fisher, 1936), tìm hướng tách các lớp tốt nhất. Với hai lớp, gọi μ0,μ1\mu_0, \mu_1 là trung bình của mỗi lớp, SWS_W là ma trận tán xạ trong lớp, tức tổng các ma trận hiệp phương sai của hai lớp, và SB=(μ1−μ0)(μ1−μ0)⊤S_B = (\mu_1 - \mu_0)(\mu_1 - \mu_0)^\top là ma trận tán xạ giữa các lớp. Chiếu dữ liệu lên hướng ww, LDA muốn khoảng cách giữa trung bình hai lớp lớn trong khi độ phân tán bên trong mỗi lớp nhỏ:

max⁡w  J(w)=w⊤SB ww⊤SW w  ⟹  w∝SW−1(μ1−μ0).\max_w \;J(w) = \frac{w^\top S_B\, w}{w^\top S_W\, w} \;\Longrightarrow\; w \propto S_W^{-1}(\mu_1 - \mu_0).

Công thức nghiệm có cách hiểu trực quan: hướng nối hai trung bình μ1−μ0\mu_1 - \mu_0 là lựa chọn tự nhiên, nhưng cần "chỉnh" lại bằng SW−1S_W^{-1} để giảm trọng số của những hướng có phân tán trong lớp lớn. Trong thí nghiệm, hướng nhiễu có phân tán trong lớp lớn nên bị giảm trọng số gần như hoàn toàn. Bảng dưới so sánh hai phương pháp.

PCA LDA
Dùng nhãn không có
Tối đa hoá phương sai toàn phần tỉ số tán xạ giữa lớp / tán xạ trong lớp
Số chiều ra tối đa dd K−1K - 1
Dùng khi nén, khử nhiễu, trực quan hoá tiền xử lý cho phân loại

Giới hạn K−1K - 1 chiều của LDA đến từ hạng của SBS_B: với KK lớp, SBS_B được dựng từ KK vector trung bình lệch khỏi trung bình chung, và các vector này có tổng có trọng số bằng 0, nên SBS_B có hạng không quá K−1K - 1. Với hai lớp, LDA cho đúng một chiều.

LDA ở đây và bộ phân loại LDA ở Mục 7.4 là cùng một phương pháp nhìn từ hai phía: hướng w∝SW−1(μ1−μ0)w \propto S_W^{-1}(\mu_1 - \mu_0) chính là vector trọng số Σ−1(μ1−μ0)\Sigma^{-1}(\mu_1 - \mu_0) trong hàm phân biệt tuyến tính của bộ phân loại Gauss dùng chung ma trận hiệp phương sai.

Khi chọn phương pháp giảm chiều, câu hỏi đầu tiên là có nhãn hay không và mục đích là gì. Không có nhãn, hoặc mục đích là nén và khử nhiễu, thì dùng PCA. Có nhãn và mục đích cuối là phân loại thì nên thử LDA. Khi cần giữ cấu trúc phi tuyến, có PCA với kernel, dùng cùng thủ thuật kernel ở Mục 13.5, và t-SNE hoặc UMAP để trực quan hoá. t-SNE không cung cấp ánh xạ cho điểm dữ liệu mới và làm biến dạng khoảng cách toàn cục, nên chỉ dùng để quan sát, không dùng làm bước tiền xử lý cho mô hình.

14.5Tóm tắt#

PCA tìm các hướng có phương sai lớn nhất, và lời giải của bài toán tối ưu có ràng buộc đó là các vector riêng của ma trận hiệp phương sai, với phương sai bằng trị riêng tương ứng. Với điểm hai bài kiểm tra của bốn sinh viên, thành phần chính thứ nhất là (1,1)/2(1, 1)/\sqrt2, hướng "làm tốt cả hai bài", và giữ 90% phương sai. Nên tính PCA bằng SVD của dữ liệu đã trừ trung bình, và chuẩn hoá đặc trưng trước khi áp dụng nếu đơn vị đo khác nhau. Theo định lý Eckart–Young, sai số tái tạo bằng đúng tổng các trị riêng bị bỏ đi nhân với n−1n - 1: bằng 2 với bốn sinh viên và k=1k = 1, và thí nghiệm xác nhận đẳng thức tới 10−1210^{-12}; chỗ đồ thị phương sai tích luỹ gãy gập cho biết số chiều thật của dữ liệu. PCA không dùng nhãn nên có thể giữ đúng hướng vô dụng cho phân loại: với nhãn tiến bộ hay sa sút, toàn bộ thông tin của bốn sinh viên nằm ở 10% phương sai bị bỏ đi, và trong thí nghiệm, hướng giữ 96,1% phương sai chỉ cho AUC 0,502. LDA dùng nhãn và chọn hướng SW−1(μ1−μ0)S_W^{-1}(\mu_1 - \mu_0).

Giảm chiều tìm cấu trúc theo các hướng trong không gian đặc trưng. Một câu hỏi khác về dữ liệu không nhãn là các điểm có tự gom thành nhóm hay không. Chương 15 xét thuật toán phân cụm phổ biến nhất, K-means.


15Phân cụm K-means#

Phân cụm là bài toán học không giám sát điển hình: chia dữ liệu không có nhãn thành các nhóm sao cho điểm trong cùng nhóm giống nhau hơn điểm khác nhóm. Thuật toán phổ biến nhất cho việc này, K-means, đơn giản tới mức có thể mô tả trong hai câu. Nhưng khi dùng thật, nó đặt ra ba câu hỏi mà người mới hay bỏ qua: kết quả có phụ thuộc vào cách khởi tạo không, thuật toán ngầm giả định cụm có hình dạng gì, và chọn số cụm thế nào khi không có nhãn để đối chiếu. Ta xét thuật toán trước, rồi lần lượt trả lời ba câu hỏi đó, mỗi câu trước hết trên một ví dụ tính tay được rồi mới bằng thí nghiệm. Ví dụ đó là bốn cửa hàng trên bản đồ, hai cửa hàng phía tây ở (0;0)(0; 0) và (0;1)(0; 1), hai cửa hàng phía đông ở (4;0)(4; 0) và (4;1)(4; 1), toạ độ tính bằng km. Cần đặt hai kho hàng sao cho tổng bình phương khoảng cách từ mỗi cửa hàng tới kho gần nó nhất là nhỏ nhất, và đó đúng là bài toán K-means với k=2k = 2.

15.1Bài toán phân cụm và thuật toán Lloyd#

Định nghĩa 15.1 (Bài toán K-means)

Cho nn điểm x1,…,xn∈Rdx_1, \dots, x_n \in \mathbb{R}^d và số cụm kk. Tìm cách chia các điểm thành kk cụm S1,…,SkS_1, \dots, S_k cùng các tâm cụm μ1,…,μk\mu_1, \dots, \mu_k để cực tiểu tổng bình phương khoảng cách từ mỗi điểm tới tâm cụm của nó:

min⁡S,μ  ∑j=1k∑x∈Sj∥x−μj∥2.\min_{S, \mu}\;\sum_{j=1}^{k}\sum_{x \in S_j}\|x - \mu_j\|^2.

Giá trị của hàm mục tiêu tại một nghiệm gọi là inertia (tổng bình phương trong cụm).

Tìm nghiệm tối ưu toàn cục của bài toán này là NP-khó, kể cả khi k=2k = 2 với số chiều tuỳ ý, hoặc khi dữ liệu nằm trong mặt phẳng với kk tuỳ ý. Thuật toán thông dụng là thuật toán Lloyd (1957, công bố 1982), tìm nghiệm xấp xỉ bằng cách lặp lại hai bước. Ở bước gán, mỗi điểm được gán vào cụm có tâm gần nó nhất. Ở bước cập nhật, mỗi tâm được thay bằng trung bình của các điểm thuộc cụm đó. Hai bước lặp lại cho tới khi các phép gán không thay đổi.

Với bốn cửa hàng, đặt hai tâm ban đầu tại (0;0)(0; 0) và (4;0)(4; 0). Bước gán đưa (0;1)(0; 1) về tâm thứ nhất và (4;1)(4; 1) về tâm thứ hai. Bước cập nhật dời hai tâm tới trung điểm của mỗi cặp, (0;0,5)(0; 0{,}5) và (4;0,5)(4; 0{,}5). Bước gán tiếp theo không đổi gì, và thuật toán dừng với mỗi kho nằm giữa hai cửa hàng cùng phía, inertia 4⋅0,52=14 \cdot 0{,}5^2 = 1.

Mỗi bước tối ưu một phần của bài toán khi giữ phần kia cố định: bước gán chọn cụm tốt nhất cho từng điểm khi biết tâm, còn bước cập nhật chọn tâm tốt nhất cho từng cụm khi biết các điểm, vì trung bình là điểm làm tổng bình phương khoảng cách nhỏ nhất. Vì vậy hàm mục tiêu không bao giờ tăng. Số cách chia nn điểm thành kk cụm là hữu hạn, nên thuật toán chắc chắn dừng sau hữu hạn bước, và mỗi vòng lặp tốn O(nkd)O(nkd) phép tính.

Tuy nhiên, thuật toán chỉ dừng ở một cực tiểu địa phương: một trạng thái mà không bước nào cải thiện được, nhưng chưa chắc tốt nhất. Hàm mục tiêu không lồi theo (S,μ)(S, \mu), nên theo Chương 11 không có bảo đảm nào về chất lượng của điểm dừng. Với bốn cửa hàng, đặt hai tâm ban đầu tại (0;0)(0; 0) và (0;1)(0; 1), tức cả hai ở phía tây. Bước gán đưa (4;0)(4; 0) về tâm thứ nhất và (4;1)(4; 1) về tâm thứ hai, vì mỗi cửa hàng phía đông gần tâm cùng hàng với nó hơn. Bước cập nhật dời hai tâm tới (2;0)(2; 0) và (2;1)(2; 1), và từ đó không gì thay đổi nữa: mỗi cửa hàng cách kho của nó 2 km, inertia bằng 16, gấp 16 lần nghiệm tốt nhất.

15.2Khởi tạo và k-means++#

Điểm dừng của thuật toán Lloyd phụ thuộc vào các tâm ban đầu, và mức độ phụ thuộc lớn hơn nhiều so với hình dung. Thí nghiệm chạy K-means 200 lần trên dữ liệu 720 điểm gồm 8 cụm, trong đó một số cụm nằm gần nhau, mỗi lần với một hạt giống ngẫu nhiên khác. Một lần chạy được tính là "kẹt ở nghiệm tồi" nếu inertia lớn hơn giá trị nhỏ nhất tìm được trong mọi lần chạy quá 2%.

Cách khởi tạo Inertia nhỏ nhất Inertia trung bình Tỉ lệ kẹt ở nghiệm tồi
Ngẫu nhiên 407,992 517,838 71,5%
k-means++ 407,992 476,529 46,5%

Chọn ngẫu nhiên kk điểm dữ liệu làm tâm ban đầu dẫn tới nghiệm tồi trong 71,5% số lần chạy. Ngay với bốn cửa hàng, tỉ lệ này đã là 1/3: trong 6 cặp điểm có thể chọn làm tâm ban đầu, 2 cặp nằm cùng phía và dẫn tới nghiệm có inertia 16. Nghiệm tồi điển hình là hai tâm rơi vào cùng một cụm thật trong khi hai cụm thật khác bị gộp chung một tâm; thuật toán Lloyd không sửa được tình huống này, vì mỗi bước chỉ dịch chuyển tâm một cách cục bộ.

Cách khởi tạo k-means++ (Arthur và Vassilvitskii, 2007) chọn tâm ban đầu tuần tự: tâm đầu tiên chọn ngẫu nhiên đều từ dữ liệu, mỗi tâm tiếp theo được chọn với xác suất tỉ lệ với bình phương khoảng cách từ điểm đó tới tâm gần nhất đã chọn. Các điểm xa những tâm hiện có được ưu tiên, nên các tâm ban đầu có xu hướng trải đều ra các cụm. Với bốn cửa hàng, giả sử tâm đầu tiên là (0;0)(0; 0). Bình phương khoảng cách từ ba cửa hàng còn lại tới nó là 1, 16 và 17, nên xác suất tâm thứ hai rơi vào (0;1)(0; 1), cùng phía với tâm đầu, chỉ là 1/34≈3%1/34 \approx 3\%. Do tính đối xứng, tâm đầu là cửa hàng nào cũng vậy, nên k-means++ kẹt với xác suất khoảng 3% thay vì 33%. Arthur và Vassilvitskii chứng minh rằng riêng bước khởi tạo này đã cho kỳ vọng inertia không quá O(log⁡k)O(\log k) lần giá trị tối ưu. Trong thí nghiệm, k-means++ giảm tỉ lệ kẹt từ 71,5% xuống 46,5%: cải thiện rõ, nhưng vẫn gần một nửa số lần chạy cho nghiệm tồi, vì với 8 cụm trong đó có những cụm nằm gần nhau, bình phương khoảng cách không chênh lệch rõ như ở bốn cửa hàng.

Lưu ý

Luôn chạy K-means nhiều lần với các khởi tạo khác nhau và giữ kết quả có inertia nhỏ nhất. Trong scikit-learn từ phiên bản 1.4, tham số n_init của KMeans mặc định là 'auto', nghĩa là chỉ chạy một lần khi dùng khởi tạo k-means++. Với dữ liệu như thí nghiệm trên, cần đặt n_init tường minh, chẳng hạn n_init=10.

15.3Các giả định của K-means#

Câu hỏi thứ hai là K-means ngầm giả định gì về dữ liệu. Thí nghiệm chạy cùng thuật toán trên ba dạng dữ liệu.

Hình 11
Hình 11. Cùng thuật toán K-means trên ba dạng dữ liệu. Chỉ dạng thứ nhất được phân cụm đúng.
Dạng cụm Độ chính xác phân cụm
Ba cụm tròn, tách rời 1,0000
Hai hình lưỡi liềm lồng nhau 0,7517
Hai dải dẹt nằm ngang song song 0,5317

Độ chính xác phân cụm ở đây được tính sau khi thử mọi cách ghép nhãn cụm với nhãn thật và lấy cách tốt nhất, vì tên cụm do K-means đặt là tuỳ ý. Với hai dải dẹt, độ chính xác 0,5317 gần như bằng đoán ngẫu nhiên (0,5).

Nguyên nhân nằm ở bước gán. Mỗi điểm thuộc về tâm gần nhất theo khoảng cách Euclid, nên biên giới giữa hai cụm luôn là mặt phẳng trung trực của đoạn nối hai tâm, và toàn bộ không gian bị chia thành các ô lồi gọi là sơ đồ Voronoi. Từ đó suy ra ba giả định ngầm của K-means: các cụm có dạng lồi và gần tròn, các cụm có kích thước tương đương nhau, và mọi chiều có cùng thang đo để khoảng cách Euclid có ý nghĩa.

Hai dải dẹt vi phạm giả định thứ nhất. Mỗi dải dài theo phương ngang và hẹp theo phương dọc, và hai dải cách nhau theo phương dọc một khoảng nhỏ hơn chiều dài của chúng. Cách chia có inertia nhỏ nhất vì vậy là cắt đôi theo phương thẳng đứng, mỗi cụm lấy nửa trái hoặc nửa phải của cả hai dải, thay vì tách hai dải ra. Bốn cửa hàng là phiên bản nhỏ nhất của tình huống này. Nếu hai nhóm cần tìm là hai hàng ngang y=0y = 0 và y=1y = 1, chẳng hạn hai tuyến đường giao hàng, thì cách chia theo hàng có inertia 16, còn cách chia trái phải có inertia 1, nên K-means luôn chọn trái phải.

Khi các giả định trên không thoả, có các phương pháp khác. Mô hình hỗn hợp Gauss (Gaussian mixture model) cho phép mỗi cụm có dạng elip với ma trận hiệp phương sai riêng, và K-means là trường hợp giới hạn của nó khi mọi cụm có hiệp phương sai σ2I\sigma^2 I với σ→0\sigma \to 0. DBSCAN gom các điểm theo mật độ, cho phép cụm có hình dạng tuỳ ý và tự xác định số cụm. Phân cụm phổ (spectral clustering) biến đổi dữ liệu dựa trên đồ thị láng giềng rồi mới áp dụng K-means, và xử lý tốt dữ liệu hình lưỡi liềm.

15.4Chọn số cụm#

Câu hỏi thứ ba là chọn kk. Inertia luôn giảm khi kk tăng, và bằng 0 khi k=nk = n, tức mỗi điểm là một cụm, nên không thể chọn kk bằng cách cực tiểu inertia. Với bốn cửa hàng, inertia tốt nhất là 17, 1, 0,5 và 0 với k=1,2,3,4k = 1, 2, 3, 4: giảm 16 khi tăng từ một lên hai kho, rồi chỉ giảm 0,5 mỗi bước sau đó. Thêm kho thứ ba gần như không rút ngắn được quãng đường nào. Bảng sau cho inertia tốt nhất trong 8 lần chạy k-means++ ở mỗi kk, trên dữ liệu 8 cụm của Mục 15.2.

kk Inertia Giảm so với k−1k - 1
5 902,24 21,6%
6 727,79 19,3%
7 563,93 22,5%
8 407,99 27,7%
9 385,82 5,4%
10 364,76 5,5%

Mức giảm là 27,7% khi tăng lên k=8k = 8 và chỉ 5,4% khi tăng lên k=9k = 9. Điểm mà inertia ngừng giảm nhanh gọi là khuỷu tay (elbow) của đồ thị inertia theo kk, và ở đây nó rơi đúng vào số cụm thật. Cách chọn kk tại khuỷu tay gọi là phương pháp elbow.

Lưu ý

Khuỷu tay không có định nghĩa toán học; nó là một quy tắc quan sát bằng mắt, và trên dữ liệu thật đồ thị thường giảm đều, không có khuỷu rõ ràng. Hai tiêu chí khác có định nghĩa chặt hơn. Hệ số silhouette của một điểm là s=(b−a)/max⁡(a,b)s = (b - a)/\max(a, b), với aa là khoảng cách trung bình tới các điểm cùng cụm và bb là khoảng cách trung bình tới các điểm của cụm gần nhất khác; ta chọn kk có silhouette trung bình lớn nhất. Gap statistic (Tibshirani, Walther và Hastie, 2001) so sánh inertia với inertia trên dữ liệu ngẫu nhiên không có cấu trúc cụm. Trong nhiều ứng dụng, kk còn được quyết định bởi yêu cầu nghiệp vụ, chẳng hạn số nhóm khách hàng mà bộ phận marketing có thể xử lý.

15.5Tóm tắt#

K-means chia dữ liệu thành kk cụm để cực tiểu tổng bình phương khoảng cách tới tâm, và thuật toán Lloyd lặp giữa bước gán và bước cập nhật, không bao giờ làm tăng hàm mục tiêu nhưng chỉ dừng ở cực tiểu địa phương: với bốn cửa hàng, hai tâm ban đầu cùng phía cho inertia 16 thay vì 1. Kết quả phụ thuộc mạnh vào khởi tạo. Với bốn cửa hàng, khởi tạo ngẫu nhiên kẹt với xác suất 1/3 và k-means++ chỉ 1/34; trong thí nghiệm 8 cụm, khởi tạo ngẫu nhiên kẹt ở nghiệm tồi 71,5% số lần, k-means++ vẫn 46,5%, nên cần chạy nhiều lần. Vì bước gán chia không gian thành các ô lồi, K-means giả định cụm lồi, gần tròn, cỡ tương đương và các chiều cùng thang đo; với hai dải dẹt song song, nó chỉ đạt 0,5317. Số cụm được chọn bằng khuỷu tay của đồ thị inertia, hệ số silhouette, gap statistic hoặc yêu cầu nghiệp vụ.

PCA và K-means tìm cấu trúc trong một ma trận dữ liệu đầy đủ. Chương cuối xét một bài toán mà phần lớn ma trận bị trống, và cấu trúc hạng thấp của nó là thứ duy nhất cho phép điền vào các ô trống: hệ thống gợi ý.


16Hệ thống gợi ý#

Chương cuối của giáo trình là một ứng dụng dùng lại gần như mọi công cụ đã học. Hệ thống gợi ý dự đoán mức độ một người dùng thích một sản phẩm, bộ phim hay bài hát mà họ chưa đánh giá. Phương pháp chính, phân rã ma trận, cần tới hạng của ma trận và SVD ở Chương 2, hồi quy ridge ở Chương 9, và đánh đổi độ chệch – phương sai xuyên suốt giáo trình. Các thí nghiệm của chương tập trung vào một câu hỏi thực tế mà sách thường bỏ qua: cần bao nhiêu dữ liệu thì phương pháp mới bắt đầu có ích, và điều gì xảy ra với người dùng chưa có dữ liệu nào. Trước các thí nghiệm, một ma trận ba người dùng, ba bộ phim đủ nhỏ để tính tay sẽ cho thấy cơ chế của từng bước.

16.1Bài toán gợi ý#

Dữ liệu được tổ chức thành ma trận đánh giá R∈Rnu×niR \in \mathbb{R}^{n_u \times n_i}, với nun_u người dùng và nin_i sản phẩm; ô ruir_{ui} là đánh giá của người dùng uu cho sản phẩm ii. Phần lớn các ô bị trống, vì mỗi người chỉ đánh giá một phần rất nhỏ trong số sản phẩm. Bài toán là dự đoán giá trị của các ô trống.

Có hai hướng tiếp cận chính. Lọc dựa trên nội dung (content-based filtering) mô tả mỗi sản phẩm bằng các đặc trưng như thể loại, đạo diễn, từ khoá, rồi học sở thích của từng người theo các đặc trưng đó; về bản chất, đây là một bài hồi quy riêng cho mỗi người dùng. Lọc cộng tác (collaborative filtering) không cần đặc trưng của sản phẩm mà chỉ dùng mẫu hình đánh giá của mọi người dùng, với ý tưởng rằng những người đánh giá giống nhau trong quá khứ sẽ tiếp tục đánh giá giống nhau.

Dữ liệu đánh giá cũng có hai dạng. Phản hồi tường minh (explicit feedback) là điểm số người dùng chủ động cho, như số sao. Phản hồi ngầm (implicit feedback) là hành vi như lượt xem, lượt nhấp, thời gian nghe; dạng này nhiều hơn hẳn nhưng khó diễn giải, vì không xem một sản phẩm không có nghĩa là không thích nó. Chương này dùng phản hồi tường minh.

16.2Phân rã ma trận#

Định nghĩa 16.1 (Phân rã ma trận)

Phương pháp phân rã ma trận (matrix factorization) giả định ma trận đánh giá xấp xỉ được bằng một ma trận hạng thấp:

R≈PQ⊤,P∈Rnu×k,  Q∈Rni×k,k≪min⁡(nu,ni).R \approx P Q^\top, \qquad P \in \mathbb{R}^{n_u \times k},\; Q \in \mathbb{R}^{n_i \times k},\quad k \ll \min(n_u, n_i).

Mỗi người dùng uu được biểu diễn bằng vector pu∈Rkp_u \in \mathbb{R}^k (hàng thứ uu của PP), mỗi sản phẩm ii bằng vector qi∈Rkq_i \in \mathbb{R}^k, và đánh giá dự đoán là r^ui=pu⊤qi\hat r_{ui} = p_u^\top q_i.

Các toạ độ của pup_u và qiq_i gọi là nhân tố ẩn (latent factors). Không ai định nghĩa chúng trước; chúng hình thành từ dữ liệu. Với phim ảnh, một nhân tố có thể tương ứng với mức độ "hành động" của phim và mức độ người dùng thích phim hành động, và tích vô hướng pu⊤qip_u^\top q_i lớn khi sở thích của người dùng khớp với đặc điểm của phim. Cách hiểu này chỉ mang tính minh hoạ: các nhân tố học được thường không có nghĩa rõ ràng như vậy.

Ví dụ nhỏ nhất là hạng 1. Ba người dùng Lan, Minh, Hùng chấm ba phim A, B, C trên thang 1 tới 5. Trừ đi 3, mức giữa thang, để điểm dương là thích và điểm âm là không thích:

Phim A Phim B Phim C
Lan 2 2 −2
Minh 1 ? −1
Hùng −1 −1 1

Các ô đã biết khớp đúng với tích pq⊤p q^\top, với p=(2; 1; −1)p = (2;\ 1;\ -1) cho ba người và q=(1; 1; −1)q = (1;\ 1;\ -1) cho ba phim. Có thể đọc qiq_i là mức "hành động" của phim, A và B là phim hành động còn C thì không, và pup_u là mức thích phim hành động: Lan thích nhiều, Minh thích vừa, Hùng không thích. Mô hình hạng 1 điền ô trống bằng 1⋅1=11 \cdot 1 = 1, tức dự đoán Minh chấm phim B 4 sao.

Chỉ các ô đã quan sát, ký hiệu là tập Ω\Omega, được dùng để học. Hàm mất mát là bình phương sai số trên các ô đó cộng regularization:

min⁡P,Q  ∑(u,i)∈Ω(rui−pu⊤qi)2+λ(∥P∥F2+∥Q∥F2).\min_{P,Q}\;\sum_{(u,i) \in \Omega}\big(r_{ui} - p_u^\top q_i\big)^2 + \lambda\big(\|P\|_F^2 + \|Q\|_F^2\big).

Hàm này không lồi theo (P,Q)(P, Q) đồng thời, vì có tích pu⊤qip_u^\top q_i. Nhưng khi cố định QQ, nó tách thành nun_u bài toán độc lập theo từng pup_u, và mỗi bài toán là một hồi quy ridge (Mục 9.2):

pu=(Qu⊤Qu+λI)−1Qu⊤ru,p_u = \big(Q_u^\top Q_u + \lambda I\big)^{-1} Q_u^\top r_u,

trong đó QuQ_u gồm các hàng của QQ ứng với sản phẩm người dùng uu đã đánh giá, và rur_u là các đánh giá tương ứng. Tương tự khi cố định PP để giải QQ. Thuật toán luân phiên hai bước này gọi là bình phương tối thiểu luân phiên (alternating least squares, ALS), và mỗi bước không làm tăng hàm mất mát. Với ví dụ ở trên và qq đã biết, Minh đánh giá phim A và C, nên Qu=(1; −1)Q_u = (1;\ -1) và ru=(1; −1)r_u = (1;\ -1). Công thức cho pMinh=(1⋅1+(−1)(−1))/(1+1+λ)=2/(2+λ)p_{\text{Minh}} = (1 \cdot 1 + (-1)(-1))/(1 + 1 + \lambda) = 2/(2 + \lambda), bằng 0,952 với λ=0,1\lambda = 0{,}1, và dự đoán cho phim B là 0,9520{,}952 điểm trên mức giữa, tức khoảng 3,95 sao: regularization kéo dự đoán về phía mức giữa thang một chút. Một lựa chọn khác là SGD trên từng ô quan sát. Các hệ thống thực tế thường thêm hệ số chặn riêng cho người dùng và cho sản phẩm, r^ui=μ+bu+bi+pu⊤qi\hat r_{ui} = \mu + b_u + b_i + p_u^\top q_i, để mô tả việc có người chấm điểm rộng tay hơn và có sản phẩm được ưa chuộng hơn mặt bằng chung (Koren, Bell và Volinsky, 2009).

Giả thiết hạng thấp là điều làm bài toán có nghĩa. Thí nghiệm của chương dùng 300 người dùng và 200 sản phẩm: ma trận có 60 000 ô, còn mô hình hạng 4 chỉ có (300+200)×4=2 000(300 + 200) \times 4 = 2\,000 tham số, bằng 3,3% số ô. Không có giả thiết như vậy, giá trị của một ô chưa quan sát không liên quan gì tới các ô đã quan sát, và không thể dự đoán.

16.3Lượng dữ liệu cần thiết#

Thí nghiệm sinh một ma trận đánh giá hạng 4 thật, cộng nhiễu có độ lệch chuẩn 0,4, rồi che đi phần lớn các ô và giữ lại một tỉ lệ ngẫu nhiên. Mô hình được huấn luyện bằng ALS với λ=0,1\lambda = 0{,}1 và đánh giá bằng RMSE trên các ô bị che.

Hình 12
Hình 12. Trái: RMSE trên các ô chưa quan sát theo số đánh giá trung bình mỗi người, trục dọc thang logarit; đường chấm là mức sai số của cách đoán mọi ô bằng 0, đường đứt đánh dấu 5k=205k = 20 đánh giá. Phải: một góc của ma trận đánh giá thật.
Tỉ lệ ô quan sát Đánh giá mỗi người RMSE trên ô chưa quan sát Tỉ số với mức đoán bằng 0
2% 4,1 2,4759 1,19
3% 5,9 3,0167 1,45
5% 10,1 3,5444 1,71
10% 19,8 0,3048 0,15
20% 39,6 0,1834 0,09
40% 80,5 0,1237 0,06

Cột cuối là tỉ số giữa RMSE của mô hình và độ lệch chuẩn của ma trận thật (2,0772), tức sai số của cách đoán mọi ô bằng 0. Tỉ số lớn hơn 1 nghĩa là mô hình còn tệ hơn cách đoán đơn giản đó.

Ba dòng đầu có tỉ số lớn hơn 1: với khoảng 10 đánh giá mỗi người trở xuống, phân rã ma trận cho sai số lớn hơn cả cách đoán mọi ô bằng 0. Giữa 10,1 và 19,8 đánh giá mỗi người, RMSE giảm từ 3,54 xuống 0,30, hơn 11 lần. Sau ngưỡng đó, thêm dữ liệu chỉ cải thiện từ từ.

Có thể hiểu ngưỡng này bằng cách đếm ẩn số. Mỗi người dùng có k=4k = 4 ẩn số trong pup_u, nên cần ít nhất 4 đánh giá để xác định chúng, kể cả khi QQ đã biết chính xác. Nhưng các đánh giá có nhiễu, và QQ cũng đang được ước lượng từ chính dữ liệu thưa đó, nên số đánh giá cần thiết lớn hơn nhiều lần mức tối thiểu. Ví dụ hạng 1 cho thấy vì sao. Nếu Minh chỉ chấm phim A, một đánh giá là đủ cho một ẩn số: pMinh=1/(1+λ)≈0,91p_{\text{Minh}} = 1/(1 + \lambda) \approx 0{,}91, vẫn đúng chiều. Nhưng nếu đánh giá duy nhất đó lệch đi 1 điểm vì nhiễu, Minh chấm A đúng 3 sao, thì pMinh=0p_{\text{Minh}} = 0 và mô hình mất hết thông tin về Minh. Có thêm đánh giá phim C, cùng đánh giá lệch đó chỉ kéo pMinhp_{\text{Minh}} xuống 1/2,1≈0,481/2{,}1 \approx 0{,}48, vẫn đúng chiều. Trong thí nghiệm, ngưỡng nằm giữa 10 và 20 đánh giá mỗi người, tức khoảng 2,5 tới 5 lần hạng kk. Lý thuyết hoàn thiện ma trận (matrix completion) cho kết luận cùng chiều: dưới giả thiết vị trí các ô quan sát ngẫu nhiên, số quan sát cần thiết tăng tuyến tính theo hạng, nhân với một thừa số logarit của kích thước ma trận (Candès và Recht, 2009).

Con số cụ thể của thí nghiệm này phụ thuộc vào mức nhiễu, λ\lambda và cách chọn ô quan sát, nhưng kết luận định tính là chung: cần số đánh giá mỗi người dùng lớn hơn hạng kk nhiều lần thì phân rã ma trận mới có ích. Vì vậy các hệ thống thực tế dùng kk tương đối nhỏ, cỡ vài chục tới vài trăm, dù có hàng triệu người dùng: hạng càng lớn thì càng cần nhiều dữ liệu cho mỗi người.

16.4Chọn hạng kk#

Khi đã đủ dữ liệu, câu hỏi tiếp theo là chọn hạng kk. Bảng dưới đo ở mật độ quan sát 30%, nơi mô hình có đủ dữ liệu.

Hạng kk RMSE trên ô chưa quan sát RMSE trên ô đã quan sát
1 1,8073 1,7769
2 1,4764 1,4206
3 1,0569 1,0128
4 0,1448 0,3762
6 0,2217 0,3535
10 0,3501 0,3076
20 0,6291 0,1903

Hai cột có xu hướng ngược nhau. RMSE trên ô đã quan sát giảm đều khi kk tăng: mô hình nhiều tham số hơn khớp dữ liệu huấn luyện sát hơn, và ở k=20k = 20 nó đạt 0,1903, thấp hơn cả độ lệch chuẩn của nhiễu (0,4), tức mô hình đã bắt đầu khớp cả nhiễu. RMSE trên ô chưa quan sát đạt nhỏ nhất ở k=4k = 4, đúng hạng thật, rồi tăng lại: ở k=20k = 20 nó bằng 0,6291, gấp 4,3 lần giá trị tại k=4k = 4.

Đây là đánh đổi độ chệch – phương sai (Mục 3.6) dưới dạng chọn hạng: kk nhỏ hơn hạng thật gây underfitting, kk lớn hơn gây overfitting. Trên dữ liệu thật, hạng thật không biết trước, và kk được chọn bằng cách đo sai số trên một tập các ô được giữ lại để xác thực, giống cross-validation ở Mục 9.5.

16.5Vấn đề khởi đầu lạnh#

Một người dùng mới chưa đánh giá sản phẩm nào thì mô hình dự đoán gì cho họ? Thí nghiệm thêm 10 người dùng như vậy vào dữ liệu ở mật độ 30%:

Văn bản
RMSE cho nguoi dung cu   : 0.1459
RMSE cho nguoi dung moi  : 2.2364
RMSE neu doan bua bang 0 : 2.0772
||P|| trung binh, nguoi cu : 2.0841
||P|| trung binh, nguoi moi: 1.54e-01

Với người dùng mới, RMSE là 2,2364, còn tệ hơn đoán mọi đánh giá bằng 0 (2,0772). Hai dòng cuối giải thích cơ chế: vector pup_u của người dùng mới có chuẩn trung bình 0,154, so với 2,084 của người dùng cũ. Với người dùng không có ô quan sát nào, tổng bình phương sai số trong hàm mất mát ở Mục 16.2 không chứa số hạng nào liên quan tới pup_u, chỉ còn thành phần regularization λ∥pu∥2\lambda\|p_u\|^2, và giá trị cực tiểu của nó là pu=0p_u = 0. Chuẩn đo được khác 0 một chút vì trong thí nghiệm, các vector này chỉ nhận giá trị khởi tạo ngẫu nhiên nhỏ và không được cập nhật. Mô hình vì vậy dự đoán gần 0 cho mọi sản phẩm với người dùng mới. Trong ví dụ ba người dùng, một người thứ tư chưa chấm phim nào nhận pu=0p_u = 0 và được đoán chấm mọi phim đúng 3 sao, mức giữa thang, dù người đó mê phim hành động như Lan hay ghét như Hùng.

Vấn đề này gọi là khởi đầu lạnh (cold start), và có ba dạng, mỗi dạng một cách xử lý thường dùng.

Dạng khởi đầu lạnh Cách xử lý thường dùng
Người dùng mới hỏi vài sở thích khi đăng ký; dùng thông tin nhân khẩu học; gợi ý các sản phẩm phổ biến
Sản phẩm mới dùng đặc trưng nội dung của sản phẩm (thể loại, mô tả, embedding của văn bản hoặc hình ảnh)
Hệ thống mới bắt đầu bằng lọc dựa trên nội dung, chuyển dần sang lọc cộng tác khi đã có dữ liệu

Vì vậy các hệ thống gợi ý thực tế hầu như luôn là hệ lai (hybrid): lọc cộng tác cho kết quả tốt hơn khi có đủ dữ liệu, còn lọc dựa trên nội dung bảo đảm luôn có câu trả lời khi chưa có dữ liệu.

Ngoài khởi đầu lạnh còn một vấn đề mà thí nghiệm tĩnh của chương không đo được: vòng phản hồi (feedback loop). Hệ thống chỉ gợi ý những sản phẩm nó dự đoán là tốt, nên chỉ thu được phản hồi về những sản phẩm đó, và dữ liệu huấn luyện của lần sau càng lệch về các sản phẩm đã được gợi ý. Mục 12.3 của MLOps mô phỏng hiện tượng này và cho thấy một hệ không có cơ chế thăm dò ngẫu nhiên chỉ quan sát được 9,5% danh mục sản phẩm.

16.6Tóm tắt#

Phân rã ma trận giả định ma trận đánh giá xấp xỉ được bằng tích hai ma trận hạng thấp, mỗi người dùng và mỗi sản phẩm là một vector nhân tố ẩn, và được huấn luyện bằng ALS, trong đó mỗi bước là một hồi quy ridge. Với ba người dùng và ba phim, giả thiết hạng 1 điền được ô trống, và bước ridge cho Minh p=2/(2+λ)p = 2/(2 + \lambda), tức khoảng 3,95 sao cho phim B. Giả thiết hạng thấp là điều làm bài toán có nghĩa, nhưng nó chỉ có ích khi đủ dữ liệu: một đánh giá có nhiễu đủ làm mất hết thông tin về một người dùng hạng 1, và trong thí nghiệm, với khoảng 10 đánh giá mỗi người trở xuống, mô hình còn tệ hơn đoán mọi ô bằng 0; RMSE chỉ giảm mạnh khi số đánh giá vượt khoảng 2,5 tới 5 lần hạng. Hạng kk được chọn theo đánh đổi độ chệch – phương sai, và sai số trên ô chưa quan sát nhỏ nhất đúng ở hạng thật. Người dùng chưa có đánh giá nào nhận vector bằng 0 do regularization và được đoán ở mức giữa cho mọi sản phẩm, nên hệ thống thực tế luôn kết hợp lọc cộng tác với lọc dựa trên nội dung.

Nhìn lại cả giáo trình, mỗi thuật toán đã gặp đều quay về ba thành phần ở Chương 1: một họ hàm, một hàm mất mát và một cách tối ưu. Đại số tuyến tính cho biết bài toán có nghiệm hay không, xác suất cho biết hàm mất mát đến từ đâu, tính lồi cho biết tối ưu có tìm được nghiệm tốt nhất không, và đánh đổi độ chệch – phương sai cho biết mô hình có tổng quát hoá được không. Giáo trình Học sâu đi tiếp từ đây: chồng nhiều lớp hồi quy logistic thành mạng nơ-ron, và xét điều gì xảy ra khi bài toán không còn lồi. Chương 17 gồm các bài tập để luyện các phép tính của giáo trình, và Chương 18 gom các câu hỏi phỏng vấn thường gặp.


17Bài tập#

Các bài tập đi theo các chương của giáo trình: phần lớn là phép tính tay với những con số nhỏ đủ làm bằng giấy bút, vài bài là chứng minh ngắn, một bài chẩn đoán các tình huống của K-means và một bài thiết kế hệ thống gợi ý. Lời giải chi tiết, kèm nhãn chương và độ khó của từng bài, nằm ở trang Lời giải.

Bài 1 (tính tay). Cho bốn điểm (x,y)=(1,2),(2,3),(3,5),(4,6)(x, y) = (1,2), (2,3), (3,5), (4,6) và mô hình y=w0+w1xy = w_0 + w_1 x. (a) Lập ma trận XX có cột hằng số, rồi tính X⊤XX^\top X và X⊤yX^\top y. (b) Giải phương trình chuẩn để tìm w0w_0, w1w_1. (c) Tính phần dư của từng điểm. Tổng các phần dư bằng bao nhiêu, và vì sao kết quả đó không phải ngẫu nhiên? (d) Lặp lại với hồi quy ridge, λ=1\lambda = 1. Các hệ số thay đổi theo chiều nào?

Bài 2 (suy luận). Giả sử yi=w⊤xi+ϵiy_i = w^\top x_i + \epsilon_i với ϵi∼N(0,σ2)\epsilon_i \sim \mathcal{N}(0,\sigma^2) độc lập, và tiên nghiệm w∼N(0,τ2I)w \sim \mathcal{N}(0, \tau^2 I). (a) Viết −log⁡p(w∣D)-\log p(w \mid \mathcal{D}), bỏ các hằng số không phụ thuộc ww. (b) Chứng minh rằng điểm cực tiểu của biểu thức đó trùng với nghiệm hồi quy ridge, và chỉ ra λ=σ2/τ2\lambda = \sigma^2/\tau^2. (c) Khi tiên nghiệm chặt hơn (τ\tau nhỏ hơn), λ\lambda thay đổi theo chiều nào? Giải thích vì sao chiều đó hợp lý. (d) Nếu thay tiên nghiệm Gauss bằng tiên nghiệm Laplace thì được thuật toán nào, và tiên nghiệm đó diễn đạt niềm tin gì về ww?

Bài 3 (tính tay). Mục 5.3 đo được: với κ=10 000\kappa = 10\,000, gradient descent cần 92 104 vòng lặp, còn có momentum chỉ cần 1 297 vòng lặp. (a) Ước lượng số vòng lặp của cả hai phương pháp khi κ=40 000\kappa = 40\,000, dựa vào bậc lý thuyết O(κ)O(\kappa) và O(κ)O(\sqrt\kappa). (b) Một người nói: "Bài toán của tôi có một triệu chiều nên gradient descent sẽ rất chậm." Nhận định này đúng hay sai, và vì sao? (c) Nêu một bước tiền xử lý đơn giản làm giảm κ\kappa, và giải thích cơ chế.

Bài 4 (suy luận). Sai số của sai phân trung tâm gồm hai phần: sai số cắt cụt cỡ C1ε2C_1\varepsilon^2 và sai số làm tròn cỡ C2u/εC_2 u/\varepsilon, với u≈2,22×10−16u \approx 2{,}22\times10^{-16}. (a) Cực tiểu tổng hai phần theo ε\varepsilon và chứng minh ε∗∝u1/3\varepsilon^* \propto u^{1/3}. (b) Làm tương tự với sai phân tiến (sai số cắt cụt cỡ C1εC_1\varepsilon) và chứng minh ε∗∝u1/2\varepsilon^* \propto u^{1/2}. (c) So sánh với hai giá trị đo được ở Mục 5.5. (d) Vì sao sai phân trung tâm tốn gấp đôi số lần tính hàm mà vẫn được ưa dùng hơn?

Bài 5 (tính tay). Một tập dữ liệu tách được tuyến tính có mọi điểm nằm trong hình cầu bán kính R=2R = 2 và có lề γ=0,1\gamma = 0{,}1. (a) Chặn của định lý Novikoff cho số lần cập nhật của perceptron bằng bao nhiêu? (b) Nếu thêm 10 000 điểm nữa (vẫn tách được, vẫn cùng RR và γ\gamma), chặn thay đổi thế nào? Điều đó cho biết gì? (c) Nếu nhân mọi xix_i với 10, thì RR, γ\gamma và chặn thay đổi thế nào? (d) Vì sao perceptron không có bảo đảm hội tụ khi dữ liệu không tách được? Trả lời dựa vào hình dạng của hàm mất mát ở Hình 5.

Bài 6 (tính tay). Một mô hình phát hiện gian lận cho ma trận nhầm lẫn sau trên 20 000 giao dịch:

Dự đoán gian lận Dự đoán bình thường
Thật sự gian lận 102 94
Thật sự bình thường 105 19 699

(a) Tính độ chính xác, precision, recall và F1F_1. (b) Tính độ chính xác của bộ phân loại luôn đoán "bình thường". So sánh với kết quả ở (a). (c) Kết quả (b) nói gì về việc dùng độ chính xác để chọn mô hình trong bài toán này? (d) Bộ phận quản lý rủi ro cho biết bỏ sót một ca gian lận tốn gấp 20 lần một lần báo động nhầm. Nên dịch ngưỡng theo chiều nào, và nên dùng thước đo nào để chọn ngưỡng?

Bài 7 (tính tay). Xét SVM lề cứng trên đúng hai điểm: x1=(1,1)x_1 = (1,1) có nhãn +1+1 và x2=(−1,−1)x_2 = (-1,-1) có nhãn −1-1. (a) Dùng tính đối xứng để lập luận rằng b=0b = 0, rồi giải bài toán gốc để tìm ww. (b) Tính độ rộng lề 2/∥w∥2/\|w\| và so sánh với khoảng cách giữa hai điểm. Giải thích kết quả. (c) Tìm α1\alpha_1, α2\alpha_2 từ w=∑iαiyixiw = \sum_i\alpha_i y_i x_i và ràng buộc ∑iαiyi=0\sum_i\alpha_i y_i = 0. (d) Tính giá trị bài toán gốc 12∥w∥2\tfrac12\|w\|^2 và giá trị bài toán đối ngẫu. Khe đối ngẫu bằng bao nhiêu? (e) Thêm điểm x3=(5,5)x_3 = (5,5) có nhãn +1+1. Nghiệm có thay đổi không? Trả lời bằng điều kiện bù.

Bài 8 (tính tay). Một ma trận hiệp phương sai có các trị riêng λ=(10; 5; 3; 1,5; 0,5)\lambda = (10;\, 5;\, 3;\, 1{,}5;\, 0{,}5). (a) Cần giữ bao nhiêu thành phần chính để giữ được ít nhất 85% phương sai? (b) Với k=2k = 2 và n=101n = 101 điểm dữ liệu, sai số tái tạo ∥Xc−Xk∥F2\|X_c - X_k\|_F^2 bằng bao nhiêu? (c) Một người nói: "Giữ 90% phương sai nên mô hình phân loại chỉ kém đi một chút." Dùng kết quả ở Mục 14.4 để phản bác. (d) Nếu đổi đơn vị của một đặc trưng từ mét sang milimét, các trị riêng thay đổi thế nào? Từ đó rút ra điều gì về việc chuẩn hoá trước PCA?

Bài 9 (chẩn đoán). Với mỗi tình huống sau, nêu nguyên nhân có thể và hai việc nên làm: (a) Chạy K-means 5 lần trên cùng dữ liệu, được 5 kết quả khác hẳn nhau. (b) K-means chia đôi một cụm dài và dẹt, trong khi gộp hai cụm tròn nhỏ nằm gần nhau. (c) Inertia giảm đều theo kk, không thấy khuỷu tay. (d) Một cụm chứa 98% số điểm, bốn cụm còn lại mỗi cụm chỉ có vài điểm.

Bài 10 (thiết kế). Một hệ thống gợi ý có 1 triệu người dùng và 100 nghìn sản phẩm, dự định dùng phân rã ma trận hạng k=50k = 50. (a) Mô hình có bao nhiêu tham số? Con số đó bằng bao nhiêu phần trăm số ô của ma trận đầy đủ? (b) Theo kết quả ở Mục 16.3, lấy mức an toàn là khoảng 5 lần hạng kk đánh giá mỗi người, thì mỗi người cần khoảng bao nhiêu đánh giá? Tổng cộng cần bao nhiêu đánh giá, bằng bao nhiêu phần trăm số ô? (c) Thực tế trung bình mỗi người chỉ có 30 đánh giá. Dự đoán điều gì sẽ xảy ra, và nêu hai cách xử lý. (d) Yêu cầu sản phẩm là mọi người dùng mới đều nhận được gợi ý ngay từ phiên đầu tiên. Thiết kế phương án dự phòng, và nêu rõ khi nào chuyển sang dùng phân rã ma trận.


18Câu hỏi phỏng vấn#

18.1Cách trình bày câu trả lời#

Phần lớn câu hỏi phỏng vấn về học máy cơ bản có dạng "vì sao X" hoặc "X khác Y thế nào". Một câu trả lời tốt thường đi qua ba bước. Đầu tiên là vấn đề mà X giải quyết: X ra đời để xử lý tình huống nào. Tiếp theo là cơ chế: X hoạt động thế nào, tốt nhất bằng một công thức ngắn hoặc một con số cụ thể. Cuối cùng là giới hạn: X tốn kém ở đâu, và khi nào nó không còn đúng.

Với các chủ đề nền tảng, có thêm một bước giúp câu trả lời nổi bật: nêu mối liên hệ giữa X với một khái niệm khác. Chẳng hạn, trả lời về ridge mà chỉ ra được nó là ước lượng MAP với tiên nghiệm Gauss cho thấy người trả lời hiểu nguồn gốc của phương pháp chứ không chỉ nhớ công thức.

Các câu trả lời mẫu dưới đây dẫn số liệu từ các thí nghiệm của giáo trình. Khi phỏng vấn không cần nhớ chính xác từng con số; điều quan trọng là nắm được độ lớn và chiều của hiệu ứng.

18.2Hồi quy và tối ưu#

Câu hỏi: Vì sao hồi quy tuyến tính dùng bình phương sai số?

Trả lời

Vì bình phương sai số là âm log hợp lý khi nhiễu có phân phối Gauss (Mục 10.2), nên nghiệm bình phương tối thiểu chính là ước lượng hợp lý cực đại dưới giả thiết đó. Nếu nhiễu có đuôi dày hơn Gauss, ví dụ có nhiều điểm ngoại lai, thì giả thiết nhiễu Laplace hợp lý hơn và cho ra hồi quy trị tuyệt đối, phương pháp ít nhạy với điểm ngoại lai. Đổi giả thiết về nhiễu là đổi hàm mất mát.

Câu hỏi: Khi nào phương trình chuẩn không có nghiệm duy nhất, và xử lý thế nào?

Trả lời

Khi XX không đủ hạng cột: số đặc trưng lớn hơn số điểm dữ liệu, hoặc có đặc trưng là tổ hợp tuyến tính của các đặc trưng khác. Ví dụ điển hình là mã hoá one-hot đủ KK giá trị trong khi vẫn giữ cột hằng số. Khi đó có vô số nghiệm cho cùng một dự đoán. Giả nghịch đảo chọn nghiệm có chuẩn nhỏ nhất, trùng với giới hạn của ridge khi λ→0+\lambda \to 0^+. Trên thực tế thường bỏ cột thừa hoặc dùng ridge.

Câu hỏi: Đa cộng tuyến gây hại thế nào?

Trả lời

Nó làm hệ số dao động mạnh nhưng hầu như không ảnh hưởng tới dự đoán. Trong thí nghiệm ở Mục 4.4, khi tương quan giữa hai đặc trưng tăng từ 0 lên 0,999, độ lệch chuẩn của hệ số tăng khoảng 25 lần, trong khi độ lệch chuẩn của dự đoán gần như không đổi. Mức tăng khớp với lý thuyết VIF=1/1−ρ2≈22\sqrt{\text{VIF}} = 1/\sqrt{1-\rho^2} \approx 22. Vì vậy đa cộng tuyến là vấn đề của việc diễn giải hệ số, không phải của dự đoán.

Câu hỏi: Tốc độ hội tụ của gradient descent phụ thuộc vào gì?

Trả lời

Vào số điều kiện κ\kappa của hàm mất mát, không phụ thuộc vào số chiều. Với hàm bậc hai, số vòng lặp tỉ lệ với κlog⁡(1/ε)\kappa\log(1/\varepsilon). Mục 5.3 đo được khi κ\kappa tăng từ 1 lên 10 000, số vòng lặp tăng từ 1 lên 92 104; thêm momentum giảm bậc xuống κ\sqrt\kappa, chỉ còn 1 297 vòng. Hệ quả thực tế: chuẩn hoá đặc trưng về cùng thang đo là cách rẻ nhất để giảm κ\kappa và tăng tốc huấn luyện.

Câu hỏi: Kiểm tra gradient bằng cách nào?

Trả lời

So sánh với sai phân trung tâm, dùng ε\varepsilon khoảng 10−510^{-5} tới 10−610^{-6} và đánh giá bằng sai số tương đối. Điểm hay bị hiểu sai là ε\varepsilon không phải càng nhỏ càng tốt: sai số cắt cụt tỉ lệ ε2\varepsilon^2 nhưng sai số làm tròn tỉ lệ u/εu/\varepsilon, nên điểm tối ưu là ε∗∼u1/3≈6×10−6\varepsilon^* \sim u^{1/3} \approx 6\times10^{-6}. Thí nghiệm ở Mục 5.5 đo được 5,6×10−65{,}6\times10^{-6}, và ε=10−13\varepsilon = 10^{-13} cho sai số lớn hơn khoảng 5×1075 \times 10^7 lần.

18.3Phân loại#

Câu hỏi: Perceptron, hồi quy logistic và SVM khác nhau ở đâu?

Trả lời

Chúng giống nhau ở mô hình (hàm tuyến tính w⊤x+bw^\top x + b) và thường tối ưu bằng các biến thể của gradient descent. Chúng khác nhau ở hàm mất mát, viết theo lề m=y(w⊤x+b)m = y(w^\top x + b):

Hàm mất mát Hệ quả
Perceptron max⁡(0,−m)\max(0,-m) bằng 0 khi m≥0m \ge 0: dừng ngay khi vừa phân loại đúng, không hội tụ khi dữ liệu không tách được
SVM max⁡(0,1−m)\max(0,1-m) bằng 0 khi m≥1m \ge 1: sinh ra khái niệm lề
Hồi quy logistic log⁡(1+e−m)\log(1+e^{-m}) trơn và luôn dương: cho ra xác suất

Mất mát 0–1 không dùng trực tiếp được vì đạo hàm của nó bằng 0 hầu khắp nơi. Hinge và logistic (theo logarit cơ số 2) là chặn trên lồi của mất mát 0–1; mất mát perceptron chỉ là hàm thay thế lồi, không phải chặn trên.

Câu hỏi: Hồi quy logistic và hồi quy softmax liên hệ thế nào?

Trả lời

Hồi quy softmax với hai lớp chính là hồi quy logistic, với w=w1−w0w = w_1 - w_0. Softmax có KK vector trọng số nhưng chỉ hiệu giữa chúng được dữ liệu xác định, vì cộng cùng một vector vào tất cả không đổi xác suất. Thí nghiệm ở Mục 6.4 khớp cả hai mô hình trên cùng dữ liệu và cho trọng số lệch nhau 1,6×10−151{,}6\times10^{-15}, tức trùng nhau tới sai số làm tròn.

Câu hỏi: Vì sao hồi quy logistic thường cần regularization?

Trả lời

Khi dữ liệu tách được hoàn toàn, hàm mất mát giảm mãi khi nhân ww với số ngày càng lớn, nên không có nghiệm hữu hạn và ∥w∥→∞\|w\| \to \infty. Mục 6.5 đo được: không có regularization, ∥w∥\|w\| tăng từ 10,2 lên 34,8 khi số vòng lặp tăng từ 500 lên 50 000 mà không dừng; với λ=0,01\lambda = 0{,}01, ∥w∥\|w\| đứng yên ở 3,993. Vì vậy LogisticRegression của scikit-learn mặc định có regularization ℓ2\ell_2. Hệ số lớn bất thường cũng là dấu hiệu nên kiểm tra rò rỉ dữ liệu.

Câu hỏi: Naive Bayes, LDA và QDA khác nhau thế nào?

Trả lời

Với đặc trưng liên tục và mô hình Gauss cho mỗi lớp, cả ba là cùng một bộ phân loại sinh, chỉ khác ràng buộc trên ma trận hiệp phương sai: Naive Bayes Gauss dùng ma trận đường chéo riêng cho từng lớp, LDA dùng một ma trận đầy đủ chung cho mọi lớp, QDA dùng ma trận đầy đủ riêng cho từng lớp. LDA có biên tuyến tính vì khi hai lớp dùng chung Σ\Sigma, số hạng bậc hai x⊤Σ−1xx^\top\Sigma^{-1}x triệt tiêu khi lấy hiệu hai hàm phân biệt; thí nghiệm ở Mục 7.4 khớp hàm quyết định của LDA bằng hàm tuyến tính với sai số 4,4×10−154{,}4\times10^{-15}. QDA linh hoạt hơn nhưng phải ước lượng KK ma trận hiệp phương sai, nên cần nhiều dữ liệu hơn.

Câu hỏi: Vì sao Naive Bayes vẫn phân loại tốt dù giả thiết độc lập gần như luôn sai?

Trả lời

Vì để chọn đúng nhãn chỉ cần thứ tự của các xác suất hậu nghiệm đúng, không cần giá trị của chúng đúng. Các xác suất do Naive Bayes đưa ra thường bị đẩy về gần 0 hoặc 1 quá mức, vì các bằng chứng tương quan bị đếm lặp lại, nên không nên dùng chúng như xác suất đã hiệu chuẩn.

18.4Đánh giá mô hình#

Câu hỏi: Vì sao không nên dùng độ chính xác trên dữ liệu mất cân bằng?

Trả lời

Vì một bộ phân loại vô dụng có thể đạt độ chính xác rất cao. Trong thí nghiệm ở Mục 8.1 với 0,98% lớp dương, bộ phân loại luôn đoán lớp âm đạt độ chính xác 0,9902, cao hơn một bộ phân loại phát hiện được hơn nửa số ca dương (F1=0,51F_1 = 0{,}51, độ chính xác 0,9900). Nên dùng precision, recall, F1F_1 hoặc PR-AUC.

Câu hỏi: Khi nào dùng ROC-AUC, khi nào dùng PR-AUC?

Trả lời

Trên cùng mô hình và dữ liệu mất cân bằng ở Mục 8.3, ROC-AUC bằng 0,9715 nhưng PR-AUC chỉ bằng 0,4931. Lý do nằm ở mẫu số: FPR chia cho toàn bộ lớp âm, lớp chiếm 99% dữ liệu, nên hàng trăm dương giả hầu như không làm FPR thay đổi; precision chia cho số điểm được báo dương, nên nhạy với dương giả. Mốc so sánh cũng khác: ROC-AUC của bộ đoán ngẫu nhiên luôn là 0,5, còn PR-AUC của nó bằng tỉ lệ lớp dương, ở đây 0,01. Khi lớp dương hiếm và chất lượng của các cảnh báo là điều quan trọng, dùng PR-AUC.

Câu hỏi: Precision và recall đánh đổi nhau thế nào?

Trả lời

Qua ngưỡng quyết định. Ở Mục 8.1, hạ ngưỡng từ 2,6 xuống −1,0 làm recall tăng từ 0,52 lên 1,00 và precision giảm từ 0,49 xuống 0,012. Chọn ngưỡng là quyết định dựa trên chi phí của từng loại lỗi, không có ngưỡng đúng về mặt kỹ thuật. Khi một loại lỗi đắt hơn, có thể dùng FβF_\beta để phản ánh điều đó.

18.5Regularization và xác suất#

Câu hỏi: Ridge và lasso khác nhau thế nào?

Trả lời

Ridge phạt ∥w∥22\|w\|_2^2, lasso phạt ∥w∥1\|w\|_1. Lasso cho nhiều hệ số bằng đúng 0, ridge thì không. Trong trường hợp các cột trực chuẩn, ridge nhân mỗi hệ số với 1/(1+λ)1/(1+\lambda), còn lasso trừ mỗi hệ số một lượng λ\lambda và cắt về 0 những hệ số nhỏ hơn (ngưỡng mềm). Nguyên nhân là ∣w∣|w| không khả vi tại 0 và dưới vi phân tại đó là cả đoạn [−1,1][-1, 1]. Mục 9.4 đo được: ở λ=100\lambda = 100, lasso đưa đúng 9 trong 12 hệ số về 0, trùng với 9 hệ số bằng 0 của mô hình thật, còn ridge không đưa hệ số nào về 0.

Câu hỏi: Ridge có co mọi hệ số như nhau không?

Trả lời

Không. Viết qua SVD, ridge nhân thành phần theo hướng riêng thứ ii với di2/(di2+λ)d_i^2/(d_i^2+\lambda). Ở Mục 9.3 với λ=10\lambda = 10, hướng có giá trị suy biến 12,27 giữ lại 0,938, hướng có giá trị suy biến 6,17 chỉ giữ lại 0,792. Ridge co mạnh nhất những hướng dữ liệu cung cấp ít thông tin, cũng là những hướng mà ước lượng bình phương tối thiểu có phương sai lớn nhất. Nhờ vậy ridge xử lý được đa cộng tuyến.

Câu hỏi: Regularization có nguồn gốc từ đâu?

Trả lời

Từ phân phối tiên nghiệm. Ước lượng MAP cực tiểu −log⁡p(D∣θ)−log⁡p(θ)-\log p(\mathcal{D}\mid\theta) - \log p(\theta): số hạng thứ nhất là hàm mất mát, số hạng thứ hai là regularization. Tiên nghiệm Gauss cho ridge với λ=σ2/τ2\lambda = \sigma^2/\tau^2, tiên nghiệm Laplace cho lasso, tiên nghiệm Dirichlet cho làm trơn Laplace. Mục 10.4 kiểm chứng: nghiệm ridge dạng đóng và nghiệm MAP tìm bằng BFGS lệch nhau 2×10−82\times10^{-8}. Cần nói thêm rằng MAP chỉ lấy đỉnh của hậu nghiệm, không cho biết mức độ không chắc chắn như suy luận Bayes đầy đủ.

18.6Tối ưu lồi và SVM#

Câu hỏi: Vì sao tính lồi quan trọng?

Trả lời

Với hàm lồi, mọi điểm có gradient bằng 0 là cực tiểu toàn cục, nên kết quả không phụ thuộc điểm khởi tạo. Ở Mục 11.6, gradient descent chạy từ 21 điểm xuất phát cho một điểm dừng duy nhất với hàm lồi, nhưng cho hai điểm dừng với giá trị −2,87-2{,}87 và −1,65-1{,}65 với hàm không lồi x4−3x2+x/2x^4 - 3x^2 + x/2. Hàm mất mát của mạng nơ-ron không lồi, nên khởi tạo, chuẩn hoá và kết nối tắt trở nên quan trọng khi huấn luyện mạng sâu.

Câu hỏi: Vì sao SVM được giải qua bài toán đối ngẫu?

Trả lời

Lý do quan trọng nhất là bài toán đối ngẫu chỉ phụ thuộc vào dữ liệu qua tích vô hướng xi⊤xjx_i^\top x_j, nên thay tích vô hướng bằng một kernel là SVM làm việc được trong không gian đặc trưng phi tuyến mà không cần dựng không gian đó. Ngoài ra bài toán đối ngẫu có nn biến thay vì dd biến, có lợi khi dd lớn hơn nn, và giá trị đối ngẫu cho chặn dưới để biết nghiệm hiện tại còn cách tối ưu bao xa.

Câu hỏi: Vector hỗ trợ là gì, và vì sao chỉ chúng ảnh hưởng tới nghiệm?

Trả lời

Là những điểm có nhân tử Lagrange αi>0\alpha_i > 0. Theo điều kiện bù của KKT, αi>0\alpha_i > 0 chỉ xảy ra khi ràng buộc của điểm đó chặt, tức điểm nằm đúng trên lề (với SVM lề cứng). Mọi điểm nằm ngoài lề có αi=0\alpha_i = 0 và không đóng góp vào w=∑iαiyixiw = \sum_i \alpha_i y_i x_i. Đây là hệ quả của KKT, không phải lựa chọn thiết kế. Thí nghiệm ở Mục 13.3 có 3 vector hỗ trợ trên 120 điểm; bỏ 117 điểm còn lại, nghiệm không đổi.

Câu hỏi: Tham số CC trong SVM lề mềm có vai trò gì?

Trả lời

CC cân bằng giữa lề rộng và mức phạt cho các điểm vi phạm lề; nó đóng vai trò nghịch đảo của hệ số regularization, vì SVM lề mềm tương đương với mất mát hinge cộng 12∥w∥2\tfrac{1}{2}\|w\|^2. KKT chia các điểm thành ba nhóm: α=0\alpha = 0 (ngoài lề), 0<α<C0 < \alpha < C (trên lề), α=C\alpha = C (vi phạm lề). Ở Mục 13.4, C=0,003C = 0{,}003 cho lề rộng 5,61 và cả 114 vector hỗ trợ đều vi phạm lề; C=300C = 300 cho lề 1,73 với 45 vector hỗ trợ. Với kernel tuyến tính trên dữ liệu có biên tối ưu tuyến tính, CC ảnh hưởng ít tới sai số kiểm tra; với kernel phi tuyến, CC quan trọng hơn nhiều.

Câu hỏi: Thủ thuật kernel là gì?

Trả lời

Là tính tích vô hướng trong không gian đặc trưng, K(x,x′)=φ(x)⊤φ(x′)K(x,x') = \varphi(x)^\top\varphi(x'), mà không cần tính φ(x)\varphi(x). Kernel RBF tương ứng với một không gian đặc trưng vô hạn chiều, nhưng mỗi lần tính chỉ tốn O(d)O(d). Trên dữ liệu hai đường tròn đồng tâm (Mục 13.5), kernel tuyến tính đạt độ chính xác 0,615, còn kernel đa thức bậc 2 và RBF đều đạt 1,000; kernel bậc 2 đạt tuyệt đối vì không gian đặc trưng của nó chứa x12+x22x_1^2 + x_2^2.

Câu hỏi: Vì sao SVM với kernel ít được dùng cho dữ liệu rất lớn?

Trả lời

Vì chi phí, không phải vì độ chính xác. Huấn luyện cần làm việc với ma trận kernel n×nn\times n, chi phí khoảng O(n2)O(n^2) tới O(n3)O(n^3); khi dự đoán phải tính kernel với mọi vector hỗ trợ, mà số vector hỗ trợ thường tăng theo nn. Mỗi epoch của SGD trên mạng nơ-ron chỉ tốn chi phí tuyến tính theo nn.

18.7Học không giám sát#

Câu hỏi: PCA làm gì, và khi nào nó không phù hợp?

Trả lời

PCA tìm các hướng trực giao có phương sai lớn nhất, là các vector riêng của ma trận hiệp phương sai. Sai số tái tạo khi giữ kk thành phần bằng đúng tổng các trị riêng bị bỏ nhân (n−1)(n-1) (định lý Eckart–Young; Mục 14.3 kiểm chứng tới 10−1210^{-12}). PCA không dùng nhãn, nên hướng có phương sai lớn có thể vô dụng cho phân loại: ở Mục 14.4, thành phần chính thứ nhất giữ 96,1% phương sai nhưng cho AUC 0,502, trong khi hướng của LDA cho AUC 0,9987.

Câu hỏi: PCA và LDA khác nhau thế nào?

Trả lời

PCA cực đại phương sai toàn phần và không dùng nhãn. LDA cực đại tỉ số giữa tán xạ giữa các lớp và tán xạ trong lớp, và có dùng nhãn. LDA cho tối đa K−1K - 1 chiều vì ma trận tán xạ giữa các lớp có hạng không quá K−1K - 1. Hướng của LDA, SW−1(μ1−μ0)S_W^{-1}(\mu_1 - \mu_0), trùng với vector trọng số của bộ phân loại Gauss dùng chung ma trận hiệp phương sai ở Mục 7.4.

Câu hỏi: K-means bảo đảm được điều gì?

Trả lời

Chỉ bảo đảm dừng ở một cực tiểu địa phương, vì bài toán tìm nghiệm tối ưu là NP-khó và hàm mục tiêu không lồi. Ở Mục 15.2, trên dữ liệu 8 cụm, khởi tạo ngẫu nhiên cho nghiệm tồi trong 71,5% số lần chạy, k-means++ giảm xuống 46,5%. Vì vậy cần chạy nhiều lần; lưu ý scikit-learn từ phiên bản 1.4 mặc định chỉ chạy một lần với k-means++. K-means còn giả định cụm lồi, gần tròn, kích thước tương đương và các chiều cùng thang đo: trên hai dải dẹt song song nó chỉ đạt độ chính xác 0,53.

Câu hỏi: Chọn số cụm kk thế nào?

Trả lời

Không chọn bằng cách cực tiểu inertia, vì inertia luôn giảm theo kk và bằng 0 khi k=nk = n. Phương pháp elbow tìm chỗ inertia ngừng giảm nhanh: ở Mục 15.4, mức giảm là 27,7% khi lên k=8k = 8 rồi chỉ còn 5,4% khi lên k=9k = 9. Elbow không có định nghĩa chặt và thường không rõ trên dữ liệu thật; có thể dùng hệ số silhouette hoặc gap statistic, và trong nhiều trường hợp kk do yêu cầu nghiệp vụ quyết định.

Câu hỏi: Phân rã ma trận cần bao nhiêu dữ liệu?

Trả lời

Cần số đánh giá mỗi người dùng lớn hơn hạng kk nhiều lần. Trong thí nghiệm ở Mục 16.3 với hạng thật k=4k = 4, ở 10,1 đánh giá mỗi người RMSE là 3,54, tệ hơn cả đoán mọi ô bằng 0 (2,08); ở 19,8 đánh giá mỗi người RMSE giảm xuống 0,30. Mỗi người dùng có kk ẩn số, và vì đánh giá có nhiễu còn các vector sản phẩm cũng đang được ước lượng, số đánh giá cần thiết lớn hơn kk nhiều lần.

Câu hỏi: Vì sao khởi đầu lạnh là vấn đề nghiêm trọng?

Trả lời

Với người dùng chưa có đánh giá nào, hàm mất mát chỉ còn thành phần regularization λ∥pu∥2\lambda\|p_u\|^2, có cực tiểu tại pu=0p_u = 0, nên mô hình dự đoán gần 0 cho mọi sản phẩm. Ở Mục 16.5, RMSE cho người dùng mới là 2,24, tệ hơn đoán bằng 0 (2,08). Vì vậy hệ thống thực tế cần kết hợp lọc dựa trên nội dung với lọc cộng tác.

18.8Các câu trả lời chưa đạt#

Câu trả lời Vì sao chưa đạt
"Bình phương sai số vì nó phạt sai số lớn nặng hơn." Đúng nhưng chưa đủ: chưa nêu được bình phương sai số là MLE dưới giả thiết nhiễu Gauss.
"Đa cộng tuyến làm mô hình dự đoán kém." Sai: nó làm hệ số dao động, còn dự đoán gần như không đổi.
"Gradient descent chậm vì bài toán có nhiều chiều." Sai: tốc độ phụ thuộc số điều kiện, không phụ thuộc số chiều.
"Kiểm tra gradient thì ε\varepsilon càng nhỏ càng tốt." Sai: ε\varepsilon quá nhỏ làm sai số làm tròn lớn lên; điểm tối ưu cỡ u1/3u^{1/3}.
"Mô hình đạt độ chính xác 99% nên rất tốt." Trên dữ liệu có 1% lớp dương, bộ phân loại luôn đoán lớp âm cũng đạt 99%.
"ROC-AUC 0,97 nghĩa là mô hình rất tốt." Trên dữ liệu mất cân bằng, cùng mô hình đó có thể có PR-AUC chỉ 0,49.
"Ridge và lasso về cơ bản giống nhau." Lasso cho hệ số bằng đúng 0, ridge thì không; đây là khác biệt về bản chất.
"Regularization chỉ là một mẹo để chống overfitting." Chưa đủ: regularization tương ứng với một phân phối tiên nghiệm (ridge là MAP với tiên nghiệm Gauss).
"SVM tốt vì tìm được biên tối ưu." Chưa rõ tối ưu theo nghĩa nào: cần nói là lề lớn nhất, và vì sao lề lớn giúp tổng quát hoá.
"Kernel RBF ánh xạ dữ liệu lên không gian nhiều chiều rồi phân loại ở đó." Thiếu ý chính: phép ánh xạ đó không bao giờ được tính tường minh.
"PCA giữ 95% phương sai nên gần như không mất thông tin." Phương sai lớn không có nghĩa là hữu ích: có trường hợp giữ 96,1% phương sai mà AUC chỉ 0,502.
"K-means tìm được cụm tối ưu." Bài toán NP-khó; thuật toán chỉ cho cực tiểu địa phương, kể cả khi dùng k-means++.
"Naive Bayes giả định các đặc trưng độc lập." Thiếu điều kiện quan trọng: độc lập có điều kiện khi đã biết lớp.
"Chọn kk cho K-means bằng cách cực tiểu inertia." Inertia luôn giảm theo kk và bằng 0 khi k=nk = n.

19Tài liệu tham khảo#

Sách

  1. T. Hastie, R. Tibshirani, J. Friedman. The Elements of Statistical Learning, 2nd ed. Springer, 2009. Nguồn cho ridge, lasso, LDA và QDA, công thức co di2/(di2+λ)d_i^2/(d_i^2+\lambda) và số bậc tự do hiệu dụng ở Mục 9.3.
  2. C. M. Bishop. Pattern Recognition and Machine Learning. Springer, 2006. Nguồn cho cách hiểu regularization như ước lượng MAP và cho các bộ phân loại Gauss.
  3. K. P. Murphy. Machine Learning: A Probabilistic Perspective. MIT Press, 2012. Trình bày học máy thống nhất theo góc nhìn xác suất như Chương 10.
  4. S. Boyd, L. Vandenberghe. Convex Optimization. Cambridge University Press, 2004. Nguồn cho Chương 11 và 12: tập lồi, hàm lồi, đối ngẫu Lagrange, điều kiện Slater và KKT. Sách được phát hành miễn phí trên trang của tác giả.
  5. G. Strang. Introduction to Linear Algebra, 5th ed. Wellesley–Cambridge Press, 2016. Nền cho Chương 2.
  6. T. Hastie, R. Tibshirani, M. Wainwright. Statistical Learning with Sparsity: The Lasso and Generalizations. CRC Press, 2015. Chuyên sâu về lasso và nghiệm thưa.
  7. T. M. Mitchell. Machine Learning. McGraw-Hill, 1997. Nguồn của định nghĩa học máy ở Mục 1.1.
  8. V. N. Vapnik. The Nature of Statistical Learning Theory. Springer, 1995. Nguồn cho lý thuyết lề và chiều VC ở Mục 13.1.

Bài báo gốc

  1. A. E. Hoerl, R. W. Kennard. Ridge Regression: Biased Estimation for Nonorthogonal Problems. Technometrics, 1970.
  2. R. Tibshirani. Regression Shrinkage and Selection via the Lasso. Journal of the Royal Statistical Society, Series B, 1996.
  3. H. Zou, T. Hastie. Regularization and Variable Selection via the Elastic Net. Journal of the Royal Statistical Society, Series B, 2005.
  4. F. Rosenblatt. The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain. Psychological Review, 1958.
  5. A. B. J. Novikoff. On Convergence Proofs on Perceptrons. Symposium on the Mathematical Theory of Automata, 1962. Nguồn của Định lý 6.1.
  6. T. Cover, P. Hart. Nearest Neighbor Pattern Classification. IEEE Transactions on Information Theory, 1967. Nguồn của Định lý 7.1.
  7. A. Y. Ng, M. I. Jordan. On Discriminative vs. Generative Classifiers: A Comparison of Logistic Regression and Naive Bayes. NIPS, 2002. Nguồn cho so sánh ở Mục 7.1.
  8. D. Soudry, E. Hoffer, M. S. Nacson, S. Gunasekar, N. Srebro. The Implicit Bias of Gradient Descent on Separable Data. Journal of Machine Learning Research, 2018. Nguồn cho nhận xét về tốc độ tăng của ∥w∥\|w\| ở Mục 6.5.
  9. B. E. Boser, I. M. Guyon, V. N. Vapnik. A Training Algorithm for Optimal Margin Classifiers. COLT, 1992. Nguồn của thủ thuật kernel cho SVM.
  10. C. Cortes, V. Vapnik. Support-Vector Networks. Machine Learning, 1995. Nguồn của SVM lề mềm và tham số CC.
  11. J. Platt. Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines. Microsoft Research Technical Report, 1998. Thuật toán nền của libsvm.
  12. R. A. Fisher. The Use of Multiple Measurements in Taxonomic Problems. Annals of Eugenics, 1936. Nguồn của LDA.
  13. K. Pearson. On Lines and Planes of Closest Fit to Systems of Points in Space. Philosophical Magazine, 1901. Nguồn của PCA.
  14. C. Eckart, G. Young. The Approximation of One Matrix by Another of Lower Rank. Psychometrika, 1936. Định lý ở Mục 14.3.
  15. S. P. Lloyd. Least Squares Quantization in PCM. IEEE Transactions on Information Theory, 1982 (báo cáo nội bộ năm 1957). Thuật toán K-means.
  16. D. Arthur, S. Vassilvitskii. k-means++: The Advantages of Careful Seeding. SODA, 2007. Nguồn của cách khởi tạo ở Mục 15.2.
  17. R. Tibshirani, G. Walther, T. Hastie. Estimating the Number of Clusters in a Data Set via the Gap Statistic. Journal of the Royal Statistical Society, Series B, 2001.
  18. Y. Koren, R. Bell, C. Volinsky. Matrix Factorization Techniques for Recommender Systems. IEEE Computer, 2009. Nguồn chính cho Chương 16.
  19. Y. Hu, Y. Koren, C. Volinsky. Collaborative Filtering for Implicit Feedback Datasets. ICDM, 2008. ALS cho phản hồi ngầm.
  20. E. J. Candès, B. Recht. Exact Matrix Completion via Convex Optimization. Foundations of Computational Mathematics, 2009. Nguồn cho nhận xét lý thuyết ở Mục 16.3.

Tối ưu hoá

  1. H. Robbins, S. Monro. A Stochastic Approximation Method. Annals of Mathematical Statistics, 1951. Điều kiện về tốc độ học ở Mục 5.6.
  2. B. T. Polyak. Some Methods of Speeding up the Convergence of Iteration Methods. USSR Computational Mathematics and Mathematical Physics, 1964. Phương pháp heavy ball (momentum) ở Mục 5.3.
  3. Y. Nesterov. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k2)O(1/k^2). Soviet Mathematics Doklady, 1983.
  4. L. Bottou, F. E. Curtis, J. Nocedal. Optimization Methods for Large-Scale Machine Learning. SIAM Review, 2018. Tổng quan về SGD và các biến thể.

Đánh giá mô hình

  1. T. Fawcett. An Introduction to ROC Analysis. Pattern Recognition Letters, 2006.
  2. J. Davis, M. Goadrich. The Relationship Between Precision-Recall and ROC Curves. ICML, 2006. Nguồn cho lập luận ở Mục 8.3.
  3. T. Saito, M. Rehmsmeier. The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets. PLOS ONE, 2015.

Tính toán số

  1. N. J. Higham. Accuracy and Stability of Numerical Algorithms, 2nd ed. SIAM, 2002. Nguồn cho phân tích ε∗∼u1/3\varepsilon^* \sim u^{1/3} ở Mục 5.5 và cho nhận xét κ(X⊤X)=κ(X)2\kappa(X^\top X) = \kappa(X)^2.

Tài liệu tiếng Việt

  1. A. Amidi, S. Amidi. Cheatsheet CS229 và CS230 (bản dịch tiếng Việt). Stanford University, stanford.edu/~shervine/l/vi. Nguồn tham khảo cho quy ước thuật ngữ ở Mục 0.2.
  2. Vũ Hữu Tiệp. Machine Learning cơ bản. machinelearningcoban.com. Bộ bài giảng tiếng Việt đầy đủ về học máy cổ điển, có mã Python cho từng thuật toán.
  3. Phạm Đình Khánh. Deep AI KhanhBlog. phamdinhkhanh.github.io. Các bài viết về học máy, thị giác máy tính và xử lý ngôn ngữ tự nhiên.

Nhận xét (Về các tài liệu tiếng Việt)

Hai trang 38 và 39 được giới thiệu như tài liệu đọc thêm. Giáo trình này không sao chép nội dung hay hình ảnh của chúng: phần chữ được viết riêng và mọi số liệu, hình vẽ đều sinh từ mã trong code/nentang/. Trang Machine Learning cơ bản ghi rõ mọi hình thức sao chép cần được tác giả đồng ý.


Phụ lục: chạy lại toàn bộ thí nghiệm#

Văn bản
code/nentang/
├── experiments.py            # Hình 2, 3, 4, 6, 7, 8, 9, 10, 11, 12 và mọi số liệu đo được
├── experiments_output.txt    # kết quả in ra của script trên
└── fig_diagrams.py           # Hình 1, 5, 13 (các sơ đồ khái niệm)
Bash
pip install numpy scipy matplotlib scikit-learn
python code/nentang/experiments.py      # vài phút
python code/nentang/fig_diagrams.py

Hai script đặt hạt giống cố định nên mọi con số trong giáo trình lặp lại được trên cùng phiên bản thư viện. Môi trường đã dùng: Python 3.13, NumPy 2.3, SciPy 1.16, scikit-learn 1.7, matplotlib 3.10.

Giáo trình không dùng con số nào trích từ bài báo; mọi số liệu đều sinh tại chỗ, và chia làm hai loại.

Loại thứ nhất là kiểm chứng đẳng thức. Những kết quả này phải khớp tới sai số của máy tính; nếu không khớp thì mã có lỗi.

Đẳng thức Sai số đo được
Hồi quy logistic trùng hồi quy softmax với K=2K=2 1,6×10−151{,}6\times10^{-15}
Ba cách giải bình phương tối thiểu cho cùng nghiệm 1,2×10−151{,}2\times10^{-15}
PCA qua ma trận hiệp phương sai trùng PCA qua SVD 7,1×10−157{,}1\times10^{-15}
Eckart–Young: sai số tái tạo bằng (n−1)∑i>kλi(n-1)\sum_{i>k}\lambda_i cỡ 10−1310^{-13}
Ridge qua SVD trùng ridge dạng đóng 2,3×10−152{,}3\times10^{-15}
Hàm quyết định của LDA là tuyến tính 4,4×10−154{,}4\times10^{-15}
SVM: w=∑iαiyixiw = \sum_i \alpha_i y_i x_i 00
SVM: khe đối ngẫu bằng 0 4,0×10−84{,}0\times10^{-8}
Tích các Gauss một chiều trùng Gauss nhiều chiều với Σ\Sigma đường chéo 1,2×10−81{,}2\times10^{-8}
Ridge dạng đóng trùng MAP tìm bằng BFGS 2,0×10−82{,}0\times10^{-8}

Bốn dòng cuối không đạt tới sai số làm tròn vì bị giới hạn bởi dung sai dừng của bộ giải (libsvm, BFGS) hoặc bởi lượng nhỏ cộng thêm vào đường chéo để nghịch đảo ma trận ổn định. Giáo trình in ra đúng con số đo được.

Loại thứ hai là mô phỏng trên dữ liệu sinh ngẫu nhiên, gồm các bảng về số vòng lặp, độ chính xác, RMSE và tỉ lệ kẹt ở nghiệm tồi. Chúng cho thấy một cơ chế tồn tại và có độ lớn đáng kể, nhưng không dùng để suy ra con số cho một tập dữ liệu thật cụ thể. Ở những chỗ kết quả yếu hơn kỳ vọng, như ảnh hưởng nhỏ của CC với SVM tuyến tính ở Mục 13.4, giáo trình ghi nhận đúng như vậy.