Có nhiều bạn gửi mail hỏi mình về Machine Learning, các bạn thông cảm vì đi làm bận nên không trả lời riêng các bạn, và cũng để mọi người có thể cùng trao đổi mình sẽ post lên đây để mọi người chia sẻ những kiến thức về ML.
Trước tiên mình nêu một số định nghĩa rất quan trọng trong ML.
Định nghĩa học máy
Học máy (hay máy học – Machine learning) là một thành phần quan trọng của trí tuệ nhân tạo nhằm nghiên cứu và phát triển các phương pháp, kỹ thuật giúp cho các hệ thống hay máy tính có khả năng học (Tiến Phong).
Vấn đề quá vừa dữ liệu (Over-fitting)
Thuật ngữ over-fitting ra đời dùng để chỉ một hiện tượng xuất hiện trong quá trình khai phá dữ liệu sử dụng phương pháp học máy. Hiện tượng này gây khó khăn đáng kể cho việc thiết kế, xây dựng hệ thống ngay từ bước chuẩn bị dữ liệu cho đến bước kiểm thử hệ thống. Khi hiện tượng over-fitting xảy ra sẽ làm cho hiệu quả của hệ thống giảm xuống và kết quả thu được từ hệ thống không còn độ tin cậy cao. Có thể định nghĩa hiện tượng over-fitting như sau:
Định nghĩa quá vừa dữ liệu
Một hàm mục tiêu hay một giả thiết học được h, sẽ được gọi là over-fitting (quá vừa dữ liệu) với một tập dữ liệu huấn luyện nếu tồn tại một hàm mục tiêu khác là h’ sao cho:
h’ kém phù hợp hơn, đạt độ chính xác kém hơn so với h trên tập dữ liệu huấn luyện, nhưng h’ lại đạt độ chính xác cao hơn h đối với toàn bộ tập dữ liệu (bao gồm cả tập dữ liệu liệu huấn luyện và tập dữ liệu kiểm tra)
Ví dụ quá vừa dữ liệu
Giả sử gọi D là tập toàn bộ các dữ liệu có thể có, Training_D là tập các dữ liệu huấn luyện
Giả sử Err_D(h) là mức lỗi mà giả thiết h sinh ra đối với tập D, và Err_Training_D(h) là mức lỗi mà giả thiết h sinh ra đối với tập Training_D.
Nếu tồn tại một giả thiết khác là h’ sao cho:
Err_Training_D(h) < Err_Training_D(h’) và
Err_D(h) > Err_D(h’)
Thì khi đó h được coi là quá vừa dữ liệu trên tập huấn luyện Training_D.
Nguyên nhân quá vừa dữ liệu
Vấn đề over-fitting thường do các nguyên nhân:
- Lỗi (nhiễu) trong tập huấn luyện phát sinh trong quá trình thu thập, xây dựng tập dữ liệu.
- Số lượng dữ liệu của tập huấn luyện quá nhỏ, không đại diện cho toàn bộ tập dữ liệu có thể có hay toàn bộ phân bố dữ liệu của bài toán.
Bản chất của học máy dưới góc nhìn của xác suất thống kê.
Có thể mô hình hoá một vấn đề máy học như sau:
Cho một dãy l quan sát: (x1, y1), (x2, y2), … , (xl, yl). Trong đó:
- x1, x2, …, xl là các mẫu, xi Rn. Các mẫu xi được phát sinh ngẫu nhiên theo một hàm phân bố xác suất F(x) nào đó mà ta không biết.
- yi là các kết quả học tương ứng với mẫu xi, yi R. Thường thì y là kết quả của một hàm f(x) nào đó – đơn trị. Tuy nhiên trong trường hợp tổng quát thì y không đơn trị. Do đó y được xác định theo một hàm phân bố điều kiện F(y|x) mà ta cũng không biết.
- Bây giờ cho một mẫu x*, vấn đề của máy học là xác định một hàm f0(x) mà có thể ước lượng tốt nhất giá trị y* tương ứng. Như vậy theo lý thuyết tương quan trong thống kê thì f0(x) tốt nhất theo lý thuyết phải là kỳ vọng của y theo x theo phân bố F(y|x).f0(x) còn được gọi là phương trình hồi quy.
Với x tuân theo phân bố F(x), y tuân theo phân bố có điều kiện F(y|x) thì hàm phân bố của cặp (x, y) là F(x, y) = F(x)F(y|x). Có thể thấy xác suất để có dãy (x1, y1), (x2, y2), … , (xl, yl) là tích F(x1, y1)F(x2, y2)…F(xl, yl).
Tuy nhiên, ở đây ta không biết F(x) lẫn F(y|x) nên không thể xác định chính xác kỳ vọng này. Tất cả dữ liệu mà ta biết chỉ là dãy hữu hạn các mẫu quan sát (x1, y1), (x2, y2), … , (xl, yl). Nhiệm vụ của máy học là xác định chính xác nhất có thể được hàm f0(x) dựa trên các dữ liệu hữu hạn này.
Trong trường hợp khi y R, tức đây là vấn đề hồi quy (regression).
Trong trường hợp bài toán phân lớp (classification) thì y {-1, 1} là trường hợp nhận dạng hai lớp, nếu yi = -1 thì xi thuộc lớp thứ nhất (không được quan tâm), còn yi = 1 thì xi thuộc lớp thứ 2 (lớp được quan tâm)
Một số phương pháp học máy
Trong lĩnh vực học máy có nhiều phương pháp học khác nhau, trong phần này đề cập đến 3 phương pháp học được sử dụng phổ biến nhất, gồm có: học không giám sát, học bán/ nửa giám sát và học có giám sát.
Phương pháp học không giám sát (Unsupervised Learning)
* Khái niệm học không giám sát
Học không giám sát là học với tập dữ liệu huấn luyện ban đầu hoàn toàn chưa được gán nhãn.
Học không giám sát là phương pháp học sử dụng cho lớp bài toán gom cụm, phân cụm (Clustering).
* Nội dung phương pháp học không giám sát
- Để thực hiện phân cụm, trước tiên cần một tập dữ liệu huấn luyện (training dataset) – là một tập các ví dụ học (training examples/instances). Trong đó, mỗi ví dụ học chỉ chứa thông tin biểu diễn (ví dụ: một vector các giá trị thuộc tính), mà không có bất kỳ thông tin gì về nhãn lớp hoặc giá trị đầu ra mong muốn (expected output).
- Áp dụng một thuật toán học không có giám sát (ví dụ k-Means) để học hàm/mô hình mục tiêu (trong trường hợp này là hàm phân cụm ứng với thuật toán được chọn).
- Sử dụng một phương pháp thử nghiệm (có thể kết hợp với một tập dữ liệu có gán nhãn) để đánh giá hiệu năng/chất lượng của hàm mục tiêu học được.
* Một số thuật toán học không giám sát
Có rất nhiều thuật toán học không giám sát được ra đời và phát triển nhằm giải quyết bài toán phân cụm phục vụ khai thác hiệu quả nguồn dữ liệu chưa gán nhãn nhiều và rất đa dạng. Việc lựa chọn sử dụng thuật toán nào tuỳ thuộc vào dữ liệu và mục đích của từng bài toán. Trong đó các thuật toán thường được sử dụng như: k-means, HAC (Hierarchical Agglomerative Clustering), SOM (Self-Organizing Map), DBSCAN, FCM,... (chi tiết các thuật toán này có thể tìm kiếm trên Internet)
Phương pháp học bán giám sát (Semi-Supervised Learning)
Trong thực tế, để có được một tập dữ liệu có chất lượng và đã được gán nhãn của một lĩnh vực, thường được thực hiện thủ công bằng tay bởi người có nhiều kinh nghiệm về lĩnh vực đó. Vì vậy, dữ liệu đã được gán nhãn thường ít và đắt. Trong khi đó, dữ liệu chưa được gán nhãn lại rất nhiều và phong phú. Phương pháp học bán giám sát (hay học nửa giám sát) được đặt ra để tận dụng cả hai nguồn dữ liệu này.
* Khái niệm học bán giám sát
Học bán giám sát là học với tập dữ liệu huấn luyện gồm cả dữ liệu đã được gán nhãn và dữ liệu chưa được gán nhãn.
Tuỳ vào từng mục đích cụ thể, học bán giám sát có thể được áp dụng cho bài toán phân lớp hoặc phân cụm.
* Nội dung phương pháp học bán giám sát
- Nội dung chính của học bán giám sát là hệ thống sử dụng một tập học (training set) gồm 2 phần: các ví dụ học có nhãn, thường với số lượng (rất) ít, và các ví dụ học không có nhãn, thường với số lượng (rất) nhiều. Thực tế cho thấy khi sử dụng kết hợp dữ liệu không có nhãn với một lượng nhất định dữ liệu có nhãn có thể tăng độ chính xác đáng kể.
- Một thuật toán học bán giám sát được sử dụng (ví dụ Self-training) sẽ học các ví dụ có nhãn, sau đó tiến hành gán nhãn cho một số (có lựa chọn) các ví dụ không có nhãn - một cách hợp lý, có đánh giá chất lượng công việc hay độ chính xác. Tiếp theo, chọn các ví dụ vừa được gán nhãn có độ tin cậy cao (vượt trên một ngưỡng chọn trước) đưa vào kết hợp với tập dữ liệu có nhãn, tạo thành một tập dữ liệu huấn luyện mới.
- Áp dụng một phương pháp kiểm thử (có thể kết hợp với một tập dữ liệu đã biết trước nhãn) để đánh giá hiệu năng/độ chính xác của mô hình.
* Một số thuật toán học bán giám sát
Một số thuật toán thường được sử dụng gồm có: thuật toán Cực đại kỳ vọng (EM - Expectation Maximization), SVM truyền dẫn (TSVM - Transductive Support Vector Machine), Self-training, Co-training và các phương pháp dựa trên đồ thị (graph-based).
Việc lựa chọn thuật toán nào dựa trên một số định hướng: nếu các lớp dữ liệu có tính phân cụm cao thì nên dùng EM với mô hình hỗn hợp sinh; nếu đã sử dụng SVM thì mở rộng thành TSVM; khi khó nâng cấp mô hình học có giám sát đã có, thì nên dùng self-training; nếu các đặc trưng của dữ liệu phân chia tự nhiên thành hai phần riêng rẽ thì nên dùng Co-training; còn nếu hai mẫu dữ liệu có đặc trưng tương tự nhau hướng tới một lớp thì sử dụng phương pháp dựa trên đồ thị.
Trong số các thuật toán học bán giám sát thông dụng, có 2 thuật toán tiêu biểu là Self-training và Co-training.
- Thuật toán Self-training:
Self-training là kỹ thuật học bán giám sát được sử dụng khá phổ biến do tận dụng được nguồn dữ liệu chưa gán nhãn lớn và ban đầu chỉ cần lượng nhỏ dữ liệu đã gán nhãn. Nội dung chính của Self-training là lặp nhiều lần phương pháp học có giám sát.
Gọi D: là tập các dữ liệu đã được gán nhãn.
C : là tập các dữ liệu chưa gán nhãn.
Thuật toán Self-training thực hiện như sau:
Lặp (cho đến khi C = Æ):
i. Huấn luyện bộ phân lớp có giám sát h trên tập D
ii. Sử dụng h để phân lớp dữ liệu trong tập C
iii. Tìm tập con C’ Í C có độ tin cậy cao nhất:
D + C’ Þ D ; C – C’ Þ C.
Ban đầu huấn luyện bộ phân lớp bằng cách cho bộ phân lớp học một tập dữ liệu huấn luyện đã được gán nhãn (tập này thường nhỏ so với tập dữ liệu chưa gán nhãn). Dùng bộ phân lớp đã được huấn luyện, phân lớp cho các dữ liệu chưa được gán nhãn. Trong số dữ liệu mới được gán nhãn, chọn các dữ liệu có độ tin cậy cao (lớn hơn một ngưỡng nào đó) kèm với nhãn vừa gán, đem bổ sung vào tập dữ liệu huấn luyện ban đầu. Sau đó, bộ phân lớp được học lại trên tập huấn luyện mới (gồm dữ liệu đã gán nhãn ban đầu và dữ liệu do bộ phân lớp mới gán nhãn) và thuật toán được lặp lại. Sau mỗi vòng lặp, bộ phân lớp sẽ bổ sung một số mẫu dữ liệu có độ tin cậy cao nhất cùng với dự đoán phân lớp của chúng vào tập dữ liệu huấn luyện. Tên gọi Self-training xuất phát từ việc sử dụng dự đoán của nó để huấn luyện chính nó.
- Thuật toán Co-training:
Thuật toán Co-training dựa trên giả thuyết rằng các đặc trưng của tập dữ liệu huấn luyện có thể được phân chia thành 2 tập con (trường hợp lý tưởng là hai tập con này thoả mãn điều kiện độc lập nhau - conditional independent). Nội dung chính của thuật toán như sau:
+ Dùng 2 bộ phân lớp phù hợp để học 2 tập con tương ứng (mỗi tập con huấn luyện một bộ phân lớp).
+ Mỗi bộ phân lớp thực hiện phân lớp cho các dữ liệu chưa gán nhãn, thu được kết quả là tập dữ liệu chưa gán nhãn kèm theo nhãn dự đoán của chúng. Trong tập kết quả của bộ phân lớp 1, chọn ra những mẫu dữ liệu (kèm nhãn đã dự đoán) có độ tin cậy cao nhất bổ sung vào tập huấn luyện của bộ phân lớp 2 và ngược lại.
+ Mỗi bộ phân lớp được học lại tập dữ liệu huấn luyện (gồm dữ liệu gán nhãn ban đầu và dữ liệu gán nhãn mới bổ sung từ kết quả của bộ phân lớp kia). Quá trình được lặp lại cho đến khi tập dữ liệu chưa gán nhãn rỗng hoặc số vòng lặp đạt tới một ngưỡng được xác định trước.
Thuật toán Co-training:
(1). Huấn luyện hai bộ phân lớp: f (1) từ (Xl (1), Yl), f (2) từ (Xl (2), Yl).
(2). Phân lớp các mẫu dữ liệu chưa gán nhãn Xu với f (1) và f (2) tách biệt nhau. (U là tập các mẫu dữ liệu chưa gán nhãn)
(3). Chèn thêm vào f (1) k-most-confident (x, f (1)(x)) tới các dữ liệu đã gán nhãn của f (2).
(4). Chèn thêm vào f (2) k-most-confident (x, f (2) (x)) tới các dữ liệu đã gán nhãn của f (1).
(5). Lặp lại các quá trình trên.
Thuật toán Co-training trên có thể viết như sau:
L: là tập các mẫu dữ liệu đã gán nhãn
U: là tập các mẫu dữ liệu chưa gán nhãn
(1). L có thể phân chia thành hai tập con L1 và L2 (trường hợp lý tưởng thì L1 và L2 độc lập nhau).
(2). Cho bộ phân lớp h1 học L1 (hay L1 huấn luyện bộ phân lớp h1)
Cho bộ phân lớp h2 học L2 (hay dùng L2 huấn luyện bộ phân lớp h2)
(3). Dùng h1 phân lớp cho U thu được tập U1’ kèm nhãn dự đoán của chúng. Dùng h2 phân lớp cho U thu được tập U2’ kèm nhãn dự đoán của chúng.
(4). Từ U1’ chọn ra u1 mẫu dữ liệu kèm theo nhãn của nó, có độ tin cậy cao nhất. Bổ sung u1 vào L2. Khi đó, L2 + u1 => L2.
Từ U2’ chọn ra u2 mẫu dữ liệu kèm theo nhãn của nó, có độ tin cậy cao nhất. Bổ sung u2 vào L1. Khi đó, L1 + u2 => L1.
(5). Dùng L1 mới huấn luyện bộ phân lớp h1 (hay h1 học L1)
Dùng L2 mới huấn luyện bộ phân lớp h2 (hay h2 học L2)
(6). Lặp lại từ bước (3). cho đến khi tập U rỗng hoặc số vòng lặp đạt đến ngưỡng xác định trước.
Có thể viết rút gọn bằng cách bỏ bước (5). ở trên. Bước (6). đổi thành bước (5): Lặp lại từ bước (2). cho đến khi tập U rỗng hoặc số vòng lặp đạt đến ngưỡng xác định trước.
Phương pháp học có giám sát (Supervised Learning)
* Khái niệm học có giám sát:
Học có giám sát là học với tập dữ liệu huấn luyện ban đầu hoàn toàn được gán nhãn từ trước.
Học có giám sát là phương pháp học sử dụng cho lớp bài toán phân lớp, phân loại (Classification).
* Nội dung phương pháp học có giám sát:
- Để thực hiện phân lớp, trước tiên phải chuẩn bị một tập dữ liệu huấn luyện (trainning data set), để có tập dữ liệu huấn luyện phải thực hiện gán nhãn cho dữ liệu ban đầu, đây được gọi là quá trình thu thập tập huấn luyện.
- Lựa chọn một thuật toán phân lớp (ví dụ SVM) xây dựng bộ phân lớp để học tập dữ liệu huấn luyện. Hay nói cách khác, dùng tập dữ liệu huấn luyện để huấn luyện bộ phân lớp. Thuật ngữ học có giám sát được hiểu là học tập dữ liệu đã được gán nhãn trước (các dữ liệu kèm theo nhãn tương ứng này coi như đã được giám sát bởi người thực hiện gán nhãn).
- Sử dụng một tập dữ liệu kiểm tra (test data set) đã được gán nhãn trước, để kiểm tra tính đúng đắn của bộ phân lớp. Sau đó, có thể dùng bộ phân lớp để phân lớp cho các dữ liệu mới.
* Một số thuật toán học có giám sát:
Một số thuật toán thường được lựa chọn khi xây dựng bộ phân lớp gồm có: máy vector hỗ trợ (Support Vector Machine – SVM); k láng giềng gần nhất (K Nearest Neighbours – KNN); tiếp cận xác suất thống kê (Naïve Bayes – NB); Cây quyết định (Decision Tree – DT); sử dụng mạng nơron (Neural Network – Nnet); dựa trên vector trọng tâm (Centroid–base vector); hay tuyến tính bình phương nhỏ nhất (Linear Least Square Fit – LLSF). (Chi tiết các thuật toán này có thể tham khảo trên Internet).