Tự nhiên hôm nay mình search được 1 blog về Machine Learning bằng tiếng Việt rất hay và trình bày rất đầy đủ và cơ bản trong ML – các bạn thử check it out nhé)
http://machinelearningcoban.com/
Nhân tiện đây, mình cũng viết một vài ý thêm về tổng quan về Machine Learning hoặc một cách chính xác hơn là về Statistical Machine Learning (SML) (hầu như Machine Learning hiện nay đều dựa trên dữ liệu, nên không có gì lạ khi mọi người thường bỏ qua chữ Statistical) 🙂
1. Arguably, SML là khoa học thống kê tập trung vào prediction (dự đoán), scalability (khả năng mở rộng), và các bài toán trong high dimensional data.
a. Prediction
Trước hết, nếu như khoa học thống kê truyền thống tập trung vào các bài toán inference suy luận (ước lượng, kiểm định giả thuyết), thì SML tập trung vào dự đoán (prediction). Có thể thấy sự khác biệt giữa 2 loại bài toán này qua ví dụ đơn giản sau. Giả sử bây giờ bạn đang nghiên cứu nhóm đối tượng khách hàng cho 1 sản phẩm của công ty .
- Với bài toán suy luận truyền thống, câu hỏi sẽ cần được trả lời là: Xét chung trên toàn bộ người dân Việt Nam (tổng thể – population), những người có đặc điểm như thế nào thì sẽ có khả năng mua hàng của bạn cao hơn? Ví dụ như đặc điểm về độ tuổi, giới tính, thu nhập, nghề nghiệp, v.v. Độ quan trọng của các yếu tố như thế nào và khả năng mua hàng là bao nhiêu?
- Với bài toán dự đoán, câu hỏi cần được trả lời có vẻ như là: Anh A, tuổi 25, làm giám đốc, thu nhập 30 triệu/tháng, học vấn cử nhân, khả năng mua sản phẩm là bao nhiêu :))
Nếu xét 2 bài toán trên, về mặt lí thuyết, tưởng chừng như nếu bạn giải quyết được bài toán suy luận tốt, bạn ít nhất có thể có rất nhiều gợi ý để làm tốt bài toán dự đoán ở dưới. Tuy vậy, điều này chưa chắc đã đúng. Bởi vì, trong khi chúng ta suy luận dựa trên những gì chúng ta đã quan sát được trong quá khứ, dữ liệu mà ta cần dự đoán trong tương lai có thể khác xa những gì dữ liệu chúng ta đã nhìn thấy. Ví dụ như ở trên, nếu trong database của bạn không có một người tương tự như anh A mô tả ở trên, liệu mô hình bạn có thể đưa ra từ việc suy luận có đưa được kết luận gì về khả năng mua hàng của anh A?
Nếu thực sự mô hình của bạn gần như không thể đưa ra được kết luận gì cho một người như anh A, kết quả suy luận hay model của bạn đã bị overfit (quá khít) – nó chỉ hợp lí cho cái data bạn đã quan sát được. Nếu mục tiêu của bạn là bài toán dự đoán, bạn cần tránh việc này. Overfit là một khái niệm quan trọng chỉ xuất hiện trong bài toán dự đoán mà không xuất hiện trong bài toán suy luận.
Hướng đi ở trên cho bài toán dự đoán là đi qua bài toán suy luận từ những gì quan sát được ra một tổng thể lớn hơn, sau đó điều chỉnh kết quả suy luận để dự đoán để tránh overfit. Tuy vậy, nhìn chung, bài toán suy luận cũng chẳng thường phải là một bài toán dễ dàng – ví dụ chỉ với mô hình linear regression đơn giản, cũng đã có đủ thứ phải lo (từ multicolinearity, variable selection, endogenity, cho tới heteroskedasticity), vậy nên, tại sao không đi đường khác để đến cùng mục đích ?
Rất nhiều phương pháp mới ra đời trong SML, từ regularization, non-parametric regression, cho tới kernel methods, neural network v.v, chỉ khám phá cấu trúc và quy luật (pattern/structure) những gì quan sát được, bỏ qua phần suy luận ra tổng thể, mà vẫn giúp dự đoán mô hình tốt. Bạn hiếm khi nghe thấy p-value hay khoảng tin cậy khi làm SML – đó là những phần suy luận ra tổng thể được bỏ qua. Thay vào đó, bạn sẽ nghe nhiều hơn về loss function (hàm mất mát), hàm rủi ro (risk function), cross-validation, tuning parameters cho việc dự đoán 🙂
b. Scalability
Dữ liệu giờ ngày càng lớn, nên dù giờ bạn muốn suy luận hay dự đoán, vấn đề thời gian nhanh hay chậm trong việc tính toán cũng trở thành vấn đề đáng bàn. Như mình nói trong Phần 1 của FAQ, khi số lượng quan sát tăng lên 4 lần và số lượng features (X) tăng lên 3 lần, một phương pháp giản đơn như hồi quy tuyến tính (linear regression) cũng tốn thời gian thêm khoảng 48 lần. Các phương pháp hiện đại và phức tạp thường không có các closed-form solution, nên cần sử dụng các iterative algorithms (thuật toán lặp lại) hay các simulation (giả lập) cho các bài toán optimization (tối ưu), đặc biệt là non-convex optimization để tính ra các kết quả xấp xỉ. Do đó, làm thế nào đê tính toán nhanh ra được kết quả đủ tốt cũng thành một thách thức.
Scalability đặc biệt trở thành problem với những kiểu dữ liệu tương đối mới như hình ảnh, giọng nói, video, text, và/hoặc high-frequency data (sensor, traffic data, v.v). Ví dụ, rất nhiều robot cần có khả năng nhận dạng đồ vật từ các dữ liệu nhân được từ môi trường theo từng phút từng giây – không thể sử dụng các thuật toán hay phương pháp mất tới hàng giờ để chạy và cho ra kết quả.
c. High-dimensional data
Cũng như mình đã giới thiệu trong note phần 1, high-dimensional data là một regime khi số lượng quan sát nhỏ hơn số chiều của biến. Vì đặc điểm này, rất nhiều phương pháp cổ điển của thống kê truyền thống khó được áp dụng. (Bạn có thể đọc thêm về các data regime trong FAQ phần 1).
*******************
Cuối cùng, mình cho rằng SML nói chung vẫn là statistics, vẫn là việc bạn học được gì từ dữ liệu. Không ai làm SML có thể bỏ qua được những nền tảng quan trọng về các probability distribution (phân phối xác suất), linear regression (hồi quy tuyến tính), generalized linear model (hồi quy tuyến tính tổng quát), Bayesian methods, … Rất nhiều phương pháp hiện đại ngày nay được bắt nguồn từ các phương pháp cổ điển (ví dụ, original neural network có rất nhiều nét tương tự với b-spline hay non-parametric regression nói chung). Nếu bạn quan tâm tới việc vì sao các phương pháp work, cơ sở của các phương pháp đều bắt nguồn từ các lí thuyết xác suất và thống kê (ví dụ concentration of measure, VC dimension, gaussian and sub-gaussian process, etc.)
2. Các themes lớn trong SML: convexity, sparsity, and assumptions.
a. Convexity
Vì hầu như các method trong SML đều liên quan tới các bài toán tối ưu (optimization) (nói nôm na là tìm min-max của một hàm số), một điều luôn được quan tâm là liệu bài toán tối ưu liên quan có phải là convex hay không. (Technical note: Định nghĩa về convexity tương đối chặt chẽ về mặt toán học (có thể so sánh convexity và non-convexity như trong hình vẽ phía trên), nhưng tính chất quan trọng nhất của convexity đó là điểm cực tiểu của hàm số (local minimum) cũng chính là điểm tối ưu của bài toán (global minimum)
. Nếu bài toán là convex, các phương pháp tìm ra điểm tối ưu trở nên dễ dàng hơn nhiều.
Rất nhiều method trong SML có được tính hiệu quả cả về mặt phương pháp và khả năng mở rộng (regularization, PCA, regression and classification ) nhờ tính chất này. Câu chuyện trở nên thú vị hơn nhiều khi các bài toán tối ưu không còn là convex, khi đó các phương pháp giải thuật trở nên linh hoạt hơn nhiều. Tiêu biểu cho trường hợp này là neural network. Trong lịch sử phát triển, đã từng có một thời kì neural network bị lu mờ, vì 1 nguyên nhân chính bài toán optimization để giải neural network là một bài toán non-convex . Chỉ tới khi một phương pháp ra đời để giải được bài toán non-convex này, neural network mới trở nên thịnh hành và phát triển tiếp (technical note: bài toán này originally được giải thông qua việc kiểm soát chặt chẽ hơn starting values của algorithm).
b. Sparsity
Trong SML đặc biệt là với high dimensional data, sparsity được thể hiện ở 2 đặc điểm:
- Về mặt dữ liệu, mặc dù bạn quan sát được rất nhiều features (biến X), nhưng hầu như các giá trị trong feature matrix tương ứng đều bằng 0 hoặc bị khuyết (missing). Ví dụ cho trường hợp này là trong recommender system (ví dụ trên Youtube chẳng hạn), khi ma trận features có các hàng là người dùng, còn các cột là các video. Giá trị của các element (thành phần) của các ma trận là đánh giá của người dùng về video đó (ví dụ từ 1 đến 5). Rõ ràng ở đây, có rất nhiều video mà người dùng ko xem, nên cũng thường ko có rating. Ma trận features này bị khuyết phần lớn elements, nên làm sao để phân tích được nó?
- Về mặt mô hình, trong high-dimensional data, mặc dù số lượng features (X) có thể rất lớn, nhưng features thực sự có tầm ảnh hưởng quan trọng tới biến responses (Y) có thể rất nhỏ. Ví dụ, khi chẩn đoán gen gây ra 1 bệnh trên cơ thể người, mặc dù cơ thể người có thể có tới hàng chục nghìn gen, nhưng số lượng gen thực sự gây ra có thể rất nhỏ, có thể dưới 10. Vì thế, một nhiệm vụ quan trọng là làm sao giảm được số lượng từ hàng chục nghìn xuống 10, làm sao để zero out những gen không quan trọng? Do đó, bài toán giảm số chiều của dataset (dimension reduction) trở nên rất thiết yếu trong SML.
c. Assumptions
Với mỗi một bài toán trong SML (regression, classification, clustering, dimension reduction, v.v) không có một phương pháp nào trong SML là one-size-fit-all cho tất cả các tình huống. Các phương pháp đều thường có những giả định nhất định để làm cho các phương pháp này có được những tính chất được mong muốn, và điều đáng nói là, các giả định ít khi được kiểm định hoàn toàn đúng hay sai chỉ vào việc nhìn dữ liệu. Tuy vậy, thông thường, bạn càng có nhiều giả định, bạn càng thường làm được nhiều kết quả hơn. Vậy nên, bạn sẽ muốn đặt ít giả định và đưa ra được ít kết quả hơn, hay đặt ra nhiều giả định hơn và đưa ra được nhiều kết quả, nhưng các giả định lại có thể bị nghi ngờ?
Câu trả lời thực sự suy cho cùng vẫn nằm ở 2 yếu tố. Thứ nhất, là bạn thực sự muốn lấy được thông tin gì từ dữ liệu. Kể cả trong việc dự đoán, ví dụ bạn muốn ước tính khả năng mua hàng của một người, bạn chỉ cần biết khả năng đó là cao hay thấp (classification) có thể bạn không cần đặt quá nhiều giả định cho model và sử dụng SVM (support vector machine). Nhưng nếu bạn muốn thực sự quantify được khả năng đó (ví dụ 70%, 80%, 90%) (regression), bạn gần như cần phải make some assumption về phân phối của dữ liệu. Thứ hai, bạn cần hiểu các phương pháp và sự chặt chẽ của các giả định. Không có gì thay thế được việc học và hiểu đúng các phương pháp trước khi sử dụng nó 🙂