ML-From-Scratch: Học Machine Learning Từ Đầu
Machine Learning From Scratch đáng học nếu bạn muốn thấy phần toán học thật đằng sau một thuật toán, thay vì chỉ gọi .fit() vào một hộp đen. Đọc regression.py cạnh gradient_boosting.py rồi cạnh phần cài đặt GAN cho thấy cùng một kiểu phép toán tensor không dùng autograd lặp lại xuyên suốt supervised, unsupervised và deep learning. Nó không dạy bạn kỹ năng đưa ML vào production — cho việc đó, hãy kết hợp với một tutorial framework.
Machine Learning From Scratch là gì?
Machine Learning From Scratch là một repo Python tập hợp các thuật toán machine learning được cài đặt bằng NumPy thuần, từ Linear Regression cho đến Convolutional Neural Network và Generative Adversarial Network. Mỗi model nằm trong một file riêng bên trong package mlfromscratch, chia theo các thư mục supervised, unsupervised, reinforcement và deep learning. Code ưu tiên tính dễ đọc hơn tốc độ, không phải một backend đã tối ưu.
Vì sao nên học ML bằng cách tự xây dựng từ đầu
Tự cài đặt một thuật toán buộc bạn phải trả lời những câu hỏi mà một lệnh gọi framework che giấu: gradient có shape gì, vì sao batch normalization cần một running mean, vì sao một phép convolution lại trở thành phép nhân ma trận. Không có cách nào né được phần toán học. ML-From-Scratch tổ chức bài tập đó theo từng thuật toán thay vì để nó nằm rải rác trong một bài blog, và repo còn phủ cả unsupervised, reinforcement và các phương pháp tiến hóa mà phần lớn tutorial "từ đầu" khác bỏ qua, chỉ tập trung vào regression và MLP.
Các thuật toán có trong ML-From-Scratch
- ✓Các thuật toán supervised learning gồm Linear, Ridge, Lasso, Elastic Net, Polynomial và Logistic Regression, Decision Tree, Random Forest, Gradient Boosting, XGBoost, Adaboost, Naive Bayes, K Nearest Neighbors, Support Vector Machine, Perceptron, Multilayer Perceptron và Linear Discriminant Analysis.
- ✓Code unsupervised learning cho K-Means, DBSCAN, Gaussian Mixture Model, PCA, Autoencoder, Restricted Boltzmann Machine, Apriori và FP-Growth.
- ✓Module deep learning với các layer tự viết tay — Convolutional, Dense, Dropout, Batch Normalization, RNN, Max/Average Pooling, Flatten, Reshape, Zero/Constant Padding — được ghép thành các ví dụ CNN, MLP và RNN.
- ✓Ví dụ Generative Adversarial Network huấn luyện một generator và một discriminator để sinh ảnh chữ số viết tay.
- ✓Ví dụ Deep Q-Network cho reinforcement learning, giải môi trường CartPole-v1 từ OpenAI gym.
- ✓Các phương pháp tiến hóa: ví dụ Genetic Algorithm và ví dụ Neuroevolution tiến hóa trọng số của một neural network thay vì huấn luyện bằng gradient descent.
Bạn có thể xây dựng và học được gì
- •Đọc từng bước bảng layer được in ra trong ví dụ CNN (Conv2D, BatchNorm, Dense, Softmax) để thấy chính xác số lượng tham số và output shape thay đổi qua từng layer.
- •Đọc ví dụ GAN để thấy generator và discriminator được định nghĩa như hai model NumPy thông thường, huấn luyện đối kháng nhau, thay vì dựa vào một wrapper adversarial-training có sẵn của framework.
- •Theo dõi ví dụ Genetic Algorithm, tiến hóa một quần thể chuỗi ứng viên hướng tới một chuỗi mục tiêu bằng selection tỉ lệ theo fitness và crossover một điểm.
- •So sánh Ridge, Lasso và Elastic Net cạnh nhau vì cả ba đều nằm trong cùng file regression.py, cho thấy chính xác chỗ khác nhau của số hạng regularization trong code.
- •Theo ví dụ Deep Q-Network với môi trường CartPole-v1 trong OpenAI gym để thấy một vòng lặp reinforcement learning tối giản từ đầu đến cuối.
Điều gì khiến cách tiếp cận này hiệu quả
- ✓Không phải vật lộn với dependency framework nào cả — code là NumPy thuần, nên mọi phép toán đều là nhân ma trận, broadcast, hoặc một vòng lặp bạn có thể chạy từng bước.
- ✓Các ví dụ in ra output cụ thể (số tham số, shape của layer, độ chính xác khi huấn luyện) để bạn đối chiếu hiểu biết của mình về toán của một layer với một lần chạy thật, chứ không chỉ với công thức.
- ✓Các thuật toán liên quan nằm chung một file — Linear, Ridge, Lasso, Elastic Net và Polynomial Regression đều là biến thể bên trong regression.py — nên khác biệt giữa chúng là một diff, không phải một cuộc tìm kiếm qua nhiều thư viện riêng.
- ✓Giấy phép MIT, nên code có thể chép vào ghi chú học tập hoặc một khóa học của riêng bạn mà không cần xin phép.
Khi nào nên dùng thư viện production thay thế
- △README nói rõ mục tiêu là tính minh bạch, không phải hiệu năng tính toán — các cài đặt này không được tối ưu và không nên đem so hiệu năng với scikit-learn hay PyTorch.
- △Cài đặt bằng python setup.py install, một cách đóng gói kiểu cũ, README không nêu yêu cầu phiên bản Python hay ghim dependency cụ thể.
- △README không nhắc đến test suite hay CI badge nào, nên độ đúng của từng thuật toán phụ thuộc vào việc bạn tự đọc code, không phải một cam kết từ maintainer.
- △README không đề cập hoạt động bảo trì đang diễn ra — nên xem đây là một bản snapshot giảng dạy cố định, không phải một dự án đang theo kịp kỹ thuật mới.
Những cách khác để học nền tảng ML
Repo này có phù hợp với bạn không
ML-From-Scratch phù hợp với một kiểu người đọc cụ thể: người đã biết Python và đủ đại số tuyến tính để theo dõi một phép nhân ma trận, và học bằng cách đọc code thay vì xem video bài giảng. Đây là lựa chọn kém phù hợp nếu bạn mới học Python — code giả định bạn tự đọc hiểu được NumPy broadcasting và class inheritance mà không cần cầm tay chỉ việc — hoặc nếu mục tiêu của bạn là triển khai một model thật nhanh, trường hợp đó một tutorial framework sẽ nhanh hơn.
Các câu hỏi thường gặp
Machine Learning From Scratch không được xây dựng cho production. README nói mục tiêu của repo là trình bày cơ chế bên trong của từng thuật toán một cách minh bạch, dễ tiếp cận, chứ không phải tối ưu hiệu năng tính toán, nên các cài đặt này dành để đọc và học, không phải để triển khai vào một pipeline thật.
Để đọc hiểu Machine Learning From Scratch một cách thoải mái, bạn cần kỹ năng Python và NumPy — broadcasting mảng, indexing, code hướng đối tượng theo class — cộng thêm đủ đại số tuyến tính và giải tích để theo dõi phép nhân ma trận và gradient, vì repo không dạy lại những kiến thức nền đó.
Machine Learning From Scratch có bao gồm cả hai: module deep_learning với các file Neural Network và Layers định nghĩa forward pass và backward pass cho các layer như Dense, Convolutional, Batch Normalization — đây chính là cơ chế đứng sau backpropagation — còn vòng lặp huấn luyện trong các ví dụ chạy gradient descent để cập nhật trọng số.
Machine Learning From Scratch và TensorFlow hay PyTorch giải quyết hai bài toán khác nhau: TensorFlow và PyTorch cho bạn một backend đã tối ưu, chạy GPU, để dựng model thật nhanh, còn Machine Learning From Scratch viết tường minh phần toán NumPy mà các framework đó giấu sau autograd và kernel đã biên dịch — hữu ích trước khi bạn dùng framework, không phải để thay thế nó.
Thư mục supervised_learning trong Machine Learning From Scratch gồm Linear, Ridge, Lasso, Elastic Net, Polynomial và Logistic Regression, Decision Tree, Random Forest, Gradient Boosting, XGBoost, Adaboost, Naive Bayes, K Nearest Neighbors, Support Vector Machine, Perceptron, Multilayer Perceptron và Linear Discriminant Analysis.
Machine Learning From Scratch có đúng những ví dụ đó: một ví dụ Convolutional Neural Network phân loại chữ số kèm bảng tham số in ra theo từng layer, và một ví dụ Generative Adversarial Network với generator và discriminator đều là model NumPy thuần, huấn luyện đối kháng nhau để sinh ảnh chữ số viết tay.
Repo liên quan
Vẫn đang phân vân về ML-From-Scratch?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về ML-From-Scratch.
