Phác họa bài post:
1. Machine
Learning là gì?
2. Quan
hệ { đặc tính } => { nhãn }
3. Tìm
hàm F từ dữ liệu
4. Đặc
tính dự báo, phỏng đoán của Machine Learning
5. Cách
tiếp cận chính của Machine Learning
6. Training
7. Mô
hình tuyến tính
8. Mô
hình phi tuyến: Neural Networks
9. Ngôn
ngữ lập trình nào phù hợp với Machine Learning?
10. Framework
nào phù hợp với Machine Learning?
11. Có
cần môn học Machine Learning?
-
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 trọng 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 😊?!
Không có nhận xét nào:
Đăng nhận xét