Thiết kế một course học Machine Learning?

February 10, 2011

Machine Learning (máy học) là một lĩnh vực đa ngành giao thoa với  nhiều ngành, chẳng hạn như statistics, optimization, information theory, data mining. Mặt khác, ML đang phát triển rất nhanh. Những nghiên cứu trong Computer Vision hiện giờ phụ thuộc rất nhiều vào ML. Cho nên, muốn có những nghiên cứu state-of-the-art thì việc trang bị một kiến thức khá tốt về ML nên làm và không thể tránh khỏi. Vấn đề còn lại là làm sao học ML hiệu quả khi đang ở Việt Nam, và thậm chí ở nước ngoài :D ? Bệnh nghề nghiệp lại bắt mình suy nghĩ thiết kế một course học về ML như thế nào là hợp lý. :)

Theo kinh nghiệm bản thân, để học ML thì trước hết nên ôn lại một số kiến thức về Linear Algebra và Vector Calculus hoặc Analysis.

  • Linear Algebra: khái niệm matrix từ bài toán giải hệ N phương trình tuyến tính N ẩn, column space, row space, transpose, inverse, determinant, matrix multiplication (vô cùng quan trọng trong các biến đổi ma trận, thực tế có tới 4 cách biểu diễn nhân 2 ma trận với nhau), matrix derivatives, trace, rank, eigenvalue problem, eigen-decomposition, singular value decomposition (SVD), span (cảm sinh), khái niệm trực giao, basis space, pseudo-inverse matrix. Hầu hết các kiến thức này được gói gọn trong các phụ lục của nhiều cuốn textbook hiện nay. Tuy nhiên, tốt nhất là tham khảo từ cuốn Introduction to Linear Algebra hoặc Linear Algebra and Its Applications của Gilbert Strang. Ví dụ như các chương 1.Matrices and Gaussian Elimination; 2.Vector Spaces and Linear Equations; 3.Orthogonality; 4.Eigenvalues and Eigenvectors; 6.Positive Definite Matrices. Ba chương đầu rất cơ bản. Chương 4 cần thiết cho các nghiên cứu có sử dụng spectral method, phân tích thành phần cơ bản (PCA), dimensionality reduction. Chương 6 cần thiết cho kiến thức về optimization. Ngoài ra ông này có loạt OCW video lectures xuyên suốt cuốn sách. Nếu muốn tìm hiểu trên bình diện implementation các thuật toán trên ma trận thì cuốn Numerical Recipes hay Matrix Computations đều hữu ích. Tuy nhiên, phần lớn các thư viện LA đã rất optimized rồi.
  • Calculus/Analysis: Hai thứ này có giao thoa nhau một số phần cho nên tham khảo một trong hai cái này đều được. Một số khái niệm cần thiết: derivatives, integrate, limit, topology, set theory, divergence, Lagrange multiplier. Trong các năm phổ thông thì học sinh đã được làm quen với các khái niệm này rồi, tuy nhiên dừng lại ở vector calculus (3-chiều). Các khái niệm về topology  cũng không được làm rõ. Cập nhật các kiến thức này khá dễ dàng, tuy nhiên mỗi thứ một ít để vừa đủ và không quá nhiều thì cũng cần lựa chọn cẩn thận một tí. Cuốn Vector Calculus, Linear Algebra, and Differential Forms: A Unified Approach là một lựa chọn tốt cho những ai “quên gần hết”. Cuốn sách diễn giải khá chi tiết, nhưng đôi chỗ hơi rườm rà.
  • Optimization: ở một mức độ nào đó thì Machine Learning cũng có thể coi là một bài toán tối ưu. Gọi đầu vào X \in \mathbb{R}^p là một biến ngẫu nhiên, và đầu ra Y \in \mathbb{R} là một biến ngẫu nhiên có một phân phối ẩn P(X,Y) với X mà ta không biết. Tác vụ học đòi hỏi tìm kiếm một hàm f(X) để dự đoán Y một khi cho biết X. Hàm tổn thất (loss function) \mathcal{L}(Y, f(X)) là một định nghĩa đặt ra để ước lượng mức độ sai lệch giữa giá trị dự đoán và giá trị đáng lẽ ra. Nếu phát biểu ở dạng bài toán tối ưu thì ta có  \underset{f}{\text{argmin}}\mathcal{L}(Y, f(X)). Optimization thực sự cần thiết cho ML. Thực ra chúng ta cũng đã làm quen với bài toán tối ưu trong thời phổ thông, khi được giao giải các bài toán tìm cực trị bằng cách khảo sát đạo hàm. Bài toán tối ưu trong thực tế không theo một dạng chuẩn dễ giải (như một hàm tuyến tính hai một hàm bậc hai – quadratic form), đồng thời các cực trị toàn cục cũng khó tìm hơn (tồn tại nhiều cực trị cục bộ). Optimization phổ thông có lời giải đóng (closed form/analytical form), trong khi các bài toán tối ưu trong thực tế thì phải dùng các phương pháp số và xấp xỉ. Chuỗi Taylor là một ví dụ quen thuộc. Sách cho Optimization có thẻ kể ra gồm Convex Optimization của Stephen Boyd (trọng tâm là tối ưu hàm lồi, cách trình bày thiên cho các sinh viên rành toán), Practical Methods of Optimization của Fletcher (tối ưu nói chung, khá tổng quát, nhưng trình bày hơi chằng chịt khó đọc), Practical Optimization: Algorithms and Engineering Applications (là explained version cuốn sách của Fletcher nhưng dễ đọc hơn, tuy nhiên cũng “linh tinh” hơn), và Optimization của Kenneth Lange (một cuốn sách nhỏ có tóm tắt analysis, convexity, và các phương pháp tối ưu nói chung). Nhìn chung, optimization là một chủ đề không khó nếu được đào tạo bài bản (rất tiếc là chương trình CNTT không có môn này). Một sinh viên giỏi lập trình mà học thêm optimization thì như mọc thêm cánh trong những nghiên cứu về ML.

Sau khi đã nắm được cơ bản ba nhóm kiến thức trên rồi thì ta có thể nhào vô cày xới hai cuốn sách Pattern Recognition and Machine Learning của Bishop và Elements of Statistical Learning của Hastie, Tibshirani và Friedman. Có thể nói không ngoa rằng hai cuốn sách này hiện rất up-to-date và có rất nhiều những kiến thức được sử dụng trong các paper hiện thời. Cuốn PRML chú trọng vào các phép biến đổi trong công thức, giúp ta hiểu trên khía cạnh toán học. Cuốn ESL cung cấp cái nhìn qua vô số các ví dụ thống kê. Hai cuốn sách này bổ túc cho nhau tuyệt vời. Ngoài ra thì ta còn có vài kênh cập nhật kiến thức khác, như đã đề cập trong bài trước.


Follow

Get every new post delivered to your Inbox.