Thoạt đầu tôi có ý định dịch ‘Machine Learning’ thành ‘Học máy’ hoặc ‘Máy học’ nhưng xem ra cả 2 lựa chọn này đều có một cái gì đó không ổn. Cuối cùng, để đỡ bị rơi vào cảnh chuyển câu câu chuyện ICT thành câu chuyện dịch thuật, tôi đành chấp nhận để nguyên trạng Machine Learning, hoặc viết tắt ML.
1. Thế Machine Learning là gì vậy? Tôi lang thang trên mạng Internet để tìm một định nghĩa về Machine Learning nhưng kết quả thu được các định nghĩa hoặc quá dài hoặc quá cô đọng đến mức trừu tượng khó hiểu. Tôi mạnh dạn đưa ra một cách diễn nôm: Machine Learning là hệ thống tìm cách kết hợp đầu vào để tạo ra các dự đoán đầu ra về dữ liệu chưa từng thấy trước đó.
1.a. Machine Learning là một môn khoa học về dữ liệu (Data Science): chỉ dựa đơn thuần vào dữ liệu để suy ra dữ liệu, chứ không dựa vào thuật toán;
1.b. Để tìm ra một quy tắc suy đoán input => output, Machine Learning phải dựa trên một mô hình và mô hình này phải được huấn luyện với một lượng lớn dữ liệu biết trước;
2. Đọc kỹ hơn một chút, tôi nhận thấy ML là mô hình xác định mối quan hệ giữa tập hợp các đặc tính (đầu vào) và các nhãn (đầu ra). Các nhãn có thể là giá trị hồi quy (liên tục) hoặc phân lớp (rời rạc). Công việc chính của ML là từ tập hợp một lượng lớn dữ liệu (đặc tính, nhãn) phải điều chỉnh mô hình sao cho quy tắc { đặc tính } => { nhãn } có sai số nhỏ nhất đối với các dữ liệu biết trước. Việc điều chỉnh mô hình này gọi là quy trình huấn luyện: máy tự học để tìm ra quy luật. Đây là gốc vì sao có từ Machine Learning.
3. Nói một cách toán học, nếu gọi y là nhãn và X là đặc tính thì vấn đề của ML là y = F(X). (Tôi viết hoa X vì X có thể nhiều biến x1, x2, …) Có vẻ như đơn giản quá, đúng không ạ? Vấn đề của Machine Learning là cho biết x, y với hàng chục ngàn, hàng trăm ngàn, hàng triệu, hàng tỷ bản ghi – công việc cần làm là tìm ra hàm F, sao cho y = F(X) đúng với mọi bản ghi cho trước. Quá khó. Vì F có vô vàn lựa chọn.
4. Vấn đề còn phức tạp hơn vì các bản ghi biết trước đó thường chỉ ghi lại các giá trị tương đối và có một lượng bản ghi (dù nhỏ) có dữ liệu không đáng tin cậy (gọi là dữ liệu nhiễu). Vì lý do này, cách huấn luyện để điều chỉnh mô hình thường là cách tiếp cận gần đúng, tìm sai số nhỏ nhất, chứ không theo cách tiếp cận chính xác hoàn toàn. Cách tiếp cận của Machine Learning thường là stochastic, theo phương pháp xác suất, thống kê, thay y = F(X) bằng y ≈ F(X). Nghĩa là nhãn đầu ra là kết quả “dự báo”, “phỏng đoán” của hàm các đặc tính.
5. Vậy hàm F phổ biến được dùng trong Machine Learning hiện nay là những dạng nào? Sau khi lục lọi trên mạng một hồi, tôi nhận thấy người ta chủ yếu tiếp cận bằng mô hình hàm tuyến tính hoặc mô hình mạng nơ ron (trong tiếng Anh: Neural Network hoặc Artificial Neural Network). Đặc điểm chung của 2 mô hình này là có các hệ số quyết định tính chất của mô hình. Ẩn số của mô hình là tìm ra các hệ số sao cho sai số giữa mô hình và bản ghi các dữ liệu biết trước là nhỏ nhất. Cách tính sai số thường dùng nhất là trung bình bình phương sai số (Mean Squared Error – MSE, xem https://en.wikipedia.org/wiki/Mean_squared_error).
6. Huấn luyện (Training): Thực chất đây là quá trình điều chỉnh mô hình sao cho sai số giữa đầu ra của mô hình so với đầu ra thực tế là nhỏ nhất. Mỗi một lần điều chỉnh (lần thử cho các hệ số), mô hình phải tính toàn bộ sai số của N bản ghi (N thường ở mức hàng chục nghìn đến hàng trăm nghìn). Nếu số lần điều chỉnh là hàng chục nghìn thì chúng ta thấy lượng tính toán thật là khổng lồ. Đây là một trong các lý do khiến Machine Learning gắn liền với dữ liệu lớn (Big Data).
6.1. Khi huấn luyện, một trong các vấn đề đặt ra là cần có thuật toán để “mò” được điểm sao cho sai số là nhỏ nhất. Thuật toán huấn luyện liên quan đến một số khái niệm như Gradient Descent, Learning Rate, Generalization (tổng quát hóa), Training & Test Sets (chia dữ liệu thành khối dùng để huấn luyện và khối dùng để kiểm tra lại mô hình), Validation, Representation, Regularization, … Điều này càng minh chứng rằng Machine Learning là một môn khoa học về dữ liệu.
6.2. Khi huấn luyện, một vấn đề nữa đặt ra là cách đối mặt với số lượng bản ghi lớn (hàng triệu, hàng tỷ bản ghi)? Người ta nhận thấy là khi số lượng bản ghi lớn thì có rất nhiều dữ liệu lặp, dư thừa (ví dụ tập hợp các bản ghi về đo chỉ số môi trường theo dõi trong một khoảng thời gian dài). Nếu chúng ta áp dụng điều chỉnh đến tất cả các bản ghi thì không những là mất rất nhiều thời gian cho tính toán mà còn là không cần thiết. Người ta thường chọn một tập bản ghi theo phương pháp ngẫu nhiên dùng để huấn luyện mô hình. Điều này, một lần nữa, minh chứng rằng Machine Learning liên quan chặt chẽ đến xác suất, thống kê.
6.3. Trong Machine Learning, mọi thứ phải đổi về thành những con số - vì việc điều chỉnh mô hình phải dựa trên các tính toán. Đây là một công đoạn rất mất thời gian và thường rất tinh tế trong việc tìm cách “ánh xạ” các giá trị văn bản thành các con số. Ví dụ, để “bói” tương lai của một người dựa trên ngày tháng năm sinh tính theo âm lịch của người đó thì phải tìm cách ánh xạ “ngày tháng năm sinh âm lịch” và “tương lai” thành những con số. Sau đó, thầy “Machine Learning” phải huấn luyện trên tập hợp khoảng vài triệu “hồ sơ cuộc đời” mới hòng đưa ra được một mô hình dùng để “bói”.
7. Mô hình tuyến tính: Đây là mô hình được nghiên cứu kỹ trong Machine Learning. Khi huấn luyện (điều chỉnh), kết quả thường hội tụ (tức là tìm ra được mô hình). Đây là một điểm rất quan trong trong huấn luyện mô hình vì chúng ta biết là chúng ta sẽ tới đích. (Ngoài lề: trong cuộc sống, chúng ta vẫn thường gặp trường hợp chúng ta theo một mô hình nào đó mà không biết là có tới đích hay không 😊.) Trong Machine Learning, ngườif ta tìm cách tuyến tính hóa một số mô hình phi tuyến tính. Ví dụ, người ta tạo ra một đặc tính mới dựa trên việc nhân các đặc tính cũ với nhau. Đặc tính mới này có tên là đặc tính chéo (Cross Feature).
8. Mô hình mạng nơ ron (Neural Network): Có rất nhiều vấn đề không tuyến tính hóa được bằng cách tạo ra đặc tính chéo: nhận dạng hình ảnh, nhận dạng tiếng nói, dịch tự động… Cách tiếp cận chung của Machine Learning là theo mô hình mạng nơ ron. Mạng nơ ron của Machine Learning gồm một lớp đầu vào (Input Layer), một lớp đầu ra (Output Layer) và một hoặc nhiều lớp ẩn (Hidden Layer) ở giữa đầu vào và đầu ra. Hàm kích hoạt (Activation Function) từ lớp này sang lớp khác được chọn là các hàm phi tuyến tính như ReLU (rectified linear unit – chỉnh lưu tuyến tính), Sigmoid, … Hàm kích hoạt trong mạng nơ ron phải là hàm phi tuyến tính.
8.1. Deep Neural Network: Quan sát cấu trúc của mạng nơ ron chúng ta thấy các lớp kế tiếp nhau theo hình bậc thang, mỗi lớp kế tiếp sử dụng đầu ra từ lớp trước đó làm đầu vào. Khi số lớp nhiều lên thì người ta gọi là Deep Neural Network. Deep Neural Network là một dạng của Deep Learning.
8.2. Huấn luyện mô hình mạng nơ ron: Khi thiết kế mạng nơ ron, người ta phải quyết định có bao nhiêu lớp ẩn, mỗi lớp ẩn có bao nhiêu nơ ron và hàm kích hoạt nên chọn hàm nào (ReLU, Sigmoid, …). Huấn luyện mô hình mạng nơ ron đòi hỏi phải điều chỉnh mô hình bên cạnh việc điều chỉnh các tham số khác như Learning Rate, chọn Regularization, …
9. Ngôn ngữ lập trình nào phù hợp với Machine Learning? Đây là câu hỏi đặt ra một cách tự nhiên khi học hoặc nghiên cứu về Machine Learning. Python gần như là lựa chọn mặc nhiên (De Facto): Python có thể được sử dụng để xử lý dữ liệu lớn (Big Data) và thực hiện toán học phức tạp.
10. Framework nào phù hợp với Machine Learning? Tìm kiếm trên mạng sẽ cho chúng ta một kết quả dạng như sau:
1. TensorFlow (https://www.tensorflow.org/),
2. Caffe (http://caffe.berkeleyvision.org/),
3. Microsoft Cognitive Toolkit/CNTK (https://www.microsoft.com/en-us/cognitive-toolkit/),
4. Torch/PyTorch (http://torch.ch/, http://pytorch.org/),
5. MXNet (https://mxnet.apache.org/),
6. Chainer (https://chainer.org/),
7. Keras (https://keras.io/),
8. Deeplearning4j (https://deeplearning4j.org/)
Tôi khuyến nghị chọn TensorFlow vì TensorFlow được tạo ra bởi Google. Use case nổi tiếng nhất của TensorFlow là Google Translate. Ngoài ra TensorFlow có các khả năng như xử lý ngôn ngữ tự nhiên, phân loại văn bản / tóm tắt, nhận dạng giọng nói / hình ảnh / chữ viết tay, dự báo và gắn thẻ.
11. Có cần môn học Machine Learning? Nhân hôm nay là ngày khai giảng, chúng ta thử luận đàm xem Machine Learning có xứng đáng trở thành một môn học ở cấp đại học hay không? Cần quá đi chứ 😊. Trước đây và hiện nay các khoa (viện) CNTT vẫn thường có các môn như Ngôn ngữ lập trình/Thuật toán/Cấu trúc dữ liệu, Hệ điều hành, Truyền dữ liệu (Data Communications), Bộ giao thức TCP/IP, … thì trong tương lai gần chúng ta nên có môn học, theo tôi là nên đặt theo gốc: Machine Learning. Cũng có thầy/cô sẽ cho rằng nên để Machine Learning như là phân môn của nhận dạng. Tôi cho rằng Machine Learning nên thuộc vào môn khoa học hiện nay đang được cả thế giới quan tâm là Khoa học Dữ liệu (Data Science). Có người còn nói rằng Dữ liệu sẽ là một loại tiền tệ mới – người nào có càng nhiều dữ liệu thì người đó càng giàu 😊?!