Bản dịch tiếng Việt · có phòng thí nghiệm tương tác
Trăm Trang Học Máy
Bản dịch đầy đủ The Hundred-Page Machine Learning Book của Andriy Burkov, bổ sung 40 phòng thí nghiệm chạy thẳng trong trình duyệt và 20 hình minh hoạ vẽ lại bằng tiếng Việt. Khám phá thuật toán bằng mô phỏng, rồi tự kiểm tra với 8 bài tập áp dụng.
Cách đọc cuốn này
Mỗi khi gặp một khối viền có nhãn PHÒNG THÍ NGHIỆM, hãy dừng đọc và bấm thử. Phần Việc cần làm ở cuối mỗi phòng thí nghiệm chỉ ra đúng những thao tác làm lộ ra bản chất thuật toán — thường là bằng cách cố ý làm nó hỏng.
Toàn bộ phần chữ là bản dịch trung thành nguyên tác. Các phòng thí nghiệm, hình vẽ và ghi chú diễn giải là phần bổ sung.
Từ hiểu lý thuyết đến tự quyết định
Luyện áp dụng · 8 thử thách
Dự đoán trước, thử trên dữ liệu, rồi giải thích kết quả. Các bài nằm ngay cạnh lý thuyết trong sách; bạn có thể đi theo lộ trình dưới đây trong khoảng 35–40 phút.
- 01Báo động đúng được bao nhiêu?2.4 · Bayes · 4 phútChưa làm
- 02Đổi đơn vị, đổi cả láng giềng?5.1 · Chuẩn hóa · 4 phútChưa làm
- 03Thám tử rò rỉ dữ liệu5.2 · Chia dữ liệu · 6 phútChưa làm
- 04Tự tính một lần lan truyền ngược6.2 · Backpropagation · 5 phútChưa làm
- 05Sáu lượt hỏi chuyên gia7.7 · Học chủ động · 5 phútChưa làm
- 06Một ngưỡng, hai loại sai lầm8.1 · Chi phí sai · 4 phútChưa làm
- 07Sắp kết quả tìm kiếm10.2 · Xếp hạng · 4 phútChưa làm
- 08Điền ô trống bằng sở thích ẩn10.3 · Gợi ý · 5 phútChưa làm
Tiến độ hoàn thành lưu trên trình duyệt này.
Học tiếp 6 bài về shape, backprop, mask, RoPE, KV cache và giải mã trong sách toán đồng hành.
Lời nói đầu (Preface)
“Mọi mô hình đều sai, nhưng một số mô hình thì hữu ích.”
— George Box
Hãy bắt đầu bằng việc nói thật lòng: máy móc không hề "học". Những gì một "cỗ máy học" (learning machine) thông thường thực hiện là tìm ra một công thức toán học, mà khi áp dụng công thức đó vào một tập hợp dữ liệu đầu vào (gọi là "dữ liệu huấn luyện" - training data), nó sẽ tạo ra kết quả đầu ra như mong muốn. Công thức toán học này cũng sẽ tạo ra kết quả đầu ra chính xác cho hầu hết các đầu vào khác (khác với dữ liệu huấn luyện), với điều kiện là các đầu vào đó đến từ cùng một phân phối thống kê hoặc tương tự như phân phối của dữ liệu huấn luyện ban đầu.
Tại sao đó lại không phải là học thực sự? Bởi vì nếu bạn làm biến dạng nhẹ dữ liệu đầu vào, kết quả đầu ra rất có thể sẽ hoàn toàn sai lệch. Đó không phải là cách việc học diễn ra ở động vật hay con người. Nếu bạn học chơi một trò chơi điện tử bằng cách nhìn thẳng vào màn hình, bạn vẫn sẽ chơi tốt nếu ai đó xoay nghiêng màn hình một chút. Ngược lại, một thuật toán học máy, nếu chỉ được huấn luyện bằng cách "nhìn" thẳng vào màn hình (trừ khi nó cũng được huấn luyện cụ thể để nhận diện phép xoay), nó sẽ thất bại hoàn toàn khi phải chơi game trên một màn hình bị nghiêng.
Vậy tại sao lại có cái tên "Machine Learning" (Học máy)? Lý do, như thường lệ, xuất phát từ yếu tố tiếp thị (marketing): Arthur Samuel, một nhà tiên phong người Mỹ trong lĩnh vực trò chơi máy tính và trí tuệ nhân tạo, đã đặt ra thuật ngữ này vào năm 1959 khi còn làm việc tại IBM. Tương tự như cách IBM trong những năm 2010 cố gắng tiếp thị thuật ngữ "cognitive computing" (điện toán nhận thức) để nổi bật trước các đối thủ cạnh tranh, vào những năm 1960, IBM đã sử dụng thuật ngữ mới mẻ và thời thượng "machine learning" để thu hút cả khách hàng lẫn các nhân tài.
Như bạn có thể thấy, cũng giống như trí tuệ nhân tạo (Artificial Intelligence - AI) không thực sự là trí tuệ sinh học, học máy cũng không phải là việc học theo nghĩa đen. Tuy nhiên, "Machine Learning" là một thuật ngữ đã được công nhận trên toàn cầu, thường dùng để chỉ khoa học và kỹ thuật xây dựng các cỗ máy có khả năng thực hiện nhiều tác vụ hữu ích mà không cần phải lập trình tường minh (explicitly programmed) từng bước một để làm điều đó. Do đó, từ "học" trong thuật ngữ này được dùng theo phép loại suy (tương tự như cách động vật học tập) hơn là hiểu theo nghĩa đen.
Cuốn sách này dành cho ai?
Cuốn sách này chỉ chọn lọc những phần cốt lõi nhất từ kho tàng tài liệu học máy khổng lồ được phát triển từ những năm 1960 đến nay — những phần đã được chứng minh là mang lại giá trị thực tiễn vượt trội.
- Người mới bắt đầu: Sẽ tìm thấy trong cuốn sách này vừa đủ chi tiết để đạt được mức độ hiểu biết thoải mái, vững chắc về lĩnh vực này và bắt đầu biết đặt ra những câu hỏi đúng đắn.
- Người đã có kinh nghiệm thực tế (Practitioners): Có thể sử dụng cuốn sách này như một bản đồ chỉ dẫn để tiếp tục tự nâng cao trình độ. Cuốn sách cũng rất hữu ích khi bạn cần thảo luận (brainstorming) ở giai đoạn khởi đầu của một dự án, khi bạn cố gắng trả lời câu hỏi: Liệu một vấn đề kinh doanh hoặc kỹ thuật cụ thể có thể giải quyết được bằng học máy hay không, và nếu có thì nên thử nghiệm kỹ thuật nào?
Cách sử dụng cuốn sách này
Nếu bạn chuẩn bị bắt đầu bước chân vào học máy, bạn nên đọc cuốn sách này từ đầu đến cuối. (Nó chỉ vỏn vẹn khoảng một trăm trang, không phải là điều gì quá to tát).
Nếu bạn đặc biệt quan tâm đến một chủ đề cụ thể trong sách và muốn tìm hiểu sâu hơn, hầu hết các phần đều có liên kết đến trang wiki đồng hành của cuốn sách tại theMLbook.com với các tài liệu bổ sung: bài đọc khuyến nghị, video, hỏi đáp (Q&A), đoạn mã nguồn (code snippets), hướng dẫn từng bước (tutorials) và nhiều tài liệu giá trị khác.
Trang wiki của cuốn sách được cập nhật liên tục với sự đóng góp từ chính tác giả cũng như các tình nguyện viên trên khắp thế giới. Vì vậy, cuốn sách này, giống như một chai rượu vang hảo hạng, sẽ ngày càng trở nên giá trị hơn theo thời gian sau khi bạn sở hữu nó.
Bạn có nên mua cuốn sách này không?
Cuốn sách này được phân phối theo nguyên tắc "Đọc trước, trả tiền sau" (Read first, buy later). Tác giả tin rằng việc phải trả tiền cho nội dung trước khi được thưởng thức nó chẳng khác nào "mua mèo trong bao". Bạn có thể xem và lái thử xe ở đại lý trước khi mua. Bạn có thể thử áo hoặc váy ở cửa hàng. Bạn cũng hoàn toàn có quyền đọc một cuốn sách trước khi quyết định chi tiền cho nó.
Nguyên tắc này đồng nghĩa với việc bạn có thể tự do tải cuốn sách, đọc nó và chia sẻ nó với bạn bè, đồng nghiệp. Chỉ khi bạn thực sự thích và thấy cuốn sách hữu ích, bạn mới cần mua nó.
Bây giờ mọi thứ đã sẵn sàng. Chúc bạn có một hành trình đọc sách thú vị và bổ ích!
01Chương 1: Giới thiệu (Introduction)
1.1. Học máy là gì? (What is Machine Learning)
Học máy (Machine Learning) là một nhánh của khoa học máy tính chuyên nghiên cứu và xây dựng các thuật toán có khả năng dựa vào một tập hợp các ví dụ/mẫu (examples) về một hiện tượng nào đó để thực hiện các tác vụ hữu ích. Những ví dụ này có thể bắt nguồn từ tự nhiên, do con người trực tiếp thu thập/gán nhãn thủ công, hoặc được tạo ra bởi một thuật toán khác.
Học máy cũng có thể được định nghĩa là quá trình giải quyết một bài toán thực tế thông qua hai bước:
- Thu thập một tập dữ liệu (dataset).
- Xây dựng một mô hình thống kê (statistical model) một cách tự động dựa trên thuật toán và tập dữ liệu đó.
Mô hình thống kê này sau đó sẽ được sử dụng để giải quyết bài toán thực tế đặt ra.
(Để ngắn gọn, trong cuốn sách này tôi sẽ dùng hai thuật ngữ "học" - learning và "học máy" - machine learning thay thế lẫn nhau).
1.2. Các dạng học máy (Types of Learning)
Học máy được chia thành 4 dạng chính: Học có giám sát (Supervised), Học bán giám sát (Semi-supervised), Học không giám sát (Unsupervised) và Học tăng cường (Reinforcement).
1.2.1. Học có giám sát (Supervised Learning)
Trong học có giám sát, tập dữ liệu là một tập hợp gồm $N$ mẫu đã được gán nhãn:
$$\{(\mathbf{x}_i, y_i)\}_{i=1}^N$$
- Mỗi phần tử $\mathbf{x}_i$ được gọi là một vectơ đặc trưng (feature vector).
- Vectơ đặc trưng là một vectơ trong đó mỗi chiều $j = 1, \dots, D$ chứa một giá trị mô tả một khía cạnh nào đó của mẫu dữ liệu. Giá trị đó được gọi là một đặc trưng (feature), ký hiệu là $x^{(j)}$.
- Ví dụ: Nếu mỗi mẫu $\mathbf{x}$ đại diện cho một người, thì đặc trưng đầu tiên $x^{(1)}$ có thể là chiều cao (cm), $x^{(2)}$ là cân nặng (kg), $x^{(3)}$ là giới tính, v.v.
- Đối với tất cả các mẫu trong tập dữ liệu, đặc trưng tại vị trí $j$ luôn mang cùng một loại thông tin. Tức là nếu $x_i^{(2)}$ biểu thị cân nặng (kg) của người thứ $i$, thì $x_k^{(2)}$ cũng biểu thị cân nặng (kg) của người thứ $k$ ($k = 1, \dots, N$).
- Nhãn (label) $y_i$ có thể là:
- Một phần tử thuộc một tập hữu hạn các lớp (classes): $\{1, 2, \dots, C\}$.
- Một số thực ($\mathbb{R}$).
- Hoặc một cấu trúc phức tạp hơn (vectơ, ma trận, cây, đồ thị).
- Lưu ý: Trừ khi có chỉ định khác, trong cuốn sách này $y_i$ sẽ là một lớp thuộc tập hữu hạn (bài toán Phân loại - Classification) hoặc một số thực (bài toán Hồi quy - Regression).
- Bạn có thể hình dung một "lớp" chính là một danh mục (category). Ví dụ bài toán phát hiện thư rác có hai lớp: $\{\text{spam}, \text{not\_spam}\}$.
Mục tiêu của thuật toán học có giám sát: Sử dụng tập dữ liệu để tạo ra một mô hình nhận đầu vào là một vectơ đặc trưng $\mathbf{x}$ và xuất ra thông tin cho phép suy diễn nhãn tương ứng của $\mathbf{x}$. (Ví dụ: mô hình nhận thông tin y tế của một người và dự đoán xác suất người đó có mắc bệnh hay không).
1.2.2. Học không giám sát (Unsupervised Learning)
Trong học không giám sát, tập dữ liệu là tập hợp các mẫu chưa được gán nhãn:
$$\{\mathbf{x}_i\}_{i=1}^N$$
Ở đây, $\mathbf{x}$ vẫn là một vectơ đặc trưng. Mục tiêu của thuật toán học không giám sát là tạo ra một mô hình nhận $\mathbf{x}$ làm đầu vào và biến đổi nó thành:
- Một vectơ khác, hoặc
- Một giá trị hữu ích giúp giải quyết vấn đề thực tế.
Ví dụ thực tế:
- Phân cụm (Clustering): Mô hình trả về mã định danh (ID) cụm cho mỗi vectơ đặc trưng trong tập dữ liệu.
- Giảm số chiều (Dimensionality Reduction): Đầu ra là một vectơ đặc trưng mới có số chiều ít hơn nhiều so với $\mathbf{x}$ ban đầu.
- Phát hiện điểm bất thường (Outlier Detection): Đầu ra là một số thực cho biết mức độ khác biệt của $\mathbf{x}$ so với các mẫu "điển hình" trong tập dữ liệu.
1.2.3. Học bán giám sát (Semi-Supervised Learning)
Trong học bán giám sát, tập dữ liệu chứa cả mẫu có nhãn lẫn mẫu chưa có nhãn. Thông thường, số lượng mẫu chưa có nhãn nhiều hơn đáng kể so với số lượng mẫu đã được gán nhãn (do chi phí gán nhãn thường đắt đỏ).
Mục tiêu của học bán giám sát tương tự như học có giám sát. Kỳ vọng ở đây là việc bổ sung một lượng lớn dữ liệu chưa gán nhãn sẽ giúp thuật toán học tìm ra mô hình tốt hơn, nhờ nắm bắt chính xác hơn phân phối xác suất tổng thể của dữ liệu.
1.2.4. Học tăng cường (Reinforcement Learning)
Học tăng cường là một phân ngành của học máy trong đó một "cỗ máy" (tác tử - agent) tương tác trực tiếp bên trong một môi trường (environment) và có khả năng cảm nhận trạng thái của môi trường đó dưới dạng một vectơ đặc trưng.
- Tại mỗi trạng thái, tác tử có thể thực hiện các hành động (actions).
- Các hành động khác nhau sẽ mang lại các phần thưởng (rewards) khác nhau và có thể chuyển môi trường sang một trạng thái mới.
- Mục tiêu của thuật toán học tăng cường: Học ra một chính sách (policy). Chính sách là một hàm $f$ nhận vectơ đặc trưng của trạng thái hiện tại và xuất ra hành động tối ưu cần thực hiện để tối đa hóa tổng phần thưởng kỳ vọng trong tương lai.
Học tăng cường giải quyết dạng bài toán ra quyết định tuần tự, có mục tiêu dài hạn (như chơi cờ/game, điều khiển robot, quản lý tài nguyên, hậu cần). Cuốn sách này tập trung vào các bài toán ra quyết định một lần (one-shot decision making), nơi các mẫu đầu vào độc lập với nhau, vì vậy học tăng cường nằm ngoài phạm vi của cuốn sách này.
1.3. Cơ chế hoạt động của Học có giám sát (How Supervised Learning Works)
Để bạn có bức tranh toàn cảnh trước khi đi sâu vào chi tiết, chúng ta hãy xem xét một ví dụ kinh điển: Phát hiện thư rác (Spam Detection).
Bước 1: Thu thập và chuẩn bị dữ liệu
Bạn thu thập 10.000 email, mỗi email được gán nhãn "spam" hoặc "not_spam".
Bước 2: Chuyển đổi văn bản thành Vectơ đặc trưng (Feature Vector)
Một cách tiếp cận phổ biến là mô hình Túi từ (Bag of Words):
- Lấy một từ điển gồm 20.000 từ tiếng Anh sắp xếp theo thứ tự bảng chữ cái.
- Xây dựng vectơ đặc trưng độ dài 20.000:
- Đặc trưng thứ 1 bằng $1$ nếu email chứa từ
"a", ngược lại bằng $0$. - Đặc trưng thứ 2 bằng $1$ nếu email chứa từ
"aaron", ngược lại bằng $0$. - …
- Đặc trưng thứ 20.000 bằng $1$ nếu email chứa từ
"zulu", ngược lại bằng $0$.
- Đặc trưng thứ 1 bằng $1$ nếu email chứa từ
Lặp lại quy trình này cho 10.000 email, bạn thu được 10.000 vectơ đặc trưng (mỗi vectơ có 20.000 chiều). Nhãn được quy đổi thành dạng số: $+1$ đại diện cho "spam", và $-1$ đại diện cho "not_spam".
Bước 3: Thuật toán Support Vector Machine (SVM)
Thuật toán SVM xem mỗi vectơ đặc trưng là một điểm trong không gian $D$-chiều (ở đây $D = 20.000$). SVM sẽ tìm một siêu phẳng (hyperplane) để phân tách các điểm mang nhãn dương ($+1$) và các điểm mang nhãn âm ($-1$). Ranh giới phân chia này được gọi là ranh giới quyết định (decision boundary).
Phương trình của siêu phẳng được xác định bởi vectơ trọng số $\mathbf{w}$ (cùng số chiều với $\mathbf{x}$) và một số thực $b$ (độ lệch - bias):
$$\mathbf{w}\mathbf{x} - b = 0$$
Trong đó: $\mathbf{w}\mathbf{x} = \sum_{j=1}^D w^{(j)} x^{(j)} = w^{(1)}x^{(1)} + w^{(2)}x^{(2)} + \dots + w^{(D)}x^{(D)}$.
Nhãn dự đoán cho một vectơ đầu vào $\mathbf{x}$ mới sẽ là:
$$y = \text{sign}(\mathbf{w}\mathbf{x} - b)$$
Hàm $\text{sign}(z)$ trả về $+1$ nếu $z \ge 0$ và $-1$ nếu $z < 0$.
Bước 4: Tối ưu hóa để tìm $\mathbf{w}^*$ và $b^*$
Siêu phẳng và lề cực đại — kéo thử một điểm dữ liệu
Kéo bất kỳ chấm nào để xem ranh giới quyết định phản ứngChỉ những chấm viền vàng mới quyết định vị trí siêu phẳng — đó là các vectơ hỗ trợ. Hãy kéo một chấm ở xa: đường thẳng không nhúc nhích. Rồi kéo một chấm viền vàng: cả ranh giới xoay theo. Đây là đặc điểm khiến SVM khác biệt so với hồi quy logistic — nó chỉ quan tâm tới các mẫu ở sát biên.
Việc cần làm: ① Kéo một chấm ở xa ranh giới — không có gì thay đổi. ② Kéo một chấm viền vàng — siêu phẳng xoay ngay. ③ Bấm Tạo một mẫu ngoại lệ rồi hạ C xuống 0.5: SVM chấp nhận hy sinh mẫu bướng bỉnh đó để giữ lề rộng. Kéo C lên 200: nó bẻ cong cả ranh giới chỉ để chiều một mẫu duy nhất — chính là quá khớp.
Mục tiêu của thuật toán SVM là tìm ra bộ tham số tối ưu $\mathbf{w}^*$ và $b^*$ sao cho:
-
Dự đoán đúng nhãn của dữ liệu huấn luyện:
- $\mathbf{w}\mathbf{x}_i - b \ge 1$ nếu $y_i = +1$
- $\mathbf{w}\mathbf{x}_i - b \le -1$ nếu $y_i = -1$
- Gộp lại thành: $y_i(\mathbf{w}\mathbf{x}_i - b) \ge 1, \quad \forall i = 1, \dots, N$.
-
Khoảng cách lề (margin) giữa hai lớp là lớn nhất:
- Khoảng cách giữa hai siêu phẳng biên $\mathbf{w}\mathbf{x} - b = 1$ và $\mathbf{w}\mathbf{x} - b = -1$ là $\frac{2}{\|\mathbf{w}\|}$, với chuẩn Euclid $\|\mathbf{w}\| = \sqrt{\sum_{j=1}^D (w^{(j)})^2}$.
- Để lề lớn nhất, ta cần cực tiểu hóa $\|\mathbf{w}\|$.
Bài toán tối ưu hóa của SVM:
$$\min_{\mathbf{w}, b} \|\mathbf{w}\| \quad \text{thỏa mãn} \quad y_i(\mathbf{w}\mathbf{x}_i - b) \ge 1, \quad \forall i = 1, \dots, N$$
Nghiệm tối ưu $(\mathbf{w}^*, b^*)$ chính là mô hình thống kê. Quá trình giải bài toán tối ưu này được gọi là huấn luyện (training). Khi có một email mới, mô hình dự đoán nhãn bằng công thức:
$$f(\mathbf{x}) = \text{sign}(\mathbf{w}^*\mathbf{x} - b^*)$$
Siêu phẳng là một mặt phẳng thật — SVM trong ba chiều
Kéo để xoay · các nút dịch chuyển một điểm rồi giải lại toàn bộ—
Việc cần làm: ① Mặt phẳng vàng chính là siêu phẳng $\mathbf{w}\mathbf{x} - b = 0$ của Bước 4, giờ nhìn thấy được vì $D = 3$: lề $2/\|\mathbf{w}\| = 0{,}71$ và chỉ 4 vectơ hỗ trợ (vòng vàng) chạm hai mặt lề — trên thước bên dưới, chúng nằm đúng tại $\pm 1$, còn 40 điểm kia đứng ngoài. ② Bấm Dịch một điểm ở xa: điểm đó nhảy 0,35 ra xa, giải lại từ đầu mà $\mathbf{w}$ xoay đúng 0,00°, lề không đổi. Chỉ những điểm chạm lề mới quyết định nghiệm, dù thuật toán nhìn cả 44 điểm. ③ Bấm Đẩy một vectơ hỗ trợ vào lề: cả mặt phẳng xoay khoảng 19° và lề co từ 0,71 xuống 0,49. Một điểm dịch chuyển mà mô hình đổi hẳn — đó là lý do chúng được gọi là vectơ hỗ trợ. ④ Đặt lại, kéo khoảng cách hai cụm xuống 0,8: hai cụm chồng lấn, còn 1 điểm vi phạm dù $C = 1000$. Hạ $C$ xuống 0,1: lề nở từ 0,13 lên 1,41 nhưng 38 điểm nằm trong lề — $C$ chính là cái giá của một vi phạm, và lề rộng luôn phải mua bằng vi phạm. Với hai cụm tách được (khoảng cách 1,5), $C = 0{,}1$ cho 22 điểm vi phạm lề mà độ chính xác vẫn 100 %: vi phạm lề không đồng nghĩa phân loại sai.
1.4. Tại sao mô hình hoạt động được trên dữ liệu mới? (Why the Model Works on New Data)
Tại sao một mô hình học máy lại có thể dự đoán chính xác nhãn của những mẫu dữ liệu mới mà nó chưa từng thấy trước đây?
- Giả định thống kê: Nếu các mẫu dữ liệu dùng để huấn luyện được thu thập ngẫu nhiên, độc lập (independent and identically distributed - i.i.d), thì về mặt thống kê, các mẫu dữ liệu mới trong tương lai sẽ có phân phối tương tự và rơi vào các vùng không gian lân cận của các mẫu huấn luyện cùng lớp.
- Khả năng tổng quát hóa (Generalization): Việc SVM tìm kiếm ranh giới có khoảng cách lề lớn nhất (maximum margin) giúp đưa ranh giới quyết định ra xa nhất có thể đối với các điểm dữ liệu của cả hai lớp, từ đó tối thiểu hóa xác suất phân loại sai khi gặp các mẫu dữ liệu mới.
- Lý thuyết PAC Learning: Lý thuyết Probably Approximately Correct (PAC) nghiên cứu mối quan hệ chặt chẽ giữa sai số mô hình, kích thước tập huấn luyện, độ phức tạp của mô hình và thời gian tính toán, chứng minh toán học điều kiện để một thuật toán học máy tạo ra một bộ phân loại xấp xỉ chính xác với độ tin cậy cao.
02Chương 2: Ký hiệu và Định nghĩa (Notation and Definitions)
2.1. Ký hiệu Toán học (Notation)
Hãy bắt đầu bằng việc ôn lại các ký hiệu toán học quen thuộc đã học ở trường phổ thông nhưng có thể đã bị lãng quên theo thời gian.
2.1.1. Vô hướng, Vectơ và Tập hợp (Scalars, Vectors, and Sets)
- Đại lượng vô hướng (Scalar): Là một giá trị số đơn lẻ, ví dụ $15$ hoặc $-3.25$. Các biến hoặc hằng số nhận giá trị vô hướng được ký hiệu bằng chữ cái in nghiêng, chẳng hạn như $x$ hoặc $a$.
- Vectơ (Vector): Là một danh sách có thứ tự gồm các giá trị vô hướng (gọi là các thuộc tính hay đặc trưng). Vectơ được ký hiệu bằng chữ cái in đậm, ví dụ $\mathbf{x}$ hoặc $\mathbf{w}$.
- Vectơ có thể được hình dung như một mũi tên chỉ hướng hoặc một điểm trong không gian nhiều chiều:
Vectơ: vừa là mũi tên, vừa là điểm
Kéo đầu mũi tên a hoặc bViệc cần làm: ① Chọn a · b rồi kéo b sao cho góc đúng 90°: tích vô hướng về 0. ② Đây chính là phương trình siêu phẳng $\mathbf{w}\mathbf{x} - b = 0$ trong SVM — mọi mẫu nằm trên ranh giới đều trực giao với vectơ trọng số. ③ Chuyển sang c·a và kéo hệ số sang âm: hướng lật ngược nhưng đường thẳng chứa nó không đổi.
- Một thuộc tính của vectơ được ký hiệu bằng chữ cái in nghiêng kèm chỉ số trong ngoặc đơn ở phía trên: $w^{(j)}$ hoặc $x^{(j)}$. Chỉ số $j$ biểu thị chiều thứ $j$ hay vị trí của thuộc tính trong danh sách. (Ví dụ với $\mathbf{a} = [2, 3]$ thì $a^{(1)} = 2$ và $a^{(2)} = 3$).
- Lưu ý: Ký hiệu $x^{(j)}$ không phải là phép lũy thừa (bình phương, lập phương). Nếu muốn lũy thừa một thuộc tính của vectơ, ta viết là $(x^{(j)})^2$.
- Một biến có thể có nhiều chỉ số, ví dụ $x_i^{(j)}$ (đặc trưng thứ $j$ của mẫu thứ $i$) hoặc trong mạng nơ-ron: $x_{l,u}^{(j)}$ (đặc trưng đầu vào thứ $j$ của nơ-ron $u$ tại tầng $l$).
- Tập hợp (Set): Là một tập hợp không có thứ tự gồm các phần tử duy nhất, thường được ký hiệu bằng chữ hoa uốn lượn (calligraphic) như $\mathcal{S}$.
- Tập hữu hạn: Được biểu diễn bằng dấu ngoặc nhọn, ví dụ $\{1, 3, 18, 23\}$ hoặc $\{x_1, x_2, \dots, x_n\}$.
- Đoạn đóng $[a, b]$: Bao gồm mọi số thực nằm giữa $a$ và $b$, tính cả $a$ và $b$.
- Khoảng mở $(a, b)$: Bao gồm mọi số thực nằm giữa $a$ và $b$, không chứa hai đầu mút $a$ và $b$.
- Tập số thực $\mathbb{R}$: Bao gồm toàn bộ các số từ $-\infty$ đến $+\infty$.
- Ký hiệu thuộc: $x \in \mathcal{S}$.
- Phép giao (Intersection): $\mathcal{S}_3 \leftarrow \mathcal{S}_1 \cap \mathcal{S}_2$ (ví dụ $\{1, 3, 5, 8\} \cap \{1, 8, 4\} = \{1, 8\}$).
- Phép hợp (Union): $\mathcal{S}_3 \leftarrow \mathcal{S}_1 \cup \mathcal{S}_2$ (ví dụ $\{1, 3, 5, 8\} \cup \{1, 8, 4\} = \{1, 3, 4, 5, 8\}$).
2.1.2. Ký hiệu Tổng Sigma ($\sum$)
Tổng của một tập hợp các giá trị hoặc các thuộc tính của vectơ được biểu diễn như sau:
$$\sum_{i=1}^n x_i \stackrel{\text{def}}{=} x_1 + x_2 + \dots + x_n \quad \text{hoặc} \quad \sum_{j=1}^m x^{(j)} \stackrel{\text{def}}{=} x^{(1)} + x^{(2)} + \dots + x^{(m)}$$
(Ký hiệu $\stackrel{\text{def}}{=}$ có nghĩa là "được định nghĩa là").
2.1.3. Ký hiệu Tích Pi ($\prod$)
Tương tự như Sigma, ký hiệu Pi viết hoa biểu thị tích của các phần tử:
$$\prod_{i=1}^n x_i \stackrel{\text{def}}{=} x_1 \cdot x_2 \cdot \dots \cdot x_n$$
2.1.4. Các phép toán trên Tập hợp
- Toán tử tạo tập hợp điều kiện: $\mathcal{S}' \leftarrow \{x^2 \mid x \in \mathcal{S}, x > 3\}$. Nghĩa là tạo tập hợp $\mathcal{S}'$ gồm các giá trị $x^2$ với điều kiện $x \in \mathcal{S}$ và $x > 3$.
- Lực lượng của tập hợp $|\mathcal{S}|$: Trả về số lượng phần tử có trong tập hợp $\mathcal{S}$.
2.1.5. Các phép toán trên Vectơ và Ma trận
-
Cộng/Trừ hai vectơ: Cộng hoặc trừ từng phần tử tương ứng: $$\mathbf{x} + \mathbf{z} = [x^{(1)} + z^{(1)}, x^{(2)} + z^{(2)}, \dots, x^{(m)} + z^{(m)}]$$
-
Nhân vectơ với một số vô hướng: $$c\mathbf{x} \stackrel{\text{def}}{=} [cx^{(1)}, cx^{(2)}, \dots, cx^{(m)}]$$
-
Tích vô hướng (Dot-Product): Kết quả là một số vô hướng: $$\mathbf{w}\mathbf{x} \stackrel{\text{def}}{=} \sum_{i=1}^m w^{(i)} x^{(i)}$$ (Hai vectơ bắt buộc phải có cùng số chiều để tích vô hướng tồn tại).
-
Nhân Ma trận với Vectơ: Vectơ mặc định được xem là một ma trận cột ($m \times 1$). Ma trận $\mathbf{W}$ kích thước $n \times m$ nhân với vectơ cột $\mathbf{x}$ kích thước $m \times 1$ cho kết quả là một vectơ $n$ chiều: $$\mathbf{W}\mathbf{x} = \begin{bmatrix} w_{1,1} & w_{1,2} & w_{1,3} \\ w_{2,1} & w_{2,2} & w_{2,3} \end{bmatrix} \begin{bmatrix} x^{(1)} \\ x^{(2)} \\ x^{(3)} \end{bmatrix} = \begin{bmatrix} w_{1,1}x^{(1)} + w_{1,2}x^{(2)} + w_{1,3}x^{(3)} \\ w_{2,1}x^{(1)} + w_{2,2}x^{(2)} + w_{2,3}x^{(3)} \end{bmatrix} = \begin{bmatrix} \mathbf{w}^{(1)}\mathbf{x} \\ \mathbf{w}^{(2)}\mathbf{x} \end{bmatrix}$$
-
Chuyển vị vectơ ($\mathbf{x}^T$): Biến một vectơ cột thành một vectơ hàng: $$\mathbf{x}^T = [x^{(1)}, x^{(2)}]$$ Khi vectơ ở bên trái ma trận, ta viết $\mathbf{x}^T \mathbf{W}$.
2.1.6. Hàm số, Cực tiểu Cục bộ và Toàn cục (Functions, Local and Global Minima)
- Một hàm số $f$ là quy tắc ánh xạ mỗi phần tử $x$ thuộc tập xác định $X$ tới một phần tử duy nhất $y = f(x)$ thuộc tập giá trị $Y$.
- Cực tiểu cục bộ (Local Minimum): $f(x)$ đạt cực tiểu cục bộ tại $x = c$ nếu $f(x) \ge f(c)$ với mọi $x$ nằm trong một lân cận mở xung quanh $c$.
- Cực tiểu toàn cục (Global Minimum): Giá trị nhỏ nhất trong số tất cả các cực tiểu cục bộ trên toàn bộ miền xác định.
Đạo hàm, tiếp tuyến và cái bẫy cực tiểu cục bộ
Kéo chấm đỏ dọc theo đường congViệc cần làm: ① Thả bóng từ vị trí mặc định (bên phải) — nó rơi vào cực tiểu cục bộ, $f = 1.43$, rồi đứng im vĩnh viễn. ② Bấm Thả từ bên trái — cùng một thuật toán, cùng một hàm, nhưng lần này rơi trúng cực tiểu toàn cục, $f = 0.04$ — thấp hơn tận 1.38 đơn vị. ③ Toàn bộ khác biệt chỉ nằm ở điểm xuất phát: gradient descent chỉ sờ được độ dốc ngay dưới chân nó, nó không hề biết có một thung lũng sâu hơn ở bên kia ngọn đồi. Đó là lý do trong thực tế người ta khởi tạo trọng số ngẫu nhiên nhiều lần rồi giữ lần tốt nhất. ④ Bây giờ kéo η lên 0.25 và thả lại từ bên phải: bước nhảy đã đủ lớn để vượt luôn qua ngọn đồi và rơi trúng đáy toàn cục. Tốc độ học lớn không chỉ là rủi ro — nó còn là cách thoát khỏi cực tiểu cục bộ, và đó chính là lý do người ta hay dùng η lớn ở giai đoạn đầu rồi giảm dần. ⑤ Nhưng kéo tiếp lên 0.35: bóng dao động quanh đáy mà không bao giờ dừng lại được — bước đi giờ đã lớn hơn cả cái hố cần hạ xuống.
- Hàm vectơ (Vector function): Là hàm trả về kết quả đầu ra là một vectơ: $\mathbf{y} = \mathbf{f}(\mathbf{x})$.
2.1.7. Toán tử $\max$, $\arg\max$, $\min$, $\arg\min$
Cho tập hợp $A = \{a_1, a_2, \dots, a_n\}$:
- $\max_{a \in A} f(a)$: Trả về giá trị lớn nhất của $f(a)$.
- $\arg\max_{a \in A} f(a)$: Trả về phần tử $a$ làm cho hàm $f(a)$ đạt giá trị lớn nhất.
- Tương tự đối với $\min$ và $\arg\min$.
2.1.8. Toán tử gán ($\leftarrow$)
Biểu thức $a \leftarrow f(x)$ có nghĩa là biến $a$ được gán một giá trị mới là kết quả của $f(x)$.
2.1.9. Đạo hàm và Gradient (Derivative and Gradient)
- Đạo hàm $f'(x)$: Đo lường tốc độ biến thiên (tăng hoặc giảm) của hàm số $f$ tại điểm $x$.
- Nếu $f'(x) > 0$: Hàm số đồng biến (tăng) tại $x$.
- Nếu $f'(x) < 0$: Hàm số nghịch biến (giảm) tại $x$.
- Nếu $f'(x) = 0$: Tiếp tuyến của đồ thị tại điểm $x$ nằm ngang (điểm dừng).
- Quy tắc chuỗi (Chain Rule): Nếu $F(x) = f(g(x))$, thì $F'(x) = f'(g(x)) \cdot g'(x)$.
- Đạo hàm riêng (Partial Derivative): Đối với hàm nhiều biến $f(x^{(1)}, x^{(2)})$, đạo hàm riêng theo một biến $\frac{\partial f}{\partial x^{(1)}}$ được tính bằng cách coi tất cả các biến còn lại là hằng số.
- Gradient ($\nabla f$): Là vectơ chứa toàn bộ các đạo hàm riêng của hàm số nhiều biến: $$\nabla f = \left[ \frac{\partial f}{\partial x^{(1)}}, \frac{\partial f}{\partial x^{(2)}}, \dots, \frac{\partial f}{\partial x^{(D)}} \right]$$ Gradient luôn chỉ theo hướng hàm số tăng nhanh nhất. Do đó, hướng ngược lại ($-\nabla f$) là hướng hàm số giảm nhanh nhất (nền tảng của thuật toán Gradient Descent).
Đạo hàm riêng và gradient: hai độ dốc ghép thành một mũi tên
Kéo để xoay bề mặt · kéo chấm đỏ trên bản đồ để dời điểm—
Việc cần làm: ① Kéo chấm đỏ (hoặc bấm thẳng lên sàn 3D) tới chỗ mặt phẳng vàng nằm ngang: cả hai đạo hàm riêng về 0 — một điểm dừng, nhưng chưa biết là đáy, đỉnh hay yên ngựa. ② Tìm một chỗ đoạn đỏ nằm ngang mà đoạn xanh vẫn dốc: $\partial f/\partial x^{(1)} = 0$ chưa nói gì về chiều kia. Gradient phải gom đủ mọi đạo hàm riêng. ③ Bấm 1 bước hạ dốc liên tiếp: chấm luôn đi theo mũi tên xanh lá $-\nabla f$ và dừng lại ở một đáy — đó chính là Gradient Descent của Chương 4, chỉ khác là ở đây bạn nhìn thấy nó bằng mắt. Xuất phát từ góc khác sẽ rơi vào đáy khác.
2.2. Biến ngẫu nhiên và Phân phối Xác suất (Random Variable)
Một biến ngẫu nhiên $X$ là một biến nhận các giá trị số từ kết quả của một hiện tượng ngẫu nhiên.
pmf hay pdf — khác biệt hay bị bỏ qua
Đổi qua lại giữa rời rạc và liên tụcViệc cần làm: ① Ở chế độ liên tục, hạ σ xuống 0.4 và nhìn trục tung: mật độ vượt quá 1.0. Nếu $f(x)$ là xác suất thì điều đó vô lý — nhưng nó không phải xác suất. ② Chuyển sang rời rạc: giờ mỗi cột thật sự là một xác suất và không cột nào vượt 1.
-
Biến ngẫu nhiên rời rạc (Discrete Random Variable): Chỉ nhận một số hữu hạn hoặc đếm được các giá trị rời rạc. Phân phối xác suất của nó được biểu diễn bằng Hàm khối xác suất (Probability Mass Function - PMF):
- $P(X = x_i) \ge 0$ và $\sum_i P(X = x_i) = 1$.
- Kỳ vọng (Expectation / Mean): $$\mathbb{E}[X] \stackrel{\text{def}}{=} \mu = \sum_{i=1}^k x_i P(X = x_i)$$
- Độ lệch chuẩn (Standard Deviation $\sigma$): $$\sigma \stackrel{\text{def}}{=} \sqrt{\mathbb{E}[(X - \mu)^2]} = \sqrt{\sum_{i=1}^k P(X = x_i)(x_i - \mu)^2}$$
-
Biến ngẫu nhiên liên tục (Continuous Random Variable): Nhận vô số giá trị trong một khoảng liên tục (như chiều cao, cân nặng, thời gian). Xác suất tại một điểm chính xác $P(X = c) = 0$. Phân phối xác suất được mô tả bởi Hàm mật độ xác suất (Probability Density Function - PDF) $f_X(x)$:
- Diện tích dưới đường cong bằng $1$: $\int_{-\infty}^{+\infty} f_X(x) dx = 1$.
- Kỳ vọng: $\mathbb{E}[X] \stackrel{\text{def}}{=} \int_{-\infty}^{+\infty} x f_X(x) dx$.
2.3. Ước lượng Không chệch (Unbiased Estimators)
Trong thực tế, ta thường không biết hàm phân phối thật $f_X$, mà chỉ quan sát được một tập dữ liệu mẫu $S_X = \{x_i\}_{i=1}^N$. Ta sử dụng các ước lượng không chệch $\hat{\theta}(S_X)$ để xấp xỉ tham số thật $\theta$ của tổng thể:
$$\mathbb{E}[\hat{\theta}(S_X)] = \theta$$
Ước lượng không chệch của kỳ vọng $\mathbb{E}[X]$ chính là Trung bình mẫu (Sample Mean):
$$\hat{\mu} = \frac{1}{N} \sum_{i=1}^N x_i$$
2.4. Định lý Bayes (Bayes' Rule)
Xác suất có điều kiện $P(X = x \mid Y = y)$ là xác suất biến cố $X = x$ xảy ra khi đã biết biến cố $Y = y$. Định lý Bayes phát biểu rằng:
$$P(X = x \mid Y = y) = \frac{P(Y = y \mid X = x) P(X = x)}{P(Y = y)}$$
Báo động đúng được bao nhiêu?
2.4 · Bayes · 4 phútMột máy kiểm tra sản phẩm bắt được 90% hàng lỗi. Khi máy báo lỗi, xác suất sản phẩm thật sự lỗi có phải 90%?
Trong 10.000 sản phẩm giả lập
Phóng to nhóm được máy báo lỗi
● Lỗi thật▧ Báo nhầm
- Tổng cảnh báo
- —
- Lỗi bị bỏ sót
- —
Thử thách. Từ số đếm hiện tại, tính phần trăm lỗi thật trong nhóm bị báo lỗi. Chấp nhận sai số 0,2 điểm phần trăm.
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
P(lỗi | báo lỗi) = TP / (TP + FP). Tử số đếm lỗi thật bị bắt; mẫu số đếm tất cả cảnh báo. Đây là chiều xác suất ngược với độ nhạy P(báo lỗi | lỗi).
Tăng tỷ lệ lỗi ban đầu, giữ nguyên độ nhạy và tỷ lệ báo nhầm. Kết quả sau cảnh báo thay đổi dù chiếc máy vẫn hoạt động như cũ. Số đếm là giá trị kỳ vọng, không phải lượt lấy mẫu ngẫu nhiên.
2.5. Ước lượng Tham số & Hợp lý Cực đại (Parameter Estimation & MLE)
Khi ta giả định dữ liệu tuân theo một mô hình phân phối $f_\theta$ (ví dụ phân phối Gaussian với $\boldsymbol{\theta} = [\mu, \sigma]$), ta có thể cập nhật niềm tin về tham số $\boldsymbol{\theta}$ dựa trên dữ liệu bằng Định lý Bayes.
Để tìm bộ tham số tốt nhất $\boldsymbol{\theta}^*$, ta áp dụng nguyên lý Ước lượng Hợp lý Cực đại (Maximum Likelihood Estimation - MLE):
$$\boldsymbol{\theta}^* = \arg\max_{\boldsymbol{\theta}} \prod_{i=1}^N P(\mathbf{x}_i \mid \boldsymbol{\theta})$$
Để tránh hiện tượng tràn số dưới (numerical underflow) khi nhân nhiều số xác suất nhỏ, người ta thường lấy logarit tự nhiên (log-likelihood), chuyển tích thành tổng:
$$\boldsymbol{\theta}^* = \arg\max_{\boldsymbol{\theta}} \sum_{i=1}^N \ln P(\mathbf{x}_i \mid \boldsymbol{\theta})$$
2.6. Phân loại đối chiếu Hồi quy (Classification vs. Regression)
- Bài toán Phân loại (Classification): Dự đoán nhãn rời rạc thuộc một tập hữu hạn các lớp.
- Phân loại nhị phân (Binary Classification): Chỉ có 2 lớp (ví dụ: lành tính/ác tính, spam/not-spam).
- Phân loại đa lớp (Multiclass Classification): Có 3 lớp trở lên (ví dụ: nhận diện chữ số từ 0 đến 9).
- Bài toán Hồi quy (Regression): Dự đoán một giá trị số thực liên tục (ví dụ: dự đoán giá nhà dựa trên diện tích, số phòng, vị trí).
2.7. Học dựa trên Mô hình vs. Học dựa trên Cá thể (Model-Based vs. Instance-Based Learning)
- Học dựa trên Mô hình (Model-Based): Thuật toán sử dụng dữ liệu huấn luyện để tối ưu hóa các tham số của mô hình (như $\mathbf{w}^*$ và $b^*$ trong SVM). Sau khi huấn luyện xong, mô hình đã được cố định và có thể bỏ dữ liệu huấn luyện đi.
- Học dựa trên Cá thể (Instance-Based): Thuật toán lưu trữ toàn bộ tập dữ liệu mẫu làm "mô hình". Khi có dữ liệu mới cần dự đoán, nó so sánh trực tiếp mẫu đó với các mẫu đã lưu trong không gian đặc trưng. (Ví dụ tiêu biểu: thuật toán $k$-láng giềng gần nhất - $k$-Nearest Neighbors / $k$-NN).
2.8. Học nông đối chiếu Học sâu (Shallow vs. Deep Learning)
- Học nông (Shallow Learning): Thuật toán học trực tiếp các tham số mô hình từ các đặc trưng đầu vào của dữ liệu huấn luyện (hầu hết các thuật toán ML truyền thống như Logistic Regression, SVM, Decision Tree, Random Forest…).
- Học sâu (Deep Learning): Mô hình mạng nơ-ron sâu (Deep Neural Networks) bao gồm nhiều tầng ẩn liên tiếp giữa đầu vào và đầu ra. Các tham số ở các tầng sau không học trực tiếp từ đặc trưng gốc, mà học từ các biểu diễn trừu tượng được trích xuất từ đầu ra của các tầng phía trước.
03Chương 3: Các Thuật toán Cơ bản (Fundamental Algorithms)
Trong chương này, tôi mô tả 5 thuật toán học máy không chỉ nổi tiếng nhất mà còn rất hiệu quả khi hoạt động độc lập hoặc đóng vai trò là khối xây dựng (building blocks) nền tảng cho những mô hình học máy tiên tiến nhất hiện nay.
3.1. Hồi quy Tuyến tính (Linear Regression)
Hồi quy tuyến tính là thuật toán học có giám sát phổ biến dùng để xây dựng một mô hình là tổ hợp tuyến tính của các đặc trưng đầu vào.
3.1.1. Phát biểu bài toán (Problem Statement)
Hồi quy tuyến tính: hai núm vặn và một thung lũng
Kéo chấm đỏ trên bản đồ lỗi bên dướiHai bảng là hai cách nhìn cùng một thứ. Bảng trên: đường thẳng trong không gian dữ liệu. Bảng dưới: một điểm duy nhất trong không gian tham số, trên bản đồ độ cao của hàm lỗi. Học máy chính là đi tìm đáy thung lũng ở bảng dưới.
Việc cần làm: ① Kéo chấm đỏ ở bản đồ lỗi lên đỉnh đồi rồi bấm Cho máy tự học — quan sát nó lăn xuống theo đúng hướng dốc nhất. ② Chú ý mũi tên đỏ ngắn: đó là âm gradient, hướng đi của bước tiếp theo. ③ Thung lũng có dạng lòng máng dài, không tròn — đó là lý do gradient descent hay đi zigzag, và cũng là lý do người ta phải chuẩn hoá đặc trưng.
Cho tập dữ liệu gồm $N$ mẫu đã được gán nhãn: $\{(\mathbf{x}_i, y_i)\}_{i=1}^N$, trong đó $\mathbf{x}_i \in \mathbb{R}^D$ là vectơ đặc trưng $D$-chiều, và $y_i \in \mathbb{R}$ là giá trị mục tiêu (target) dạng số thực liên tục.
Mục tiêu là xây dựng mô hình tuyến tính $f_{\mathbf{w}, b}(\mathbf{x})$:
$$f_{\mathbf{w}, b}(\mathbf{x}) = \mathbf{w}\mathbf{x} + b$$
- $\mathbf{w}$ là vectơ tham số (trọng số - weights) $D$-chiều.
- $b$ là một số thực (độ lệch - bias).
- Dự đoán giá trị cho một mẫu $\mathbf{x}$ mới: $y \leftarrow f_{\mathbf{w}, b}(\mathbf{x})$.
Khác biệt quan trọng giữa SVM và Hồi quy tuyến tính:
Trong SVM, siêu phẳng đóng vai trò là ranh giới quyết định phân tách hai lớp dữ liệu, vì vậy nó cần nằm càng xa các điểm dữ liệu càng tốt.
Ngược lại, trong Hồi quy tuyến tính, siêu phẳng hồi quy được tối ưu sao cho nằm càng gần tất cả các điểm dữ liệu huấn luyện càng tốt.
3.1.2. Lời giải (Solution)
Để đưa siêu phẳng đến gần nhất với các điểm dữ liệu, ta cần cực tiểu hóa Hàm mất mát sai số bình phương (Squared Error Loss) trung bình, còn gọi là Rủi ro thực nghiệm (Empirical Risk) hay MSE (Mean Squared Error):
$$\min_{\mathbf{w}, b} \frac{1}{N} \sum_{i=1}^N (f_{\mathbf{w}, b}(\mathbf{x}_i) - y_i)^2$$
Tại sao lại chọn hàm mất mát bình phương (Squared Loss)?
- Tính khả vi liên tục: Giá trị tuyệt đối $|f(\mathbf{x}_i) - y_i|$ không có đạo hàm tại điểm 0 (hàm không trơn). Hàm bình phương trơn và có đạo hàm liên tục, cho phép giải trực tiếp bằng đại số tuyến tính để tìm nghiệm dạng đóng (closed-form solution) bằng cách cho gradient bằng 0 ($\nabla = 0$) mà không cần thuật toán lặp số phức tạp.
- Cơ chế phạt trực quan: Hàm bậc hai phóng đại mức phạt đối với các sai số lớn, buộc mô hình phải tập trung giảm thiểu các dự đoán lệch xa thực tế.
Hiện tượng Quá khớp (Overfitting): Hồi quy tuyến tính có cấu trúc đơn giản nên hiếm khi bị quá khớp. Ngược lại, nếu ta dùng hồi quy đa thức bậc cao (Polynomial Regression), mô hình có thể đi qua chính xác tất cả các điểm dữ liệu huấn luyện (sai số bằng 0) nhưng lại tạo ra đường cong uốn lượn dữ dội, dẫn đến sai số rất lớn khi dự đoán trên dữ liệu mới ($x_{\text{new}}$).
3.2. Hồi quy Logistic (Logistic Regression)
[!NOTE]
Mặc dù có tên là "hồi quy" (do bắt nguồn từ lịch sử thống kê), Hồi quy Logistic thực chất là một thuật toán Phân loại (Classification).
3.2.1. Phát biểu bài toán
Trong bài toán phân loại nhị phân ($y_i \in \{0, 1\}$), tổ hợp tuyến tính $\mathbf{w}\mathbf{x} + b$ trải dài từ $-\infty$ đến $+\infty$. Để ánh xạ giá trị này thành xác suất thuộc khoảng $(0, 1)$, ta sử dụng hàm chuẩn logistic (Sigmoid Function):
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$
Hồi quy Logistic: w là độ tự tin, b là vị trí ranh giới
Ví dụ: số giờ ôn thi → xác suất đỗViệc cần làm: ① Kéo w về 0.1: đường sigmoid bẹt dí, mô hình trả lời “khoảng 50%” cho mọi người — dưới khớp. ② Kéo w lên 5: nó thành bậc thang, cực kỳ tự tin ngay cả ở chỗ dữ liệu lẫn lộn — quá khớp. ③ Bấm Để máy tìm giúp: thuật toán tối đa hoá hợp lý sẽ tự chọn độ dốc vừa đủ tự tin.
Mô hình Hồi quy Logistic có dạng:
$$f_{\mathbf{w}, b}(\mathbf{x}) \stackrel{\text{def}}{=} \frac{1}{1 + e^{-(\mathbf{w}\mathbf{x} + b)}}$$
Giá trị đầu ra $f_{\mathbf{w}, b}(\mathbf{x}) \in (0, 1)$ được diễn giải là xác suất $P(y = 1 \mid \mathbf{x})$. Nếu xác suất này $\ge 0.5$, ta phân loại mẫu vào lớp $1$; ngược lại gán vào lớp $0$.
3.2.2. Lời giải bằng Hợp lý Cực đại (Maximum Likelihood)
Hàm hợp lý (Likelihood) đo lường khả năng tập dữ liệu xuất hiện theo mô hình:
$$L_{\mathbf{w}, b} \stackrel{\text{def}}{=} \prod_{i=1}^N f_{\mathbf{w}, b}(\mathbf{x}_i)^{y_i} \left(1 - f_{\mathbf{w}, b}(\mathbf{x}_i)\right)^{1 - y_i}$$
Lấy logarit tự nhiên để chuyển tích thành tổng, ta thu được hàm Log-Likelihood (hoặc hàm mất mát Binary Cross-Entropy):
$$\text{LogL}_{\mathbf{w}, b} = \sum_{i=1}^N \left[ y_i \ln f_{\mathbf{w}, b}(\mathbf{x}_i) + (1 - y_i) \ln(1 - f_{\mathbf{w}, b}(\mathbf{x}_i)) \right]$$
Mục tiêu là tối đa hóa hàm Log-Likelihood. Do không có nghiệm giải tích dạng đóng, bài toán được giải bằng phương pháp số như Hạ dốc (Gradient Descent).
3.3. Cây Quyết định (Decision Tree Learning - Thuật toán ID3)
Cây quyết định là một đồ thị phi chu trình (acyclic graph). Tại mỗi nút phân nhánh, một đặc trưng $j$ được kiểm tra với ngưỡng $t$: nếu $x^{(j)} < t$, rẽ sang nhánh trái; ngược lại rẽ sang nhánh phải. Tại nút lá, quyết định phân loại được đưa ra.
3.3.1. Thuật toán ID3 và Thước đo Entropy
Thuật toán ID3 xây dựng mô hình phi tham số $f_{\text{ID3}}(\mathbf{x}) \stackrel{\text{def}}{=} P(y = 1 \mid \mathbf{x})$.
- Độ hỗn loạn Entropy ($H(S)$): Đo lường mức độ không chắc chắn của tập dữ liệu $S$:
$$H(S) = - f_{\text{ID3}}^S \ln f_{\text{ID3}}^S - (1 - f_{\text{ID3}}^S) \ln(1 - f_{\text{ID3}}^S)$$
- $H(S) = 0$ khi tất cả các mẫu trong $S$ đều cùng một nhãn (độ thuần khiết tối đa).
- $H(S) = 1$ khi một nửa số mẫu là $1$ và một nửa là $0$ (hỗn loạn tối đa).
- Entropy sau khi phân chia: Khi chia tập $S$ thành $S_-$ ($x^{(j)} < t$) và $S_+$ ($x^{(j)} \ge t$): $$H(S_-, S_+) = \frac{|S_-|}{|S|} H(S_-) + \frac{|S_+|}{|S|} H(S_+)$$
Entropy và độ lợi thông tin — cây quyết định chọn nhát cắt thế nào
Kéo đường vàng để tự chọn ngưỡng chiaViệc cần làm: ① Kéo ngưỡng sang tận mép trái: một nhánh rỗng, độ lợi ≈ 0 — nhát cắt vô dụng. ② Tìm đỉnh của đường cong bên dưới. ③ Nhận ra rằng thuật toán ID3 không thông minh: nó chỉ đơn giản là thử hết mọi ngưỡng rồi lấy cái tốt nhất — đúng thứ bạn vừa làm bằng tay.
3.3.2. Quy trình thuật toán ID3
- Tại mỗi nút lá, duyệt qua tất cả các đặc trưng $j = 1, \dots, D$ và các ngưỡng $t$ để tìm cặp $(j, t)$ giúp cực tiểu hóa $H(S_-, S_+)$ (tương đương tối đa hóa mức giảm entropy - Information Gain).
- Tách tập $S$ thành hai nút con $S_-$ và $S_+$, đệ quy lặp lại quy trình.
- Điều kiện dừng:
- Tất cả các mẫu trong nút lá đều cùng nhãn.
- Không còn thuộc tính nào để phân chia.
- Mức giảm entropy nhỏ hơn ngưỡng sai số $\epsilon$.
- Cây đạt độ sâu tối đa $d$.
3.4. Máy Vectơ Hỗ trợ (Support Vector Machine - SVM) & Thủ thuật Kernel
Khi dữ liệu không thể phân tách tuyến tính do có nhiễu hoặc có tính phi tuyến tính nội tại:
3.4.1. Bài toán Đối ngẫu Lagrange
Bài toán tối ưu hóa SVM ban đầu:
$$\min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 \quad \text{thỏa mãn} \quad y_i(\mathbf{w}\mathbf{x}_i - b) \ge 1, \quad \forall i = 1, \dots, N$$
Được chuyển thành bài toán đối ngẫu thông qua các nhân tử Lagrange $\alpha_i \ge 0$:
$$\max_{\alpha_1, \dots, \alpha_N} \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{k=1}^N y_i \alpha_i (\mathbf{x}_i \mathbf{x}_k) y_k \alpha_k \quad \text{thỏa mãn} \quad \sum_{i=1}^N \alpha_i y_i = 0, \quad \alpha_i \ge 0$$
3.4.2. Thủ thuật Kernel (Kernel Trick)
Trong công thức đối ngẫu trên, dữ liệu chỉ xuất hiện duy nhất dưới dạng tích vô hướng $\mathbf{x}_i \mathbf{x}_k$. Nếu muốn ánh xạ dữ liệu sang không gian nhiều chiều hơn thông qua hàm phi tuyến $\phi(\mathbf{x})$ để dữ liệu trở nên phân tách tuyến tính, ta chỉ cần thay thế tích vô hướng $\mathbf{x}_i \mathbf{x}_k$ bằng hàm Kernel $k(\mathbf{x}_i, \mathbf{x}_k)$:
$$k(\mathbf{x}_i, \mathbf{x}_k) = \phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_k)$$
Thủ thuật Kernel cho phép tính toán tích vô hướng trong không gian nhiều chiều (thậm chí vô hạn chiều) mà không cần phải trực tiếp tính toán phép biến đổi $\phi(\mathbf{x})$ tốn kém.
Thủ thuật Kernel: nâng dữ liệu lên chiều thứ ba
Bấm nút để nâng · kéo chuột để xoay góc nhìnTrong mặt phẳng 2D, không đường thẳng nào tách nổi vòng trong khỏi vành ngoài. Nhưng thêm một chiều $z = x^2 + y^2$ — tức “bình phương khoảng cách tới tâm” — thì các điểm trong chìm xuống thấp, các điểm ngoài bay lên cao, và một mặt phẳng nằm ngang tách chúng gọn gàng.
Việc cần làm: ① Bấm Nâng lên 3D và nhìn kỹ: đường tròn phân tách ở 2D biến thành mặt phẳng ở 3D — chúng là cùng một ranh giới. ② Điểm tinh tế nhất của kernel: trong thực tế người ta không bao giờ tính toạ độ 3D này. Hàm kernel $k(\mathbf{x}_i,\mathbf{x}_j)$ cho ra ngay tích vô hướng trong không gian mới mà chỉ cần dữ liệu cũ. Với kernel RBF, “không gian mới” đó có số chiều vô hạn — thứ ta không thể vẽ, nhưng vẫn tính được.
- Kernel Đa thức (Polynomial Kernel): $k(\mathbf{x}_i, \mathbf{x}_k) = (\mathbf{x}_i \mathbf{x}_k + c)^d$.
- Kernel RBF / Gaussian (Radial Basis Function): $$k(\mathbf{x}, \mathbf{x}') = \exp\left( - \frac{\|\mathbf{x} - \mathbf{x}'\|^2}{2\sigma^2} \right)$$ Không gian đặc trưng tương ứng của Kernel RBF có số chiều vô hạn, cho phép tạo ra các ranh giới quyết định phi tuyến tính uốn lượn cực kỳ linh hoạt.
3.5. Thuật toán k-Láng giềng Gần nhất (k-Nearest Neighbors - kNN)
kNN là thuật toán học phi tham số (non-parametric) và dựa trên cá thể (instance-based):
- Thuật toán không huấn luyện mô hình cố định mà lưu toàn bộ dữ liệu vào bộ nhớ.
- Khi có mẫu $\mathbf{x}$ mới cần dự đoán, nó tìm $k$ mẫu huấn luyện gần $\mathbf{x}$ nhất theo một hàm khoảng cách.
- Dự đoán:
- Phân loại: Lấy nhãn chiếm đa số (majority vote) trong $k$ láng giềng.
- Hồi quy: Lấy giá trị trung bình mục tiêu của $k$ láng giềng.
Các hàm khoảng cách thông dụng:
-
Khoảng cách Euclid (Euclidean Distance): $$d(\mathbf{x}_i, \mathbf{x}_k) = \sqrt{\sum_{j=1}^D \left(x_i^{(j)} - x_k^{(j)}\right)^2}$$
-
Độ tương đồng Cosine (Cosine Similarity): $$s(\mathbf{x}_i, \mathbf{x}_k) = \frac{\mathbf{x}_i \mathbf{x}_k}{\|\mathbf{x}_i\| \|\mathbf{x}_k\|}$$ Đo góc giữa hai vectơ (bằng $1$ nếu cùng hướng, $0$ nếu trực giao, $-1$ nếu ngược hướng). Khi dùng làm hàm khoảng cách, ta lấy $-s(\mathbf{x}_i, \mathbf{x}_k)$.
k-NN: chọn k chính là chọn độ mượt của ranh giới
Bấm hoặc kéo ô vuông tới bất kỳ đâuViệc cần làm: ① Để k = 1 và nhìn các “hòn đảo” nhỏ quanh vài điểm lạc loài — mô hình đã học thuộc cả nhiễu. ② Kéo k lên 25: ranh giới mượt nhưng các cụm nhỏ bị nuốt chửng. ③ k-NN không có giai đoạn huấn luyện — nó chỉ ghi nhớ toàn bộ dữ liệu và tính toán lúc dự đoán. Đó là mô hình dựa trên cá thể (instance-based) điển hình.
04Chương 4: Giải phẫu một Thuật toán Học máy (Anatomy of a Learning Algorithm)
4.1. Ba Khối Xây Dựng Cốt Lõi (Building Blocks of a Learning Algorithm)
Mọi thuật toán học máy đều được cấu thành từ 3 thành phần cơ bản:
- Hàm mất mát (Loss Function): Đo lường mức độ phạt (sai số) đối với dự đoán của mô hình trên từng mẫu dữ liệu đơn lẻ.
- Tiêu chuẩn tối ưu hóa (Optimization Criterion / Cost Function): Hàm mục tiêu tổng thể (ví dụ: trung bình hàm mất mát trên toàn bộ tập dữ liệu huấn luyện, hoặc hàm Log-Likelihood) cần được cực tiểu hóa hoặc cực đại hóa.
- Quy trình tối ưu hóa (Optimization Routine / Solver): Thuật toán tính toán (như Gradient Descent) tận dụng dữ liệu huấn luyện để tìm ra bộ tham số tối ưu thỏa mãn tiêu chuẩn tối ưu hóa.
[!NOTE]
Các thuật toán như Hồi quy Tuyến tính, Hồi quy Logistic hay SVM được thiết kế nhằm tối ưu hóa một hàm mục tiêu tường minh. Ngược lại, các thuật toán như Cây quyết định (ID3) hay k-NN ban đầu được phát minh dựa trên trực giác thực nghiệm, và các tiêu chuẩn tối ưu hóa toán học được giới nghiên cứu xây dựng sau đó để giải thích cơ chế hoạt động của chúng.
4.2. Phương pháp Hạ dốc (Gradient Descent)
Gradient Descent là thuật toán tối ưu hóa lặp để tìm cực tiểu của một hàm số khả vi. Bắt đầu từ một điểm ngẫu nhiên, tại mỗi bước thuật toán di chuyển một đoạn tỉ lệ với ngược hướng của Gradient (hướng hàm số giảm nhanh nhất).
4.2.1. Thiết lập Toán học trên bài toán Hồi quy Tuyến tính
Gradient Descent quay chậm — đúng ví dụ chi phí quảng cáo trong sách
Bấm “1 epoch” vài lần trước khi chạy liên tụcViệc cần làm: ① Bấm 1 epoch ba lần và đối chiếu w, b với đoạn mã Python ngay bên dưới — chúng là cùng một phép tính. ② Bấm Đặt lại, kéo α lên 0.0025 rồi chạy: MSE bùng nổ thành vô cực chỉ sau vài epoch. Đó là lỗi kinh điển nhất của người mới. ③ Kéo α về 0.00005: đúng, nhưng chậm đến phát bực — và đó là lý do người ta phát minh ra Adam.
Xét bài toán hồi quy đơn biến $f(x) = wx + b$. Ta cần tìm $w$ và $b$ để cực tiểu hóa sai số toàn phương trung bình (MSE):
$$l = \frac{1}{N} \sum_{i=1}^N (y_i - (wx_i + b))^2$$
Áp dụng quy tắc chuỗi (chain rule), các đạo hàm riêng theo $w$ và $b$ được tính như sau:
$$\frac{\partial l}{\partial w} = \frac{1}{N} \sum_{i=1}^N -2x_i (y_i - (wx_i + b))$$
$$\frac{\partial l}{\partial b} = \frac{1}{N} \sum_{i=1}^N -2 (y_i - (wx_i + b))$$
4.2.2. Quy tắc cập nhật tham số
Với tốc độ học (learning rate) $\alpha > 0$, tham số được cập nhật sau mỗi vòng:
$$w \leftarrow w - \alpha \frac{\partial l}{\partial w}$$
$$b \leftarrow b - \alpha \frac{\partial l}{\partial b}$$
Một lượt duyệt qua toàn bộ $N$ mẫu dữ liệu trong tập huấn luyện được gọi là một Epoch (kỷ nguyên). Thuật toán lặp lại qua nhiều epoch cho đến khi giá trị $w, b$ hội tụ (không còn thay đổi đáng kể).
4.2.3. Cài đặt Python từ con số 0 (From Scratch)
def update_w_and_b(spendings, sales, w, b, alpha):
dl_dw = 0.0
dl_db = 0.0
N = len(spendings)
for i in range(N):
dl_dw += -2 * spendings[i] * (sales[i] - (w * spendings[i] + b))
dl_db += -2 * (sales[i] - (w * spendings[i] + b))
# Cập nhật w và b
w = w - (1 / float(N)) * dl_dw * alpha
b = b - (1 / float(N)) * dl_db * alpha
return w, b
def avg_loss(spendings, sales, w, b):
N = len(spendings)
total_error = 0.0
for i in range(N):
total_error += (sales[i] - (w * spendings[i] + b)) ** 2
return total_error / float(N)
def train(spendings, sales, w, b, alpha, epochs):
for e in range(epochs):
w, b = update_w_and_b(spendings, sales, w, b, alpha)
if e % 400 == 0:
print(f"Epoch {e} - Loss: {avg_loss(spendings, sales, w, b):.4f}")
return w, b
def predict(x, w, b):
return w * x + b
4.2.4. Các biến thể hiện đại của Gradient Descent
- Stochastic Gradient Descent (SGD): Thay vì tính gradient trên toàn bộ tập dữ liệu, SGD tính xấp xỉ gradient trên từng mẫu hoặc từng cụm mẫu nhỏ (mini-batch), giúp tăng tốc độ tính toán đáng kể trên tập dữ liệu lớn.
- Momentum: Bổ sung yếu tố "quán tính" giúp vượt qua các vùng phẳng hoặc cực tiểu địa phương cạn, giảm dao động zíc-zắc.
- Adagrad: Tự động điều chỉnh tốc độ học $\alpha$ riêng cho từng tham số dựa trên lịch sử tích lũy gradient.
- RMSprop & Adam (Adaptive Moment Estimation): Kết hợp ý tưởng của Momentum và RMSprop, hiện là các thuật toán tối ưu hóa chuẩn mực nhất trong huấn luyện Mạng nơ-ron và Deep Learning.
Bề mặt mất mát 3D — cuộc đua GD, Momentum và Adam
Kéo để xoay · bấm lên sàn hoặc lên bản đồ để chọn điểm xuất phát—
Việc cần làm: ① Địa hình ① với η mặc định, bấm Thả bóng: GD nảy qua lại hai vách thung lũng theo trục $w$ mà bò rất chậm theo trục $b$ — sau 300 bước vẫn chưa tới đáy (nó cần khoảng 2.900 bước); Momentum tới đáy quanh bước 270, Adam quanh bước 150. Cùng một bài toán hồi quy như phòng thí nghiệm 10, chỉ là nhìn từ trên xuống thung lũng. ② Kéo η vượt vạch $2/\lambda_{\max} \approx 0{,}0033$: GD nổ tung ngay bước thứ hai. Momentum vẫn sống vì ngưỡng ổn định của nó rộng hơn. ③ Đổi sang địa hình ②: cùng dữ liệu, chỉ chuẩn hoá $x$. Bát trở nên tròn xoe và GD với η = 0,5 tới đáy đúng một bước. Đó là lý do mọi giáo trình bắt bạn chuẩn hoá đặc trưng trước khi huấn luyện. ④ Yên ngựa: GD trượt tới tâm rồi gần như bất động khoảng 40 bước tại nơi gradient ≈ 0, sau đó mới rơi xuống đáy thật; Adam thoát nhanh gấp bốn lần vì bước đi của nó không co lại khi gradient nhỏ. Trong mạng sâu, yên ngựa phổ biến hơn cực tiểu cục bộ rất nhiều. ⑤ Ba cái hố: GD và Adam sa vào hố vừa gần nhất, Momentum lao quá đà sang hố nông. Kéo nhiễu lên 0,5 rồi Đặt lại và Thả bóng vài lần: khoảng một nửa số lần bóng thoát được sang hố sâu nhất — nhiễu mini-batch là tính năng, không phải lỗi.
4.3. Cách Kỹ sư Học máy Làm việc trong Thực tế (How ML Engineers Work)
Trong công việc thực tế, kỹ sư Machine Learning hiếm khi phải tự viết lại các thuật toán tối ưu hóa hay giải thuật từ đầu. Thay vào đó, họ sử dụng các thư viện mã nguồn mở đã được tối ưu hóa cao độ về hiệu năng và độ ổn định, tiêu biểu là scikit-learn (viết bằng Python và C).
from sklearn.linear_model import LinearRegression
# Huấn luyện mô hình trong scikit-learn
model = LinearRegression().fit(X_train, y_train)
# Dự đoán cho mẫu mới
x_new = [[23.0]]
y_new = model.predict(x_new)
print(f"Kết quả dự đoán: {y_new[0]}")
Sức mạnh của scikit-learn nằm ở tính nhất quán về giao diện API: bạn có thể dễ dàng thay đổi sang các mô hình khác (SVC, LogisticRegression, DecisionTreeClassifier, KNeighborsClassifier) chỉ bằng cách thay đổi tên lớp khởi tạo mà không cần thay đổi luồng xử lý dữ liệu.
4.4. Các Đặc trưng Phân biệt giữa các Thuật toán (Algorithms' Particularities)
Khi lựa chọn thuật toán cho một bài toán thực tế, cần xem xét các yếu tố sau:
- Siêu tham số (Hyperparameters): Các giá trị cấu hình được thiết lập trước khi huấn luyện (ví dụ: hệ số phạt $C$ trong SVM, độ sâu tối đa $d$ trong Cây quyết định, tốc độ học $\alpha$ trong Gradient Descent).
- Khả năng xử lý kiểu dữ liệu: Một số thuật toán (như Cây quyết định) có thể xử lý trực tiếp đặc trưng dạng phân loại (categorical features), trong khi hầu hết các thuật toán khác (SVM, Hồi quy Tuyến tính, Logistic, Mạng nơ-ron) chỉ chấp nhận dữ liệu số (numerical features).
- Trọng số lớp (Class Weights): Cho phép gán trọng số phạt cao hơn khi dự đoán sai lớp thiểu số, rất hữu ích khi xử lý dữ liệu bị mất cân bằng trầm trọng (Imbalanced Datasets).
- Định dạng đầu ra: Một số mô hình chỉ xuất nhãn cứng (SVM, k-NN), trong khi các mô hình khác (Logistic Regression, Decision Trees) xuất ra điểm số xác suất hoặc mức độ tự tin.
-
Huấn luyện theo lô vs. Tăng dần (Batch vs. Online Learning):
- Batch learning: Cần toàn bộ tập dữ liệu cùng lúc; khi có dữ liệu mới phải huấn luyện lại từ đầu.
- Incremental / Online learning: Cho phép cập nhật mô hình liên tục theo từng luồng dữ liệu mới mà không cần nạp lại dữ liệu cũ (
SGDClassifier,PassiveAggressiveClassifier).
-
Phạm vi áp dụng: Nhiều thuật toán hỗ trợ cả Phân loại và Hồi quy (
DecisionTreeRegressor,SVR,KNeighborsRegressor).
05Chương 5: Thực hành Cơ bản (Basic Practice)
Trong chương này, chúng ta sẽ tìm hiểu các kỹ thuật và quy trình thực hành cốt lõi mà mọi kỹ sư học máy đều phải nắm vững để xây dựng, đánh giá và tinh chỉnh mô hình hiệu quả.
5.1. Tiền xử lý Dữ liệu & Kỹ nghệ Đặc trưng (Data Preprocessing & Feature Engineering)
Dữ liệu thô trong thực tế thường chứa nhiều nhiễu, giá trị bị khuyết hoặc chưa ở định dạng phù hợp để đưa vào thuật toán.
5.1.1. Chuẩn hóa & Tỷ lệ hóa Đặc trưng (Feature Scaling)
Các thuật toán dựa trên khoảng cách (như k-NN, SVM dùng kernel RBF) và các mô hình tối ưu bằng gradient thường nhạy với thang đo đặc trưng. Chuẩn hóa giúp tránh việc một đơn vị đo lớn lấn át các đặc trưng khác hoặc làm tối ưu hóa khó hội tụ. Đây không phải yêu cầu bắt buộc cho mọi thuật toán; cây quyết định thường không cần bước này.
-
Chuẩn hóa Min-Max (Normalization): Ánh xạ giá trị đặc trưng về đoạn $[0, 1]$: $$x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}}$$
-
Tiêu chuẩn hóa Z-Score (Standardization): Với đặc trưng có phương sai khác 0, đưa dữ liệu dùng để fit về trung bình bằng 0 và độ lệch chuẩn bằng 1: $$x' = \frac{x - \mu}{\sigma}$$ Z-score vẫn nhạy với ngoại lai vì dùng trung bình và độ lệch chuẩn; nó không biến phân phối bất kỳ thành phân phối Gaussian. Khi ngoại lai là vấn đề, có thể cân nhắc phép biến đổi dựa trên trung vị và khoảng tứ phân vị. Với đặc trưng hằng, cần xử lý riêng để tránh chia cho 0.
Đổi đơn vị, đổi cả láng giềng?
5.1 · Chuẩn hóa · 4 phútPhân loại một quả mới: độ ngọt 8, khối lượng 1.000 g. Cùng dữ liệu đó, đổi g thành kg có làm 1-NN đổi ý?
- Láng giềng gần nhất
- —
- Dự đoán 1-NN
- —
- Khoảng cách
- —
Thử thách. Bật một phép chuẩn hóa rồi đổi đơn vị. Kết quả ổn định vì các tham số biến đổi được tính như thế nào?
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
Khoảng cách bình phương là Δx₁² + Δx₂². Không chuẩn hóa, số đo hàng nghìn gram lấn át thang độ ngọt 1–9. Đổi sang kg lại làm trọng số tương đối của hai trục thay đổi.
Mean, độ lệch chuẩn hoặc min/max đều được fit trên 6 mẫu train. Điểm mới không tham gia fit. Hai trục hình được co giãn độc lập để dễ đọc; dùng con số khoảng cách, không đo bằng thước trên màn hình. Z-score không biến dữ liệu thành phân phối Gaussian và vẫn nhạy với ngoại lai.
5.1.2. Mã hóa Dữ liệu Phân loại (One-Hot Encoding)
Nếu đặc trưng ở dạng danh mục như màu sắc: ["red", "yellow", "green"], ta không nên gán số tùy tiện $[1, 2, 3]$ vì thuật toán sẽ ngầm hiểu màu xanh có "giá trị gấp 3 lần" màu đỏ. Thay vào đó, ta dùng One-Hot Encoding:
red$\rightarrow [1, 0, 0]$yellow$\rightarrow [0, 1, 0]$green$\rightarrow [0, 0, 1]$
5.1.3. Xử lý Giá trị Bị thiếu (Missing Values)
- Điền bằng giá trị trung bình (mean) hoặc trung vị (median) của thuộc tính đó.
- Điền bằng giá trị xuất hiện thường xuyên nhất (mode) đối với biến phân loại.
- Thêm một đặc trưng cờ nhị phân (binary indicator) $x_{\text{is\_missing}} \in \{0, 1\}$ để báo cho mô hình biết giá trị này từng bị khuyết.
5.2. Phân chia Dữ liệu: Train, Validation và Test Split
Để đánh giá chính xác năng lực thực sự của mô hình trên dữ liệu tương lai, tập dữ liệu gốc cần được chia thành 3 phần độc lập:
- Tập Huấn luyện (Training Set - thường chiếm 70%): Dùng để thuật toán học các tham số nội tại ($\mathbf{w}, b$).
- Tập Thẩm định (Validation Set - thường chiếm 15%): Dùng để so sánh các mô hình, chọn thuật toán và tinh chỉnh các siêu tham số (hyperparameters).
- Tập Kiểm tra (Test Set - thường chiếm 15%): Được "khóa" hoàn toàn trong quá trình huấn luyện và tinh chỉnh. Chỉ dùng một lần duy nhất ở bước cuối cùng để đo lường khả năng tổng quát hóa thực tế của mô hình.
[!WARNING]
Rò rỉ Dữ liệu (Data Leakage): Tuyệt đối không được sử dụng thông tin từ tập Thẩm định hoặc tập Kiểm tra trong quá trình tiền xử lý (ví dụ: tính $\mu, \sigma$ để chuẩn hóa trên toàn bộ tập dữ liệu trước khi chia). Phải tính các tham số tiền xử lý chỉ dựa trên tập Training, sau đó áp dụng cùng phép biến đổi đó cho tập Validation và Test.
Thám tử rò rỉ dữ liệu
5.2 · Chia dữ liệu · 6 phútĐiểm đánh giá đẹp chưa đủ. Đọc mục tiêu và dấu vết dữ liệu để quyết định quy trình có dùng thông tin không được phép hay không.
- Tình huống đã giải
- —
- Lần trả lời
- —
6 tình huống. Chọn sai sẽ có giải thích; bạn có thể sửa lựa chọn để tiếp tục.
Thử thách. Phát hiện rò rỉ dựa trên thời điểm và nguồn dữ liệu, không dựa vào điểm accuracy.
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
Train học tham số. Validation chọn cấu hình. Test chỉ dùng sau khi chốt quy trình. Mỗi fold của cross-validation phải fit lại bước tiền xử lý trên phần train của chính fold đó.
Chia theo người/nhóm khi mục tiêu là dự đoán cho nhóm chưa từng gặp; chia theo thời gian khi mục tiêu là dự đoán tương lai. Random split không tự nó bảo đảm độc lập.
5.3. Đánh đổi giữa Độ chệch và Phương sai (Bias-Variance Tradeoff)
Dưới khớp, vừa khớp, quá khớp — trên cùng một bộ dữ liệu
Kéo bậc đa thức từ 1 lên 15Việc cần làm: ① Kéo bậc lên 15 và nhìn lỗi huấn luyện: nó gần bằng 0 — mô hình “hoàn hảo” trên giấy. Rồi nhìn lỗi kiểm tra: nó nổ tung. ② Đây là toàn bộ lý do tồn tại của tập kiểm tra. Nếu chỉ nhìn lỗi huấn luyện, bạn sẽ luôn chọn mô hình phức tạp nhất và luôn sai. ③ Bấm Lấy mẫu dữ liệu mới vài lần ở bậc 15: đường đỏ nhảy múa hoàn toàn khác nhau mỗi lần. Sự bất ổn đó chính là phương sai trong đánh đổi độ chệch–phương sai.
Sai số tổng thể của một mô hình học máy trên dữ liệu mới bao gồm:
$$\text{Tổng sai số} = \text{Độ chệch (Bias)}^2 + \text{Phương sai (Variance)} + \text{Nhiễu không thể giảm (Irreducible Error)}$$
- Độ chệch cao (High Bias $\rightarrow$ Dưới khớp / Underfitting): Mô hình quá đơn giản, không đủ năng lực nắm bắt quy luật phức tạp của dữ liệu. Biểu hiện: Sai số cao trên cả tập Training lẫn tập Test.
- Phương sai cao (High Variance $\rightarrow$ Quá khớp / Overfitting): Mô hình quá phức tạp, ghi nhớ cả các nhiễu ngẫu nhiên của tập huấn luyện. Biểu hiện: Sai số cực thấp trên tập Training nhưng lại rất cao trên tập Test.
- Mục tiêu: Tìm điểm cân bằng tối ưu giữa độ phức tạp của mô hình để tối thiểu hóa sai số kiểm tra.
5.4. Kỹ thuật Điều chuẩn (Regularization)
Điều chuẩn là phương pháp hạn chế độ phức tạp của mô hình để chống quá khớp (overfitting) bằng cách cộng thêm một số hạng phạt vào hàm mất mát:
5.4.1. Điều chuẩn $L_2$ (Ridge Regression / Weight Decay)
Cộng thêm tổng bình phương các trọng số vào hàm chi phí:
$$\text{Cost} = \text{Loss}(\mathbf{w}, b) + \lambda \sum_{j=1}^D (w^{(j)})^2$$
Hệ số $\lambda > 0$ kiểm soát cường độ phạt. Điều chuẩn $L_2$ buộc các trọng số $\mathbf{w}$ co nhỏ về gần 0, làm mượt mô hình và phân bổ tầm quan trọng đều hơn giữa các đặc trưng.
5.4.2. Điều chuẩn $L_1$ (Lasso Regression)
Cộng thêm tổng giá trị tuyệt đối các trọng số:
$$\text{Cost} = \text{Loss}(\mathbf{w}, b) + \lambda \sum_{j=1}^D |w^{(j)}|$$
Điều chuẩn $L_1$ có đặc tính đặc biệt là triệt tiêu hoàn toàn một số trọng số về đúng bằng $0$. Do đó, $L_1$ hoạt động như một cơ chế chọn lọc đặc trưng tự động (Feature Selection), tạo ra mô hình thưa (sparse model).
Vì sao Lasso đặt trọng số về ĐÚNG 0 còn Ridge thì không
Đổi giữa L1 và L2, rồi kéo λViệc cần làm: ① Ở chế độ L1, kéo λ lên khoảng 1.5 và nhìn ô “w⁽²⁾”: nó chuyển sang đúng 0.000 và ô thống kê chuyển xanh. Đặc trưng đó vừa bị loại bỏ hoàn toàn khỏi mô hình. ② Chuyển sang L2 với cùng λ: cả hai trọng số nhỏ lại nhưng không cái nào bằng 0. ③ Nguyên nhân nằm ở hình học: hình thoi có góc nhọn nằm trên trục, hình tròn thì không có góc nào cả.
5.5. Các Thước Đo Đánh Giá Mô Hình (Evaluation Metrics)
5.5.1. Ma trận Nhầm lẫn (Confusion Matrix)
Trong bài toán phân loại nhị phân:
| Dự đoán Dương (Positive) | Dự đoán Âm (Negative) | |
|---|---|---|
| Thực tế Dương (Actual Positive) | TP (True Positive) | FN (False Negative) |
| Thực tế Âm (Actual Negative) | FP (False Positive) | TN (True Negative) |
5.5.2. Độ chính xác (Accuracy), Độ chuẩn xác (Precision) & Độ thu hồi (Recall)
-
Accuracy (Độ chính xác tổng quát): $$\text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}}$$ (Không phù hợp khi dữ liệu mất cân bằng nghiêm trọng, ví dụ 99% không gian lận, 1% gian lận).
-
Precision (Độ chuẩn xác): Tỷ lệ dự đoán đúng trong số tất cả các trường hợp mô hình đoán là Dương: $$\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}}$$ (Quan trọng khi muốn tránh tối đa việc báo động giả / False Positive, ví dụ: phân loại thư hợp lệ thành spam).
-
Recall / TPR (Độ thu hồi): Tỷ lệ phát hiện đúng trong số tất cả các mẫu thực sự là Dương: $$\text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}}$$ (Quan trọng khi không được phép bỏ sót / False Negative, ví dụ: chẩn đoán bệnh hiểm nghèo, phát hiện gian lận tài chính).
-
$F_1$-Score: Trung bình điều hòa giữa Precision và Recall: $$F_1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}$$
5.5.3. Đường cong ROC và Chỉ số AUC (Area Under the ROC Curve)
Ngưỡng, ma trận nhầm lẫn và đường cong ROC
Kéo đường vàng — điểm trên ROC chạy theoViệc cần làm: ① Kéo ngưỡng từ trái sang phải và nhìn precision đi lên trong khi recall đi xuống — chúng luôn kéo ngược nhau. ② Chú ý điều quan trọng: kéo ngưỡng không hề làm thay đổi đường cong ROC hay AUC. Ngưỡng là quyết định kinh doanh; AUC là chất lượng mô hình. ③ Hạ Chất lượng mô hình xuống 0.2: hai phân bố chồng lên nhau, AUC về 0.5 — mô hình chỉ còn giá trị như tung đồng xu.
- Đường cong ROC (Receiver Operating Characteristic) vẽ sự biến thiên giữa TPR (Recall) và FPR (False Positive Rate = $\frac{\text{FP}}{\text{FP} + \text{TN}}$) khi thay đổi các ngưỡng xác suất quyết định từ 0 đến 1.
- AUC (Diện tích dưới đường cong ROC):
- $\text{AUC} = 1.0$: Bộ phân loại hoàn hảo.
- $\text{AUC} = 0.5$: Mô hình đoán mò ngẫu nhiên (tương đương tung đồng xu).
- $\text{AUC} > 0.8$: Mô hình phân loại xuất sắc.
5.6. Tinh chỉnh Siêu tham số (Hyperparameter Tuning) & Kiểm định chéo (Cross-Validation)
5.6.1. Phương pháp Kiểm định chéo $K$-Fold (Cross-Validation)
Khi tập dữ liệu nhỏ, việc tách riêng một tập Validation cố định sẽ làm lãng phí dữ liệu huấn luyện. Ta sử dụng kiểm định chéo $K$-Fold (thường chọn $K=5$ hoặc $K=10$):
- Chia ngẫu nhiên tập huấn luyện thành $K$ phần bằng nhau (gọi là các Fold: $F_1, F_2, \dots, F_K$).
- Lặp lại $K$ lần: Mỗi lần chọn 1 Fold làm tập Validation và dùng $K-1$ Fold còn lại để huấn luyện mô hình.
- Điểm đánh giá cuối cùng là trung bình cộng kết quả đo được trên cả $K$ lần thẩm định.
5.6.2. Các chiến lược dò tìm Siêu tham số:
- Grid Search: Thử nghiệm vét cạn tất cả các tổ hợp có thể có trong một lưới các giá trị định trước.
- Random Search: Lấy mẫu ngẫu nhiên các giá trị siêu tham số từ một phân phối xác suất xác định. Thường hiệu quả hơn Grid Search rất nhiều khi có nhiều siêu tham số.
- Bayesian Optimization: Sử dụng mô hình thống kê học từ kết quả của các lần thử nghiệm trước để định hướng chọn bộ siêu tham số tiềm năng nhất ở lần tiếp theo.
06Chương 6: Mạng Nơ-ron và Deep Learning (Neural Networks and Deep Learning)
6.1. Mạng Nơ-ron Nhân tạo (Neural Networks)
Một mạng nơ-ron nhân tạo thực chất là một hàm số lồng nhau (nested function) phức tạp. Ví dụ, với một mạng nơ-ron 3 tầng nhận đầu vào $\mathbf{x}$ và xuất ra kết quả $y$:
$$y = f_{\text{NN}}(\mathbf{x}) = f_3\left(f_2\left(f_1(\mathbf{x})\right)\right)$$
Trong đó, tại mỗi tầng $l$, hàm số có dạng:
$$f_l(\mathbf{z}) \stackrel{\text{def}}{=} g_l(\mathbf{W}_l \mathbf{z} + \mathbf{b}_l)$$
- $\mathbf{W}_l$ là ma trận trọng số (weight matrix) của tầng $l$.
- $\mathbf{b}_l$ là vectơ độ lệch (bias vector).
- $g_l$ là hàm kích hoạt (activation function) — một hàm phi tuyến cố định.
- $\mathbf{z}$ là vectơ đầu ra từ tầng trước đó ($l-1$).
6.1.1. Perceptron Đa tầng (Multilayer Perceptron - MLP)
Trong cấu trúc mạng truyền thẳng (Feed-Forward Neural Network - FFNN) hay MLP chuẩn:
- Các nơ-ron được tổ chức thành các tầng: Tầng đầu vào (Input Layer), một hoặc nhiều Tầng ẩn (Hidden Layers), và Tầng đầu ra (Output Layer).
- Mạng kết nối đầy đủ (Fully-Connected / Dense): Mọi đầu ra của một tầng đều được kết nối làm đầu vào cho tất cả các nơ-ron của tầng kế tiếp.
Mạng nơ-ron học ngay trước mắt bạn
Nhìn kỹ từng nơ-ron ẩn ở sơ đồ bên phảiViệc cần làm: ① Để 1 nơ-ron ẩn rồi huấn luyện: mạng vĩnh viễn chỉ vẽ được một đường thẳng, không cách nào bao được vòng tròn. ② Kéo lên 6 và chạy lại — ranh giới cong xuất hiện. Nhìn vào từng hình tròn nhỏ ở sơ đồ mạng: mỗi nơ-ron vẫn chỉ là một nhát cắt thẳng. Đường cong là kết quả chồng chúng lại. ③ Đổi sang ReLU: ranh giới trở thành các đoạn gấp khúc sắc cạnh thay vì cong mượt — đúng như hình dạng của chính hàm ReLU. ④ Thử bộ Xoắn ốc với 12 nơ-ron.
Mặt dự đoán ŷ(x⁽¹⁾, x⁽²⁾): năm mô hình, năm hình dạng
Kéo để xoay · kéo vạch tím trên bản đồ để dời lát cắt—
Việc cần làm: ① Bắt đầu với Tuyến tính trên dữ liệu mặt cong trơn: mặt phẳng chỉ nghiêng được, MSE test ≈ 0,19 trong khi nhiễu thật chỉ 0,09. Đổi sang dữ liệu mặt phẳng nghiêng: nó khớp gần hoàn hảo (≈ 0,08). ② k-NN với k = 1: mặt chạm đúng từng điểm (MSE train = 0) nhưng MSE test 0,18 — quá khớp; k quanh 5–10 tốt nhất (≈ 0,11). ③ Cây: kéo độ sâu và nhìn bậc thang mọc thêm bậc. Trên dữ liệu hai cái hộp, cây sâu 4 thắng đứt tuyến tính (0,17 so với 0,41); nhưng trên mặt phẳng nghiêng, 25 lá vẫn thua ba tham số của một mặt phẳng (0,14 so với 0,08) — bậc thang xấp xỉ đường chéo rất tốn kém. ④ MLP 6 nơ-ron tanh, bấm Huấn luyện: mặt cong uốn dần theo dữ liệu, MSE test về ≈ 0,09, sát mức nhiễu. Rồi chọn “Chỉ hiện nơ-ron 1”, 2, 3…: mỗi nơ-ron là một con dốc thẳng, cả mạng chỉ là tổng của chúng — đúng điều phòng thí nghiệm 14 nói bằng ranh giới 2D. Hạ về 1 nơ-ron: một con dốc không thể tạo đồi. ⑤ Logistic: ranh giới quyết định (đường vàng) đúng là lát cắt của tấm chữ S tại p = 0,5 — vì thế nó luôn là đường thẳng, dù dữ liệu cong đến đâu.
6.1.2. Các Hàm Kích hoạt Phi tuyến Thông dụng (Activation Functions)
[!IMPORTANT]
Tại sao bắt buộc phải có hàm kích hoạt phi tuyến?
Nếu không có $g(z)$, tổ hợp các phép toán tuyến tính $\mathbf{W}_2(\mathbf{W}_1\mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2$ sẽ chỉ tương đương với một hàm tuyến tính duy nhất $\mathbf{W}'\mathbf{x} + \mathbf{b}'$. Khi đó, dù mạng có hàng trăm tầng cũng không thể biểu diễn được các quy luật phi tuyến phức tạp.
-
Hàm Sigmoid: $$\sigma(z) = \frac{1}{1 + e^{-z}} \in (0, 1)$$
-
Hàm Tanh (Hyperbolic Tangent): $$\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} \in (-1, 1)$$ (Đối xứng qua gốc tọa độ 0, thường giúp mô hình học nhanh hơn Sigmoid).
-
Hàm ReLU (Rectified Linear Unit): $$\text{ReLU}(z) = \max(0, z) = \begin{cases} 0 & \text{nếu } z < 0 \\ z & \text{nếu } z \ge 0 \end{cases}$$ (Tính toán cực nhanh và giải quyết hiệu quả vấn đề biến mất gradient).
-
Hàm Softmax (cho bài toán phân loại đa lớp): $$\text{Softmax}(\mathbf{z})_j = \frac{\exp(z_j)}{\sum_{k=1}^C \exp(z_k)}$$ (Biến đổi một vectơ số thực thành phân phối xác suất có tổng bằng 1).
Vì sao ReLU đánh bại Sigmoid trong mạng sâu
Bật/tắt từng hàm để so sánhViệc cần làm: ① Tắt hết chỉ để lại Sigmoid, nhìn đường nét đứt (đạo hàm): đỉnh cao nhất của nó chỉ là 0.25. ② Nhìn xuống biểu đồ dưới: 0.25 nhân với chính nó 10 lần cho ra $10^{-6}$. Tín hiệu học không còn gì để về tới tầng đầu. ③ Bật ReLU: đạo hàm bằng đúng 1 ở nửa dương, đường của nó nằm ngang — gradient đi xuyên qua 30 tầng vẫn nguyên vẹn. Đây là một trong vài thay đổi nhỏ đã mở khoá cả kỷ nguyên deep learning.
6.2. Học Sâu (Deep Learning)
Học sâu đề cập đến việc huấn luyện các mạng nơ-ron có nhiều tầng ẩn (từ vài tầng đến hàng trăm, hàng nghìn tầng).
Hai Thách thức Lịch sử & Giải pháp
-
Bùng nổ Gradient (Exploding Gradient): Gradient tăng theo cấp số nhân khi lan truyền ngược qua nhiều tầng, làm trọng số dao động dữ dội hoặc tràn số
NaN.
Giải pháp: Kẹp gradient (Gradient Clipping), Điều chuẩn $L_1/L_2$. -
Biến mất Gradient (Vanishing Gradient): Đạo hàm Sigmoid nằm trong $(0, 0.25]$; đạo hàm Tanh nằm trong $(0, 1]$ và bằng $1$ tại $z = 0$. Khi các hàm kích hoạt bị bão hòa, đạo hàm tiến gần $0$. Theo quy tắc chuỗi trong Lan truyền ngược (Backpropagation), tín hiệu đi qua cả đạo hàm kích hoạt lẫn ma trận trọng số; tích nhiều hệ số hoặc ma trận có độ co nhỏ có thể khiến gradient ở các tầng đầu gần như bằng $0$. Chỉ nhìn đạo hàm kích hoạt chưa đủ để kết luận gradient của cả mạng sẽ tiêu biến hay bùng nổ. Giải pháp hiện đại: Sử dụng hàm kích hoạt ReLU, cơ chế kết nối tắt (Skip Connections trong ResNet), và các khối nơ-ron có cổng (Gated Units như LSTM/GRU).
Tự tính một lần lan truyền ngược
6.2 · Backpropagation · 5 phútMột nơ-ron: z = 2w + b → h = sigmoid(z) → L = ½(h − y)². Đi xuôi để tính loss, rồi đi ngược để tìm cách sửa w.
- Số bước học
- —
- Gradient sai phân
- —
Thử thách. Nhân ba đạo hàm cục bộ để tính ∂L/∂w ở cấu hình hiện tại. Sai số cho phép 0,002. Có thể nhập số âm.
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
∂L/∂w = (h − y) × h(1 − h) × 2. Ba thừa số lần lượt đến từ loss, sigmoid và z = 2w + b. ∂L/∂b bỏ thừa số 2. Cập nhật đồng thời w và b bằng gradient của cùng một lần đi xuôi.
Gradient sai phân = [L(w + ε, b) − L(w − ε, b)] / (2ε), ε = 10⁻⁵. Bấm lần ngược đủ 3 bước để đối chiếu hai cách tính. Đây là loss trên một mẫu, không phải chất lượng trên dữ liệu mới.
6.3. Mạng Nơ-ron Tích chập (Convolutional Neural Networks - CNN)
Khi dữ liệu đầu vào là hình ảnh (hàng triệu điểm ảnh), mạng MLP sẽ bùng nổ số lượng tham số kết nối, dẫn đến quá khớp và không khả thi về mặt tính toán.
CNN giải quyết vấn đề này dựa trên hai đặc tính không gian của hình ảnh:
- Tính tương quan cục bộ (Local Connectivity): Các pixel lân cận thường chứa thông tin cùng một đối tượng (màu da, tán lá, bầu trời, góc cạnh).
- Tính bất biến với phép tịnh tiến (Translation Invariance): Một đặc trưng (như đôi mắt) ở góc trên hay góc dưới bức ảnh đều có cấu trúc tương tự nhau.
Cơ chế hoạt động của Phép Tích chập (Convolution)
Bộ lọc tích chập trượt qua ảnh — từng ô một
Bấm “Trượt tự động” và xem bản đồ đặc trưng hiện dầnSobel dọc — bắt cạnh đứng
Xanh = giá trị dương, đỏ = âm, xám = chưa tính. Hãy để ý: bộ lọc Sobel dọc chỉ sáng lên ở các cạnh đứng và gần như im lặng trên nét ngang của chữ T — trong khi Sobel ngang làm điều ngược lại.
Việc cần làm: ① Chạy Sobel dọc hết một lượt, rồi đổi sang Sobel ngang và chạy lại: cùng một ảnh, hai bản đồ đặc trưng gần như đảo ngược nhau. ② Điều cốt lõi: không ai lập trình các con số trong bộ lọc này. CNN học chúng bằng lan truyền ngược. Những bộ lọc dò cạnh mà bạn thấy ở đây chính là thứ tầng đầu tiên của mọi CNN tự khám phá ra — hầu như luôn luôn, trên mọi bộ dữ liệu.
- Sử dụng một ma trận trọng số nhỏ gọi là Bộ lọc (Filter / Kernel) kích thước $p \times p$ (ví dụ $3 \times 3$ hoặc $5 \times 5$).
- Trượt bộ lọc qua từng vùng nhỏ (patch) của ảnh theo cơ chế cửa sổ trượt (sliding window).
-
Tại mỗi vị trí, tính tích vô hướng giữa vùng ảnh và bộ lọc rồi cộng với độ lệch $b$: $$\text{Output} = g\left(\sum \text{Patch} \odot \text{Filter} + b\right)$$
-
Các khái niệm quan trọng trong CNN:
- Stride: Bước nhảy khi trượt bộ lọc.
- Padding: Thêm viền số 0 quanh ảnh để giữ nguyên kích thước không gian sau tích chập.
- Pooling (Max Pooling / Average Pooling): Giảm kích thước không gian của bản đồ đặc trưng (feature map), giảm số lượng tham số và tăng tính bất biến với biến dạng nhỏ.
6.4. Mạng Nơ-ron Tái hồi (Recurrent Neural Networks - RNN)
RNN được thiết kế chuyên biệt để xử lý dữ liệu dạng chuỗi (Sequential Data) như văn bản, tiếng nói, chuỗi thời gian — nơi thứ tự xuất hiện của các phần tử mang ý nghĩa sống còn.
6.4.1. Cấu trúc và Trạng thái Ẩn (Hidden State)
Không giống như mạng truyền thẳng, RNN chứa các vòng lặp phản hồi. Tại mỗi bước thời gian $t$, nơ-ron nhận hai đầu vào:
- Vectơ đặc trưng của phần tử hiện tại $\mathbf{x}_t$ (ví dụ: từ thứ $t$ trong câu).
- Trạng thái ẩn $\mathbf{h}_{t-1}$ từ bước thời gian trước đó (đóng vai trò như bộ nhớ lưu giữ ngữ cảnh quá khứ).
Công thức cập nhật trạng thái:
$$\mathbf{h}_t = g_1(\mathbf{W}\mathbf{x}_t + \mathbf{U}\mathbf{h}_{t-1} + \mathbf{b})$$
Đầu ra tại thời điểm $t$:
$$\mathbf{y}_t = g_2(\mathbf{V}\mathbf{h}_t + \mathbf{c})$$
RNN đọc một câu tiếng Việt — trạng thái ẩn mang ký ức đi
Câu thử: “Bộ phim này thật sự không hề tệ”Việc cần làm: ① Đọc hết câu với hệ số nhớ 0.55 — kết luận là TÍCH CỰC, đúng, dù câu chứa từ “tệ”. ② Kéo hệ số nhớ về 0 rồi đọc lại: mạng quên chữ “không” ngay khi sang từ tiếp theo và kết luận sai thành TIÊU CỰC. ③ Đó chính xác là điều mô hình túi từ (bag of words) của Chương 1 mắc phải: nó đếm từ mà không biết thứ tự. ④ Hệ số nhớ quá cao cũng có giá của nó — gradient phải nhân dồn qua từng bước, và đó là lý do LSTM/GRU ra đời.
6.4.2. Mạng RNN có Cổng (Gated RNNs: LSTM và GRU)
Mạng RNN cơ bản gặp vấn đề mất trí nhớ dài hạn (Long-term Dependency Problem) do gradient bị biến mất khi lan truyền ngược qua thời gian (BPTT - Backpropagation Through Time).
GRU (Gated Recurrent Unit) giải quyết triệt để vấn đề này bằng cơ chế các "cổng" đóng/mở thông tin:
- Cổng cập nhật / Cổng quên ($\Gamma_t \in [0, 1]$): Quyết định lượng thông tin cũ cần giữ lại và lượng thông tin mới cần nạp vào bộ nhớ.
- Nhờ cơ chế truyền thông tin trực tiếp (phép cộng thay vì chỉ nhân chuỗi), gradient có thể truyền ngược qua hàng trăm bước thời gian mà không bị triệt tiêu.
6.4.3. Các Mở rộng Quan trọng của RNN
- Bi-directional RNNs (RNN hai chiều): Đọc chuỗi theo cả hai chiều (từ trái qua phải và từ phải qua trái) để nắm bắt ngữ cảnh cả trước và sau.
- Sequence-to-Sequence (Seq2Seq): Kiến trúc Encoder - Decoder chuyên dùng cho dịch máy và tóm tắt văn bản.
- Cơ chế Attention: Nền tảng đột phá cho phép mô hình tập trung vào các từ quan trọng nhất trong chuỗi đầu vào, mở đường cho kiến trúc Transformer hiện đại.
07Chương 7: Các Bài toán và Giải pháp Thực tế (Problems and Solutions)
Trong chương này, tác giả trình bày cách giải quyết 11 bài toán học máy nâng cao thường gặp trong các dự án thực tế.
7.1. Hồi quy Kernel (Kernel Regression)
Khi mối quan hệ giữa đặc trưng và biến mục tiêu có dạng phi tuyến tính phức tạp trong không gian nhiều chiều ($D > 3$), việc thử nghiệm các bậc đa thức trở nên bất khả thi.
Hồi quy Kernel là phương pháp phi tham số (non-parametric). Mô hình dự đoán đầu ra bằng trung bình có trọng số của các mẫu trong tập dữ liệu:
$$f(\mathbf{x}) = \sum_{i=1}^N w_i y_i \quad \text{với} \quad w_i = \frac{k\left(\frac{\|\mathbf{x}_i - \mathbf{x}\|}{b}\right)}{\sum_{j=1}^N k\left(\frac{\|\mathbf{x}_j - \mathbf{x}\|}{b}\right)}$$
Các trọng số đã có tổng bằng $1$, nên không chia thêm cho $N$. Kiểm tra nhanh: nếu mọi $y_i = c$, dự đoán phải bằng $c$ ở mọi vị trí có tổng trọng số kernel khác $0$.
- Hàm $k(\cdot)$ thường là Kernel Gaussian: $k(z) = \frac{1}{\sqrt{2\pi}} \exp\left(-\frac{z^2}{2}\right)$.
- Siêu tham số $b$ (băng thông - bandwidth) quyết định mức độ mượt của đường cong hồi quy: $b$ nhỏ gây quá khớp (overfit), $b$ lớn gây dưới khớp (underfit).
7.2. Phân loại Đa lớp (Multiclass Classification)
Khi nhãn $y \in \{1, 2, \dots, C\}$ với $C > 2$:
- Một số thuật toán hỗ trợ đa lớp tự nhiên: Logistic Regression (dùng hàm Softmax), Cây quyết định, k-NN.
- Đối với các thuật toán chỉ hỗ trợ nhị phân (như SVM gốc), ta áp dụng chiến lược Một-đối-Tất cả (One-vs-Rest / OvR):
- Xây dựng $C$ bộ phân loại nhị phân riêng biệt: Bộ phân loại thứ $c$ phân biệt lớp $c$ với tất cả các lớp còn lại gộp chung làm 1.
- Khi dự đoán mẫu mới, chạy qua cả $C$ bộ phân loại và chọn lớp có độ tự tin (certainty / score) cao nhất (đối với SVM là khoảng cách từ điểm tới siêu phẳng: $d = \frac{\mathbf{w}^{*T}\mathbf{x} + b^*}{\|\mathbf{w}^*\|}$).
7.3. Phân loại Một lớp (One-Class Classification)
Áp dụng cho các bài toán Phát hiện Điểm Bất thường (Anomaly / Outlier / Novelty Detection) — nơi dữ liệu huấn luyện chỉ chứa hầu như toàn bộ các mẫu bình thường (ví dụ: phát hiện xâm nhập mạng, phát hiện lỗi sản phẩm công nghiệp).
-
One-Class Gaussian: Giả định dữ liệu tuân theo Phân phối Chuẩn Nhiều chiều (Multivariate Normal Distribution - MND): $$f_{\boldsymbol{\mu}, \boldsymbol{\Sigma}}(\mathbf{x}) = \frac{\exp\left(-\frac{1}{2}(\mathbf{x} - \boldsymbol{\mu})^T \boldsymbol{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu})\right)}{\sqrt{(2\pi)^D |\boldsymbol{\Sigma}|}}$$ Khi có mẫu mới, nếu mật độ xác suất $f_{\boldsymbol{\mu}, \boldsymbol{\Sigma}}(\mathbf{x}) < \text{threshold}$ thì coi là bất thường.
-
One-Class k-Means / One-Class k-NN / One-Class SVM: Xây dựng ranh giới hình cầu hoặc siêu phẳng bao quanh cụm dữ liệu bình thường.
7.4. Phân loại Đa nhãn (Multi-Label Classification)
Mỗi mẫu có thể đồng thời thuộc về nhiều nhãn cùng lúc (ví dụ: một bức ảnh có thể vừa chứa "người", "buổi hòa nhạc" vừa có "thiên nhiên").
- Mạng Nơ-ron: Tầng đầu ra gồm $L$ nơ-ron, mỗi nơ-ron dùng hàm kích hoạt Sigmoid độc lập (thay vì Softmax) và tối ưu hóa hàm mất mát Binary Cross-Entropy tổng thể.
- Kỹ thuật Lớp Giả (Fake Class): Khi số lượng tổ hợp nhãn nhỏ, có thể biến đổi các tổ hợp nhãn thành các lớp đơn nhất (ví dụ:
{ảnh, chân dung},{ảnh, phong cảnh}) để duy trì mối tương quan giữa các nhãn.
7.5. Học Kết Hợp (Ensemble Learning)
Thay vì cố gắng xây dựng một mô hình phức tạp duy nhất, học kết hợp kết hợp dự đoán của nhiều mô hình yếu (weak learners - thường là cây quyết định nông) để tạo ra một siêu mô hình có độ chính xác và độ ổn định cao vượt trội.
7.5.1. Bagging & Random Forest
- Cơ chế: Tạo ra nhiều tập con dữ liệu bằng phương pháp lấy mẫu ngẫu nhiên có hoàn lại (Bootstrap). Huấn luyện độc lập nhiều cây quyết định trên từng tập con rồi lấy trung bình kết quả (hồi quy) hoặc bỏ phiếu đa số (phân loại).
- Mục đích: Giảm phương sai (Variance), chống quá khớp cực kỳ hiệu quả.
7.5.2. Gradient Boosting (GBDT)
-
Cơ chế: Huấn luyện các cây quyết định một cách tuần tự. Mỗi cây mới được tối ưu để dự đoán và bù đắp cho phần sai số (phần dư - residuals $\hat{y}_i = y_i - f(\mathbf{x}_i)$) của các cây trước đó: $$f_{\text{new}}(\mathbf{x}) = f_{\text{old}}(\mathbf{x}) + \alpha f_{\text{tree}}(\mathbf{x})$$
-
Mục đích: Giảm độ chệch (Bias), đạt độ chính xác hàng đầu trên các bảng dữ liệu có cấu trúc (tabular data).
Attention: mô hình tự chọn nên nhìn vào đâu
Rê chuột lên từ tiếng Anh để xem nó nhìn vào đâuViệc cần làm: ① Bấm Dịch cả câu rồi rê chuột lên từ “today”: nó kéo chú ý ngược về “Hôm nay” ở đầu câu, vượt qua bốn từ ở giữa. ② Với seq2seq thuần (Hình 4), thông tin đó đã phải sống sót qua năm bước nén vào một vectơ duy nhất. Attention thì đọc thẳng lại bản gốc. ③ Đây chính là bước nhảy dẫn tới Transformer: nếu attention hữu ích đến vậy, tại sao còn cần RNN? Bài báo năm 2017 trả lời bằng đúng tiêu đề của nó — “Attention Is All You Need”.
Bagging và Boosting — hai triết lý gom mô hình yếu
Kéo số cây từ 1 lên 40Việc cần làm: ① Ở Boosting, kéo số cây từ 1 lên 40 từng bước và nhìn đường vàng đứt nét — đó là cây vừa được thêm, nó chỉ học phần sai số mà cả đội trước đó bỏ sót. ② Chuyển sang Bagging: các cây xám mờ đều cố học cùng một thứ một cách độc lập, và kết quả chỉ là trung bình của chúng. ③ Kết luận: bagging chữa phương sai, boosting chữa độ chệch. Đó là lý do Random Forest dùng cây sâu (phương sai cao) còn XGBoost dùng cây nông (độ chệch cao).
7.6. Gán nhãn Dữ liệu Chuỗi (Sequence Labeling)
Dự đoán nhãn cho từng phần tử trong một chuỗi (ví dụ: gán nhãn từ loại POS Tagging, Nhận diện thực thể tên riêng NER như Tên người, Địa điểm, Tổ chức).
- Mô hình phổ biến: Mạng RNN/LSTM hoặc Conditional Random Fields (CRF).
7.7. Học Chủ động (Active Learning)
Khi dữ liệu chưa gán nhãn rất nhiều nhưng chi phí thuê chuyên gia gán nhãn quá đắt đỏ:
- Thuật toán huấn luyện mô hình ban đầu trên một lượng nhỏ dữ liệu đã gán nhãn.
- Sau đó, nó tự động tìm ra các mẫu dữ liệu chưa gán nhãn mà mô hình cảm thấy không chắc chắn nhất (Uncertainty Sampling) — ví dụ: mẫu nằm gần siêu phẳng phân tách nhất trong SVM hoặc có Entropy phân loại cao nhất.
- Gửi các mẫu được chọn cho chuyên gia gán nhãn rồi cập nhật lại mô hình. Cách này có thể tiết kiệm nhãn, nhưng không bảo đảm ngân sách tối thiểu hay luôn thắng lấy mẫu ngẫu nhiên; nhiễu, ngoại lai và mô hình sai giả định có thể khiến nó liên tục chọn những mẫu ít hữu ích.
Sáu lượt hỏi chuyên gia
7.7 · Học chủ động · 5 phútCó 32 sản phẩm được xếp theo một đặc trưng x. Bạn chỉ được hỏi thêm 6 nhãn để tìm ranh giới giữa hai lớp.
- Nhãn đã hỏi thêm
- —
- Độ rộng khoảng còn lại
- —
- Kiểm tra cuối lượt
- —
Hai nhãn ở hai đầu đã biết. Nhấn một ô ? để tự chọn, hoặc dùng chiến lược bên dưới.
Giả định: nhãn không nhiễu và chỉ đổi từ lớp 0 sang lớp 1 đúng một lần. Mô hình fit ở giữa nhãn 0 lớn nhất và nhãn 1 nhỏ nhất.
Thử thách. Thu hẹp khoảng chứa ranh giới xuống ≤ 0,06 trong tối đa 6 câu hỏi. Chấm lượt sẽ khóa việc hỏi và mở kết quả kiểm tra.
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
Điểm gần ranh giới có thể chia đôi khoảng chưa biết. Điểm ở ngoài khoảng này thường không thu hẹp được nó. So sánh hai chiến lược bằng nút đặt lại: chúng dùng cùng bài toán và cùng ngân sách.
Đây là mô hình ngưỡng 1D lý tưởng; uncertainty sampling không luôn thắng trong dữ liệu có nhiễu, ngoại lai hoặc nhiều vùng nhãn. Accuracy cuối lượt được tính trên 1.000 điểm giả lập khác các điểm trong pool; không dùng các nhãn đó để fit hay chọn mẫu.
7.8. Học Bán giám sát (Semi-Supervised Learning)
Tận dụng lượng lớn dữ liệu chưa gán nhãn kết hợp với số ít dữ liệu có nhãn:
- Self-Learning (Tự huấn luyện): Mô hình tự dự đoán nhãn cho dữ liệu chưa gán nhãn; các mẫu có độ tự tin cao sẽ được đưa vào tập huấn luyện tiếp theo (Pseudo-labeling).
- Autoencoders & Denoising Autoencoders: Mạng nơ-ron học cách nén dữ liệu qua một tầng nút cổ chai (bottleneck embedding) rồi giải mã tái tạo lại dữ liệu gốc.
- Ladder Networks: Kết hợp giải mã khử nhiễu (Denoising) và phân loại nhãn, giúp đạt độ chính xác gần như tuyệt đối chỉ với vài mẫu có nhãn mỗi lớp.
7.9. Học Một Lần (One-Shot Learning) & Mạng Siamese
Áp dụng trong Nhận diện khuôn mặt (mở khóa điện thoại bằng FaceID) — hệ thống chỉ cần 1 bức ảnh khuôn mặt của bạn để nhận diện và xác thực:
-
Sử dụng Mạng Nơ-ron Siamese (Siamese Neural Network) được huấn luyện với Hàm mất mát Triplet (Triplet Loss) trên bộ 3 hình ảnh: Anchor ($A$), Positive ($P$) (cùng người với $A$) và Negative ($N$) (khác người): $$\mathcal{L} = \max\left( \|f(A) - f(P)\|^2 - \|f(A) - f(N)\|^2 + \alpha, 0 \right)$$
-
Mô hình học cách kéo biểu diễn nhúng của $A$ và $P$ lại gần nhau, đồng thời đẩy xa biểu diễn của $N$ một khoảng tối thiểu $\alpha$.
7.10. Học Không Cần Mẫu (Zero-Shot Learning - ZSL)
Mô hình có khả năng dự đoán chính xác các nhãn chưa từng xuất hiện trong dữ liệu huấn luyện.
- Nguyên lý: Ánh xạ nhãn đầu ra vào Không gian Nhúng Từ (Word Embeddings) — nơi các khái niệm ngữ nghĩa được số hóa thành các thuộc tính (ví dụ: có sọc, là động vật có vú, màu cam).
- Nếu mô hình đã học được các thuộc tính từ Ngựa vằn (có sọc, động vật) và Cá hề (màu cam, có sọc), khi gặp ảnh Hổ (dù chưa từng huấn luyện nhãn "hổ"), mô hình vẫn nhận diện được các đặc trưng ngữ nghĩa và ghép đúng với từ nhúng "Hổ".
08Chương 8: Thực hành Nâng cao (Advanced Practice)
Chương này tập hợp các kỹ thuật chuyên sâu áp dụng trong những tình huống thực tế đặc thù, giúp nâng cao hiệu năng, độ chính xác và tính ổn định của hệ thống học máy.
8.1. Xử lý Dữ liệu Mất Cân Bằng (Handling Imbalanced Datasets)
Cái bẫy “99% chính xác” và cách SMOTE gỡ nó
Bật SMOTE và nhìn ranh giới dịch chuyểnViệc cần làm: ① Tắt SMOTE, hạ số mẫu thiểu số xuống 8. Nhìn hai con số cạnh nhau: độ chính xác vẫn rất cao trong khi recall gần bằng 0. Một mô hình chỉ cần trả lời “không” cho tất cả mọi người là đã đạt 95% chính xác. ② Bật SMOTE: các chấm vàng mờ xuất hiện trên đoạn thẳng nối các mẫu hiếm với nhau — đó chính là phép nội suy của thuật toán. ③ Bài học lớn nhất của chương này: với dữ liệu mất cân bằng, đừng bao giờ báo cáo accuracy. Hãy dùng F1, hoặc AUC-PR.
Trong nhiều bài toán thực tế (như phát hiện gian lận thẻ tín dụng, chẩn đoán bệnh hiếm), số lượng mẫu của lớp tích cực (gian lận/mắc bệnh) chiếm tỷ lệ cực kỳ nhỏ so với lớp tiêu cực. Nếu không xử lý, mô hình sẽ có xu hướng dự đoán toàn bộ là lớp đa số để tối thiểu hóa sai số tổng quát.
Các Giải pháp Khắc phục:
- Gán Trọng số Lớp (Class Weighting / Cost-Sensitive Learning): Thiết lập chi phí phạt khi phân loại sai lớp thiểu số cao hơn nhiều so với lớp đa số (được hỗ trợ sẵn trong SVM, Random Forest, XGBoost, v.v.).
- Lấy mẫu Thiếu (Undersampling): Loại bỏ ngẫu nhiên một phần các mẫu thuộc lớp đa số để cân bằng tỷ lệ.
- Lấy mẫu Dư (Oversampling): Nhân bản các mẫu thuộc lớp thiểu số.
- Sinh Mẫu Nhân Tạo (Synthetic Sampling):
- SMOTE (Synthetic Minority Over-sampling Technique): Với mỗi điểm $\mathbf{x}_i$ thuộc lớp thiểu số, tìm $k$ láng giềng gần nhất cùng lớp và sinh điểm mới bằng phép nội suy tuyến tính: $\mathbf{x}_{\text{new}} = \mathbf{x}_i + \lambda (\mathbf{x}_{zi} - \mathbf{x}_i)$ với $\lambda \in [0, 1]$.
- ADASYN (Adaptive Synthetic Sampling): Tương tự SMOTE nhưng tập trung sinh nhiều mẫu nhân tạo hơn ở các khu vực ranh giới khó phân loại (nơi có nhiều mẫu của lớp đa số bao quanh).
Một ngưỡng, hai loại sai lầm
8.1 · Chi phí sai · 4 phútMột bộ phân loại đã cho điểm trên 24 mẫu validation. Bạn chọn ngưỡng để tổng chi phí báo nhầm và bỏ sót thấp nhất.
- Báo nhầm · FP
- —
- Bỏ sót · FN
- —
- Tổng chi phí
- —
- Recall
- —
Thử thách. Chọn ngưỡng đạt chi phí thấp nhất trên lưới 0,00–1,00, bước 0,01. Sau đó thử tình huống có chi phí đảo ngược.
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
Chi phí = cFP × FP + cFN × FN. Hạ ngưỡng thường bắt thêm lỗi thật, đồng thời tăng báo nhầm. Ngưỡng 0,5 không có đặc quyền tối ưu chi phí.
Dữ liệu này là validation; chốt ngưỡng rồi mới đánh giá trên test độc lập. Điểm mô hình không được giả định là xác suất đã hiệu chuẩn. Đổi ngưỡng không huấn luyện lại mô hình và không thay đổi thứ tự điểm. Chi phí là đơn vị giả lập.
8.2. Kết hợp Mô hình (Combining Models / Stacking & Blending)
Thay vì kết hợp hàng trăm cây yếu như trong Random Forest, ta có thể kết hợp 2 đến 3 mô hình mạnh thuộc các họ thuật toán hoàn toàn khác nhau (ví dụ: kết hợp SVM, Random Forest và Mạng nơ-ron). Điểm mấu chốt là các mô hình này phải không tương quan (uncorrelated) về cơ chế dự đoán.
Ba phương pháp kết hợp phổ biến:
- Lấy Trung bình (Averaging): Dùng cho bài toán hồi quy hoặc lấy trung bình xác suất phân loại.
- Bỏ phiếu Đa số (Majority Voting): Chọn lớp được số đông các mô hình dự đoán.
- Xếp chồng (Stacking / Meta-Learning):
- Sử dụng đầu ra (dự đoán/xác suất) của các mô hình cơ sở làm đặc trưng đầu vào mới cho một mô hình cấp cao hơn gọi là Meta-Model.
- Meta-Model học cách kết hợp thông minh nhất dựa trên điểm mạnh của từng mô hình cơ sở.
8.3. Huấn luyện Mạng Nơ-ron trong Thực tế
8.3.1. Tiền xử lý Đầu vào
- Hình ảnh: Resize về cùng kích thước chuẩn, chuẩn hóa điểm ảnh về đoạn $[0, 1]$.
- Văn bản: Phân tách từ (Tokenization), sử dụng Word Embeddings (như Word2Vec, GloVe, FastText) thay vì one-hot thưa thớt để bảo toàn ngữ nghĩa từ vựng.
8.3.2. Chiến lược Tinh chỉnh Kiến trúc
- Quy tắc bắt đầu đơn giản: Luôn khởi đầu với mạng nhỏ (1–2 tầng ẩn), kiểm tra xem mô hình có thể khớp hoàn hảo tập huấn luyện hay không (đạt Low Bias).
- Mở rộng dần: Nếu chưa khớp, tăng số lượng nơ-ron và tầng ẩn. Khi mô hình đã khớp tốt nhưng bị quá khớp trên tập Validation (High Variance), hãy bổ sung kỹ thuật điều chuẩn (Regularization).
- Lời khuyên thực tế: Đừng tốn quá nhiều thời gian cố gắng tự cài đặt lại các kiến trúc nơ-ron quá mới và phức tạp từ các bài báo khoa học. Trong sản xuất, việc làm sạch dữ liệu, chuẩn hóa đặc trưng và thu thập thêm dữ liệu huấn luyện kết hợp với một kiến trúc mạng ổn định đã được kiểm chứng sẽ mang lại giá trị cao hơn rất nhiều.
8.4. Kỹ thuật Điều chuẩn Nâng cao cho Mạng Nơ-ron
Ngoài điều chuẩn $L_1$ và $L_2$, Mạng nơ-ron sâu sử dụng các kỹ thuật đặc thù:
- Dropout: Trong mỗi lượt huấn luyện, tắt ngẫu nhiên một tỷ lệ nơ-ron (ví dụ: $p = 0.5$). Điều này ngăn các nơ-ron "đồng thích nghi" (co-adaptation) và buộc mỗi nơ-ron phải tự học các đặc trưng độc lập hữu ích.
- Chuẩn hóa theo Lô (Batch Normalization): Chuẩn hóa phân phối đầu ra của mỗi tầng ẩn về trung bình 0 và phương sai 1 trước khi truyền sang tầng tiếp theo. Giúp huấn luyện ổn định, cho phép tăng tốc độ học và có tác dụng điều chuẩn nhẹ.
- Dừng Sớm & Điểm Lưu (Early Stopping & Checkpoints): Lưu lại trọng số của mô hình sau mỗi Epoch. Khi nhận thấy sai số trên tập Validation bắt đầu tăng liên tiếp qua vài epoch (dấu hiệu của quá khớp), tiến hành dừng huấn luyện và khôi phục lại trạng thái tốt nhất.
- Tăng cường Dữ liệu (Data Augmentation): Tự động tạo thêm các biến thể dữ liệu mới từ dữ liệu gốc (đối với ảnh: xoay góc, lật ngang, phóng to/thu nhỏ, thay đổi độ sáng) giúp mở rộng dữ liệu và chống quá khớp hiệu quả.
Dropout: một mạng, hàng nghìn mạng con
Mỗi lô dữ liệu là một kiến trúc khác nhauViệc cần làm: ① Bấm Chạy liên tục khoảng 20 giây và nhìn ô “Kiến trúc khác nhau” tăng lên. ② Với 10 nơ-ron ẩn, số mạng con khả dĩ là $2^{10} = 1024$. Với một mạng thật có hàng nghìn nơ-ron, con số đó lớn hơn số nguyên tử trong vũ trụ quan sát được. ③ Điểm mấu chốt: dropout chỉ bật khi huấn luyện. Lúc suy luận, mọi nơ-ron được bật lại và đầu ra bị nhân với $(1-p)$ để bù cho việc giờ đây có nhiều tín hiệu hơn.
8.5. Xử lý Đa Đầu vào (Multimodal Inputs) & Đa Đầu ra (Multimodal Outputs)
- Đa Đầu vào: Khi mô hình nhận đồng thời cả ảnh và văn bản, ta xây dựng hai mạng con riêng biệt (CNN cho ảnh, RNN/Transformer cho chữ), trích xuất thành hai vectơ embedding rồi ghép nối (concatenate) lại trước khi đưa vào tầng phân loại chung.
- Đa Đầu ra: Trong các bài toán như Nhận diện và Định vị vật thể (Object Detection), mô hình phải vừa xuất tọa độ hình hộp chữ nhật (hồi quy - MSE, $C_1$) vừa xuất nhãn vật thể (phân loại - Cross-Entropy, $C_2$). Hàm mất mát tổng thể được kết hợp theo trọng số: $\alpha C_1 + (1 - \alpha) C_2$.
8.6. Học Chuyển Giao (Transfer Learning)
Transfer Learning là một trong những lợi thế lớn nhất của Deep Learning:
- Lấy một mô hình lớn đã được huấn luyện sẵn trên tập dữ liệu khổng lồ (như ResNet, VGG huấn luyện trên hàng triệu ảnh ImageNet).
- Giữ nguyên và đóng băng (freeze) toàn bộ các tầng trích xuất đặc trưng phía trước.
- Thay thế tầng phân loại cuối cùng bằng các tầng mới phù hợp với bài toán của bạn, và chỉ huấn luyện các tầng mới này trên tập dữ liệu nhỏ sẵn có.
- Giúp tiết kiệm chi phí tính toán khổng lồ và đạt độ chính xác rất cao ngay cả khi có rất ít dữ liệu gán nhãn.
8.7. Hiệu năng Thuật toán & Tối ưu hóa Mã nguồn Python
- Độ phức tạp tính toán (Big-O): Phân tích thời gian chạy và bộ nhớ ($O(N)$ so với $O(N^2)$).
- Vectơ hóa (Vectorization): Tuyệt đối tránh sử dụng vòng lặp
forthủ công trong Python khi tính toán đại số tuyến tính. Luôn sử dụng các phép toán mảng của NumPy (numpy.dot(w, x)), được tối ưu hóa bằng C và thư viện BLAS/LAPACK dưới tầng hệ thống. - Cấu trúc Dữ liệu Phù hợp: Sử dụng
setvàdict(Hashmap) cho các thao tác kiểm tra phần tử tồn tại ($O(1)$) thay vìlist($O(N)$). - Bộ nhớ & Đo lường: Dùng
generatorkhi duyệt dữ liệu lớn, dùngcProfileđể tìm nút thắt hiệu năng (bottleneck), và dùngmultiprocessinghoặc biên dịch JIT vớiNumbakhi cần tăng tốc tối đa.
09Chương 9: Học Không Giám Sát (Unsupervised Learning)
Học không giám sát xử lý các bài toán trên tập dữ liệu hoàn toàn không có nhãn $\{\mathbf{x}_i\}_{i=1}^N$. Ba nhóm bài toán kinh điển gồm: Ước lượng Mật độ (Density Estimation), Phân cụm (Clustering) và Giảm số chiều (Dimensionality Reduction).
9.1. Ước lượng Mật độ Kernel (Kernel Density Estimation - KDE)
Ước lượng mật độ là bài toán xấp xỉ hàm mật độ xác suất chưa biết $f(\mathbf{x})$ từ tập dữ liệu mẫu quan sát được.
Mô hình KDE ước lượng $\hat{f}_b(\mathbf{x})$ bằng cách đặt một hàm Kernel Gaussian lên từng điểm dữ liệu:
$$\hat{f}_b(\mathbf{x}) = \frac{1}{N b^D} \sum_{i=1}^N k\left(\frac{\mathbf{x} - \mathbf{x}_i}{b}\right)$$
- $b > 0$ là siêu tham số băng thông (bandwidth) điều khiển độ mượt.
- Để tìm giá trị $b^*$ tối ưu nhằm cực tiểu hóa sai số tích phân bình phương trung bình (MISE - Mean Integrated Squared Error), ta áp dụng kỹ thuật ước lượng loại trừ từng mẫu (Leave-One-Out Estimation) kết hợp tìm kiếm theo lưới (Grid Search).
9.2. Phân Cụm Dữ Liệu (Clustering)
9.2.1. Thuật toán k-Means
k-Means từng nửa bước — và cái bẫy cực tiểu cục bộ
Bấm “1 nửa bước” để tách riêng hai giai đoạnViệc cần làm: ① Bấm 1 nửa bước liên tiếp và đọc ô “Giai đoạn”: thuật toán chỉ có hai động tác lặp đi lặp lại. ② Đổi sang Cố tình xấu rồi chạy tới khi hội tụ: các tâm mắc kẹt, một cụm thật bị bỏ rơi hoàn toàn. Quán tính vẫn “hội tụ” nhưng kết quả sai. Đó là lý do scikit-learn mặc định chạy k-Means 10 lần với 10 hạt giống rồi giữ lần tốt nhất. ③ Kéo k = 2 và k = 5 trên cùng dữ liệu 4 cụm: thuật toán luôn trả về đúng k cụm bạn yêu cầu, kể cả khi con số đó vô nghĩa. Nó không bao giờ nói cho bạn biết k đúng là bao nhiêu.
Là thuật toán phân cụm dựa trên tâm cụm (Centroid-based) phổ biến nhất:
- Chọn trước số cụm $k$ và khởi tạo ngẫu nhiên $k$ tọa độ tâm cụm (centroids).
- Gán cụm: Gán mỗi điểm dữ liệu $\mathbf{x}_i$ vào tâm cụm gần nó nhất (theo khoảng cách Euclid).
- Cập nhật tâm cụm: Tính lại tọa độ tâm cụm bằng trung bình cộng của tất cả các điểm thuộc cụm đó.
- Lặp lại bước 2 và 3 cho đến khi vị trí các tâm cụm hội tụ (không đổi).
Đặc điểm: Rất nhanh, nhưng chỉ tạo ra các ranh giới cụm dạng hình cầu (hyperspheres) và nhạy cảm với khởi tạo ban đầu.
9.2.2. DBSCAN và HDBSCAN (Phân cụm Dựa trên Mật độ)
- DBSCAN: Nhóm các điểm dữ liệu nằm trong các vùng có mật độ cao và tách biệt chúng khỏi các vùng mật độ thấp (nhiễu/ngoại lai).
- Hai siêu tham số: Bán kính lân cận $\epsilon$ và số điểm tối thiểu $n$ để tạo thành vùng lõi.
- Ưu điểm: Phát hiện cụm có hình dạng bất kỳ (hình vòng cung, xoắn ốc) và tự động nhận diện điểm bất thường (outliers).
- HDBSCAN (Hierarchical DBSCAN): Cải tiến vượt bậc của DBSCAN, loại bỏ nhu cầu chọn $\epsilon$ cố định, cho phép tìm các cụm có mật độ biến thiên khác nhau và chỉ cần thiết lập siêu tham số trực quan $n$ (kích thước cụm tối thiểu).
DBSCAN: phân cụm theo mật độ, không cần biết trước số cụm
Hai vành khuyên lồng nhau — thử thách mà k-Means thuaViệc cần làm: ① Với ε = 0.8, DBSCAN tìm đúng 2 cụm — hai vành khuyên lồng nhau. Hãy tưởng tượng k-Means làm gì ở đây: hai vành có cùng một trọng tâm, nên mọi phép chia theo khoảng cách tới tâm đều vô nghĩa. ② Kéo ε lên 1.8: hai vành dính làm một. Kéo về 0.3: tất cả thành nhiễu. ③ Ba ưu điểm DBSCAN có mà k-Means không: không cần biết trước k, tìm được cụm hình dạng bất kỳ, và tự nhận diện nhiễu thay vì ép mọi điểm vào một cụm nào đó.
9.2.3. Xác định Số Cụm $k$ Tối Ưu
- Phương pháp Sức mạnh Dự đoán (Predictive Strength): Chia tập dữ liệu thành Train và Test. So sánh tính nhất quán giữa phép phân cụm trên tập Test khi gán theo tâm cụm tập Train. Chọn $k$ lớn nhất sao cho $ps(k) > 0.8$.
- Các phương pháp phổ biến khác: Phương pháp điểm khuỷu tay (Elbow Method), Hệ số bóng bóng (Silhouette Score), và Gap Statistic.
9.2.4. Mô hình Hỗn hợp Gaussian (Gaussian Mixture Model - GMM) & Thuật toán EM
GMM thực hiện phân cụm mềm (Soft Clustering): Mỗi điểm dữ liệu thuộc về cụm $j$ với một xác suất $b_i^{(j)} \in [0, 1]$.
Mật độ xác suất tổng thể là tổng có trọng số của $k$ phân phối chuẩn nhiều chiều:
$$f(\mathbf{x}) = \sum_{j=1}^k \pi_j \mathcal{N}\left(\mathbf{x} \mid \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j\right)$$
Thuật toán Kỳ vọng - Cực đại hóa (Expectation-Maximization - EM) tối ưu hóa các tham số:
- E-Step (Kỳ vọng): Tính xác suất (trách nhiệm) mỗi điểm thuộc về từng cụm Gaussian dựa trên Định lý Bayes.
- M-Step (Cực đại hóa): Cập nhật lại trọng số $\pi_j$, tâm $\boldsymbol{\mu}_j$ và ma trận hiệp phương sai $\boldsymbol{\Sigma}_j$ bằng trung bình có trọng số.
- Ưu điểm: Ma trận hiệp phương sai $\boldsymbol{\Sigma}_j$ cho phép các cụm có hình dạng elip xoay và kéo dài tùy ý.
KDE và GMM: mật độ là tổng các quả chuông
Kéo để xoay · bấm một điểm trên bản đồ để xem riêng quả chuông của nó—
Việc cần làm: ① Ở chế độ KDE, kéo $b$ về 0,16: mặt mật độ mọc 34 cái gai — mỗi điểm dữ liệu một gai, ước lượng chỉ thuộc lòng mẫu. Kéo lên 2,0: chỉ còn một đỉnh, ba cụm biến mất. Bấm b tốt nhất (bỏ-một): tiêu chí quét lưới của sách chọn $b = 0{,}40$ — nhưng mặt vẫn có 6 đỉnh chứ không phải 3: bỏ-một tối ưu độ khớp mật độ, không tối ưu “số cụm”. ② Bấm một điểm trên bản đồ: chuông xanh là đóng góp thật của điểm đó, chỉ cao $1/n$ — 96 chuông như vậy cộng lại mới thành mặt bạn đang nhìn. ③ Đổi sang GMM với $k = 3$ và bấm 1 vòng EM nhiều lần: màu mỗi điểm là trách nhiệm $r_{ij}$ trộn lại (E-step), rồi elip dời và co giãn theo đúng những màu ấy (M-step). Log-likelihood tăng mỗi vòng và đứng lại sau khoảng 12 vòng ở $\approx -293$ với $\pi \approx 0{,}42 : 0{,}27 : 0{,}31$ — khớp ba cụm thật (40, 26, 30 điểm). ④ Bấm Khởi tạo lại rồi chạy 20 vòng vài lần: có lần EM dừng ở $\approx -323$ với một chuông ôm hai cụm — cực đại cục bộ. Chọn $k = 4$: log-likelihood còn cao hơn $k = 3$ dù dữ liệu chỉ có ba cụm, vì chuông thứ tư chẻ đôi một cụm hoặc bị ép rất nhỏ; log-likelihood luôn có lợi cho $k$ lớn, nên không thể dùng nó để chọn $k$ (xem mục 9.2.3).
9.3. Giảm Số Chiều Dữ Liệu (Dimensionality Reduction)
Mục đích: Trực quan hóa dữ liệu nhiều chiều lên không gian 2D/3D, loại bỏ đặc trưng dư thừa/tương quan cao, nén dữ liệu và giảm nhiễu.
9.3.1. Phân tích Thành phần Chính (Principal Component Analysis - PCA)
PCA: xoay trục cho tới khi dữ liệu trải rộng nhất
Kéo góc xoay và nhìn phần trăm phương sai giữ lạiViệc cần làm: ① Kéo góc về 90° so với trục tối ưu: các chấm vàng ở bảng dưới chồng chất lên nhau — hàng chục mẫu vốn khác biệt nay có cùng một toạ độ. Đó là thông tin bị huỷ. ② Bấm Nhảy tới trục tối ưu: cùng số chiều đầu ra (1), nhưng các chấm trải đều. ③ Đó chính là toàn bộ PCA — không phải “vứt bớt cột dữ liệu”, mà là xoay hệ trục rồi mới vứt. ④ Lưu ý bắt buộc: PCA cực kỳ nhạy với thang đo, nên luôn chuẩn hoá đặc trưng trước khi chạy PCA.
- Tìm hệ trục tọa độ trực giao mới sao cho trục thứ nhất (Thành phần chính 1) hướng theo chiều có phương sai dữ liệu lớn nhất; trục thứ hai trực giao với trục thứ nhất và có phương sai lớn thứ hai, v.v.
- Chiếu dữ liệu lên $D_{\text{new}}$ thành phần chính đầu tiên để giữ lại phần lớn thông tin biến thiên của dữ liệu gốc.
PCA trong 3D: nghiêng một mặt phẳng, nhìn bóng của đám mây — rồi thử với cuộn Thuỵ Sĩ
Kéo để xoay · hai thanh trượt nghiêng mặt phẳng chiếu—
Việc cần làm: ① Bộ ellipsoid: kéo hai thanh góc cho tới khi Phương sai giữ lại tụt xuống thấp nhất — khoảng 17%, khi pháp tuyến trùng trục dài nhất của đám mây: bóng bẹp dí, những điểm vốn xa nhau chồng lên nhau. Đó là thông tin bị huỷ. ② Bấm Nhảy tới mặt phẳng PCA: 97,2% (λ = 10,9 : 1,9 : 0,4). Nhìn sang bóng: hai trục của nó chính là PC1, PC2 và toạ độ chính là điểm số thành phần chính. ③ Bật đường gióng rồi so mặt phẳng PCA với một mặt phẳng bất kỳ: PCA cũng là mặt phẳng làm tổng bình phương độ dài các đoạn gióng nhỏ nhất — “giữ nhiều phương sai nhất” và “gần dữ liệu nhất” là cùng một điều. ④ Đổi sang cuộn Thuỵ Sĩ và bấm Nhảy tới PCA: giữ 86% phương sai mà bóng chỉ là cuộn nhìn từ trên xuống — PCA vứt đúng trục độ cao, một trong hai toạ độ thật của tấm; hai vòng kề nhau cách nhau 6 đơn vị trong bóng nhưng 50–70 đơn vị dọc theo tấm. Bấm Trải phẳng để thấy hình mà chỉ các phương pháp phi tuyến ở mục 9.3.2–9.3.3 (UMAP, t-SNE, autoencoder) mới tìm được.
9.3.2. UMAP (Uniform Manifold Approximation and Projection) & t-SNE
- Là các thuật toán giảm chiều phi tuyến tính hiện đại nhất dành cho trực quan hóa dữ liệu.
-
Xây dựng đồ thị đo độ tương đồng giữa các điểm trong không gian nhiều chiều gốc ($w$) và tối ưu hóa vị trí các điểm trong không gian 2D/3D ($w'$) bằng Gradient Descent sao cho hàm mất mát Cross-Entropy giữa hai phân phối xác suất là nhỏ nhất: $$C(w, w') = \sum_{i=1}^N \sum_{j=1}^N \left[ w_{ij} \ln \frac{w_{ij}}{w'_{ij}} + (1 - w_{ij}) \ln \frac{1 - w_{ij}}{1 - w'_{ij}} \right]$$
-
Tách biệt các cụm trực quan rõ rệt hơn nhiều so với PCA.
9.3.3. Autoencoders
Mạng nơ-ron sâu nén dữ liệu qua một tầng nút cổ chai (Bottleneck layer). Đầu ra của tầng nút cổ chai chính là biểu diễn thu gọn ít chiều mang thông tin cốt lõi của mẫu đầu vào.
9.4. Phát hiện Điểm Bất thường (Outlier Detection)
- Dùng Autoencoder: Huấn luyện Autoencoder trên dữ liệu bình thường. Khi đưa một điểm ngoại lai vào, mô hình sẽ không thể tái tạo chính xác điểm đó $\rightarrow$ sai số tái tạo $\|\mathbf{x} - \hat{\mathbf{x}}\|^2$ vượt ngưỡng sẽ được gắn cờ là bất thường.
- Dùng One-Class Classification: Phân loại một lớp (Gaussian, One-Class SVM) tạo ranh giới bao quanh vùng dữ liệu tập trung.
10Chương 10: Các Dạng Học Máy Khác (Other Forms of Learning)
Trong chương này, chúng ta sẽ tìm hiểu 4 dạng bài toán học máy hiện đại có ứng dụng thương mại khổng lồ nhưng không hoàn toàn thuộc về các mô hình phân loại hay hồi quy truyền thống.
10.1. Học Thước đo Khoảng cách (Metric Learning)
Các thuật toán như k-NN hay k-Means phụ thuộc trực tiếp vào hàm đo khoảng cách (như khoảng cách Euclid). Tuy nhiên, khoảng cách Euclid mặc định coi mọi đặc trưng đều có tầm quan trọng như nhau, điều này hiếm khi đúng trong thực tế.
Học thước đo khoảng cách là kỹ thuật tự động học một ma trận tham số $\mathbf{A}$ từ dữ liệu để định nghĩa một hàm khoảng cách tối ưu riêng (Khoảng cách Mahalanobis):
$$d_{\mathbf{A}}(\mathbf{x}, \mathbf{x}') = \sqrt{(\mathbf{x} - \mathbf{x}')^T \mathbf{A} (\mathbf{x} - \mathbf{x}')}$$
- Ma trận $\mathbf{A}$ phải đối xứng nửa xác định dương (Positive Semidefinite - PSD) để biểu thức dưới căn không âm và thỏa bất đẳng thức tam giác. Nếu $\mathbf{A}$ suy biến, hai điểm khác nhau vẫn có thể có khoảng cách $0$; khi đó đây là một giả khoảng cách (pseudometric). Muốn khoảng cách bằng $0$ chỉ khi hai điểm trùng nhau trong toàn không gian, cần $\mathbf{A}$ xác định dương.
- Mục tiêu tối ưu: Tìm $\mathbf{A}$ sao cho khoảng cách giữa các cặp mẫu tương đồng ($\mathcal{S}$) là nhỏ nhất, đồng thời khoảng cách giữa các cặp mẫu khác biệt ($\mathcal{D}$) phải lớn hơn một ngưỡng an toàn $c$: $$\min_{\mathbf{A} \succeq 0} \sum_{(\mathbf{x}_i, \mathbf{x}_k) \in \mathcal{S}} \|\mathbf{x}_i - \mathbf{x}_k\|_{\mathbf{A}}^2 \quad \text{thỏa mãn} \quad \sum_{(\mathbf{x}_i, \mathbf{x}_k) \in \mathcal{D}} \|\mathbf{x}_i - \mathbf{x}_k\|_{\mathbf{A}} \ge c$$
10.2. Học Xếp Hạng (Learning to Rank - LTR)
Học xếp hạng là bài toán cốt lõi trong các công cụ tìm kiếm (Search Engines như Google) và các hệ thống thương mại điện tử: Cho một truy vấn $q$, sắp xếp danh sách các tài liệu trả về theo thứ tự độ liên quan giảm dần.
Ba Cách Tiếp Cận Chính:
- Pointwise Approach: Dự đoán độc lập điểm số liên quan cho từng tài liệu (dùng hồi quy hoặc phân loại). Nhược điểm: Bỏ qua mối quan hệ tương quan và thứ tự giữa các tài liệu trong cùng một danh sách kết quả.
- Pairwise Approach: Xét từng cặp tài liệu $(\mathbf{x}_i, \mathbf{x}_k)$ và huấn luyện bộ phân loại nhị phân dự đoán xem $\mathbf{x}_i$ có nên xếp trên $\mathbf{x}_k$ hay không.
- Listwise Approach: Xem xét danh sách kết quả của một truy vấn khi thiết kế mục tiêu học. Các thước đo đánh giá thường dùng là MAP (Mean Average Precision) hoặc NDCG (Normalized Discounted Cumulative Gain); mục tiêu huấn luyện thường là một hàm thay thế vì các thước đo theo thứ hạng không khả vi trực tiếp theo điểm số.
- LambdaMART: Kết hợp cây Gradient Boosting với các tín hiệu cập nhật $\lambda$ tính từ cặp tài liệu và được điều chỉnh theo mức thay đổi thước đo như NDCG khi đổi chỗ hai tài liệu. Thuật toán kết nối cập nhật theo cặp với chất lượng cả danh sách; không đơn giản là lấy đạo hàm trực tiếp của NDCG.
Sắp kết quả tìm kiếm
10.2 · Xếp hạng · 4 phútTruy vấn: “học gradient descent”. Dùng nút lên/xuống để đưa các tài liệu liên quan nhất vào 3 vị trí đầu.
- NDCG@3
- —
- DCG@3
- —
- DCG lý tưởng
- —
Độ liên quan do người đánh giá cung cấp: 3 = rất sát câu hỏi, 2 = hữu ích, 1 = liên quan ít, 0 = không liên quan.
Cột “góp điểm” giảm theo vị trí. Vị trí 4 và 5 không được tính trong @3.
Thử thách. Đạt NDCG@3 = 1. Sau đó hoán đổi hai kết quả cuối và xem thước đo có thay đổi không.
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
Lab dùng quy ước gain tuyến tính: DCG@3 = Σ relᵢ / log₂(i + 1) với i bắt đầu từ 1. NDCG chia DCG cho DCG của thứ tự lý tưởng. Một quy ước khác dùng gain 2rel − 1; cần thống nhất quy ước khi so sánh.
Đưa tài liệu liên quan xuống dưới làm mất nhiều điểm hơn nếu nó vốn rất liên quan. Đây là bài thực hành thước đo xếp hạng; không mô phỏng quá trình huấn luyện LambdaMART.
10.3. Hệ thống Gợi ý (Learning to Recommend)
Gợi ý nội dung/sản phẩm mới cho người dùng (ví dụ: phim trên Netflix, sản phẩm trên Amazon).
10.3.1. Lọc Dựa trên Nội dung (Content-Based) vs. Lọc Cộng tác (Collaborative Filtering)
-
Content-Based Filtering: Gợi ý các sản phẩm có thuộc tính tương tự những sản phẩm người dùng từng thích trong quá khứ.
Hạn chế: Dễ khiến người dùng rơi vào "bong bóng lọc" (Filter Bubble), chỉ nhìn thấy những gì họ đã biết. -
Collaborative Filtering: Gợi ý dựa trên hành vi của cộng đồng người dùng tương đồng. Nếu User A và User B có cùng sở thích đối với 10 bộ phim, các bộ phim User B thích tiếp theo sẽ được gợi ý cho User A.
10.3.2. Máy Phân Rã Nhân Tử (Factorization Machines - FM)
Trong ma trận tương tác Người dùng - Vật phẩm (User-Item Matrix), dữ liệu cực kỳ thưa thớt (sparse) vì mỗi người chỉ đánh giá một phần rất nhỏ trong hàng triệu sản phẩm.
Factorization Machines giải quyết bài toán này bằng cách mô hình hóa tương tác giữa từng cặp đặc trưng $x_i x_j$ thông qua tích vô hướng của hai vectơ nhân tử ẩn $\mathbf{v}_i, \mathbf{v}_j \in \mathbb{R}^k$ ($k \ll D$):
$$f(\mathbf{x}) = b + \sum_{i=1}^D w_i x_i + \sum_{i=1}^D \sum_{j=i+1}^D (\mathbf{v}_i \cdot \mathbf{v}_j) x_i x_j$$
Nhờ phân rã trọng số tương tác $w_{ij}$ thành $\mathbf{v}_i \cdot \mathbf{v}_j$, số lượng tham số giảm ngoạn mục từ $O(D^2)$ xuống chỉ còn $O(D \cdot k)$, giúp mô hình hóa xuất sắc trên các tập dữ liệu thưa thớt khổng lồ.
Điền ô trống bằng sở thích ẩn
10.3 · Gợi ý · 5 phútChỉ 9 trong 12 ô có đánh giá. Học hai vectơ ẩn cho mỗi người và mỗi phim, rồi dùng tích vô hướng để dự đoán các ô chưa biết.
| Người | Phim 1 | Phim 2 | Phim 3 | Phim 4 |
|---|
- Bước gradient
- —
- RMSE ô có nhãn
- —
- Mục tiêu có L₂
- —
- Ô tham gia loss
- —
Thử thách. Huấn luyện ít nhất 50 bước với cách xử lý đúng. Vì sao ô chưa đánh giá phải được bỏ khỏi loss?
Thử thao tác, rồi kiểm tra để nhận phản hồi.
Gợi ý & điều cần nhớ
r̂ᵤᵢ = 3 + u₁v₁ + u₂v₂. Đây là phân rã ma trận hạng 2, trường hợp riêng của FM khi chỉ có hai đặc trưng one-hot người và phim, với bias chung cố định bằng 3. Mỗi bước cập nhật đồng thời các vectơ bằng gradient batch; λ = 0,01.
Loss = ½ × MSE trên các ô tham gia + ½λΣ‖vectơ‖². RMSE chỉ đo 9 ô thực sự có nhãn. Điền 0 ép mô hình học thêm 3 nhãn tự bịa. Đổi cách xử lý sẽ khởi tạo lại để so sánh công bằng.
Các ô chưa biết không có đáp án thật trong lab. RMSE train giảm không chứng minh gợi ý đúng. Dự đoán chưa được chặn về [1, 5]; cần đánh giá ngoài mẫu và xử lý người/phim mới khi triển khai.
10.3.3. Denoising Autoencoders (DAE) cho Gợi ý
Xem các sản phẩm mới mà người dùng có thể thích như là phần dữ liệu bị "khuyết" do quá trình làm nhiễu. DAE được huấn luyện để tái tạo lại toàn bộ danh sách sản phẩm đầy đủ từ danh sách đã bị ẩn một phần.
10.4. Học Tự Giám Sát (Self-Supervised Learning) & Word Embeddings (Word2Vec)
Học tự giám sát là bước đột phá cho phép mô hình tự động trích xuất các cặp dữ liệu và nhãn từ kho dữ liệu văn bản phi cấu trúc khổng lồ mà không cần con người phải gán nhãn thủ công.
Kiến trúc Word2Vec (Mô hình Skip-Gram)
- Ý tưởng cốt lõi (Giả thuyết Phân phối - Distributional Hypothesis): Các từ xuất hiện trong những ngữ cảnh tương tự nhau thường có ngữ nghĩa tương đồng nhau ("You shall know a word by the company it keeps").
- Cơ chế Skip-Gram: Lấy một từ trung tâm (ví dụ:
"book"), mô hình học cách dự đoán các từ ngữ cảnh xuất hiện xung quanh nó trong một cửa sổ kích thước $C$ (ví dụ:"reading","machine","learning"). - Trích xuất Vectơ Nhúng (Word Embedding): Đầu vào là biểu diễn One-hot của từ trung tâm, tầng ẩn tuyến tính ($300$ nơ-ron) không dùng hàm kích hoạt. Trọng số kết nối của tầng này chính là Vectơ Nhúng Từ mang đầy đủ thông tin hình học và ngữ nghĩa của từ vựng.
- Kỹ thuật Tối ưu Hóa: Để tránh tính toán hàm Softmax đắt đỏ trên từ điển hàng trăm nghìn từ, Word2Vec sử dụng Negative Sampling (Lấy mẫu âm tính) hoặc Hierarchical Softmax (Softmax phân cấp theo cây nhị phân).
Skip-gram: văn bản tự sinh nhãn cho chính nó
Bấm vào bất kỳ từ nào để đặt nó làm trung tâmViệc cần làm: ① Bấm Trượt hết câu: chỉ một câu 11 từ đã sinh ra hàng chục cặp huấn luyện — miễn phí, không cần ai gán nhãn. ② Kéo cửa sổ từ 1 lên 4 và để ý số cặp tăng vọt. ③ Đây là ý tưởng đã sinh ra toàn bộ NLP hiện đại: BERT che một từ rồi bắt mô hình đoán lại; GPT che nửa sau câu rồi bắt đoán từ tiếp theo. Cùng một mẹo, quy mô lớn hơn hàng triệu lần.
11Chương 11: Tổng kết & Những Chân trời Mở rộng (Conclusion)
Bạn đã hoàn thành một hành trình đáng kinh ngạc! Việc nắm bắt được toàn bộ nội dung trong cuốn sách này đã trang bị cho bạn một nền tảng vững chắc và toàn diện để trở thành một Kỹ sư Machine Learning hay Nhà phân tích Dữ liệu hiện đại.
Trong phần kết này, tác giả điểm qua 7 chủ đề nâng cao quan trọng mà bạn có thể tiếp tục nghiên cứu để mở rộng tầm nhìn chuyên môn:
11.1. Mô hình Hóa Chủ đề (Topic Modeling - Thuật toán LDA)
Trong phân tích văn bản tự nhiên (NLP), mô hình hóa chủ đề là bài toán học không giám sát nhằm tự động phát hiện các chủ đề ẩn (latent topics) xuyên suốt một tập hợp tài liệu lớn.
- Thuật toán LDA (Latent Dirichlet Allocation): Giả định mỗi tài liệu là một hỗn hợp của nhiều chủ đề, và mỗi chủ đề là một phân phối xác suất trên các từ vựng. Thuật toán tự động gán chủ đề cho từng từ trong tập văn bản, cho phép trích xuất cấu trúc ngữ nghĩa tổng quan của kho tài liệu mà không cần gán nhãn thủ công.
11.2. Quá trình Gaussian (Gaussian Processes - GP)
Là phương pháp học có giám sát phi tham số mạnh mẽ dùng cho bài toán hồi quy:
- Không chỉ đưa ra một giá trị dự đoán điểm đơn lẻ, Quá trình Gaussian còn cung cấp khoảng tin cậy xác suất (Confidence Interval / Uncertainty) cho từng điểm dự đoán.
- Rất có giá trị trong các bài toán yêu cầu đo lường độ bất định cao (như tối ưu hóa Bayes, kỹ thuật điều khiển).
11.3. Mô hình Tuyến tính Tổng quát (Generalized Linear Models - GLM)
GLM là sự tổng quát hóa của Hồi quy Tuyến tính để mô hình hóa mối quan hệ giữa các đặc trưng đầu vào và biến mục tiêu tuân theo các họ phân phối xác suất khác nhau (không chỉ riêng phân phối chuẩn Gaussian):
- Hồi quy Logistic là một trường hợp đặc biệt của GLM (phân phối Bernoulli/Nhị thức).
- Hồi quy Poisson (cho dữ liệu đếm số lượng sự kiện), Hồi quy Gamma (cho dữ liệu liên tục luôn dương).
11.4. Mô hình Đồ thị Xác suất (Probabilistic Graphical Models - PGM)
PGM biểu diễn cấu trúc phụ thuộc có điều kiện phức tạp giữa các biến ngẫu nhiên dưới dạng một đồ thị:
- Mỗi nút (node): Đại diện cho một biến ngẫu nhiên (có thể quan sát được hoặc biến ẩn).
- Mỗi cạnh (edge): Đại diện cho mối quan hệ phụ thuộc xác suất có điều kiện. Nếu đồ thị có hướng, ta có thể suy diễn mối quan hệ nhân quả (Causality).
- Các mô hình tiêu biểu:
- Mạng Bayesian (Bayesian Networks) & Mạng niềm tin (Belief Networks).
- Conditional Random Fields (CRF): Từng thống trị xử lý ngôn ngữ tự nhiên trước khi Deep Learning bùng nổ.
- Hidden Markov Models (HMM): Kinh điển trong nhận dạng tiếng nói và xử lý chuỗi thời gian.
11.5. Chuỗi Markov Monte Carlo (Markov Chain Monte Carlo - MCMC)
Khi làm việc với các mô hình đồ thị hoặc thống kê Bayes có phân phối xác suất quá phức tạp (không thể tính tích phân giải tích), ta sử dụng họ thuật toán MCMC để lấy mẫu ngẫu nhiên (sampling) xấp xỉ phân phối hậu nghiệm.
11.6. Thuật toán Di truyền (Genetic Algorithms - GA)
Là phương pháp tối ưu hóa số học mô phỏng theo thuyết tiến hóa sinh học (chọn lọc tự nhiên, lai ghép - crossover, đột biến - mutation):
- Không yêu cầu hàm mục tiêu phải khả vi (không cần tính Gradient).
- Thích hợp để tìm cực trị toàn cục trong các không gian tìm kiếm rời rạc, phi tuyến, có nhiều cực tiểu cục bộ hiểm trở hoặc dùng để tinh chỉnh siêu tham số (Hyperparameter Search).
11.7. Học Tăng Cường (Reinforcement Learning - RL)
Giải quyết bài toán ra quyết định tuần tự (Sequential Decision Making) dài hạn:
- Tác tử (Agent) tương tác liên tục với Môi trường (Environment): Quan sát trạng thái $s$, thực hiện hành động $a$, nhận về phần thưởng $r$ và chuyển sang trạng thái mới $s'$.
- Mục tiêu: Tối đa hóa tổng phần thưởng tích lũy kỳ vọng thông qua các thuật toán như Q-Learning, Deep Q-Networks (DQN), Policy Gradient, PPO.
- Ứng dụng: Điều khiển Robot tự hành, xe tự lái, tối ưu hóa lưới điện, chiến lược giao dịch định lượng (Quantitative Trading), và làm chủ các trò chơi phức tạp (Cờ vua, Go/AlphaGo, Game 3D).
[!TIP]
Cuốn sách dừng lại tại đây, nhưng hành trình học hỏi của bạn chỉ mới bắt đầu. Đừng quên ghé thăm wiki đồng hành của cuốn sách tạitheMLbook.comđể cập nhật liên tục các nghiên cứu và công cụ mới nhất trong thế giới AI/Machine Learning!
Q-learning: tác tử tự dò đường bằng thử và sai
Không có tập dữ liệu gán nhãn — chỉ có phần thưởngViệc cần làm: ① Bấm Học nhanh 260 tập rồi nhìn các mũi tên: một chính sách hoàn chỉnh đã hình thành, né bẫy ☠ và dẫn tới ★. ② Con số nhỏ ở góc mỗi ô là giá trị của ô đó — chú ý nó lan ngược từ đích về, chứ không phải từ điểm xuất phát đi. Đó là phương trình Bellman đang hoạt động. ③ Bấm Quên hết, kéo ε về 0 rồi học lại: tác tử ngừng khám phá, bám cứng lấy lối đi đầu tiên nó tình cờ tìm được, và thường không bao giờ tìm ra đường ngắn nhất. Đó là bài toán khám phá đối chiếu khai thác — trung tâm của mọi thuật toán học tăng cường.