Review khóa học Machine Learning của Andrew trên Coursera

Khi bạn đang có hứng thú tìm hiểu về Machine Learning và muốn tìm một khóa học để bắt đầu, có lẽ phần nhiều những gợi ý mà bạn nhận được sẽ bao gồm khóa học Machine Learning của Andrew Ng trên Coursera. Bản thân mình cũng đã vừa hoàn thành khóa học này, sau hơn 2 tuần tập trung cày cuốc.

image

Thật ra khóa học được thiết kế trong 11 tuần và mỗi tuần đòi hỏi bạn bỏ ra từ 5 đến 7 tiếng để nghiên cứu, xong muốn tập trung hoàn thành để tìm hiểu thêm các vấn đề khác nên mình hơi “đốt cháy giai đoạn”. Khóa học hoàn toàn bằng tiếng Anh, với người không được thành thạo lắm thì chắc cũng có chút khó khăn, tuy nhiên cũng có phụ đề tiếng Việt giúp quá trình học của bạn bớt gian nan chút. Như mình thì sẽ bật phụ đề tiếng Anh, và nếu đoạn nào không nghe nổi thì có thể quan sát phần phụ đề, mình thấy các từ được dùng cũng không quá phức tạp, cộng với giọng của tác giả cũng rõ và dễ nghe, nên vấn đề ngôn ngữ cũng không phải trở ngại quá lớn.
Một chút về nội dung chủ đạo của khóa học nhé! Khóa học xoay quanh 4 chủ đề lớn:

  1. Học có giám sát: phần này bạn sẽ được giới thiệu về các giải thuật học có giám sát như Linear Regression, Logistic Regression, Neural Network, Support Vector Machine
  2. Học không giám sát: các giải thuật K-means, Principal Component Analysis, Anomaly Dection
  3. Một vài ứng dụng, topic nổi bật: Recommender Systems, Large Scale Machine Learning
  4. Một số lời khuyên trong quá trình xây dựng hệ thống học máy: vấn đề underfit và overfit, chuẩn hóa giá trị thuộc tính, regularization, ước lượng thuật toán với learning curves, ceiling analysis

image

Theo đánh giá của bản thân mình thì phần mà mình cảm thấy quan trọng nhất và tâm đắc nhất trong khóa học này chính là phần số 4. Vấn đề về nội dung thuật toán mình đã có thể được dạy trên trường hoặc có thể tìm được tài liệu ở trên mạng không quá khó khăn. Tuy nhiên, thuật toán chỉ là một công cụ, việc sử dụng công cụ ấy như thế nào sao cho đúng lúc, hiệu quả lại là một vấn đề khác, và điều này mình hoàn toàn không được học quá nhiều ở trường, và các tài liệu trên mạng thì chủ yếu tập trung làm rõ thuật toán. Trong khóa học, Andrew cũng đã nhấn mạnh tầm quan trọng của các practical advices này qua việc lấy ví dụ thực tế ông quan sát được rất nhiều người bỏ thời gian ra phát triển một thuật toán mà thành ra không phù hợp với bài toán, rất tốn kém, hay sử dụng các cảm nhận mang tính chất vô cùng cảm tính để lựa chọn giải pháp mong cải thiện hiệu năng của hệ thống nhưng hoàn toàn thất bại, bởi nó là gut feeling mà không dựa trên một cơ sở đánh giá nào cả. Qua khóa học này, mình cảm thấy mình có một cái hình dung rõ ràng hơn cũng như “khoa học” hơn trong việc phát triển một hệ thống học máy.
Sẽ tốt hơn nếu bạn có kiến thức về đại số tuyến tính, giải tích, xác suất thống kê trước khi học khóa học Machine Learning này. Tuy nhiên nếu bạn không biết quá nhiều thì cũng đừng quá lo lắng, đó không phải là thứ cản trở bạn trong việc hoàn thành khóa học này. Tác giả sẽ phân tích kỹ càng ở các điểm mấu chốt thực sự cần thiết và quan trọng của thuật toán, các vấn đề chứng minh quá sâu đậm tính chất toán học sẽ được bỏ qua. Theo như mình thấy bản thân tác giả cũng ý thức được đối tượng tiếp cận khóa học sẽ có những người không có hiểu biết nhiều về các chủ đề trên, nên lựa chọn điểm để đào sâu rất phù hợp, phần khác có thể sẽ chỉ đưa ra tài liệu liên quan nếu bạn muốn tìm hiểu kỹ hơn.
Tuy nhiên, để chốt lại, nếu bạn muốn tiếp cận khóa học chỉ để tìm hiểu xem Machine Learning là gì và nó như thế nào, có thể bạn sẽ không cần biết về đại số, giải tích, xác suất. Ngược lại, nếu bạn coi đây là bước đầu trên con đường theo đuổi sự nghiệp thành kỹ sư AI của mình, thì chắc chắn bạn nên tìm kiểu kỹ về các vấn đề toán học trên.
Trong quá trình học, bạn sẽ thấy Andrew dùng rất nhiều biểu đồ để minh họa trực quan, điểm này làm mình cảm thấy dễ hiểu hơn nhiều.

image

Thực tế phải thừa nhận, các thuật toán Machine Learning không phải đơn giản, ngoài việc các công thức tính toán khá rối não thì việc hiểu các bước chạy của thuật toán cũng là một thách thức với những người tiếp xúc lần đầu. Các biểu đồ, hình vẽ sẽ giúp bạn có cái nhìn rõ hơn về cách mà thuật toán của mình đang thực hiện. Hơn nữa việc sử dụng các hình ảnh cũng có tác dụng giúp bạn nhớ lâu hơn đấy!
Một điều mà mình nhận thấy ở khóa học này là tính tương tác rất cao. Trong quá trình xem video sẽ có những câu hỏi trắc nghiệm xen ngang để check xem bạn đã hiểu vấn đề hay chưa.

image

Cuối mỗi topic sẽ là 5 câu trắc nghiệm xoay quanh các key words và bạn phải đạt ít nhất 80% mới qua nhé!

image

Và một điểm làm mình cảm thấy hứng thú tìm hiểu hơn, đó là bài tập lập trình sau mỗi tuần. Rõ ràng việc cứ tìm hiểu lý thuyết suông đôi khi khiến bạn thấy thật chán và tẻ nhạt, đặc biệt là những người thực tế luôn muốn nhìn thấy một cái gì đó “thực”, một thành phẩm mà cho thấy sự ứng dụng kiến thức mình học được từ đó tạo động lực tiếp tục nghiên cứu. Thì khóa học này đã đáp ứng được yêu cầu đó. Và đừng lo việc implement một hệ thống học máy là quá sức với bạn khi bạn mới chỉ ở ngưỡng bắt đầu. Mỗi bài tập được thiết kế ở mức đơn giản sao cho phù hợp nhất. Sẽ có hướng dẫn cho mỗi bài tập lập trình nhé! Phần này sẽ giải quyết bài toán nào, bao gồm những file nào, mỗi file sẽ làm gì, bạn cần hoàn thiện những file nào… tất cả đều được viết rất rõ trong hướng dẫn.

image

Như bạn thấy đấy, bạn sẽ không phải tự code toàn bộ hệ thống đâu, họ đã chia sẵn hệ thống thành các mô-đun (các hàm), đồng nghĩa bạn không phải nghĩ về cấu trúc chương trình sẽ ra sao đâu, chỉ cần implement những phần cần hoàn thiện, và thường thì những phần này sẽ là các phần mấu chốt của giải thuật mà bạn đã được học của tuần đó. Phần nào khó quá sẽ có tip hướng dẫn nên sẽ giúp bạn hoàn thiện thuận lợi hơn!

Và còn có cả một forum cho mỗi tuần để mọi người có thể trao đổi và giải đáp thắc mắc nữa, vô cùng tiện ích!

image

Bạn có đắn đo liệu code mình viết có chính xác? Mỗi bài tập lập trình sẽ cho phép bạn submit kết quả lên server và sẽ chạy nhiều bộ test khác nhau để kiểm tra tính đúng đắn, rất tiện và hiệu quả, số điểm bạn đạt được cũng sẽ được update trên Coursera luôn.

image
image

Có một điều là các bài tập lập trình được thiết kế cho bạn implement bằng ngôn ngữ Matlab hoặc Octave. Điều này được tác giả giải thích là do ngôn ngữ này cho phép tính toán ma trận với cú pháp đơn giản, và theo quan sát của ông thì việc sử dụng Octave hoặc Matlab giúp các học viên hoàn thiện các bài tập lập trình nhanh chóng hơn so với Python hoặc R. Tuy nhiên có một số người lại không thích điều này với lý do rằng rất ít các công ty trong thực tế sự dụng Matlab hoặc Octave cho việc xây dựng các hệ thống học máy. Theo quan điểm cá nhân của mình thì Matlab và Octave sẽ phù hợp cho việc xây dựng một prototype ở giai đoạn đầu để kiểm tra nhanh tính đúng đắn, hiệu quả và lựa chọn ra một model phù hợp cho implement với Python hoặc R ở bước sau, và trong khuôn khổ của khóa học này chỉ nhằm cung cấp hiểu biết nhất định để bạn nắm được các bước thực hiện của thuật toán chứ không có mục đích xây dựng một hệ thống ứng dụng trong thực tế, nên mình nghĩ vấn đề ngôn ngữ lập trình không phải là vấn đề đáng tranh cãi, và cho đến giờ mình vẫn thấy việc coding với Octave và Matlab khá thuận lợi và hợp lý cho một người mới bắt đầu như mình.
Trong quá trình học bạn sẽ thấy một sự xâu chuỗi và liên kết khá tốt giữa các topic với nhau. Ví dụ từ thuật toán hồi quy tuyến tính, tác giả đặt trong ngữ cảnh đem áp dụng vào bài toán phân loại, sau đó chỉ ra những điểm bất cập của hàm ước lượng giá trị lỗi (cost function) của thuật toán hồi quy tuyến tính khi sử dụng cho bài toán này, từ đó đưa ra những thay đổi nho nhỏ trong hàm cost function và cuối cùng ta có một thuật toán mới Logistic Regression. Ngoài ra những so sánh trong trường hợp nào nên dùng thuật toán nào cũng được tác giả thường xuyên đề cập để giúp học viên có những lựa chọn đúng đắn trong việc xây dựng hệ thống học máy sau này.

image

Sau khóa học này, bên cạnh tìm hiểu được một số thuật toán mới mà mình chưa được học ở trường như Logistic Regression, Principal Component Analysis, Anomaly Detection…, mình còn học được một cách triển khai thuật toán giúp chương trình chạy nhanh hơn, hiệu quả hơn. Cái này mang tính chất hơi đặc thù một chút nên bạn nào có từng code sẽ dễ hiểu hơn, rằng trước đó khi học ở trường về việc tính toán cost function hay cập nhật trọng số chẳng hạn, đều dựa vào tổng giá trị lỗi của tất cả các ví dụ trong tập học, và mình nghĩ ngay đến ở đây sẽ phải dùng vòng lặp for, rõ ràng, cần phải quét qua tất cả các ví dụ để tính toán mà! Cho đến khi mình học khóa này và thấy họ dùng ma trận để tính toán, và điều này giúp tận dụng các nhân xử lý của chip để song song hóa, nâng cao đáng kể hiệu năng tính toán, mình học theo và thấy tại sao trước kia mình không nghĩ tới nó nhỉ?
Trên đây là những trải nghiệm của mình với khóa học Machine Learning của Andrew Ng trên Coursera, nếu bạn thấy tò mò và muốn học thử, có thể truy cập địa chỉ sau: https://www.coursera.org/learn/machine-learning/home/welcome

6 Likes

Tiếp theo của phần học này, @nathan định apply những gì được học vào trong công việc sắp tới của em/team? Share thêm nhé.