Chủ Nhật, 22 tháng 10, 2017

Machine Learning cho mọi người - 2: Học có giám sát (Supervised Learning)



Phần 2: Học có giám sát (Supervised Learning)

Hai loại học có giám sát: hồi qui và phân loại. Hồi qui tuyến tính, các hàm lỗ, và đạo hàm giảm.

Chúng ta sẽ xài bao nhiêu đô la cho quảng cáo kỹ thuật số? Khoản nợ này có hoàn lại hay không? Chuyện gì sẽ xảy ra với thị trường chứng khoán ngày mai?

Trong các bài toán học có giám sát, chúng ta sẽ bắt đầu với tập dữ liệu chứa các ví dụ dạy học bằng các nhãn đúng đi kèm. Ví dụ, khi học phân loại các chữ số viết tay, một giải thuật học có giám sát sẽ lấy hàng ngàn bức ảnh về các chữ số viết tay có nhãn chứa các số đúng mà mỗi ảnh biểu diễn. Sau đó thuật toán sẽ học được mối quan hệ giữa các bức ảnh và các số gắn ở nhãn đi kèm, rồi áp dụng mối quan hệ học được vào phân loại các ảnh mới hoàn toàn (không có nhãn) mà máy chưa từng nhìn thấy trước đó. Đó là cách bạn có thể thanh toán một hóa đơn chỉ bằng cách dùng điện thoại chụp ảnh!

Để minh họa cách học có giám sát làm việc thế nào, hãy xem bài toán dự đoán thu nhập hàng năm dựa trên số năm được đi học trình độ cao hơn của ai đó. Một cách hình thức hơn, chúng ta sẽ xây dựng một mô hình xấp xỉ mối quan hệ f giữa số năm đi học trình độ cao hơn X và thu nhập hằng năm tương ứng Y.

Y = f(X) + ɛ
X (đầu vào) = số năm học trình độ cao hơn
Y (đầu ra) = thu nhập hàng năm
f = hàm mô tả mối quan hệ giữa X và Y
ɛ (epsilon) = sai số ngẫu nhiên (dương hoặc âm) có giá trị trung bình bằng 0

Về epsilon, cần chú ý:
(1)   ɛ biểu diễn sai số không thể giảm được trong mô hình, đó là giới hạn về mặt lý thuyết quanh hiệu suất thuật toán của bạn do có nhiễu trong hiện tượng bạn đang cố giải thích. Ví dụ, hãy tưởng tượng đang xây dựng một mô hình để dự đoán kết quả lật đồng xu.
(2)   Rất ngẫu nhiên, nhà toán học Paul Erdös gọi trẻ em là “epsilons” vì trong phương pháp tính (chứ không phải thống kê!), ɛ thể hiện một số dương nhỏ tùy tiện. Phù hợp, không ư? Một phương pháp dự đoán thu nhập có thể tạo ra một mô hình dựa trên các qui tắc để biết cách thu nhập và giáo dục có liên quan với nhau thế nào. Ví dụ, “Tôi ước tính cứ thêm một năm giáo dục bậc cao hơn, thì thu nhập hằng năm lại tăng thêm 5.000 đô la.”

Thu_nhập = ($5.000 * số_năm_học_cao) + thu_nhập_mức_sàn

Hướng tiếp cận này là một ví dụ về cách xử lý kỹ thuật một giải pháp (so với học một giải pháp, như phương pháp hồi qui tuyến tính sẽ mô tả bên dưới).

Bạn có thể tìm ra một mô hình phức tạp hơn bằng cách thêm vào một vài qui tắc về kiểu bằng cấp, số năm làm việc, cấp bậc trường học… Ví dụ: “Nếu họ đã học xong bằng cử nhân hoặc cao hơn, thu nhập sẽ được dự đoán là gấp 1,5 lần.”

Nhưng kiểu lập trình theo qui tắc rõ ràng thế này không hoạt động suôn sẻ với dữ liệu phức tạp. Hãy tưởng tượng bạn đang cố thiết kế một giải thuật phân loại hình ảnh bằng những câu lệnh if-then (nếu – thì) nhằm mô tả các dạng kết hợp giữa độ sáng của các pixel để gán nhãn “con mèo” hoặc “không phải con mèo”.

Học có giám sát giải quyết bài toán này bằng cách để máy tính làm việc đó cho bạn. Sau khi xác định các mẫu trong dữ liệu, máy tính sẽ có thể tạo ra các heuristic. Sự khác nhau chính giữa kiểu học này với kiểu học của con người là, học bằng máy chạy trên phần cứng máy tính và hiểu được tốt nhất thông qua các lăng kính của khoa học và thống kê máy tính, trong khi đó việc tìm mẫu phù hợp của con người xảy ra trong một bộ não sinh học (dù cả hai có cùng mục tiêu).

Trong học có giám sát, máy sẽ cố học được mối liên quan giữa thu nhập và giáo dục từ một mớ hổ lốn, bằng cách chạy tập dữ liệu đào tạo đã được gán nhãn bằng một giải thuật dạy học. Hàm học được này có thể dùng để dự đoán thu nhập của mọi người khi thu nhập Y chưa biết, còn số năm đào tạo X là đầu vào. Nói cách khác, chúng ta có thể áp dụng mô hình cho các dữ liệu kiểm thứ chưa gán nhãn để dự đoán Y.

Mục đích của học có giám sát là tiên đoán Y càng chính xác càng tốt khi cho các ví dụ mới với X đã biết, Y chưa biết. Tiếp theo, chúng ta sẽ khám phá một vài hướng tiếp cận phổ biến nhất để làm điều đó.



Hồi qui: tiên đoán một giá trị liên tục

Hồi qui tiên đoán biến mục tiêu Y liên tục. Nó cho phép bạn ước lượng một giá trị, chẳng hạn giá nhà hay tuổi đời con người, dựa trên dữ liệu đầu vào X.

Ở đây, biến mục tiêu có nghĩa là biến chưa biết mà chúng ta phải dự đoán, còn liên tục có nghĩa là không có khoảng trống (sự ngừng lại giữa chừng) trong các giá trị Y có thể mang.

Cân nặng của một người là các giá trị liên tục. Còn các biến rời rạc chỉ lấy một số giá trị nhất định – ví dụ, số con của một người nào đó là một giá trị rời rạc.

Tiên đoán thu nhập là một bài toán hồi qui cổ điển. Dữ liệu đầu vào X của bạn chứa toàn bộ thông tin liên quan về các cá nhân trong tập dữ liệu có thể được sử dụng để tiên đoán thu nhập, chẳng hạn như số năm học trình độ cao, số năm kinh nghiệm làm việc, chức danh công việc, hay mã vùng. Các thuộc tính đó gọi là Đặc điểm, có thể bằng số (ví dụ số năm kinh nghiệm làm việc) hoặc phân nhóm (ví dụ chức danh hoặc lĩnh vực học).

Bạn sẽ muốn có càng nhiều quan sát càng tốt cho những đặc trưng này của đầu ra mục tiêu Y, vì thế mô hình của bạn có thể học được mối quan hệ f giữa X và Y.

Dữ liệu được chia thành tập dữ liệu đào tạo và tập dữ liệu kiểm thử. Tập dữ liệu đào tạo đều có nhãn, vì thế mô hình của bạn có thể học được từ các ví dụ đã gán nhãn. Tập kiểm thử không có nhãn, ví dụ bạn chưa biết giá trị bạn đang cố dự đoán là gì. Quan trọng là mô hình của bạn có thể tổng quát hóa các tình huống mà nó chưa gặp trước đó, nhờ vậy nó có thể hoạt động tốt trên tập dữ liệu kiểm thử.

Hồi qui
Y=f(X) + ɛ trong đó X = (x1, x2, …, xn)
Đào tạo: máy học f từ các dữ liệu đào tạo đã gán nhãn
Kiểm thử: máy tiên đoán Y từ dữ liệu kiểm thử chưa gán nhãn

Chú ý, X có thể là một tensor có số chiều bất kỳ. Tensor 1D là vector (1 hàng, nhiều cột), tensor 2D là một ma trận (nhiều hàng, nhiều cột), bạn cũng có thể có tensor 3,4,5 chiều hay nhiều hơn nữa. Để xem lại thuật ngữ này, hãy tìm đọc trong đại số tuyến tính.

Trong ví dụ 2D đơn giản của chúng ta, có thể lấy từ một file .csv trong đó mỗi hàng chưa trình độ học vấn và thu nhập của một người. Khi thêm một cột nữa là thêm một đặc điểm nữa vào, và bạn sẽ có một mô hình phức tạp hơn, nhưng có thể chính xác hơn.



Vậy chúng ta giải quyết những bài toán kiểu này thế nào?
Làm sao chúng ta xây dựng được các mô hình tạo ra các dự đoán chính xác, hữu ích trong thế giới thực? Chúng ta có thể làm được điều đó bằng cách dùng các thuật toán học có giám sát.

Nào, hãy đi vào phần rất thú vị: Tìm hiểu các thuật toán. Chúng ta sẽ khám phá vài cách theo hướng hồi qui và phân loại, đồng thời minh họa các khái niệm machine learning chính.


2.1. Học có giám sát: Hồi qui

2.1.1. Hồi qui tuyến tính (Bình phương nhỏ nhất)
“Hãy vẽ một đường thẳng. Đúng, đó chính là cách máy học.”

Đầu tiên, chúng ta sẽ tập trung giải quyết bài toán dự đoán thu nhập bằng hồi qui tuyến tính, vì các mô hình tuyến tính không hoạt động tốt trong các tác vụ nhận dạng hình ảnh (đây là lĩnh vực của deep learning mà chúng ta sẽ tìm hiểu sau).

Chúng ta có tập dữ liệu JX, và các giá trị mục tiêu Y tương ứng. Mục đích của phương pháp Hồi qui theo Bình phương tối thiểu (Orginary Least Squares – OLS) là học bằng một mô hình tuyến tính mà chúng ta có thể dùng để tiên đoán giá trị mới của y với x đã cho chưa từng gặp trước đó, trong đó sai số càng nhỏ càng tốt. Chúng ta muốn đoán được ai đó kiếm được bao nhiêu thu nhập dựa trên số năm học họ đã trải qua.

X_train = [4,5,0,2,…,6] #số năm học cao hơn học phổ thông
Y_train = [80,91.5,42,55,…,100] #thu nhập hàng năm tương ứng, tính bằng đơn vị nghìn đô la



Hồi qui tuyến tính là phương pháp có tham số, nghĩa là nó đưa ra giả thiết về dạng của hàm thể hiện mối tương quan giữa X và Y (chúng ta sẽ tìm hiểu ví dụ về các phương pháp không có tham số sau). Mô hình của chúng ta là một hàm tiên đoán ŷ với một giá trị x cụ thể đã cho:

ŷ = ß0 + ß1 * x + ɛ
trong trường hợp này, chúng ta giả thiết rõ ràng rằng có mối quan hệ tuyến tính giữa X và Y – vì thế, với mỗi đơn vị tăng lên trong X, chúng ta sẽ thấy ở Y cũng tăng (hay giảm) đi một hằng số.

ß0 là điểm chặn của y còn ß1 là độ dốc đường thẳng, ví dụ thu nhập tăng (hay giảm) bao nhiêu với một năm học thêm vào.

Mục tiêu của chúng ta là học các tham số mô hình (trong trường hợp này là ß0 và ß1) để chúng tối thiểu hóa lỗi trong các tiên đoán từ mô hình.

Để tìm các tham số phù hợp nhất:
(1)   Định nghĩa hàm chi phí, hoặc hàm lỗ - đo lường các tiên đoán từ mô hình của chúng ta gây ra độ không chính xác như thế nào.
(2)   Tìm các tham số tối thiểu hóa sai số, ví dụ làm mô hình của chúng ta càng chính xác càng tốt.

Về mặt đồ thị, nếu có 2 chiều thì kết quả sự phù hợp nhất là một đường thẳng. Nếu 3 chiều, ta phải vẽ thêm 1 mặt phẳng nữa, và cứ thế với số chiều lớn hơn.

Chú ý về chiều kích: ví dụ của chúng ta đơn giản chỉ có 2 chiều, nhưng rõ ràng bạn sẽ cần nhiều đặc điểm hơn (các x) và nhiều cơ số hơn (các beta) trong mô hình của mình, ví dụ, khi thêm nhiều biến liên quan vào để cải thiện độ chính xác trong các tiên đoán từ mô hình của bạn. Các nguyên tắc tương tự được tổng quát hóa cho các chiều kích cao hơn, dù mọi thứ sẽ khó hình dung bằng đồ họa hơn 3 chiều.



Về mặt toán học, chúng ta nhìn vào sự khác biệt giữa mỗi điểm dữ liệu thực (y) và tiên đoán từ mô hình (ŷ). Hãy bình phương sai số này để tránh số âm, cộng chúng lại và tính trung bình. Đó là cách đo lường xem dữ liệu của chúng ta phù hợp với đường thẳng thế nào.


n = # các quan sát. Sử dụng 2*n thay cho n để phép toán trơn tru hơn khi lấy đạo hàm tối thiểu hóa sai số, dù một số nhà thống kê nói đó là vớ vẩn. Khi bạn bắt đầu có quan điểm về dạng stuff này, bạn sẽ biết mình đang trong lỗ thỏ.

Với bài toán đơn giản thế này, chúng ta có thể tính toán một giải pháp đóng bằng cách sử dụng phương pháp tính để tìm ra các tham số beta tối ưu để tối thiểu hóa sai số. Nhưng khi hàm chi phí có độ phức tạp tăng lên, việc tìm một giải pháp dưới dạng hàm đóng bằng phương pháp tính sẽ không còn khả thi nữa. Vì thế cần hướng tiếp cận khác, gọi là đạo hàm giảm (gradient descent), cho phép ta tối thiểu hóa hàm sai số phức tạp.

2.1.2. Gradient Descent: học tham số
Hãy bịp mắt lại, và bước xuống dốc. Bạn sẽ thấy đáy khi bạn chẳng còn nơi nào để bước lên.

Gradient descent (đạo hàm giảm) sẽ còn trở lại với chúng ta nhiều lần nữa, đặc biệt trong các mạng neuron. Các thư viện machine learning giống như scikit-learn và TensorFlow đều sử dụng nó làm nền tảng khắp nơi, vì thế nó rất đáng giá nếu bạn hiểu chi tiết.

Mục đích của grandient descent là tìm cách tối thiểu hàm sai số trong mô hình của chúng ta bằng cách lặp đi lặp lại phương pháp xấp xỉ nó theo hướng làm nó tốt dần lên.

Hãy tưởng tượng bạn bị bịp mắt lại và đang đi vào một thung lũng. Mục đích của bạn là tìm ra chân đáy thung lũng. Bạn làm cách nào đây?

Hướng hợp lý nhất là cứ chạm vào mặt đất xung quanh và di chuyển về hướng mặt đất dốc xuống nhất. Làm một bước rồi lặp lại đúng cách như vậy cho bước tiếp theo, tới khi mặt đất xung quanh bằng phẳng. Khi đó bạn biết mình đã tới chân thung lũng; nếu di chuyển theo bất kỳ hướng nào, bạn có thể quay về vị trí cũ hoặc ở trên sườn cao hơn nữa.

Trở lại với vấn đề toán học, mặt đất trở thành hàm lỗ/hàm sai số, và việc dò đáy thung lũng là việc tối thiểu hàm này.

Giờ hãy nhìn vào hàm lỗ mà chúng ta đã biết trong hồi qui:



Chúng ta thấy đây thực sự là một hàm hai biến: ß0 và ß1. Tất cả các thứ còn lại đã xác định, từ X, Y và n đều đã được cho trong quá trình đào tạo. Chúng ta muốn tối thiểu hóa hàm này.



Hàm trở thành f(ß0,ß1)=z. Để bắt đầu đạo hàm xuống, bạn phải đoán các tham số ß0,ß1 dùng để tối thiểu hóa hàm.

Tiếp theo, bạn phải đạo hàm từng phần hàm sai số cho mỗi tham số beta: [dz/dß0, dz/dß1]. Đạo hàm từng phần cho thấy tổng sai số bị giảm hoặc tăng bao nhiêu nếu bạn tăng ß0 hay ß1 một lượng rất nhỏ.

Nhìn theo hướng khác, ước lượng về thu nhập hằng năm của bạn có thể tăng lên bao nhiêu với giả thiết ß0 – trình độ giáo dục – làm tăng sai số (ví dụ, độ không chính xác) cho mô hình của bạn? Bạn muốn theo hướng ngược lại để đi xuống đồi và tối thiểu sai số chứ?

Tương tự, nếu bạn tăng ước lượng bao nhiêu năm giáo dục bậc cao ảnh hưởng tới thu nhập - ß1, điều đó sẽ làm tăng sai số lên bao nhiêu? Nếu đạo hàm từng phần dz/dß1 là số âm, thì tăng ß1 là tốt vì nó sẽ làm giảm tổng sai số. Nếu là số dương, bạn sẽ muốn giảm ß1. Nếu nó bằng 0, không thay đổi ß1 vì điều này có nghĩa là bạn đã có con số tối ưu.

Hãy tiếp tục làm cho tới khi bạn chạm tới đáy, ví dụ thuật toán đã đồng qui và sai số đã tối thiểu. Có nhiều thủ thuật và trường hợp ngoại lệ trong phạm vi thực hiện, nhưng nói chung, đây vẫn là cách giúp bạn tìm ra các tham số tối ưu cho mô hình có tham số của bạn.

Overfitting – Quá phù hợp

Overfitting – quá mức phù hợp: “Sherlock, giải thích của anh về những gì vừa xảy ra quá cụ thể cho tình huống này.”
Regularization – qui tắc hóa: “Đừng phức tạp hóa quá mức mọi thứ, Sherlock. Cứ mỗi từ lạ thêm vào, tôi sẽ đấm cho cậu một cái.”
Hyperparameter(λ) – siêu tham số: “Ở đây có đủ sức mạnh để tôi đấm cho cậu một cái nếu có từ lạ thêm vào.”

Vấn đề phổ biến trong machine learning là overfitting – phù hợp quá mức: học một hàm mà hàm đó giải thích hoàn hảo tập dữ liệu đào tạo cho mô hình, nhưng lại không khái quát hóa tốt cho tập dữ liệu kiểm thử chưa từng gặp. Overfitting xảy ra khi một mô hình học quá nhiều từ dữ liệu đào tạo tới mức nó bắt đầu nhặt cả những đặc điểm riêng biệt không đại diện cho các mẫu trong thế giới thực. Điều này trở thành vấn đề đặc biệt, vì bạn đang làm cho mô hình của mình gia tăng độ phức tạp. Ngược lại, underfitting – chưa phù hợp – lại là vấn đến liên quan tới việc mô hình của bạn chưa đủ phức tạp để nắm bắt được xu hướng cơ bản của dữ liệu.

Cân bằng Sai số hệ thống rời – Phương sai (Bias – Variance Tradeoff)
Sai số hệ thống rời (Bias) là tổng số lỗi xảy ra khi xấp xỉ hóa hiện tượng trong thế giới thực bằng một mô hình đơn giản hóa.
Phương sai (variance) là lỗi kiểm thử trong mô hình của bạn thay đổi bao nhiêu dựa trên biến động của dữ liệu đào tạo. Nó phản ánh độ nhạy cảm của mô hình với những đặc điểm cá biệt của tập dữ liệu mà nó được đào tạo từ đó.
Khi mô hình tăng độ phức tạp và trở lên linh hoạt hơn, sai số hệ thống rời giảm xuống (tức nó đang giải thích tập dữ liệu đào tạo tốt), nhưng phương sai lại tăng lên (nó không khái quát hóa tốt). Cuối cùng, để có một mô hình tốt, bạn cần một mô hình có sai số hệ thống rời thấp và cả phương sai thấp.



Nhớ rằng điều duy nhất chúng ta quan tâm là làm sao mô hình hoạt động được trên dữ liệu kiểm thử. Bạn muốn tiên đoán email nào sẽ bị đánh dấu là spam trước khi chúng bị đánh dấu, chứ không chỉ là một mô hình phân loại lại các email (vốn đã được dùng để xây dựng nên nó ban đầu) với độ chính xác 100%. Nhận thức muộn là 20/20 – câu hỏi thực tế là liệu các bài học đã học được có giúp gì trong tương lai không.

Mô hình bên phải có sai số bằng không đối với dữ liệu đào tạo vì nó phù hợp hoàn hảo tại mọi điểm dữ liệu. Nhưng bài học không được khái quát hóa. Với một điểm dữ liệu mới không nằm trên đường đi của mô hình, nó có thể gây ra sai lầm khủng khiếp.

Có 2 cách để xử lý overfitting:
(1)   Dùng thêm dữ liệu đào tạo. Bạn càng có nhiều, càng khó bị overfit dữ liệu khi học quá nhiều từ bất kỳ ví dụ đào tạo đơn lẻ nào.
(2)   Qui tắc hóa. Thêm một điểm phạt vào hàm sai số vì dựng mô hình gán quá nhiều sức mạnh giải thích cho một đặc điểm bất kỳ hoặc cho phép quá nhiều đặc điểm được đưa vào xem xét.



Phần đầu của biểu thức trên là hàm chi phí bình thường. Phần thứ hai là hàm qui tắc hóa được thêm vào một điểm phạt vì các hệ số beta lớn sẽ có quá nhiều sức mạnh giải thích cho bất kỳ đặc điểm nào. Với hai thành phần này, hàm sai số giờ đã cân bằng được 2 ưu tiên: giải thích được dữ liệu đào tạo và ngăn giải thích đó trở thành quá mức cụ thể.

Hệ số lambda trong thuật ngữ qui tắc hóa của hàm chi phí là một siêu tham số (hyperparameter): nó là một con số thiết lập khái quát mô hình của bạn, có thể tăng hoặc giảm để cải thiện hiệu suất. Giá trị lambda cao hơn sẽ phạt các hệ số beta lớn nghiệt ngã hơn vì beta lớn có thể dẫn tới overfitting tiềm tàng. Để quyết định giá trị lớn nhất của lambda, bạn nên dùng phương pháp gọi là xác nhận chéo (cross – validation), cho phép chứa một phần dữ liệu đào tạo trong quá trình đào tạo, sau đó sẽ thấy mô hình của mình giải thích phần được chứa tốt đến mức nào. Chúng ta sẽ đi sâu vào phần này hơn.

Ô! Chúng ta đã làm được rồi.

Bạn đã học được gì từ toàn bộ phần trên?
-          Máy học có giám sát cho phép các máy tính học tập từ dữ liệu đào tạo được gán nhãn mà không cần lập trình tường minh như thế nào
-          Hai loại học có giám sát: hồi qui và phân loại
-          Hồi qui tuyến tính: thuật toán có tham số theo kiểu bánh mì và bơ
-          Học về các tham số với phương pháp đạo hàm giảm (gradient descent)
-          Quá phù hợp (overfitting) và qui tắc hóa (regularization)

Phần tiếp theo, chúng ta sẽ nói về 2 phương pháp căn bản của phân loại: hồi qui logistic và máy vector hỗ trợ (support vector machines – SVM).

Để hiểu sâu hơn:
-          Hồi qui tuyến tính: để hiểu hơn nữa về hồi qui tuyến tính, hãy đọc cuốn sách An introduction to Statistical Learning. Cuốn sách này có bản free online và là nguồn tài nguyên tuyệt vời để hiểu các khái niệm machine learning kèm bài tập. Có thể xài thử Boston Housing dataset. Bạn cũng có thể dùng phần mềm với GUI đẹp mắt như Minitab và Excel hoặc khó hơn là xài Python hay R. Hãy thử vượt qua thử thách Kaggle, chẳng hạn như tiên đoán giá nhà, hoặc xem người ta tiếp cận bài toán theo hướng khác thế nào.
-          Đạo hàm giảm (gradient descent): muốn thực sử triển khai gradient descent bằng Python, hãy đọc tài liệu hướng dẫn. Ở trong hướng dẫn sẽ mô tả các khái niệm tương đương theo cách toán học hơn. Trong thực hành, bạn hiếm khi cần dùng gradient descent từ đầu, nhưng phải hiểu nó hoạt động thế nào để bạn sử dụng nó hiệu quả hơn và hiểu được tại sao nhiều thứ bị hỏng giữa chừng khi chúng làm việc.

2.2. Học có giám sát: Phân loại
Phân loại bằng hồi qui logistic và máy vector hỗ trợ (SVM)
Phân loại: dự đoán nhãn
Email này có là thư rác hay không? Người vay này có trả được khoản vay của họ không? Người dùng sẽ click vào quảng cáo chứ? Ai là người trong ảnh Facebook của bạn?

Phương pháp phân loại tiên đoán một nhãn mục tiêu Y rời rạc. Phân loại là bài toán gán các quan sát mới cho một lớp các đối tượng dữ liệu có vẻ phù hợp nhất, dựa trên một mô hình phân loại được xây dựng từ dữ liệu đào tạo đã gán nhãn.

Độ chính xác của việc phân loại phụ thuộc vào hiệu quả giải thuật bạn lựa chọn, cách bạn áp dụng nó, và việc bạn có dữ liệu đào tạo hữu dụng nhiều đến mức nào.



2.2.1. Phương pháp hồi qui logistic: 0 hay 1?

Hồi qui logistic là một phương pháp phân loại: mô hình này cho đầu ra là xác suất biến mục tiêu Y được phân nhóm thuộc về một lớp cụ thể nào đó.

Một ví dụ thú vị về phân loại là quyết định xem một đơn đăng ký vay nợ có gian lận hay không.
Nói chung, người cho vay muốn biết họ có nên cho người đăng ký vay được vay tiền hay không, và họ tất nhiên cũng có khả năng chịu rủi ro trong một giới hạn nhất định. Trong trường hợp này, mục tiêu của hồi qui logistic là tính toán xác suất đơn đi vay là gian lận (giữa 0% và 100%). Với các xác suất này, chúng ta có thể thiết lập vài hạn mức cho vay với người đi vay, nếu trên hạn mức thì cho vay, dưới hạn mức thì từ chối hoặc đánh dấu vào để theo dõi kiểm tra kỹ hơn.

Dù hồi qui logistic thường được dùng cho phân loại nhị phân – chỉ có 2 lớp – nhưng nhớ rằng cách phân loại này cũng có thể thực hiện với số lượng lớp bất kỳ (ví dụ, khi gán các chữ số viết tay một cái nhãn từ 0 đến 9, hoặc dùng nhận dạng gương mặt để phát hiện có bạn bè nào trên bức ảnh Facebook không).

Tôi có thể sử dụng phép toán bình phương nhỏ nhất không?
Không nên. Nếu bạn đã đào tạo một mô hình hồi qui tuyến tính trên một tập ví dụ trong đó Y=0 hoặc 1, thế là bạn có thể phải chứng kiến một số xác suất nhỏ hơn 0 hoặc lớn hơn 1, toàn những con số vô nghĩa. Quả thực, chúng ta nên dùng một mô hình hồi qui logistic (hay mô hình logit) được thiết kế để gán xác suất từ 0% tới 100% với Y thuộc về một lớp xác định nào đó.

Toán học làm việc thế nào?
Chú ý: toán học trong phần này rất thú vị, nhưng có lẽ chỉ trên khía cạnh kỹ thuật. Cứ thoải mái đọc lướt qua nếu bạn quan tâm tới các khái niệm mức cao hơn. Mô hình logit là một biến thể sửa đổi của hồi qui tuyến tính, nhằm đảm bảo đầu ra là một xác suất từ 0 đến 1 nhờ áp dụng hàm sigma, trên đồ thị, giống như đường cong chữ S.



Hàm sigma đảo lại các giá trị giữa 0 và 1.
Hãy nhớ tới biểu thức gốc của mô hình hồi qui tuyến tính đơn giản, giờ chúng ta sẽ gọi là g(x) vì chúng ta sắp sử dụng nó trong một hàm kết hợp:



Bây giờ để giải quyết vấn đề nhận được đầu ra của mô hình nhỏ hơn 0 hoặc lớn hơn 1, chúng ta sẽ định nghĩa một hàm mới F(g(x)), hàm này làm biến đổi g(x) bằng cách đảo ngược đầu ra của hồi qui tuyến tính tới một giá trị trong dải [0,1]. Bạn có nghĩ một hàm có thể làm được việc này không?

Bạn đang nghĩ tới hàm sigma phải không? Bùm! Nhanh đấy! Bạn đúng rồi.

Vì thế chúng ta cắm hàm g(x) vào hàm sigma ở trên, kết quả được một hàm cho đầu ra là xác suất nằm trong khoảng giữa 0 và 1:



Nói cách khác, chúng ta đang tính toán xác suất để ví dụ đào tạo này thuộc về một lớp cụ thể nào đó: P(Y=1).

Ở đây chúng ta đã cô lập p, xác suất khi Y=1, bên vế trái của đẳng thức. Nếu chúng ta muốn giải quyết để biểu thức ß0+ß1x+ɛ sạch đẹp bên vế phải, ta có thể dịch thẳng các hệ số beta sắp học được, thay bằng tỷ số log lẻ, hay logit, ở vế bên trái – thế là được “mô hình logit”:



Tỷ số log lẻ đơn giản là log tự nhiên của tỷ lệ lẻ p/(1-p) mà ta thường thấy trong giao tiếp hằng ngày.

“Ồ, điều bạn nghĩ đến từ “lẻ” có lẽ là cảnh Tyrion Lannister chết trong Trò chơi Vương quyền mùa này phải không?”
Hừm. Chắc chắn gấp 2 lần là không. Lẻ từ 2 tới 1. Chắc chắn anh ta quá quan trọng để bị giết, nhưng tất cả chúng ta đã thấy những gì họ làm với Ned Stark…”



Chú ý rằng trong mô hình logit, ß1 giờ biểu diễn tỷ lệ thay đổi trong tỷ số log lẻ khi X biến đổi. Nói cách khác, đó là “độ dốc log lẻ”, chứ không phải “độ dốc xác suất”.

Log lẻ có lẽ hơi không nhạy cảm nhưng rất đáng để tìm hiểu rõ về nó vì ta sẽ gặp lại nó khi dịch đầu ra của các tác vụ phân loại bằng mạng neuron.

Sử dụng đầu ra của mô hình hồi qui logistic để ra quyết định
Đầu ra của mô hình hồi qui logistic trên trông giống đường cong chữ S, thể hiện P(Y=1) dựa trên giá trị của X:



Để dự đoán nhãn Y – là spam/không phải spam, bị ung thư/không bị ung thư, giả mạo/không giả mạo,… - bạn phải thiết lập một điểm chặn xác suất, hay một hạn mức, cho giá trị kết quả dương. Ví dụ: “Nếu mô hình của chúng ta nghĩ xác suất email này là spam cao hơn 70%, mô hình sẽ gán nhãn cho nó là spam. Ngược lại là không phải.

Hạn mức phụ thuộc khả năng chấp nhận các giá trị dương sai so với các giá trị âm sai của bạn. Nếu bạn đang chẩn đoán ung thư, bạn nên có độ dung sai rất nhỏ cho các giá trị âm sai, vì ngay cả khi có khả năng rất nhỏ rằng bệnh nhân bị ung thư thì bạn vẫn cần phải thực hiện nhiều tác vụ kiểm thử sâu hơn để đảm bảo chắc chắn. Vì vậy bạn nên thiết lập một hạn mức thật thấp cho kết quả dương.

Trong trường hợp đơn xin vay giả mạo, khả năng dung lỗi cho các giá trị dương sai có lẽ cao hơn, đặc biệt cho những khoản vay nhỏ hơn, vì việc điều trị sâu hơn sẽ rất tốn kém còn một khoản vay nhỏ có lẽ không đáng để trả cho chi phí phát sinh thêm vào nếu muốn giả mạo.

Tối thiểu hóa sai số bằng hồi qui logistic
Như trong trường hợp hồi qui tuyến tính, chúng ta sử dụng đạo hàm giảm để học các tham số beta làm tối thiểu hóa sai số.

Trong hồi qui logistic, hàm sai số về cơ bản là thước đo mức độ thường xuyên bạn có tiên đoán được giá trị 1 không trong khi câu trả lời đúng là 0, hoặc ngược lại. Hàm chi phí dưới đây được qui tắc hóa giống như ta từng làm với hồi qui tuyến tính.



Đừng hoảng sợ khi nhìn thấy đẳng thức dài như vậy! Hãy chia nhỏ nó ra và nghĩ xem chuyện gì sẽ xảy ra trong mỗi phần về mặt khái niệm. Sau đó các chi tiết cụ thể sẽ bắt đầu tự nói lên ý nghĩa của nó.

Phần đầu tiên là sai số dữ liệu, ví dụ chênh lệch nhiều bao nhiêu giữa dự đoán của mô hình và thực tế. Phần thứ hai là sai số qui tắc hóa, ví dụ chúng ta phạt mô hình bao nhiêu khi có các tham số lớn khiến một số đặc điểm có trọng số nặng hơn (nhớ là điều này giúp ngăn ngừa overfitting).

Chúng ta sẽ tối thiểu hóa hàm sai số bằng đạo hàm giảm, như trên, và đây rồi! chúng ta sẽ xây dựng được một mô hình hồi qui logistic để tiên đoán các lớp càng chính xác càng tốt.

2.2.2. Máy vector hỗ trợ (Support Vector Machines – SVM)
“Chúng ta lại ở trong căn phòng bằng đá cẩm thạch. Tại sao chúng ta luôn ở trong căn phòng bằng đá cẩm thạch? Thế mà tôi đã đảm bảo là không có chuyện đó.”

SVM là mô hình có tham số cuối cùng chúng ta cùng tìm hiểu. Cụ thể, nó cũng giải quyết cùng một bài toán như hồi qui logistic – phân loại thành 2 lớp – và có hiệu suất tương đương. Vẫn cần phải hiểu nó vì giải thuật của nó về bản chất dễ hiểu khi biểu diễn bằng hình học hơn là bị áp đặt bởi tư duy theo xác suất.

Vài ví dụ về các bài toán SVM có thể giải được:
-          Đây là ảnh chó hay mèo?
-          Kiểm tra này dương hay âm tính?
-          Các chấm 2D này đỏ hay xanh?

Chúng ta sẽ sử dụng ví dụ thứ ba để minh họa cách SVM hoạt động. Những bài toán thế này gọi là bài toán trò chơi vì chúng không có thật – nhưng chẳng có gì là thật cả, vì thế cũng hay mà.



Trong ví dụ này, chúng ta có các điểm trong không gian 2D là đỏ hoặc xanh, và chúng ta cần chia thành 2 nhóm.

Tập dữ liệu đào tạo như trên đồ thị. Chúng ta muốn phân loại các điểm mới, chưa được phân nhóm. Để làm điều này, SVM sử dụng một đường phân chia (hoặc nhiều hơn 2 chiều, gọi là siêu mặt đa chiều) để chia không gian thành một vùng đỏ và một vùng xanh. Bạn đã có thể tưởng tượng ra đường phân chia này có lẽ giống như thế nào trong đồ thị bên trên.

Làm sao chúng ta chọn được chỗ nào để vẽ đường đó?

Bên dưới là 2 ví dụ về đường phân chia này.





Hy vọng bạn cũng có trực giác cho rằng đường đầu tiên tốt hơn. Khoảng cách tới điểm gần nhất trên mỗi phía của đường này gọi là lề (margin), và SVM cố gắng tối đa hóa lề này. Bạn có thể nghĩ nó giống như khoảng cách an toàn: khoảng cách này càng lớn, các điểm càng ít có khả năng bị phân loại sai.

Dựa trên giải thích trên, vài câu hỏi lớn được đặt ra.

1.      Các phép toán bên dưới làm việc thế nào?
Chúng ta muốn tìm được một siêu đối tượng tối ưu (trong ví dụ 2D kia là một đường thẳng). Siêu đối tượng này cần (1) phân chia dữ liệu rạch ròi, tất cả điểm xanh ở một bên và tất cả điểm đỏ ở bên còn lại, và (2) đối đa hóa lề. Đây gọi là bài toán tối ưu hóa. Giải pháp phải thỏa mãn ràng buộc (1) trong khi tối đa được lề theo yêu cầu của (2).

Khi con người giải bài toán này, họ sẽ lấy thước và cố thử những đường thẳng khác nhau có thể chia mọi điểm thành 2 phần cho đến khi thu được đường có lề tối đa hóa lề.

Nó biến thành phương pháp toán học để làm việc tối đa hóa này, tất nhiên vẫn trong phạm vi của chúng ta. Để hiểu sâu hơn, hãy xem video bài giảng về nó (dùng hàm tối ưu Lagrange) trên mạng.

Siêu đối tượng mà bạn tìm thấy được xác định theo vị trí của nó với x_i, gọi là vector hỗ trợ, và thường là vector gần nhất với siêu đối tượng.

2.      Chuyện gì xảy ra nếu chúng ta không thể phân dữ liệu thành 2 phần rạch ròi?
Có hai phương pháp để giải quyết vấn đề này.
2.1.Linh động với khái niệm “phân chia”
Chúng ta cho phép một ít sai số, nghĩa là cho phép một số điểm xanh vẫn trong vùng của điểm đỏ hoặc vài điểm đỏ vẫn nằm trong vùng điểm xanh. Chúng ta làm thế bằng cách thêm chi phí C vào hàm sai số như các ví dụ về phân loại sai vẫn làm. Về cơ bản, chúng ta coi điều này là chấp nhận được nhưng tốn kém khi phân loại sai một điểm.
2.2.Cho dữ liệu vào không gian có số chiều cao hơn
Chúng ta có thể tạo các bộ phân loại phi tuyến bằng cách tăng số chiều lên, ví dụ x2, x3, hay cos(x)… Bỗng nhiên bạn có các biên giới trông méo mó ngớ ngẩn khi so sánh với đường biểu diễn trong không gian có số chiều ít hơn.

Về mặt trực quan, điều này giống như có chấm đỏ và xảnh nằm trên nền theo cách chúng không thể bị phân chia rạch ròi chỉ bằng một đường thẳng – nhưng nếu bạn có thể khiến mọi chấm đỏ lơ lửng trên nền theo một cách nào đó hợp lý, bạn có thể vẽ một đường chia tách chúng. Sau đó bạn để chúng quay lại trạng thái trước trên nền, cái này gọi là tìm nơi chấm xanh đứng yên và chấm đỏ bắt đầu.



Một tập dữ liệu không thể phân chia trong không gian 2 chiều R2, và cũng tập dữ liệu đó được đưa vào không gian 3 chiều với chiều thứ 3 bằng x2+y2.



Ranh giới ra quyết định được thể hiện bằng màu xanh, đầu tiên trong không gian 3 chiều (bên trái) sau đó trở lại trong không gian 2 chiều (bên phải).
Tóm lại, SVM được dùng để phân loại thành 2 lớp. Phương pháp này cố tìm ra một đường hoặc một mặt có thể chia tách rạch ròi thành 2 lớp. Khi việc này là không thể, chúng ta cũng đã linh động hóa khái niệm “chia tách” hoặc chúng ta lại tiếp tục ném dữ liệu vào một không gian có số chiều cao hơn để xem xét khả năng có thể chia tách chúng rạch ròi hay không.

Thế là xong!

Trong phần này, chúng ta đã học:
-          Phương pháp phân loại của học có giám sát
-          2 phương pháp phân loại chính: hồi qui logistic và máy vector hỗ trợ (SVM)
-          Các khái niệm thường xuyên dùng tới: hàm sigma, log lẻ (hay “logit”), và các giá trị dương sai với các giá trị âm sai…
Trong phần tiếp theo, chúng ta sẽ tìm hiểu học có giám sát không dùng tham số, trong đó ý tưởng phía sau các thuật toán rất trực quan và hiệu suất giải thuật cực kỳ tuyệt vời đối với một số dạng bài toán nhất định, nhưng các mô hình có thể không dễ được biên dịch thành mã.

Tài nguyên để tìm hiểu thêm
Hồi qui logistic
Trường Dữ Liệu là một chỉ dẫn mức sâu tuyệt vời với hồi qui logistic. Chúng tôi cũng muốn tiếp tục mời bạn tham khảo cuốn An Introduction to Statistical Learning. Hãy xem chương 4 về hồi qui logistic, và chương 9 về máy vector hỗ trợ.
Để áp dụng hồi qui logistic, chúng tôi khuyến nghị làm việc trên tập bài toán này. Không may là bạn phải đăng kí vào site mới làm thế được. Đời là thế mà.
Đi đào hố thỏ SVM
Để đào sâu vào khía cạnh toán học sau SVM, hãy xem bài giảng của giáo sư Patrick Winston trong MIT 6.034: Artificial Intelligence. Và kiểm tra lại bài giảng này bằng cách sử dụng Python nhé.


2.3.                    Học có giám sát: không tham số
Các mô hình không tham số; k hàng xóm gần nhất, cây quyết định, rừng ngẫu nhiên. Giới thiệu xác nhận chéo, xử lý siêu tham số và các mô hình đồng bộ.

Học không tham số
Mọi thứ có vẻ như hơi… uốn lượn.

Đối lập với các phương pháp chúng ta vừa tìm hiểu ở các phần trên – hồi qui tuyến tính, hồi qui logistic và SVM, dạng của mô hình đều được định nghĩa từ trước – trong học không tham số, không có một cấu trúc mô hình được xác định trước. Chúng ta không suy đoán dạng hàm f cần phải học trước khi đào tạo mô hình, giống như ta đã làm trước đó với hồi qui tuyến tính. Thay vào đó, cấu trúc mô hình được quyết định căn bản bởi dữ liệu.

Những mô hình này thường uyển chuyển hơn với hình thái dữ liệu đào tạo, nhưng đôi khi nó rất tốn chi phí cho khả năng thông dịch. Nó sẽ được làm sáng tỏ ngay thôi. Nào chúng ta cùng nhảy vô!

2.3.1.                 K hàng xóm gần nhất (k-nearest neighbors hay k-NN)
“Bạn là trung bình của k người bạn gần gũi nhất với bạn.”

k-NN có lẽ quá đơn giản để là một giải thuật machine learning. Ý tưởng này gán nhãn cho một điểm dữ liệu kiểm thử x bằng cách tìm giá trị trung bình (mean) của các nhãn từ k điểm dữ liệu gần nhất với nó, còn gọi là tìm mode (giá trị xuất hiện thường xuyên nhất trong tập hợp k điểm).

Hãy nhìn vào hình vẽ dưới đây. Giả sử bạn muốn tìm xem Vòng Xanh Thần Bí là Tam Giác Đỏ hay là Hình Vuông Xanh. Bạn sẽ làm gì?

Bạn cố gắng tìm ra một đẳng thức không tưởng có thể nhìn vào vị trí Vòng Xanh Thần Bí nằm ở đâu trong hệ tọa độ bên dưới và tiên đoán. Hoặc, bạn có thể chỉ nhìn vào 3 hàng xóm gần nhất của nó, và đoán rằng Vòng Xanh Thần Bí này có khả năng là Tam Giác Đỏ. Bạn cũng có thể mở rộng vòng tiên đoán ra và nhìn vào 5 hàng xóm gần nhất của nó, rồi tiên đoán theo cách đó (3/5 trong số 5 hàng xóm gần nhất là Hình Vuông Xanh, vì thế ta đoán Vòng Xanh Thần Bí là Hình Vuông Xanh khi k=5).


Minh họa của k-NN với k=1, 3 và 5. Để phân loại Vòng_Xanh_Thần_Bí(x) ở trên, hãy nhìn vào 1 hàng xóm gần nhất với nó, một Tam Giác Đổ. Vì thế ta đoán rằng ŷ=”Tam Giác Đỏ”. Với k=3, hãy nhìn vào 3 hàng xóm gần nhất, mode = Tam Giác Đỏ, vì vậy ŷ=”Tam Giác Đỏ”. Với k=5, ta thay bằng mode của 5 hàng xóm gần nhất. Giờ ŷ= “Hình Vuông Xanh”.

Thế đấy. Đó chính là phương pháp k hàng xóm gần nhất. Bạn nhìn vào k điểm dữ liệu gần nhất và lấy trung bình các giá trị của chúng nếu các biến là liên tục (như giá nhà chẳng hạn) hoặc tìm giá trị xuất hiện nhiều nhất nếu chúng là giá trị danh mục (như chó, mèo…).

Nếu bạn muốn đoán giá 1 ngôi nhà chưa biết, bạn có thể lấy trung bình từ một số căn nhà gần đó (về mặt địa lý), và tất nhiên bạn sẽ thu được những phỏng đoán khá chính xác. Những cách này có thể hoạt động còn vượt trội hơn nhiều so với mô hình hồi qui có tham số do vài nhà kinh tế học xây dựng nên khi nó chỉ ước lượng các hệ số mô hình từ số lượng phòng ngủ/phòng tắm, các trường học gần nhất, khoảng cách tới khu giao thông công cộng…

Cách sử dụng k-NN để dự đoán giá nhà:
1)        Lưu dữ liệu đào tạo, một ma trận X các đặc điểm như mã vùng, hàng xóm, số phòng ngủ, diện tích, khoảng cách tới trạm giao thông công cộng, v.v…. và một ma trận Y các giá bán tương ứng.
2)      Sắp xếp các ngôi nhà trong tập dữ liệu đào tạo của bạn theo sự tương đồng với ngôi nhà cần hỏi, dựa trên các đặc điểm trong X. Chúng ta sẽ định nghĩa cho “sự tương đồng” ở dưới.
3)      Lấy trung bình của k ngôi nhà gần nhất. Đó chính là dự đoán giá bán ngôi nhà bạn cần.

Thực tế, k-NN không cần hàm có tham số được định nghĩa trước f(X) thể hiện mối liên quan giữa Y và X để làm nó phù hợp hơn với các tình huống khi mối liên quan này quá phức tạp để biểu diễn dưới dạng mô hình tuyến tính đơn giản.

Thước đo khoảng cách: định nghĩa và tính toán cho khái niệm “gần”
Làm thế nào bạn tính được khoảng cách từ điểm dữ liệu cần hỏi khi tìm kiếm các hàng xóm gần nhất của nó? Về mặt toán học, làm sao bạn xác định được cái nào trong tập các Hình Vuông Xanh và hình Tam Giác Đỏ trong ví dụ trên là gần nhất với Vòng Xanh Thần Bí, đặc biệt nếu bạn không thể vẽ chúng ra một đồ thị 2D đủ dễ nhìn bằng mắt và chính xác?

Phép đo nhanh nhất là khoảng cách Euclid (một đường thẳng, như kiểu của chim ruồi). Cách khác là dùng khoảng cách Manhattan, giống như đi bộ giữa các khối nhà trong thành phố. Bạn có thể tưởng tượng rằng khoảng cách Manhattan có ích hơn trong một mô hình tính phí như Uber chẳng hạn.


Đường màu xanh lá cây = khoảng cách Euclid. Đường màu xanh nước biển = khoảng cách Manhattan.

Hãy nhớ tới định lý Pitago về tìm chiều dài cạnh huyền của một tam giác vuông:
a2 + b2 = c2
c = độ dài cạnh huyền (đường màu xanh lá cây ở trên). Còn a và b = độ dài hai cạnh bên của góc vuông (các đường màu đỏ).

Giải bài toán theo c, ta sẽ tìm được độ dài cạnh huyền bằng cách lấy căn bậc hai của tổng bình phương hai cạnh bên a và b (trong đó a và b giao nhau tạo thành góc 90 độ).



Ý tưởng tìm độ dài cạnh huyền với các vector hai chiều trực giao cho trước đã được khái quát hóa cho nhiều chiều, đó là cách chúng ta tìm được công thức cho khoảng cách Euclid d(p,q) giữa các điểm p và q trong không gian n chiều:



Công thức tìm khoảng cách Euclid được kế thừa từ định lý Pytago. Với công thức này, bạn có thể tính toán độ gần của toàn bộ các điểm dữ liệu đào tạo tới điểm dữ liệu mà bạn đang cố gán nhãn, sau đó lấy giá trị trung bình/hoặc giá trị xuất hiện nhiều nhất của k hàng xóm gần nhất để đưa ra dự đoán.

Rõ ràng bạn không cần tính bất kỳ thước đo khoảng cách nào bằng tay – chỉ cần search Google nhanh chóng đã phát hiện ra các hàm được xây dựng sẵn theo NumPy hay SciPy làm điều đó cho bạn, ví dụ khoảng_cách_euclid = numpy.linalg.norm(p-q), nhưng thật hài hước khi thấy cách các khái niệm địa lý chỉ đáng điểm 8 nay lại vô cùng hữu ích cho việc xây dựng các mô hình machine learning ngày nay!

Lựa chọn k: xử lý các siêu tham số bằng xác nhận chéo (cross – validation)
Để quyết định nên dùng giá trị k nào, bạn có thể kiểm tra các mô hình k-NN khác nhau sử dụng các giá trị k khác nhau bằng xác nhận chéo:
(1)   Chia dữ liệu đào tạo thành các đoạn, và đào tạo hết cho mô hình của bạn chỉ trừ 1 đoạn; hãy sử dụng đoạn dữ liệu giữ lại này làm dữ liệu kiểm thử.
(2)   Quan sát xem mô hình của bạn hoạt động thế nào bằng cách so sánh các tiên đoán của mô hình với các giá trị thật của dữ liệu kiểm thử (y).
(3)   Chọn lấy cái nào có sai số thấp nhất, tính theo trung bình, trên toàn bộ các lần lặp lại.


Minh họa cho xác nhận chéo. Số các phần phân ra và các vòng lặp có thể tùy biến.

k cao hơn ngăn chặn được overfitting

Các giá trị k cao hơn sẽ xử lý được vấn đề overfitting, nhưng nếu giá trị k quá cao, mô hình của bạn sẽ rất bị ảnh hưởng và không uyển chuyển. Đây là một ví dụ cực đoan: nếu k=N (tổng số điểm dữ liệu), mô hình chỉ có thể phân loại cào bằng một cách ngớ ngẩn toàn bộ dữ liệu kiểm thử thành giá trị trung bình hoặc giá trị xuất hiện nhiều nhất của tập dữ liệu đào tạo.

Nếu con vật phổ biến nhất trong tập dữ liệu động vật là con mèo thuộc giống Scotland, thì phương pháp k-NN với k bằng N (số quan sát đào tạo) có thể sẽ tiên đoán mọi động vật khác trên thế giới cũng đều là mèo Scotland. Theo quan điểm của Vishal, điều này có thể rất tuyệt. Nhưng Samer không đồng ý.


Ảnh .gif của một con mèo Scotland hoàn toàn miễn phí. Chúng ta sẽ gọi đây là phút giải lao giữa giờ học. ;-)

Sử dụng k-NN trong thế giới thực ở chỗ nào?
Vài ví dụ về chỗ ta có thể dùng k-NN:
-          Phân loại: phát hiện gian lận. Mô hình có thể cập nhật ảo tức thì với các ví dụ đào tạo mới khi bạn lưu nhiều điểm dữ liệu hơn, cho phép thích nghi nhanh chóng với các phương pháp lừa đảo mới.
-          Hồi qui: dự đoán giá nhà. Trong việc dự đoán giá nhà, việc trở thành hàng xóm gần nhất thực ra là một dấu hiệu chỉ báo tốt để có giá tương tự. k-NN rất hữu ích trong các lĩnh vực có dùng đến tính xấp xỉ về mặt vật lý.
-          Cải tiến dữ liệu đào tạo bị thiếu. Nếu một trong các cột trong file .csv của bạn có nhiều giá trị thiếu, bạn có thể cải tiến dữ liệu bằng cách lấy giá trị trung bình hay giá trị lặp lại nhiều nhất. k-NN có thể cho bạn một dự đoán chính xác hơn tại mỗi điểm dữ liệu bị thiếu sót.


2.3.2.                 Cây quyết định, rừng ngẫu nhiên

Tạo một cây quyết định tốt giống như chơi trò “20 câu hỏi”.


Cây quyết định bên phải mô tả các mẫu sống sót trên con tàu Titanic

Phần đầu tiên ở gốc của cây quyết định nên là câu hỏi đầu tiên bạn cần hỏi trong số 20 câu hỏi: bạn muốn phân chia dữ liệu càng rạch ròi càng tốt, đó là bằng cách tối đa hóa lợi ích thông tin thu được từ mỗi phần.

Nếu bạn của bạn bảo: “Mình đang nghĩ về một danh từ, hãy hỏi mình tối đa 20 câu hỏi có/không để đoán xem đó là từ gì.” Và câu hỏi đầu tiên của bạn là: “Đó có phải là khoai tây không?”, thế thì bạn là thằng ngốc, vì họ sẽ nói “không” mà bạn lại hầu như chẳng thu được thông tin gì. Trừ khi bạn biết rõ bạn mình luôn nghĩ về khoai tây suốt ngày, hoặc đang nghĩ về nó ngay lúc này. Nếu vậy bạn đã hoàn thành công việc một cách tuyệt vời.

Thực ra, câu hỏi nên kiểu như là “Đó là một đồ vật à?” thì sẽ có nghĩa nhiều hơn.

Cách này gần giống cách các bệnh viện phân chia bệnh nhân hoặc hướng chuẩn đoán khác nhau. Họ hỏi vài câu hỏi trước và kiểm tra tình trạng cơ bản để quyết định liệu bạn đã sắp chết chưa hoặc gì đó. Khi bạn bước vào cửa, họ không bắt đầu bằng cách làm sinh thiết để kiểm tra liệu bạn có bị ung thư tuyến tụy hay không đâu.

Có những cách thu được nhiều lợi ích thông tin vì thế về cơ bản, bạn có thể đánh giá được mọi phần có thể của dữ liệu đào tạo và tối đa hóa lợi ích thông tin cho mỗi phần. Cách này bạn có thể dùng để dự đoán mọi nhãn hoặc mọi giá trị một cách hiệu quả nhất có thể.

Còn bây giờ, hãy nhìn vào một tập dữ liệu đặc biệt và nói về cách chúng ta lựa chọn các phần.

Tập dữ liệu Titanic
Kaggle có một tập dữ liệu về con tàu Titanic dùng cho rất nhiều lần giới thiệu về machine learning. Khi Titanic chìm, 1.502 trong tổng số 2.224 hành khách và thủy thủ đoàn đã chết. Dù có vài yếu tố may mắn, nhưng phụ nữ, trẻ em và những người thuộc tầng lớp trên hầu như đều được cứu sống. Nếu bạn nhìn vào cây quyết định dưới đây, bạn sẽ thấy rằng nó phản ánh phần nào sự biến thiên này theo giới tính, tuổi và tầng lớp.

Chọn các phần trong một cây quyết định
Entropy là tổng các rối loạn trong một tập hợp (được đo bằng chỉ số Gini hoặc entropy chéo). Nếu các giá trị thực sự bị lẫn lộn, sẽ có nhiều entropy; nếu bạn có thể phân chia các giá trị rạch ròi, sẽ chẳng còn entropy nào. Với mỗi phần ở dữ liệu cha, bạn muốn các nốt con phải càng sạch càng tốt – tức là tối thiểu hóa entropy. Ví dụ, trong trường hợp Titanic, giới tính là một chỉ dấu lớn quyết định sự sống sót, vì thế nó có ý nghĩa và nên dùng đặc điểm này trong phần phân loại đầu tiên như là thứ mang tới lợi ích thông tin lớn nhất.

Hãy nhìn vào các biến số của vụ Titanic:

Từ điển dữ liệu
Biến số
Định nghĩa
Khóa
survival
Là người sống sót?
0-Không, 1-Đúng
pclass
Hạng vé
1-      Hạng nhất
2-      Hạng hai
3-      Hạng ba
sex
Giới tính

Age
Tuổi tính theo năm

sibsp
Số lượng anh chị em/bạn đời ở trên khoang tàu Titanic

parch
Số lượng cha mẹ/con cái ở trên khoang tàu Titanic

ticket
Số hiệu vé

fare
Phí hành khách

cabin
Số hiệu cabin

embarked
Cổng lên tàu
C= lên tàu từ Cherbourg, Q=lên tàu từ Queenstown, S=lên tàu từ Southampton

Chúng ta sẽ xây dựng một cái cây bằng cách lấy một trong các biến trên và phân tập dữ liệu theo nó.



Phần đầu tiên phân chia tập dữ liệu thành “Đàn ông” và “Phụ nữ”. Sau đó, nhóm “Phụ nữ” sẽ lại phân theo tuổi (để tối thiểu hóa entropy). Tương tự, nhóm “Đàn ông” cũng được phân theo hạng vé. Bằng cách đi theo cây quyết định, áp dụng với một hành khách mới, bạn có thể dự đoán họ sẽ sống hay chết.

Ví dụ Titanic đã giải quyết bài toán phân loại (sống hay chết). Nếu chúng ta dùng cây quyết định cho hồi qui – để tiên đoán giá nhà chẳng hạn – chúng ta nên tạo các phần dựa trên các đặc điểm quan trọng nhất quyết định tới giá nhà. Diện tích bao nhiêu: nhiều hay ít hơn____? Bao nhiêu phòng tắm và phòng ngủ: nhiều hơn hay ít hơn ____?

Sau đó, trong quá trình kiểm thứ, bạn nên thử với một ngôi nhà cụ thể bằng toàn bộ các phần phân chia trên rồi lấy trung bình của toàn bộ giá nhà trong nốt lá cuối cùng (note gần đáy nhất) làm dự đoán cho giá bán.

Có vài siêu tham số bạn có thể xử lý với mô hình cây quyết định, trong đó có max_depth và max_leaf_nodes. Hãy nhìn module scikit-learn trên các cây quyết định để biết cách xác định các tham số này.

Cây quyết định rất hiệu quả vì chúng dễ đọc, rất mạnh ngay cả với dữ liệu hỗn loạn, và tính toán rẻ do chỉ triển khai một lần sau khi đào tạo. Cây quyết định cũng rất phù hợp với dữ liệu pha trộn lẫn lộn (giá trị số lẫn với giá trị danh mục).

Có thể nói, cây quyết định rất đắt đỏ về phương diện tính toán khi đào tạo, mang theo rủi ro cao bị overfitting, và có xu hướng tìm những điều kiện tốt nhất cục bộ vì chúng không thể trở lại sau khi đã phân chia. Để xử lý những điểm yếu này, chúng ta tới với một phương pháp minh họa sức mạnh kết hợp nhiều cây quyết định trong một mô hình.

Rừng ngẫu nhiên: một tập hợp các cây quyết định

Một mô hình tạo thành từ nhiều mô hình được gọi là một mô hình tập hợp, thường là một chiến lược thành công.

Một cây quyết định đơn lẻ có thể tạo ra nhiều phân chia sai vì nó chỉ phán đoán đen hay là trắng. Một rừng ngẫu nhiên là một người ước tính siêu việt vì tập hợp nhiều cây quyết định với vài sửa đổi hữu ích:

(1)   Số đặc điểm có thể phân chia tại mỗi nốt bị giới hạn chỉ còn vài phần trăm trong tổng số (đây là một siêu tham số bạn có thể lựa chọn – hãy đọc tài liệu scikit – learn để biết thêm chi tiết). Điều này đảm bảo rằng mô hình tập hợp không phụ thuộc nặng nề vào bất kỳ đặc điểm riêng lẻ nào, và đảm bảo công bằng trong việc sử dụng tất cả các đặc điểm có tiềm năng dự đoán.
(2)   Mỗi cây tạo ra một mẫu ngẫu nhiên từ tập dữ liệu gốc khi sinh các phần phân chia của nó, thêm một phần tử ngẫu nhiên nữa sẽ chặn được overfitting.
Những sửa đổi này cũng ngăn các cây không nằm trong thế tương quan quá cao. Với 2 điểm trên, mọi cây có thể được định danh, vì cách phân chia theo kiểu nhị phân hồi qui đều đã xác định.

Để minh họa, hãy nhìn 9 bộ phân loại bằng cây quyết định dưới đây:



9 bộ phân loại này có thể được tập hợp thành một rừng ngẫu nhiên kết hợp các đầu ra của chúng. Hãy nghĩ tới các tọa độ dọc và ngang của mỗi đầu ra cây quyết định như là các đặc điểm x1 và x2. Tại các giá trị xác định của mỗi đặc điểm, cây quyết định sẽ cho đầu ra được phân loại là “xanh da trời”, “xanh lá cây”, “đỏ”, …



Những kết quả này sẽ được tổng hợp lại, thông qua lấy bình chọn hoặc trung bình, trong mô hình tập hợp. Như vậy mô hình này cho đầu ra ưu việt hơn bất kỳ đầu ra của một cây quyết định đơn lẻ nào.

Rừng ngẫu nhiên là điểm khởi đầu tuyệt vời cho quá trình mô hình hóa, vì chúng có hiệu suất rất cao, độ dung lỗi lớn với các dữ liệu khó phân biệt rạch ròi và có thể hữu dụng khi tìm kiếm những đặc điểm gây ra vấn để trong số nhiều đặc điểm.

Còn có nhiều mô hình tập hợp thông minh hơn khác nữa, có thể kết hợp các cây quyết định và cho ra hiệu suất tuyệt vời – hãy đọc XGBoost (Extreme Gradient Boosting) như một ví dụ khác.

Như vậy, chúng ta đã nghiên cứu xong về học có giám sát!

Thật tuyệt. Trong phần này, chúng ta đã đi qua:
-          Hai thuật toán học có giám sát không tham số: k-NN và cây quyết định
-          Đo khoảng cách và lợi ích thông tin
-          Rừng ngẫu nhiên (ví dụ về một mô hình tập hợp)
-          Xác nhận chéo và xử lý các siêu tham số
Hy vọng giờ bạn đã có một số kiến thức cơ bản về cách chúng ta học f với tập dữ liệu đào tạo cho trước và dùng nó để dự đoán cho tập dữ liệu kiểm thử.
Tiếp theo, chúng ta sẽ nói về cách xử lý các bài toán với tập dữ liệu đào tạo không được gán nhãn, trong phần 3. Học không giám sát.
Để học thêm về phần này
Ứng dụng k-NN
Hãy thử đi sâu vào áp dụng k-NN bằng Python. Bạn có lẽ cũng muốn xem tài liệu scikit-learn để hiểu làm sao việc áp dụng các hàm xây dựng từ trước hoạt động được.
Cây quyết định
Thử thư viện cây quyết định trong chương 8 cuốn sách An Introduction to Statistical Learning. Nếu bạn thích tập dữ liệu Titanic, hãy đọc chỉ dẫn với các khái niệm liên quan kèm theo mã nguồn. Đó là cách áp dụng scikit-learn của rừng ngẫu nhiên khi áp dụng vượt phạm vi trên tập dữ liệu.


Vishal Maini
Samer Sabri

Thứ Ba, 10 tháng 10, 2017

Machine Learning cho mọi người - 1 Giới thiệu



Machine Learning cho mọi người
(Dành cho những người mới tìm hiểu về Trí tuệ nhân tạo/Machine Learning – Bài viết giải thích một cách đơn giản bằng toán, code, và các ví dụ từ thế giới thực)

Nội dung:
1.                  Tại sao Machine Learning lại có chuyện để nói? – Bức tranh lớn về trí tuệ nhân tạo và machine learning – quá khứ, hiện tại, và tương lai.
2.                  Học có giám sát (Supervised Learning).
I - Học tập với từ khóa trả lời. Giới thiệu các hàm hồi quy tuyến tính, hàm lỗi, overfitting, và phương pháp xuống đồi theo hướng vector đạo hàm (gradient descent)
II – Hai phương pháp phân loại: Hồi qui logistic và SVM.
III- Học không biến: k láng giềng gần nhất, cây quyết định, rừng ngẫu nhiên. Giới thiệu các mô hình kiểm chứng chéo, điều chỉnh siêu tham số (hyperparameter tuning) và tập biến chung.
3.                  Học không giám sát (Unsupervised Learning). Gồm: k – trung bình, cấu trúc phân cấp. Giảm chiều dữ liệu: phân tích thành phần chính (PCA), bình phương tối thiểu tuyến tính (SVD).
4.                  Mạng neuron và Học sâu (Deep Learning). Tại sao, ở đâu và làm cách nào deep learning hoạt động. Lấy cảm hứng từ bộ não. Các mạng neuron xoắn (CNN), mạng nơ ron tái phát (RNN). Các ứng dụng thế giới thực.
5.                  Học tăng cường (Reinforcement Learning). Thăm dò và khai thác. Qui trình ra quyết định Markov. Mô hình Q, học theo policy, mô hình học tăng cường sâu. Bài toán học theo giá trị.
6.                  Phụ lục: Các nguồn Machine Learning tốt nhất hiện nay. Danh sách các nguồn để bạn tạo chương trình machine learning của riêng mình.

Ai nên đọc bài viết này?
-                      Dân kỹ thuật muốn học thật nhanh machine learning
-                      Những ai không phải dân kỹ thuật nhưng muốn học vỡ lòng về machine learning và quyết chí tìm hiểu những khái niệm kỹ thuật
-                      Bất kỳ ai tò mò với việc máy móc tư duy như thế nào

Cuốn tài liệu này ai cũng có thể download miễn phí trên internet theo 2 cách như sau:
·         Bài viết gốc bằng tiếng Anh trên Medium: https://medium.com/machine-learning-for-humans/why-machine-learning-matters-6164faf1df12
·         hoặc file pdf trên dropbox:
·         bản dịch tiếng Việt tại blog này

Các khái niệm cơ bản về xác suất, thống kê, lập trình, đại số tuyến tính, và tích phân sẽ được nói đến, nhưng không cần phải có kiến thức về chúng từ trước mới hiểu được bài viết này.

Nếu bạn quan tâm hơn tới những tài nguyên, khóa học, sách vở nào cần đọc, dự án nào cần để mắt đến… thì hãy đọc thẳng phần Phụ lục: Các nguồn Machine Learning tốt nhất hiện nay.






Phần 1: Tại sao Machine Learning lại có chuyện để nói?



Trí tuệ nhân tạo (Artificial Intelligence – AI) sẽ định hình tương lai của chúng ta mạnh mẽ hơn bất kỳ phát minh nào khác trong thế kỷ này. Bất kỳ ai không hiểu nó sẽ nhanh chóng thấy mình bị bỏ lại phía sau, tỉnh giấc trong một thế giới toàn những công nghệ ngày càng kỳ ảo.

Tốc độ phát triển của nó thật đáng kinh ngạc. Sau những mùa đông AI và các giai đoạn đưa hy vọng đi lạc lối suốt hơn 4 thập kỷ qua, những tiến bộ nhanh chóng trong lưu trữ dữ liệu và sức mạnh xử lý của máy tính đã và đang dần dần thay đổi trò chơi này trong những năm gần đây.

Vào năm 2015, Google đã đào tạo một thực thể giao tiếp không chỉ có thể tương tác đáng tin cậy với con người trên vai trò nhân viên hỗ trợ kỹ thuật mà còn thảo luận được về đạo đức, thể hiện quan điểm và trả lời những câu hỏi chung chung dựa trên thực tế.



Cùng năm đó, DeepMind đã phát triển một thực thể vượt qua khả năng của con người trong các tựa game 49 Atari – vốn chỉ nhận pixel và điểm số trò chơi làm đầu vào. Ngay sau đó, năm 2016, DeepMind đã vứt bỏ thành tựu này bằng cách cho ra đời một phương pháp chơi game đỉnh cao mới có tên là A3C.

Trong khi đó, AlphaGo đánh bại một trong những người chơi cờ vây giỏi nhất với trò Go – một thành tựu cực kỳ đáng kinh ngạc trong trò chơi vốn dĩ luôn bị thống trị bởi con người suốt 2 thập kỷ qua sau khi máy móc lần đầu tiên chinh phục lĩnh vực chơi cờ. Nhiều bậc thầy cũng không thể hiểu được làm thế nào một cỗ máy có thể nắm bắt được toàn bộ sắc thái và sự phức tạp của trò chơi chiến thuật Trung Hoa cổ đại với 10.170 khả năng đi trên bàn cờ này (trong vũ trụ cũng chỉ có 1.080 nguyên tố).


Kỳ thủ cờ vây Lee Sedol đang xem lại trận đấu với AlphaGo sau khi bị đánh bại. Bức ảnh trên The Atlantic.

Vào tháng 3 năm 2017, OpenAI đã tạo ra các thực thể phát minh ra ngôn ngữ riêng của chúng để cộng tác và đạt mục tiêu của chúng một cách hiệu quả hơn. Ngay sau đó, Facebook cũng thông báo đào tạo thành công các thực thể của mình để thương lượng và thậm chí nói dối được.

Chỉ vài ngày trước (khi bài hướng dẫn này ra đời), vào ngày 11/08/2017, OpenAI đã chạm tới cột mốc không thể tin nổi khác khi đánh bại các cao thủ chuyên nghiệp hàng đầu thế giới trong những trận đấu 1-1 của trò game online nhiều người chơi Dota 2.


Xem trận đấu bản đầy đủ trong cuộc thi đấu quốc tế 2017 giữa Dendi (con người) với OpenAI (một con bot) trên YouTube

Nhiều công nghệ dùng hằng ngày của chúng ta đã được tăng cường sức mạnh bằng trí tuệ nhân tạo. Hãy trỏ camera của bạn vào thực đơn này trong chuyến đi lần tới đến Đài Loan và các danh mục lựa chọn trong nhà hàng sẽ xuất hiện thần kỳ bằng tiếng Anh thông qua ứng dụng Google Translate.


Google Translate đang phủ các đoạn dịch tiếng Anh lên thực đơn đồ uống theo thời gian thực bằng cách sử dụng mạng neuron xoắn.

Ngày nay AI được dùng để thiết kế các kế hoạch điều trị dựa trên triệu chứng cho bệnh nhân ung thư, phân tích kết quả tức thời từ các bài kiểm tra y tế tới đưa kết quả cho một chuyên gia phù hợp, và thực hiện nghiên cứu khoa học để tìm ra thuốc mới.

Chuyện gì xảy ra nếu một nhà khoa học có thể nhớ mọi bài báo từng đọc và đọc mọi bài báo từng được viết trong lĩnh vực y học, dược, sinh học, và hóa học…
… VÀ tạo ra những khoảnh khắc eureka từ kiến thức này – hãy tưởng tượng qui mô và tốc độ tuyệt vời của các khám phá có thể được tạo ra mà xem.
BenevolentAI làm điều này 100 lần mỗi ngày.” – Lời tuyên bố gây ấn tượng mạnh của BenevolentAI ở Luân Đôn (trên trang About Us, tháng 8 năm 2017).

Những người thực thi pháp luật đang sử dụng nhận dạng hình ảnh và xử lý ngôn ngữ tự nhiên để tìm dấu vết trong các cảnh quay cơ thể. Tàu du hành sao Hỏa Curiosity thậm chí còn dùng AI để tự động lựa chọn các mẫu đất đá có giá trị thí nghiệm với độ chính xác cao.

Trong đời sống hằng ngày, ngày càng có nhiều máy móc chiếm giữ những vai trò mà con người có truyền thống nắm giữ. Quả thực, đừng ngạc nhiên nếu xuất hiện một con bot cung cấp dịch vụ chăm sóc nhà cửa phòng ốc thay cho con người khi bạn yêu cầu lễ tân khách sạn gửi cho một ít kem đánh răng.

Trong bài viết này, chúng ta sẽ khám phá những khái niệm về machine learning cốt lõi phía sau những công nghệ này. Cuối cùng, bạn có thể mô tả chúng làm việc thế nào ở mức khái niệm và được trang bị các công cụ để bắt đầu tự xây dựng các ứng dụng tương tự cho riêng mình.

Cây cú pháp trừu tượng: Trí tuệ nhân tạo và Machine Learning

Một lời khuyên nhỏ: việc nhìn nhận tri thức dưới dạng cây cú pháp trừu tượng rất quan trọng – nó đảm bảo giúp bạn hiểu các nguyên tắc căn bản, ví dụ thân cây và các cành lớn, trước khi bạn đi vào các cái lá/chi tiết hoặc chẳng có gì để mà treo lên đó.” – Elon Musk, từ Reddit AMA.


Machine learning là một trong nhiều lĩnh vực con của trí tuệ nhân tạo, liên quan đến cách máy tính học từ kinh nghiệm để cải thiện cách suy nghĩ, lập kế hoạch, quyết định, … của nó.

Trí tuệ nhân tạo là việc nghiên cứu các thực thể nhận biết được thế giới xung quanh chúng, tạo ra các kế hoạch, và ra các quyết định để đạt được mục đích của chúng. Việc hình thành nên lĩnh vực trí tuệ nhân tạo còn kéo theo nhiều lý thuyết toán học, logic, triết học, xác suất thống kê, ngôn ngữ học, thần kinh học, và các lý thuyết ra quyết định. Nhiều lĩnh vực mới cũng ra đời dưới cái ô AI, chẳng hạn như thị giác máy tính (computer vision), robot, machine learning, xử lý ngôn ngữ tự nhiên…

Machine learning là một lĩnh vực con của trí tuệ nhân tạo. Mục tiêu của nó là cho phép các máy tính tự học. Thuật toán học tập cho một cỗ máy cho phép nó xác định các mẫu trong dữ liệu quan sát được, xây dựng nên các mô hình để giải thích thế giới, và tiên đoán mọi thứ mà không cần những qui tắc và mô hình được lập trình trước cụ thể nào.

Hiệu ứng AI: Cái gì mới thực sự đáng gọi là “trí tuệ nhân tạo”?
Tiêu chuẩn chính xác đối với công nghệ thỏa mãn cái gọi là “AI” hơi mập mờ một chút, và những lời giải thích cho nó cứ thay đổi theo thời gian. Cái mác AI có khuynh hướng mô tả những cỗ máy làm những tác vụ truyền thống với vai trò là con người. Thật thú vị làm sao, một khi các máy tính biết phải làm một trong những tác vụ này thế nào thì con người sẽ có khuynh hướng bảo đó không thực sự là “trí tuệ”. Cái này được biết đến với tên gọi “Hiệu ứng AI”.
Ví dụ, khi Deep Blue của IBM đánh bại nhà vô địch cờ vua thế giới Garry Kasparov năm 1997, người ta chê bai rằng nó đã sử dụng những phương pháp “ép buộc thô thiển” và điều đó hoàn toàn không phải là “trí tuệ” thực sự. Pamela McCorduck viết: “Có một thời kỳ trong lịch sử của lĩnh vực trí tuệ nhân tạo, khi mỗi lần ai đó khám phá ra cách làm máy tính thực hiện được một việc gì đó – làm kiểm kê hoàn hảo, giải được những bài toán đơn giản nhưng tương đối bất thường – sẽ có giọng điệu phê phán vang lên rằng “đó không phải là cách để tư duy”. (McCorduck, 2004).
Có lẽ khi nào xuất hiện câu je ne sais quoi (tôi không biết) thì người ta mới thực sự chấp nhận cái đó là “trí tuệ nhân tạo”.
“AI là bất kỳ thứ gì chưa từng được làm.” – Douglas Hofstadter
Vậy một bàn tính thực hiện phép toán có giống AI không? Có lẽ phải cần chút ít giải thích. Còn một chiếc xe tự lái? Ngày nay thì đúng. Trong tương lai có lẽ không. Doanh nghiệp startup mới và rất tức thời của bạn làm về chatbot tự động thực hiện các flow chart thì sao? Chắc chắn rồi… tại sao lại không chứ.

AI hùng mạnh sẽ thay đổi thế giới của chúng ta vĩnh viễn; để hiểu bằng cách nào, nghiên cứu machine learning là cách tốt nhất để bắt đầu.

Các công nghệ thảo luận ở trên là những ví dụ về trí tuệ nhân tạo hẹp (Artificial Narrow Intelligence – ANI), chúng chỉ có thể thực hiện hiệu quả một hoặc vài tác vụ trong phạm vi hẹp.

Trong lúc đó, chúng ta vẫn tiếp tục tạo ra những tiến bộ căn bản hướng về trí tuệ nhân tạo tổng quát cấp độ con người (Artificial General Intelligence – AGI), còn gọi là AI mạnh. Định nghĩa về AGI là một kiểu trí tuệ nhân tạo có thể thực hiện thành công bất kỳ tác vụ đòi hỏi trí tuệ mà con người có thể làm được, gồm có học tập, lập kế hoạch, và ra quyết định trong điều kiện không chắc chắn, giao tiếp bằng ngôn ngữ tự nhiên, pha trò, thao túng con người, giao dịch chứng khoán,… hay tự lập trình lại chính nó.

Và cái cuối cùng kia là một cuộc ăn thua lớn. Nếu chúng ta tạo ra một AI có thể tự cải thiện chính mình, nó có thể phá vỡ chu trình tự cải thiện bản thân một cách lặp đi lặp lại để tạo ra sự bùng nổ trí tuệ trong một khoảng thời gian chúng ta không đoán được nào đó, có thể nhiều thập kỷ hoặc có thể chỉ mất một ngày.

Hãy để một cỗ máy siêu thông minh được định nghĩa là cỗ máy có thể vượt xa tất cả các hoạt động trí tuệ của bất kỳ người nào, dù thông minh đến đâu. Vì thiết kế máy móc là một trong các hoạt động trí tuệ kiểu đó, cỗ máy siêu thông minh có thể thiết kế ra những cỗ máy tốt hơn; sau đó không nghi ngờ gì nữa, sẽ có một “sự bùng nổ trí tuệ”, và trí tuệ con người sẽ bị bỏ lại rất xa phía sau. Thế là cỗ máy siêu thông minh đầu tiên sẽ là phát minh cuối cùng con người tạo ra được, do đó cỗ máy đó phải đủ ngoan ngoãn để nói cho chúng ta hãy luôn giữ nó trong vòng kiểm soát.” – I.J. Good, 1965.

Bạn có lẽ từng nghe có điểm kỳ dị. Thuật ngữ này vay mượn từ điểm kỳ di trong luật hấp dẫn xảy ra ở tâm hố đen, điểm một chiều có độ đặc vô cùng mà các luật vật lý chúng ta biết đều bắt đầu bị phá vỡ tại đó.



Chúng ta có thị giác bằng không với những gì xảy ra trong chân trời sự kiện của hố đen vì không ánh sáng nào có thể thoát ra khỏi đó. Tương tự, sau khi chúng ta mở khóa cho khả năng của AI để nó tự cải thiện theo cách hồi qui, chúng ta không thể tiên đoán được những gì sẽ xảy ra, giống như một con chuột thiết kế ra một con người – thực thể này có thể gây rắc rối cho thế giới của chúng. Liệu việc này có giúp chúng có thêm pho mát hơn không, như chúng dự định ban đầu? (Hình ảnh từ WIRED)

Báo cáo gần đây của Viện Tương Lai Nhân Loại đã khảo sát một nhóm các nhà nghiên cứu AI về khung thời gian cho AGI, và thấy rằng “các nhà nghiên cứu tin rằng có 50% cơ hội để AI hoàn thành xuất sắc hơn con người trong mọi tác vụ trong vòng 45 năm nữa.” (Grace et al, 2017). Chúng tôi đã đích thân nói chuyện với một số người có chuyên môn về AI một cách thành thạo và thận trọng có tiên đoán dài hơn (giới hạn trên là “không bao giờ”), và cả những người đưa ra khoảng thời gian ngắn đến mức báo động – chỉ khoảng vài năm.


Bức ảnh Điểm kỳ dị đang ở gần của Kurzweil, xuất bản năm 2005. Giờ là năm 2017, chỉ còn vài tấm áp phích có thể giữ lại được trên tường.

Sự ra đời của siêu trí tuệ nhân tạo (Artificiel Superintelligence – ASI) lớn hơn cấp độ con người nhiều lần có thể sẽ là điều tốt nhất hoặc tệ nhất xảy ra với giống loài của chúng ta. Nó kéo theo thách thức vô tận do phải xác định những gì AI muốn theo cách thân thiện với con người.

Trong lúc không thể nói được những gì sẽ xảy ra trong tương lai, một điều chắc chắn là: 2017 là thời điểm tốt để bắt đầu tìm hiểu xem máy móc tư duy thế nào. Đi sâu vào những khái niệm trừu tượng của triết lý ghế bành và định hướng lộ trình cùng các chiến lược của chúng ta một cách thông minh bằng sự tôn trọng với AI, chúng ta sẽ phải hiểu chi tiết máy móc nhìn nhận thế giới thế nào – chúng muốn gì, các định kiến tiềm tàng và các chế độ thất bại của chúng, những mưu kế thuộc về tính cách của chúng – cũng giống như chúng ta nghiên cứu tâm lý học và thần kinh học để hiểu con người học hỏi, quyết định, hành động và cảm thấy thế nào.

Sẽ có nhiều câu hỏi phức tạp, đánh cược cao về AI đòi hỏi chúng ta thật thận trọng chú ý trong vài năm tới.
Làm sao chúng ta có thể chống lại xu thế phát triển của AI trước những thành kiến có hệ thống trong các bộ dữ liệu hiện có? Chúng ta nên làm gì trong những bất đồng cơ bản giữa các nhà công nghệ hùng mạnh nhất thế giới về những rủi ro cùng lợi ích tiềm ẩn của trí tuệ nhân tạo? Cách tiếp cận công nghệ nào hứa hẹn nhất để dạy các hệ thống AI biết cách cư xử? Điều gì sẽ xảy ra với ý thức về mục đích của con người trong thế giới không còn việc làm?”

Machine learning là cốt lõi trong hành trình của chúng ta hướng tới trí tuệ nhân tạo tổng hợp (AGI), và tới thời điểm thích hợp, nó sẽ làm thay đổi mọi ngành công nghiệp và có tác động cực kỳ to lớn tới đời sống hằng ngày của con người. Đó là lý do tại sao chúng tôi tin việc hiểu biết về machine learning rất có giá trị, ít nhất là ở mức khái niệm – và chúng tôi thiết kế bài hướng dẫn này để mọi người bắt đầu một cách tốt nhất.

Đọc bài hướng dẫn này thế nào?
Bạn không cần đọc từ đầu đến cuối mới thu được giá trị từ bài viết này. Có 3 gợi ý về cách đọc, phụ thuộc vào mối quan tâm của bạn và việc bạn có bao nhiêu thời gian:
1.      Hướng tiếp cận hình chữ T. Đọc từ đầu đến cuối. Tóm tắt mỗi phần theo cách của bạn (dùng kỹ thuật Feynman); cách này khuyến khích việc đọc một cách chủ động và nhớ lâu. Đi sâu hơn vào nhưng phần liên quan nhiều nhất tới sở thích hoặc công việc của bạn. Chúng tôi có đề cập tới những tài nguyên để tìm hiểu ở cuối mỗi phần.
2.      Hướng tiếp cận tập trung. Nhảy thẳng tới phần bạn tò mò nhất và tập trung năng lượng tư duy của bạn vào đó.
3.      Hướng tiếp cận 80/20. Đọc lướt toàn bộ trong một lần, ghi chú lại những khái niệm mức độ cao cần quan tâm, sau đó đọc lại nó vào buổi tối.

Về các tác giả


“OK, chúng ta phải làm xong phần gradient descent khi uống xong cốc bia này.” – Tại The Boozy Cow ở Edinburgh

Vishal gần đây nhất đang dẫn dắt sự phát triển lớn mạnh tại Upstart, một nền tảng cho vay dùng machine learning để định giá tín dụng, tự động hóa quá trình cho vay, và thu hút người dùng. Anh dành nhiều thời gian cho các startup, áp dụng khoa học nhận dạng, triết lý đạo đức và luân lý cho trí tuệ nhân tạo. (Liên hệ: vishal.maini@gmail.com)

Samer đang học thạc sĩ ngành Khoa học và Kỹ thuật máy tính tại UCSD và đồng sáng lập Conigo Labs. Trước khi tốt nghiệp đại học, anh đã lập nên TableScribe, một công cụ kinh doanh thông minh cho SMB, và dành 2 năm tư vấn cho các công ty trong Fortune 100 tại McKinsey. Samer trước đây nghiên cứu Khoa học Máy tính và Đạo đức, Chính trị, Kinh tế tại Yale. (Liên hệ: samrsabri@gmail.com)

Hầu hết bài hướng dẫn được viết trong hành trình 10 ngày tới Vương quốc Anh, trong sương mù điên đảo của tàu hỏa, máy bay, café, quán rượu và bất cứ nơi nào nữa mà chúng tôi có thể tìm thấy một chỗ khô ráo để ngồi.

Mục đích của chúng tôi là củng cố sự hiểu biết của chính mình về trí tuệ nhân tạo, machine learning và cách các phương thức phối hợp với nhau – hy vọng tạo ra một cái gì đó giá trị để chia sẻ trong hành trình.

Và bây giờ, không cần náo nhiệt hơn nữa, hãy bắt đầu đi vào thế giới của machine learning với Phần 2: Học có giám sát!

Vishal Maini
Samer Sabri