Machine Learning cho người mới bắt đầu: Học gì, bắt đầu từ đâu?

Machine Learning cho người mới bắt đầu: Học gì, bắt đầu từ đâu?

Vấn đề thực tế khi bắt đầu học Machine Learning

Hầu hết người bắt đầu học Machine Learning (ML) đều gặp đúng một cái bẫy: tìm kiếm tài liệu ra hàng trăm kết quả, không biết nên theo hướng nào, rồi mắc kẹt giữa đống toán học trước khi kịp viết được dòng code đầu tiên.

Mình cũng từng ở trong tình huống đó. Lần đầu tiếp xúc với ML, mình mở khóa học đầu tiên thấy ngay ma trận, đạo hàm riêng, hàm mất mát — và đóng lại sau 20 phút. Phải mất gần 3 tháng mình mới tìm ra cách học thực sự hiệu quả.

Vấn đề cốt lõi không phải là ML khó. Là bạn đang chọn sai điểm xuất phát. Bài này sẽ phân tích thẳng vào điều đó.

So sánh các hướng tiếp cận học Machine Learning

Có ba hướng phổ biến mà người mới thường chọn. Mỗi hướng phù hợp với một kiểu người học khác nhau — không có cái nào sai, chỉ có cái không phù hợp với bạn.

Hướng 1: Học lý thuyết toán trước (Theory-first)

Bắt đầu với đại số tuyến tính, xác suất thống kê, rồi mới đến thuật toán. Stanford CS229 là ví dụ điển hình — bài 1 đã có gradient descent và chain rule. Nhiều MOOC hàn lâm và giáo trình đại học đi theo hướng này.

Ưu điểm: Hiểu sâu, biết tại sao thuật toán hoạt động, debug được khi mô hình cho kết quả lạ.

Nhược điểm: Có thể mất 2–3 tháng học toán trước khi viết được dòng code ML đầu tiên. Người mới dễ bỏ cuộc khi chưa thấy ứng dụng thực tế nào.

Hướng 2: Học thực hành trước, lý thuyết sau (Practical-first)

Viết code ngay từ ngày đầu, dùng thư viện có sẵn như Scikit-learn hoặc TensorFlow, rồi dần hiểu bên trong chạy thế nào. fast.ai và Kaggle Learn là hai ví dụ tiêu biểu cho hướng này.

Ưu điểm: Thấy kết quả nhanh, giữ được động lực. Phù hợp với người đã biết lập trình.

Nhược điểm: Dễ dùng mà không hiểu. Khi gặp bài toán lạ hoặc kết quả tệ, bạn sẽ không biết tại sao.

Hướng 3: Học theo dự án thực tế (Project-based)

Chọn một bài toán cụ thể — phân loại email spam, dự đoán giá nhà, nhận dạng chữ viết tay — rồi học đúng những gì cần để giải quyết nó. Lý thuyết và thực hành xen kẽ theo nhu cầu, không theo giáo trình cố định.

Ưu điểm: Mục tiêu rõ ràng, kiến thức gắn với ngữ cảnh thực tế, nhớ lâu hơn nhiều.

Nhược điểm: Cần chọn dự án vừa sức. Dự án quá phức tạp ngay từ đầu vẫn đủ để nản.

Phân tích ưu nhược — Cái nào phù hợp với bạn?

Câu hỏi đúng không phải “hướng nào tốt nhất” mà là “hướng nào phù hợp với mình”. Vài tiêu chí để xác định:

  • Nếu bạn có nền tảng toán tốt (đã học đại học kỹ thuật, tự nhiên): Theory-first không phải cực hình. Hiểu sâu từ đầu sẽ giúp bạn đi xa hơn về lâu dài.
  • Nếu bạn là lập trình viên muốn ứng dụng ML: Practical-first là điểm xuất phát hợp lý nhất. Code trước, hiểu sau.
  • Nếu bạn hoàn toàn mới cả lập trình lẫn toán: Project-based với dự án nhỏ, đơn giản là cách tốt nhất để không bị overwhelm.

Một điều mình học được sau vài năm làm ML thực tế: trong môi trường sản xuất, bạn hầu như không bao giờ cần tự cài đặt thuật toán từ đầu. Thứ quan trọng hơn nhiều là biết khi nào dùng thuật toán gìlàm sao chuẩn bị dữ liệu đúng cách. Lý thuyết sâu học dần được — nhưng intuition về dữ liệu thì phải tích lũy từ thực hành.

Lộ trình thực tế cho người mới bắt đầu

Lộ trình mình hay gợi ý khi có người hỏi nên bắt đầu từ đâu:

  1. Python cơ bản — nếu chưa biết. Tập trung vào: list, dict, vòng lặp, hàm, NumPy và Pandas. Khoảng 2–3 tuần là đủ để tiếp tục bước tiếp.
  2. Hiểu dữ liệu trước khi học thuật toán — 80% công việc ML thực tế là xử lý và làm sạch dữ liệu, không phải chọn thuật toán.
  3. Bắt đầu với Scikit-learn — thư viện ML chuẩn cho Python, API nhất quán, tài liệu có ví dụ cực rõ.
  4. Làm quen với 3 bài toán cơ bản: phân loại (classification), hồi quy (regression), phân cụm (clustering). Ba bài này bao phủ 70–80% bài toán ML thực tế.
  5. Học lý thuyết song song theo nhu cầu thực tế — khi gặp vấn đề, tra cứu và hiểu rõ hơn. Không học toán để học toán.

Hướng dẫn triển khai: Dự án đầu tay với Scikit-learn

Ví dụ thực tế — bài toán phân loại hoa Iris, bộ dữ liệu kinh điển trong ML. Không cần cài đặt phức tạp, chạy được ngay trên máy local trong vài phút.

Cài đặt môi trường

# Tạo môi trường ảo (khuyến nghị)
python3 -m venv ml-env
source ml-env/bin/activate  # Linux/macOS
# ml-env\Scripts\activate   # Windows

# Cài thư viện cần thiết
pip install scikit-learn pandas matplotlib

Code thực tế: Phân loại hoa Iris

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
import pandas as pd

# 1. Tải dữ liệu
iris = load_iris()
X = iris.data   # Features: chiều dài/rộng cánh hoa
y = iris.target  # Label: loài hoa (0, 1, 2)

# 2. Chia train/test (80% train, 20% test)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 3. Chọn và train mô hình
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 4. Đánh giá kết quả
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 5. Dự đoán với dữ liệu mới
sample = [[5.1, 3.5, 1.4, 0.2]]  # Đo được từ một bông hoa
prediction = model.predict(sample)
print(f"Loài hoa dự đoán: {iris.target_names[prediction[0]]}")

Chạy đoạn code trên, bạn sẽ thấy accuracy khoảng 96–100%. Đây là ML thực tế: load data → split → train → evaluate → predict. Chỉ vậy thôi.

Giải thích từng bước

  • train_test_split: Tách dữ liệu để kiểm tra mô hình trên dữ liệu chưa từng thấy — nguyên tắc cơ bản nhất của ML.
  • RandomForestClassifier: Dùng nhiều cây quyết định, tổng hợp kết quả theo đa số. Mạnh, ít cần tinh chỉnh, lý tưởng để bắt đầu.
  • classification_report: Cho precision, recall, F1-score — quan trọng hơn accuracy trong hầu hết bài toán thực tế.

Những sai lầm phổ biến cần tránh

Qua khoảng 4–5 dự án ML đầu tay, mình thấy có 4 lỗi hầu như ai cũng mắc ít nhất một lần:

  • Bỏ qua bước khám phá dữ liệu (EDA): Train mô hình ngay mà không hiểu dữ liệu trông như thế nào, có bị thiếu không, phân phối lệch ra sao.
  • Data leakage: Vô tình để thông tin từ tập test ảnh hưởng đến quá trình train. Kết quả trên paper rất đẹp, deploy ra ngoài thì xấu bất ngờ.
  • Chỉ nhìn vào accuracy: Với dữ liệu mất cân bằng (99% class A, 1% class B), model đoán toàn class A cũng đạt accuracy 99% — nhưng vô dụng hoàn toàn.
  • Overfitting: Mô hình học thuộc tập train nhưng không generalize được ra dữ liệu mới. Dấu hiệu rõ nhất: train accuracy 99%, test accuracy 70%.

Tài nguyên học tốt để bắt đầu

Thay vì liệt kê dài, mình chỉ gợi ý những nguồn mình thực sự đã dùng:

  • Scikit-learn documentation: Tài liệu chính thức, ví dụ cực rõ, học trực tiếp từ đây được luôn.
  • Kaggle Learn: Khóa miễn phí, thực hành ngay trên notebook, có bộ dữ liệu thực tế — hoàn toàn phù hợp cho người mới.
  • Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow (Aurélien Géron): Cuốn mình hay giới thiệu nhất cho ai đã biết Python và muốn đi bài bản.

Cả ba đều cân bằng tốt giữa lý thuyết và thực hành. Không sa lầy vào toán thuần túy khi bạn chưa thực sự cần.