Monday, November 28, 2016

Machine Learning là gì?

Mấy hôm nay có vài bạn viết email hỏi tôi machine learning (ML) là gì và có cần học thêm không? Tôi nghĩ câu trả lời cho câu thứ hai là "Yes" – lúc nào cũng cần phải học thêm. Hôm kia, nhân đọc một bản tin cho biết con rể ông Trump (Jared Kushner) đã sử dụng ML để giúp cho nhạc phụ đắc cử, tôi có cảm hứng viết thêm một chút về ML ...



Hai chữ "Machine Learning" được đề cập rất nhiều trong các diễn đàn khoa học. Mấy tháng gần đây trong các tập san y khoa, kể cả chuyên ngành loãng xương, có đi nhiều bài về nguyên lí và ứng dụng của ML trong nghiên cứu lâm sàng. Tôi mới duyệt một bài cho CTI. Trong di truyền học, nhiều bài báo về ứng dụng ML được công bố với nhiều kết quả rất triển vọng, và chính nhóm chúng tôi cũng đã có ứng dụng thành công. Như là một trào lưu mới, ML đã gây được tiếng vang trong khoa học, và do đó chúng ta cần phải tìm hiểu và phải học để có một cách suy nghĩ mới, một cái nhìn mới cho vấn đề mà chúng ta quan tâm.

Nhưng thú thật, đọc qua những bài đó mà nếu không có kiến thức về thống kê học thì rất khó hiểu. Khó hiểu vì những thuật ngữ mới, và nhất là cách viết của các tác giả giả định rằng người đọc đã có kiến thức cơ bản. Do đó, người mới vào nghề hay người đang tìm hiểu về ML sẽ cảm thấy lẫn lộn giữa những thuật ngữ như statistical learning và machine learning, neural network, supervised và unsupervised learning, random forest, kNN cross-validation, v.v. vốn là "ngôn ngữ" của giới khoa học máy tính. Do đó, trong cái note này tôi muốn giải thích theo cách hiểu của tôi về ML và hi vọng các bạn sẽ hiểu rõ hơn về ML.

1. Machine Learning là gì?

Có người ta dịch Machine Learning là "Học Máy", nhưng tôi thì nghĩ dịch đúng hơn là "Mô hình hoá bằng máy". Lí do là ở ý nghĩa của chữ "learning", không hẳn có nghĩa đen là 'học', mà là mô hình hoá. Tại sao learning? Thực chất của ML là tìm mô hình thích hợp từ dữ liệu mẫu (sample data), và dùng cái mô hình đó để tiên lượng cho quần thể (population) hay các mẫu dữ liệu khác.

Quá trình "learning" gồm 2 bước: bước 1 là xây dựng hệ thống phụ thuộc giữa các biến số (dependencies); và bước 2 là dùng hệ phụ thuộc để tiên lượng cho quần thể. Ở đây, cái gọi là "hệ thống phụ thuộc" chính là mô hình hoá dữ liệu, tức là "data modelization". Nói cách khác nữa, cái gọi là "learning" trong ML chính là "fitting" trong thống kê học. Hiểu đúng như thế thì chúng ta dễ dàng thấy Machine Learning thực chất là "mô hình hoá bằng máy tính."

Có hai phương pháp mô hình hoá: có giám sát (supervised learning) và không có giám sát (unsupervised learning). Mô hình hoá có giám sát bao gồm các mô hình như hồi qui tuyến tính, linear classification, logistic regression, Cox's regression. Mô hình hoá không giám sát bao gồm phân tích cụm (cluster analysis) và phân tích đa biến như PCA và factor analysis.

Để đánh giá "accuracy", cái "bí quyết" của ML là huấn luyện (training) và kiểm định (testing). Nói cách khác, ML chia một dataset ra thành hai nhóm: nhóm huấn luyện để mô hình hoá dữ liệu, và sau khi mô hình xong thì áp dụng cho nhóm thử nghiệm. Qui trình này lặp đi lặp lại rất nhiều lần theo nguyên lí bootstrap mà ai học thống kê học cũng biết qua. Thật ra, ai học về mô hình trong thống kê học đều biết đến training và testing, nên cách làm này không có gì mới.

Thật vậy, nhiều khái niệm của ML không có gì khác với thống kê học; nếu khác thì chỉ là cách gọi. Chẳng hạn như ML gọi là target, thì thống kê học gọi là outcome hay response; bias của ML chính là intercept trong thống kê; weight trong ML là beta coefficient trong thống kê; loss function trong ML là residual trong thống kê; feature selection trong ML thì chính là variable selection trong thống kê; vân vân. Hiểu như thế thì chúng ta thấy rằng ML cũng có thể xem là một cách gọi khác của thống kê học hiện đại.

2. Machine learning và statistical learning (SL)

Có gì khác biệt giữa ML và SL? Thú thật, cá nhân tôi không thấy khác biệt gì lớn giữa hai thuật ngữ này. Trước đây, tôi đọc cuốn Statistical Learning của Trevor Hastie, Rob Tibshirani và Jerome Friedman, rồi sau này đọc qua vài cuốn sách về ML thì thấy rất giống nhau. Có lẽ "thần dân" thống kê học thì gọi là Statistical Learning, còn dân khoa học máy tính thì gọi là Machine Learning.

Nhưng có một chút khác biệt giữa ML và khoa học thống kê. Nhiều người nghĩ là không, nhưng tôi nghĩ là có. Các mô hình thống kê chính là cơ chế của ML. Thống kê học đặt nặng vấn đề giả định (assumptions) trong việc xây dựng mô hình, nhưng ML thì đặt nặng độ chính xác của mô hình. Chẳng hạn như để xây dựng mô hình tiên lượng hồi qui tuyến tính, thống kê học rất quan tâm đến các giả định như phân bố chuẩn, đồng dạng phương sai, và tính độc lập giữa các giá trị. Nhưng ML quan tâm nhiều đến việc huấn luyện mô hình của sao cho mô hình đó có thể tiên lượng chính xác khi áp dụng cho một quần thể khác. Nói như thế không có nghĩa là thống kê học không quan tâm đến độ chính xác của mô hình, mà chỉ muốn nói về ưu tiên của hai cách tiếp cận về mô hình tiên lượng.

Ngoài ra, thống kê học quan tâm đến mô hình để đánh giá tầm quan trọng của yếu tố tiên lượng (qua các kiểm định thống kê), còn ML thì không quan tâm đến ý nghĩa thống kê của các yếu tố trong mô hình. Đối với ML, một yếu tố có thể không có ý nghĩa thống kê nhưng có thể là một yếu tố tiên lượng tốt. Như vậy, thống kê học và ML khác biệt chủ yếu ở yếu tố "văn hoá": một bên là quan tâm đến association (liên quan) và một bên là prediction (tiên lượng).

3. Phân biệt giữa association và prediction

Trong nhiều nghiên cứu khoa học, mục tiêu là giải thích mối liên quan giữa các yếu tố. "Yếu tố" ở đây có thể là gen, là bệnh lí, hay nói theo ngôn ngữ thống kê là biến độc lập (X) và biến phục thuộc ( Y ), hay nói theo ngôn ngữ dịch tễ học là yếu tố nguy cơ và outcome.

Để giải thích mối liên quan giữa bệnh lí ( Y ) và yếu tố nguy cơ (X), chúng ta cần phải phát biểu một giả thuyết khoa học. Giả thuyết là một phát biểu mang tiếng tiên lượng về mối liên quan giữa Y và X. Từ giả thuyết khoa học, chúng ta triển khai thành giả thuyết thống kê. Từ giả thuyết thống kê, chúng ta triển khai thành mô hình thống kê. Đã nói là "mô hình" thì phải có hàm số, và ở đây là tìm hàm số của X để giải thích mối liên quan giữa Y và X. Hàm số có thể là tuyến tính (ví dụ như mô hình hồi qui tuyến tính) hay phi tuyến tính. Sau đó, chúng ta dùng dữ liệu thu thập từ thí nghiệm để ước tính tham số của mô hình thống kê. Qua ước tính tham số và kiểm định thống kê (test of significance), chúng ta có thể biết X có liên quan với Y hay không, và mức độ liên quan cao thấp ra sao. Như vậy, toàn bộ qui trình nghiên cứu, từ phát biểu giả thuyết đến kiểm định thống kê, là một quá trình đi tìm mối liên quan, hay nói theo thuật ngữ dịch tễ học lâm sàng là đi tìm association (hoặc có khi đề cập đến là relationship).

Với ML, chúng ta có thể đi một bước xa hơn association. Bước đó là prediction – tiên lượng (hay dự báo). Với ML, chúng ta có thể tiên lượng biến cố xảy ra trong tương lai. Phân tích association cho phép chúng ta phát biểu chung về mối liên quan giữa X và Y. Phân tích prediction cho phép chúng ta tiên lượng giá trị của Y cho mỗi cá thể (individual) nếu chúng ta biết giá trị của X của cá thể đó.

Nhưng tiên lượng tương lai có thể đúng, có thể sai. Do đó, ML có hẳn một loạt "thủ thuật" để đánh giá khả năng tiên lượng của một mô hình thống kê. Đối với biến liên tục, cách đánh giá mô hình của ML bao gồm những thủ thuật có tên khó hiểu là "loss function", nhưng trong thực tế đó là phân tích dao động dư (residual analysis) mà ai học thống kê cũng đều biết. Đối với biến outcome là biến phân nhóm (như có hay không có bệnh), ML tính các chỉ số gọi la "accuracy" trong cái gọi là "confusion matrix", mà người làm dịch tễ học ai cũng biết đó chính là độ nhậy (sensitivity) và độ đặc hiệu (specificity). Cũng như dịch tễ học, ML cũng dùng AUC để đánh giá mô hình tiên lượng. Nhưng ML chưa/không quan tâm đến calibration và reclassification trong việc đánh giá mô hình tiên lượng.

Nhưng ML có những đóng góp quan trọng trong việc kiểm định mô hình tiên lượng. Trước đây, thống kê học chỉ dừng ở những phương pháp như testing / validation hay bootstrap, nhưng ML cung cấp cho chúng ta hàng loạt phương pháp rất hấp dẫn và cực kì có ích cho việc phân tích dữ liệu lớn. Những phương pháp đó bao gồm random forest, neural network, k-nearest neighbours, partial least squares, boosted generalized additive model, support vector machine (thực chất là hồi qui tuyến tính mở rộng), classification, v.v. Trong thực tế, những phương pháp này cũng xuất phát hoặc xây dựng trên lí thuyết thống kê, nhưng có giao thoa với khoa học máy tính.

Những phương pháp trên rất có ích trong thời đại dữ liệu lớn. Ngày xưa, giới khoa học thường làm nghiên cứu ở qui mô tương đối mà theo đó số biến độc lập (independent variables) ít hơn số cỡ mẫu. Nhưng ngày nay, nhiều nghiên cứu mà số biến độc lập cao gấp ngàn lần số cỡ mẫu. Chẳng hạn như trong nghiên cứu gồm 100 bệnh nhân và 100 người không bệnh, mỗi cá nhân được phân tích khoảng 500,000 biến thể gen. Đây là vấn đề được gọi tắt là p >> n hay "curse of dimensionality". Trong các nghiên cứu này (ngày càng phổ biến), các phương pháp thống kê cổ điển không còn thích hợp nữa, và các phương pháp ML cung cấp cho chúng ta một số giải pháp rất hấp dẫn.

Do đó, chúng tôi muốn thử nghiệm một cách giảng mới về ML mà có lẽ chưa ai làm trước đây. Trong lớp học sắp tới ở TDT, chúng tôi sẽ giới thiệu một loạt mô hình tiên lượng như hồi qui tuyến tính, phi tuyến tính, logistic, Cox's. Mỗi mô hình, sẽ có hai phần: phần đầu là ước tính tham số và diễn giải ý nghĩa của các tham số (tức là phần association); phần hai là dùng cách tiếp cận của ML để tiên lượng (tức là prediction). Tôi nghĩ cách tiếp cận này sẽ giúp ích cho các bạn làm quen và hiểu cách ứng dụng các mô hình thống kê cho association và prediction, và qua đó giúp các bạn có cách suy nghĩ mới trong nghiên cứu khoa học.

Chương trình học tháng 1/2017:

1. Giới thiệu chương trình học 
2. Giới thiệu ngôn ngữ R 
3. Cú pháp, input và output 
4. Phân tích mô tả với R 
5. Xây dựng biểu đồ dùng R: cơ bản 
6. Xây dựng biểu đồ dùng R: ggplot2 
7. Mô hình hồi qui tuyến tính đơn biến 
8. Phân tích dao động dư (residual analysis) 
9. Mô hình hồi qui tuyến tính đa biến 
10. Mô hình hồi qui tuyến tính với biến phân loại và tương tác
11. Hồi qui đa thức 
12. Hồi qui tuyến tính: PLS, Ridge, GLASSO

Supervised learning: 
13. Giới thiệu các phương pháp machine learning: training vs testing
14. Random forest 
15. Support vector machine 
16. kNN 
17. Mô hình hồi qui logistic đơn biến 
18. Mô hình hồi qui logistic đa biến 
19. Các phương pháp chọn mô hình tối ưu (model selection) 
20. Đánh giá mô hình: discrimination
21. Đánh giá mô hình: calibration
22. Đánh giá mô hình: reclassification 
23. ML cho mô hình hồi qui logistic: random forest, prediction

Unsupervised learning 
24. Cluster analysis 1: khái niệm 
25. Cluster analysis 2: mô hình và kĩ thuật 
26. Dimensionality reduction
27. Mô hình thành tố (Principal component model) 
28. Mô hình Cox's 
29. Ước tính cỡ mẫu

Đăng kí và liên lạc
·                Học viên sẽ đăng kí từ ngày ra thông báo đến hết ngày 23/12/2016.
·                Lệ phí khóa học: 4 triệu đồng/học viên (bao gồm sách, tài liệu giảng dạy, và teabreak trong suốt 10 ngày học). Đối với học viên ghi danh lớp cơ bản (5 ngày đầu), chi phí là 2 triệu đồng/học viên. Nghiên cứu sinh sẽ được giảm 50% học phí.
·                Mọi thông tin vui lòng liên hệ: Phòng quản lý phát triển khoa học và công nghệ (ThS. Nguyễn Hoàng Nam), Phòng A303, số 19, Đường Nguyễn Hữu Thọ, P. Tân Phong, Q.7, TP. HCM.
·                Điện thoại: (08) 37755 037. Emailnguyenhoangnam@tdt.edu.vn


No comments: