Bài 0: Bắt đầu học Machine Learning

book, read, old-1659717.jpg

Xin chào các bạn, đây là sẽ bài viết đầu tiên trong một loạt các chuỗi bài về các kiến thức cần thiết trong lĩnh vực học máy, hay còn gọi là Machine Learning. Vì là bài viết đầu tiên, mình xin phép trình bày về lí do và mong muốn của mình khi lập nên trang web này, quá trình tự học Machine Learning của mình, và quan trọng nhất là các tài liệu, khóa học mà mình đã từng dùng để tìm hiểu về quá trình học máy.

Bắt đầu tự học Machine Learning

Mình theo học ngành cử nhân IT (Information Technology) của Đại Học RMIT – Vietnam từ năm 2018, sau một năm miệt mài ôn luyện IELTS. Chân ướt chân ráo bước vào một ngành học mới mẻ (mình lựa chọn Công Nghệ Thông Tin chủ yếu là vì lương cao nha, nên là chưa tìm hiểu kĩ về ngành), mình phải phân vân khá lâu để lựa chọn được hướng đi trong lĩnh vực này. Nguyên nhân là vì Công nghệ thông tin nói riêng hay Khoa học máy tính nói chung là một chủ đề lớn, và nó bao gồm nhiều lĩnh vực khác nhau như là Mobile Development, Web Development, và cả Game Development nữa. Trong quá trình học tại RMIT, mình cũng đã trải nghiệm nhiều khóa học khác nhau, trong đó có Lập trình Web và Lập trình Android, và có luôn Lập trình IOT. Dù đạt được thành tích khá ổn trong các môn học đó, mình chưa có đam mê về một chuyên ngành cụ thể nào, nên là cứ xoay loanh quanh một thời gian để tìm hiểu thêm.

Năm 2019, mình tình cờ nghe nói về lĩnh vực Machine Learning, và có một chút hứng thú về ngành này (do nó mới, nghe nói lương cao, và cái câu nói “Data scienctist is the sexiest job of 21st century” gì đấy). Hiển nhiên là mình cũng bay vào thử cho biết rồi. Khí bắt đầu thì mình được giới thiệu cho khóa học Machine Learning của Andrew Ng, chắc hẳn ai bắt đầu học cũng biết về khóa học gần như là kinh điển này. Phải nói là Andrew (giảng viên Đại Học Stanford và nhà sáng lập Google Brain) giảng cực kỳ xịn, vì một người còn mơ hồ về ngành như mình mà còn hiểu được.

Nhưng càng học thì càng thấy có gì đó thiêu thiếu, chắc là vì Andrew phải cắt kha khá content (như là các việc chứng minh các thuật toán bằng Xác xuất và Thống kê) để cho người mới có thể hiểu được. Với cá nhân mình thì việc bỏ qua phần này là hơi thiếu xót, vì mình muốn hiểu sâu hơn về cac thuật toán, chứ không phải là cưỡi ngựa xem hoa. Vì thế nên sau khi dạo một vòng trên Google thì cũng mò ra cái khóa CS229 của Đại Học Stanford. Đây được xem là người tiền nhiệm cùa khóa học trên Coursera, và do nó là khóa học được ghi hình lại cho các sinh viên Stanford xịn xò, nên là nó cũng siêu khó với mình. Không hiểu Normal Distribution là gì, Eigenvalues với Eigenvectors thì cũng không biết, nên là mình càng ngày cảng mơ hồ luôn. Đây chắc hẳn cũng là một bức tường nhiều bạn cũng gặp phải khi mới bắt đầu.

Do stress quá nên là mình bỏ qua nó một thời gian luôn, khi đó mình nghĩ là “Hay chuyển qua ngành khác cho chắc nhỉ?”

Học là phải từ gốc

Sau khi từ bỏ một thời gian và tiếp tục lăn tăn trong Software Engineering (thời gian này cũng khá bổ ích khi mình tìm hiểu sâu về Java và OOP, các Design Pattern này nọ đồ), mình cũng quay bước về sau để thấy Machine Learning rõ hơn. Như tựa đề đó, học cái gì cũng nên học từ gốc, cũng vì vậy nên mình bắt đầu nghiêm túc học về các kiến thức cơ bản trước. Theo một cái topic trên Reddit về các Prerequisites của Machine Learning, thì trước tiên là phải học về Linear Algebra (đại số tuyến tính), Calculus II và III (giải tích – một chủ để gây yếu tim cho học sinh cấp 3), Statistics và Probability, Convex Optimization (cái này thì đến giờ minh vẫn chưa dám đụng). Vâng, rất là nhiều, nên là ta bắt đầu thôi nhỉ. Sau đây là chút tóm tắt về hành trình học các chủ đề này của mình:

  • Linear Algebra: Mình bắt đầu theo khóa học Linear Algebra của thầy Gilbert Strang. Ưu điểm cúa khóa này là nó rất phù hợp với người mới, và cả video lẫn sách đều có sẵn trên mạng luôn, nên là bạn chỉ cần Google tí là ra. Phải nói là trong các khóa MOOCs, mình ấn tượng nhất là khóa này, chủ yếu là do ấn tượng tốt về thầy Strang. Thầy có cách giảng bài siêu dễ hiểu, và một số câu chuyện bên lề khá dễ thương cũng được lồng ghép vào trong bài giảng nên lâu lâu nghe giảng, dù là topic khó, cũng phải bật cười. Lời khuyên của mình là bạn nên bắt đầu với khóa này trước. Tập trung vào các bài giảng quan trọng (Lec 1-10, 14-22, và 30), các bài giảng khác như là về Matrix Space hay Differential Equations thì mình vẫn thấy chưa xuất hiện nhiều lắm trong các thuật toán ML cơ bản. (Nói là dễ hiểu vậy thôi chứ mình cũng phải học lại hai lần mới hiểu nha!)
  • Calculus II và III: Với Giải tích thì mình bỏ qua Calculus I mà nhảy vào Calculus II và III luôn, do là học sinh cấp 3 ở Việt Nam đã có kha khá nên tảng về Giải tích rồi. Khóa học mà mình sử dụng là MIT 18.02 – Multivariable Calculus, cũng đến từ Đại Học MIT luôn nhưng mà mình không thích bằng khóa Linear Algebra của thầy Strang. Khóa này được giàng bời giáo sư Denis Auroux – người Pháp nên là cũng hơi tí khó nghe nha, nhưng nếu học quen sẽ không là vấn đề lớn. Mới bắt đầu vào là bạn cũng sẽ được ôn lại kiến thức Linear Algebra qua một hai bài giảng luôn, sau đó sẽ là một chuỗi kiến thức mới. Đối với khóa học này thì mình gợi ý là chỉ nên đi qua một lần cho quen tên khái niệm, vì nếu tìm hiểu sâu và làm luôn bài tập thì tốn khá nhiều thời gian. Khi bắt đầu học Machine Learning thì sẽ gặp nhiều khái niệm trong Calculus, đến lúc đó chỉ cần Google cho nhớ lại là được.
  • Probability và Statistics: Học xác xuất và thống kê thì minh chủ yếu học qua sách, vì theo mình tìm hiểu thì trên mạng hiện nay có ít khóa MOOCs về chủ đề này. Sách mình gợi ý đó là Introduction to Probability của Blitzstein nha (trên Google cũng có bản PDF miễn phí). Đây là cuốn sách phù hợp dành cho người mới, bạn có thể đọc từ đầu đến chương 10 là được. Khi đọc thì chỉ cần hiểu trước đã, còn bài tập thì nên để dành cho tiết kiệm thời gian.

Với 3 khóa học/sách kể trên thì cũng kha khá tự tin để hiểu được sâu hơn về các thuật toán đơn giản rồi. Sau khi học 3 chủ đề này thì mình quay lại với CS229 của Andrew lần nữa, nhưng chỉ tự tin được vài bài thôi, rồi lại thấy mơ hồ. Lí do là các kiến thức mới lần lượt xuất hiện (Multivariate Normal Distribution là gì vậy, còn Marginal với cả Conditional MVN nữa?). Lúc này thì mình tiếp tục dừng lại một thời gian do hơi đuối.

Thử lại lần nữa với Machine Learning cơ bản

Sau khi tất bật một thời gian với bài tập ở trường thì mình được người bạn giới thiệu cho một trang web cực kì hữu ích để học về ML, Machine Learning cơ bản. Đây là một trang web tổng hợp rất nhiều kiến thức học máy bổ ích, chia theo từng bài từ các thuật toán đơn giản như là Linear Regression, Logistic Regression rồi đến các thuật toán phức tạp hơn (bao gồm cả Deep Learning nữa). Theo mình đánh giá là trang web này cực kỳ phù hợp với những bạn đã có nền tảng về toán, như là Giải tích hay Đại số tuyến tính, nhưng quan trọng hơn hết là còn có code mẫu với nhiều hình minh họa (visualization) sinh động cho nhiều thuật toán. Bạn mình cũng học ML bằng trang web này, bằng cách vừa đọc hiểu kiến thức và vừa implement các thuật toán bằng tay (from-scratch) bằng thư viện numpy. Đây là một cách tiếp cận rất hiệu quả, và nhiều khóa học như là CS229 cũng yêu cầu sinh viên thử implement các thuật toán này từ con số 0 như là bài tập lấy điểm.

Với Machine Learning cơ bản, mình cũng thử học qua một thời gian, nhưng sau đó lại bỏ ngang vì lại gặp nhiều bức tường kiến thức mới (đến giờ này mình vẫn chưa hiểu sâu được nhiều về SVM với Convex Optimization luôn). Nhưng biết được trang web này cũng là điều hữu ích, vì đó là nguồn cảm hứng để mình tạo nên trang Học Machine Learning này.

Câu chuyện lại tiếp tục

Sau đó thì mình lại có nhiều cơ hội tiếp tục học hỏi về ML, rồi lại tiếp tục ngưng học ML để cho bớt mơ hồ. Nhưng quan trọng nhất là, qua mỗi lần học, mình lại nhận ra là kiến thức của mình cũng ngày càng vững, ngày càng tiếp cận và hiểu được nhiều định lý khó hơn. Đây cũng là điều mình muốn nhắn nhủ đến các bạn đang bắt đầu học về ML: nếu cảm thấy khó hiểu quá thì nên nghỉ ngơi một tí, sau này đọc lại thì tự dưng nó có thể dễ hiểu hơn tí á.

Gần đây, mình lại tiếp tục các cuốn sách về ML, nhưng lại nghiêng về Statistics nhiều hơn, như là:

  • Linear Regression Analysis: Trong đây có rất nhiều định lý/chứng minh về Multivariable Statistics, đặc biệt là Normal Distribution cực kỳ hay.
  • Pattern Recognition and Machine Learning: Thư viện trường có cuốn này nên mình có mượn đọc, nhưng sách này thường nhảy qua một số chứng minh mà chỉ nói về kết quà nên thường hơi khó hiểu.
  • Probabilistic Machine Learning – An introduction: Cuốn sách này nói về ML nhưng dưới góc nhìn xác suất thống kê, theo mình thấy là rất phù hợp với người mới bắt đầu. Mình đang tập trung đọc hiểu cuốn này.

Song song với việc đọc sách, mình sẽ dành thời gian mỗi ngày để viết bài cho trang web này. Định hướng của mình cho trang web chính là viết ra nhưng kiến thức nền tảng nhất mà người mới bắt đầu có thể hiểu được, và từ từ hướng đến những thuật toán phức tạp hơn.

Bài viết đầu tiên đến đây cũng hơi dài dòng rồi, nhưng mình mong là các bài viết tiếp theo sẽ đi đúng vào trọng tâm (là ML) hơn. Mong các bạn đón đọc!

Leave a Reply

Your email address will not be published.