ML101.01: Học máy là gì?
Đây là bài đầu tiên của series Machine Learning 101 (Học máy vỡ lòng hay học máy giản lược).
Ta xét một ví dụ kinh điển như sau:
Giả sử bạn là một người mô giới bất động sản, bạn được yêu cầu phải dựa vào kinh nghiệm của mình để dự đoán giá bán của dự án sắp tới để bắt đầu lập kế hoạch chạy quảng cáo phù hợp. Dữ liệu duy nhất bạn có đó là những căn hộ đã bán trước đó. Dữ liệu gồm 3 thông tin được mô tả như sau:
Diện tích (m2) | Số phòng | Giá (tỉ đồng) |
---|---|---|
60 | 2 | 1,8 |
70 | 3 | 2,4 |
50 | 1 | 1,2 |
65 | 3 | 2,2 |
Câu hỏi đặt ra là nếu bạn chỉ có được 2 thông tin là diện tích và số phòng thì bạn có đoán được giá của căn hộ đó hay không? Ví dụ, một căn hộ với diện tích 55m2 và 2 phòng ngủ sẽ có giá bao nhiêu. Hoặc một căn hộ 75m2, 2 phòng ngủ sẽ có giá bao nhiêu?
Dựa vào một chút kiến thức toán học sơ cấp, bạn có thể hình dung rằng chúng ta đang cần tìm một hàm số %y=f(x,z)%, với %x, z% lần lượt là diện tích và số lượng phòng của căn hộ. Hàm số này phải thoả mãn các điều kiện dữ liệu đã cho, do đó ta có:
$$\left \{ \begin{array}{ll} 1.8=f(60, 2)\\ 2.4=f(70, 3)\\ 1.2=f(50, 1)\\ 2.2=f(65, 3) \end{array} \right.$$
Theo kinh nghiệm, bạn tin rằng khi diện tích căn hộ càng lớn, số phòng càng nhiều thì giá sẽ càng cao (nếu không tính những yếu tố khác). Vì vậy, nhiều khả năng %f(x, z)% là một hàm đồng biến trên %R%. Hãy thử với hàm đơn giản nhất mà bạn có thể nghĩ ra mà có tính chất này:
$$y=f(x, z)=ax+bz; \; a, b, x, z > 0$$
Sau khi đã tìm được một dạng %f(x, z)% thích hợp, việc bạn cần làm là tìm hệ số của hàm đó. Như ở trên thì hệ số của chúng ta được mô tả thông qua tham số %a% và %b%. Một bộ %(a, b)% sẽ cho ta một hàm số khác nhau. Ví dụ với %(a, b)% là %(1, 2)% ta sẽ có hàm %y=x+2z%, nếu %(a, b)% là %(2, 5)% ta sẽ có hàm %y=2x+5z%.
Tiếp tục dựa vào kinh nghiệm, bạn đưa ra một vài dự đoán về %(a, b)%. Ví dụ bạn đưa ra 3 giải thuyết (hypothesis) rằng %(a, b)% có thể là một trong các cặp số sau %(0.1, 0.7)%, %(0.02, 0.3)%, %(0.1, 0.2)%. Tiếp theo, bạn cần kiểm tra xem giả thuyết nào là hợp lí nhất so với điều kiện đã cho ở trên, bằng cách thay các hệ số vào, và tính thử độ lệch so với giá trị chính xác.
Với giả thuyết đầu tiên %(0.1, 0.7)%, ta có %y=0.1x+0.7z%. Lần lượt thay vào các điểm dữ liệu đã có và được kết quả sau:
Diện tích (x) | Số phòng (z) | Giá (y) | Giá dự đoán (y') | Độ lệch (e) |
---|---|---|---|---|
60 | 2 | 1,8 | 7.4 | 6.6 |
70 | 3 | 2,4 | 9.1 | 6.7 |
50 | 1 | 1,2 | 5.7 | 4.5 |
65 | 3 | 2,2 | 8.6 | 6.4 |
Với giải thuyết thứ hai %(0.02, 0.3)%, ta có %y=0.02x+0.3z%:
Diện tích (x) | Số phòng (z) | Giá (y) | Giá dự đoán (y') | Độ lệch (e) |
---|---|---|---|---|
60 | 2 | 1,8 | 1.8 | 0.0 |
70 | 3 | 2,4 | 2.3 | 0.1 |
50 | 1 | 1,2 | 1.3 | 0.1 |
65 | 3 | 2,2 | 2.2 | 0.0 |
Tương tự với giải thuyết thứ ba, ta có bảng sau:
Diện tích (x) | Số phòng (z) | Giá (y) | Giá dự đoán (y') | Độ lệch (e) |
---|---|---|---|---|
60 | 2 | 1,8 | 6.4 | 4.6 |
70 | 3 | 2,4 | 7.6 | 5.2 |
50 | 1 | 1,2 | 5.2 | 4.0 |
65 | 3 | 2,2 | 7.1 | 4.9 |
Để đánh giá xem giả thuyết nào là tốt nhất, bạn phải tính trung bình độ lệch E của từng giả thuyết sau đó so sánh chúng. Theo đó, với giả thuyết thứ nhất, ta có trung bình độ lệch của giá trị dự đoán là 6.05; còn giải thiết thứ hai và thứ ba lần lượt là 0.05 và 4.68. Dễ dàng nhận thấy, giả thuyết thứ hai có độ lệch trung bình nhỏ nhất. Do đó có thể xem đây là giả thuyết tốt nhất mà chúng bạn có thể đưa ra. Từ đây, bạn có thể đưa ra quyết định rằng %y=0.02x+0.3z% là hàm số cần tìm. Bạn kì vọng rằng sau này chỉ cần đưa 2 thông tin là diện tích (%x%) và số phòng (%z%) thì sẽ dự đoán được giá bán của căn hộ đó với độ sai lệnh trung bình là 0.05 tỉ đồng.
Mã nguồn để tìm %f% được viết bởi Python:
Tất cả các bước trên chính là một cách mà bạn có thể hình dung về học máy (machine learning). Có rất nhiều định nghĩa về học máy, nhưng bài viết này xin giới thiệu một định nghĩa được chấp nhận khá rộng rãi được phát biểu bởi Giáo sư Tom Mitchel [1]:
A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
Tạm dịch:
Một chương trình máy tính được gọi là học từ kinh nghiệm E với tác vụ T và độ hiệu quả P. Nếu nó thực hiện một tác vụ T, được đánh giá thông qua độ hiệu quả P và được cải thiện với kinh nghiệm E.
Cách trình bày trên có vẻ khó hiểu, nhưng ta có thể tham chiếu với ví dụ ban đầu như sau: kinh nghiệm E chính là dữ liệu về diện tích, số phòng và giá của những căn hộ bạn đã bán trước đó; tác vụ T là bài toán dự đoán giá căn hộ trong tương lai với %x% và %z% (tìm hàm %f(x, z)%); độ hiệu quả P chính là độ lệch của giá trị dự đoán so với giá trị thật. Toàn bộ quá trình từ đưa ra giả thuyết đến tìm ra cặp hệ số %(a, b)% cuối cùng được gọi là quá trình huấn luyện (training). Một cách tổng quát hơn, học máy là một nhóm các thuật toán giúp máy tính "học" được mối tương quan, logic ẩn đằng sau một tập dữ liệu cho trước của một bài toán cụ thể. Sau đó, dựa vào những mối tương quan, logic ẩn đã học được để hỗ trợ giải quyết bài toán đó trong tương lai. Như ở ví dụ trên, ta đã dựa vào dữ liệu có sẵn để tìm ra hàm %f(x, z)% và dùng hàm này để dự đoán các điểm dữ liệu nằm ngoài dữ liệu cho trước.
Các thành phần của học máy
- Bài toán là tác vụ mà chúng ta cần phải thực hiện. Như với ví dụ ban đầu, bài toán của chúng ta là dựa vào dữ liệu đã có, cần phải dự đoán giá của những căn hộ mới. Đôi khi việc xác định và phân tích bài toán cần thực hiện một cách chính xác là hết sức quan trọng. Trong nhiều trường hợp, bài toán thường không rõ ràng, chúng ta phải mô tả lại một cách hình thức để có thể dễ dàng giải quyết bằng các công cụ toán học. Do đó, bài toán đầu bài viết được mô tả bằng việc tìm hàm %f(x, z)% sao cho thõa mãn các ràng buộc cho trước. Trên thực tế, các bài toán công nghiệp (industry problem) luôn là những bài toán tối ưu phức tạp và đa biến. Do đó, việc phân tích chúng thành những bài toán con (sub-problem) sau đó tìm cách giải từng bài toán là một cách tiếp cận khá thường được sử dụng. Điều này tương tự như ý tưởng của quy hoạch động (dynamic programming) hay chia để trị (devide-and-conquer).
- Dữ liệu: Bởi vì mục tiêu chính của học máy là giúp máy tính học từ kinh nghiệm có sẵn. Cho nên dữ liệu chính là thành phần quan trọng nhất của một vấn đề học máy. Dữ liệu gồm 2 thành phần: dữ liệu đầu vào và giá trị mục tiêu. Quay trở lại ví dụ, ta có dữ liệu đầu vào là hai giá trị diện tích và số phòng, còn giá trị mục tiêu là giá. Một bộ gồm nhiều giá trị đầu vào và mục tiêu tương ứng như vậy được gọi là một tập dữ liệu. Hiện nay, chúng ta tin rằng càng nhiều dữ liệu được dùng để huấn luyện mô hình học máy thì sẽ càng tốt.
- Chiến lược tìm kiếm hay phương pháp tối ưu cũng là một thành phần không thể thiếu của học máy. Như ví dụ trên, chiến lược của chúng ta là giả định ngẫu nhiên các cặp số %(a, b)% và kiểm tra xem chúng có độ lệch so với giá trị thật là bao nhiêu. Đây là một chiến lược hết sức ngây thơ. Bởi vì nếu không may mắn, chúng ta rất có thể phải lặp đi lặp lại quá trình này rất nhiều lần mà không tìm ra cặp số %(a, b)% phù hợp; do không gian tìm kiếm với %a, b > 0; \; a, b \in R% là vô hạn. Tuy năng lực tính toán của máy tính là lớn hơn con người rất nhiều, nhưng vẫn phải có những chiến lược "thông minh" hơn, chúng ta sẽ tìm hiểu ở những chiến lược này trong những bài viết sau trong series.
- Hàm mục tiêu: Sau khi đã có dữ liệu và phương pháp tối ưu, ta cần một cách để đánh giá độ hiệu quả của tham số giả định, đó được gọi là hàm mục tiêu. Thông thường hàm mục tiêu là một hàm đo "khoảng cách" giữa giá trị dự đoán và giá trị thật. Như ở trên, độ lệch trung bình giữa giá dự đoán và giá thật chính là hàm mục tiêu của bài toán. Cũng như chiến lược tìm kiếm, hàm mục tiêu cũng gồm rất nhiều loại tùy theo cách tiếp cận và giải quyết bài toán cụ thể.
Các thể loại học máy
Có nhiều cách để phân loại học máy, trong bài viết này chúng ta sẽ điểm qua các loại học máy được chấp nhận phổ biến:
- Theo bài toán: Có nhiều loại bài toán học máy khác nhau, nhưng tựu chung lại thì có hai loại chính đó là phân lớp (classification) và hồi quy (regerssion). Một cách cơ bản thì phân lớp là lớp các bài toán yêu cầu chúng ta dự đoán các giá trị mục tiêu trên miền rời rạc. Ví dụ cho một tấm ảnh, thuật toán học máy phải phân biệt xem đó là ảnh của con chó hay ảnh còn mèo. Giá trị dự đoán chỉ rơi vào một trong hai trường hợp [chó, mèo]. Do đó đây được coi là một bài toán phân lớp. Ngược lại, giá trị mục tiêu của bài toán hồi quy là giá trị trên miền liên tục. Ví dụ như với bài toán dự đoán giá căn hộ thì giá trị dự đoán chắc chắn sẽ là một số thực lớn hơn không. Ngoài ra không có điều kiện nào khác, do vậy nó được xem là một bài toán hồi quy.
- Theo dữ liệu: Một cách phân loại học máy phổ biến hơn đó là dựa vào đặc điểm của dữ liệu. Theo đó, ta có supervised learning (học có giám sát), un-supervised learning (học máy không giám sát, semi-supervised learning (học máy bán giám sát),.. Nếu như supervised learning học trên dữ liệu được gán nhãn đầy đủ (mỗi giá trị đầu vào đều có giá trị mục tiêu tương ứng) thì un-supervised learning là những thuật toán học trên tập dữ liệu không có nhãn (chỉ có giá trị đầu vào mà không có giá trị mục tiêu). Trong thực tế, việc thu thập dữ liệu không có nhãn là dễ dàng hơn rất nhiều so với dữ liệu được gán nhãn. Do đó, phát triển một thuật toán un-supervised learning tốt luôn là mục tiêu nghiên cứu hàng đầu của học máy. Tuy nhiên, thực tế cho thấy các thuật toán supervised learning luôn có hiệu quả áp đảo so với un-supervised learning. Vì vậy, semi-supervised learning (học bán giám sát) - phương pháp lai giữa supervised và un-supervised learning cũng là một hướng tiếp cận hấp dẫn. Phương pháp học bán giám sát thường được mô tả là cách học từ tập dữ liệu được gán nhãn một phần. Tức là một phần của tập dữ liệu được gán nhãn, phần còn lại thì không. Ngoài ra, ta có nhiều cách tiếp cận khác như: self-supervised learning, semi self-supervised learning, few-shot learning, zero-shot learning,...
- Theo chiến lược tìm kiếm: Như đã đề cặp, chiến lược tìm kiếm là rất quan trọng. Chiến lược hiệu quả nhất và được dùng nhiều nhất hiện nay là các thuật toán dựa trên đạo hàm (gradient-based algorithms) như gradient descent và các biến thể. Ngoài ra cũng có một nhóm các thuật toán tối ưu không dùng đạo hàm (gradient-free algorithms) như giải thuật tiến hóa (evolution algorithms), simulated annealing, cuckoo search,...
- Hàm mục tiêu: Dựa theo hàm mục tiêu thì chúng ta cũng có một số nhóm như sau: metric learning, energy-based models,... Các nhóm này chủ yếu được đặt tên theo một lớp các hàm mục tiêu nào đó. Ví dụ như metric learning chỉ các thuật toán học hàm mục tiêu là một dạng hàm khoảng cách (distance measure) trong không gian nhiều chiều. Hoặc energy-based models là nhóm các mô hình dựa trên các hàm năng lượng được vay mượn từ lĩnh vực vật lý thống kê.
Ngoài ra, Discriminative Machine Learning (học máy phân hoạch) và Generative Machine Learning (học máy tạo sinh) cũng là hai cách phân loại học máy được biết đến rất nhiều. Đây được xem là hai bài tóan tổng quát lớn nhất của học máy.
Tất cả những loại và phương pháp ở trên là thứ mà chúng ta sẽ cùng tìm hiểu trong những bài tiếp theo của series này.
Tài liệu tham khảo
[1] Mitchell, T. M. (1997). Machine Learning. New York: McGraw-Hill. ISBN: 978-0-07-042807-2