Con đường học tập Machine Learning của tôi

Học Machine Learning

Chặng đường trở thành một Data Scientist khá dài, 2-3 năm thậm chí là 5 năm tuỳ năng lực của mỗi người. Có bạn chọn cho mình con đường học thuật từ cử nhân, master cho đến PhD. Có bạn học xong cử nhân thì tìm kiếm ngay cho mình cơ hội nghiên cứu ở các công ty. Có bạn lại chọn cho mình phát triển ở vị trí Data Engineer/Data Analyst chuyên phân tích dữ liệu Big Data. Dù bạn ở vị trí nào đi nữa thì điều quan trọng nhất là bạn đã đóng góp được gì cho dự án mà mình tham gia.

Trong bài viết này, tôi sẽ tản mạn một chút về quá trình học tập Machine Learning của tôi trong thời gian qua. Từ lúc tôi còn ngồi ghế nhà trường cho đến lúc đi làm. Bạn đọc ở đây có lẽ cũng có nhiều điểm chung như tôi, cũng đã từng thử qua nhiều phương pháp học Machine Learning khác nhau, cũng đã từng trải nghiệm và chọn lọc ra cách học phù hợp nhất đối với bản thân. Cách tiếp cận của tôi có lẽ không phải là cách tốt nhất nên ta chỉ tham khảo để giao lưu thêm thôi nhé.

Cách học Toán

Học Toán

Thông thường, ta có nhiều cách học. Thời phổ thông, ta thường học theo kiểu diễn dịch. Thầy cô sẽ đưa cho bạn định nghĩa, lịch sử phát triển, phương pháp, và làm bài tập để củng cố lại định nghĩa ban đầu. Lên Đại học, ta sẽ đi theo kiểu quy nạp. Thầy cô sẽ đặt vấn đề cho các bạn suy nghĩ, tại sao lại xuất hiện vấn đề này, ai đã giải quyết được vấn đề này, phương pháp này có điểm gì chung, dựa vào nguyên lý gì, ứng dụng của nó là gì, sau cùng làm bài tập để nhớ lại kiến thức đã học. Khi đi làm, bạn thường search Google để học, các trang blog hay các tutorial sẽ giúp bạn học nhanh hơn thông qua những ví dụ cụ thể và hình ảnh minh hoạ dễ hiểu. Hoặc có nhiều bạn áp dụng phương pháp hiện đại hơn như MindMap, Time management, Goal setting, …

Tôi tự nhận mình không phải là một người giỏi Toán, đặc biệt về phương diện chứng minh và tính toán số học. Đây thật sự là điểm yếu của tôi khi quyết định tu học lên cao, vì ở môi trường này đòi hỏi bạn phải làm bài tập khá nhiều về chứng minh và đọc hiểu các công thức toán. Nhưng bù lại tôi là người rất sẵn sàng tiếp thu, chịu khó khắc phục điểm yếu của mình. Học từ thầy, học từ bạn, học từ các cuốn sách, hay học từ các courses online. Với những cố gắng trong quá khứ, giờ đây tôi đã có những kiến thức Toán “đủ dùng” để có thể làm việc cùng Machine Learning.

Để bù đắp lại sự thiếu sót về thuật ngữ và kiến thức chuyên ngành Toán, tôi đã theo đuổi các khoá học trên MITOpenCourseware và Coursera. Từ đây, tôi dần dần xây dựng lại được kiến thức toán của mình. Khi đó, các buổi học online hay tài liệu tham khảo bằng tiếng Anh đã trở nên dễ tiếp cận hơn trước. Mách nhỏ với các bạn rằng khi phỏng vấn xin học bổng du học, các giáo sư cũng thường hay hỏi về kiến thức toán, nếu không có đủ vốn tiếng Anh và kiến thức cần thiết ta không thể trả lời được. Dưới đây là các môn học bạn cần quan tâm:

  • Giải tích (Analytics)
  • Đại số tuyến tính (Linear algebra)
  • Toán rời rạc (Discrete mathematics)
  • Lý thuyết đồ thị (Graph theory)
  • Xác suất thống kê (Statistics and probability)

Nếu bạn muốn học Machine Learning một cách nghiêm túc không chỉ đơn giản áp dụng tool hay library sẵn có thì tôi khuyên bạn nên học kỹ Toán. Nó không chỉ giúp bạn bám sát và hiểu được những bài giảng hiện tại mà còn giúp bạn có những phát kiến mới về nghiên cứu và ứng dụng trong tương lai. Sở dĩ ta học các phép cộng trừ nhân chia là để áp dụng vào các phép toán cao cấp hơn như phép nhân chia ma trận, tính gốc giữa hai vector, tính trị riêng hay vector riêng, lấy đạo hàm để tìm điểm cực trị… Không những thế, các phép toán này lại được ứng dụng rất nhiều trong Machine Learning.

Một người thầy của tôi có hướng dẫn rằng: “Quá trình học gồm có 5 bước: nguyên lý, phương pháp, giải thuật, chương trình minh hoạ và ứng dụng”. Nếu bạn đi qua đủ 5 bước này ở bất kỳ lĩnh vực nào thì bạn đã tinh thông được lĩnh vực đó. Nắm bắt nguyên lý là quan trọng nhất, từ đây ta mới bắt đầu nghĩ ra nhiều phương pháp, trong mỗi phương pháp ta lại có thể thiết kế được nhiều giải thuật và cứ thế ta có rất nhiều ứng dụng trong đó. Lấy ví dụ về Clustering, nguyên lý chung đó là sử dụng độ đo khoảng cách giữa các item để gom nhóm, từ đây ta có nhiều phương pháp tính khoảng cách khác nhau (Jaccard distances, Cosine distances, Edit distances, Hamming distances), mỗi khoảng cách này lại được tính toán trên tập dữ liệu phù hợp để triển khai được những ứng dụng tương ứng. Hay nói cách khác, nếu bạn có background tốt thì bạn sẽ đi được xa hơn, dù rằng quá trình xây dựng background ban đầu tốn rất nhiều thời gian.

Về lập trình

Học lập trình

Xin thú thật, khi còn học Đại học, tôi là một người code không giỏi và rất sợ code. Tôi đã tìm mọi cách để tránh né coding. Vì lý do này, tất nhiên Khoa học máy tính cũng không phải là chuyên ngành mà tôi chọn ban đầu. Xin giới thiệu một chút về trường Đại học của tôi. Tôi đã tốt nghiệp cử nhân tại trường Đại học Khoa học tự nhiên. Trường của tôi riêng đối với ngành Công nghệ thông tin thì chia thành 4 chuyên ngành, các bạn có thể tìm hiểu thêm về cấu trúc liên kết các học phần ở liên kết này:

  1. Hệ thống thông tin: chuyên nghiên cứu về cách thiết kế, xây dựng và quản trị hệ thống cơ sơ dữ liệu từ vi mô đến vĩ mô (SQL, NoSQL, Đại số quan hệ – Relational algebra,…)
  2. Công nghệ phần mềm: nghiên cứu về cách xây dựng, bảo trì và quản lý một dự án phần mềm sao cho hiệu quả và ít tốn kém nhất.
  3. Mạng máy tính: nghiên cứu về các giao thức mạng, truyền thông giữa các thiết bị, cài đặt và triển khai các hệ thống mạng từ vi mô đến vĩ mô.
  4. Khoa học máy tính: nghiên cứu về các thuật toán, trí tuệ nhân tạo như Thị giác máy tính, Xử lý ngôn ngữ tự nhiên, Khai thác dữ liệu, Máy học …

Nếu là đứa sinh viên chưa biết gì nhiều về các chuyên ngành và đặc biệt là đang tránh né việc coding nhiều nhất có thể thì bạn sẽ đoán được là tôi chọn học chuyên ngành Hệ thống thông tin. Sau khi tốt nghiệp, tôi mới nhận ra rằng dù bạn có đi đâu hay học gì liên quan đến IT thì bạn đều phải biết code và nên yêu quý công việc này vì nó sẽ theo bạn suốt đời trừ phi bạn chuyển ngành.

Ham học hỏi có lẽ là ưu điểm cũng là khuyết điểm của tôi. Thay vì chọn một chuyên ngành và học thật tốt chuyên ngành đó, ngoài Hệ thống thông tin, tôi đã học thêm rất nhiều môn ở các chuyên ngành còn lại. Điều này giúp cho tôi có một cái nhìn rộng hơn trong thế giới Công nghệ thông tin. Nhưng ngược lại, thời gian để tôi nghiền ngẫm và tiếp thu kiến thức bị sơ sài. Nên về tầm nhìn tôi biết khá nhiều nhưng về mặt chi tiết và cài đặt tôi thật sự rất kém. Có thể nói vào thời đó, tôi rất sợ phải coding và coding không được. Nhưng cuối cùng thì tôi cũng quyết định quay lại với Khoa học máy tính vì môn học này đã cuốn hút tôi thật sự. Một phần nữa cũng nhờ thầy hướng dẫn của tôi truyền động lực và chia sẻ những tiềm năng lớn của chuyên ngành này.

Rất may tại thời điểm đó, các khoá học online về lập trình đã giúp tôi rất nhiều trong việc lấy lại căn bản cũng như trình độ coding tiến bộ lên từng ngày. Tôi đã mua tài khoản trên Lynda.com để theo học các khoá học lập trình và kiến thức căn bản liên quan. Theo thời gian, tôi nhận thấy coding hay các ngôn ngữ lập trình đều có chung khuôn mẫu khi học: bạn sẽ học qua các kiểu dữ liệu, cách xây dựng hàm, các lệnh điều phối, vòng lặp và hướng đối tượng. Nếu bạn đã học tốt C++ hay Java thì bạn hoàn toàn có thể học nhanh các ngôn ngữ mới và đơn giản hơn như Python, R, Scala, Javascript hay PHP.

Về Machine Learning

Người thầy đầu tiên có thể giúp tôi lấy lại kiến thức căn bản đó là khoá học Machine Learning của Andrew Ng. Tác giả hướng dẫn rất căn bản và chi tiết từ các khái niệm tổng quát đến những ứng dụng thực tế và làm thế nào để cài đặt được những thuật toán này rất tường minh. Kinh nghiệm cho thấy, khi học các khoá học online như vậy, các bạn đừng quan tâm quá nhiều đến chi tiết, đại loại như bước này chứng minh thế nào, tại sao phải dùng thư viện này, mình phải hiểu công thức toán này mới đi tiếp được,… Làm như vậy sẽ tốn khá nhiều thời gian mà ý tưởng của bài giảng khó có thể tiếp thu được do bài giảng kéo dài. Thay vào đó, bạn nên thư giãn, cởi mở để nắm bắt ý tưởng trước, khi hoàn tất bài học, bạn có thể xem lại dần dần để nhớ được bài giảng muốn nói gì. Nếu quen rồi, mình chỉ cho các bạn thêm một trick đó là tua nhanh video từ x1.5 đến x2.0 lần để hạn chế buồn ngủ và bạn cần một cuốn tập kế bên để ghi chép.

Đối với các course mà tôi tham gia, thường tôi sẽ cưỡi ngựa xem hoa hết một lượt các bài giảng rồi mới bắt đầu ngồi nghiên cứu chi tiết từng thuật toán. Ngoài ra, bạn không nên stuck vào slide của tác giả mà nên tìm kiếm thêm các nguồn bài giảng đơn giản hơn ở bên ngoài. Vì nhiều lúc do vấn đề hạn hẹp về thời gian mà slide của tác giả sẽ rất vắn tắt và khó hiểu.

Tiếp theo, bạn cần làm bài tập của tác giả. Việc này rất quan trọng, vì nó giúp bạn thật sự hiểu tường tận thuật toán cũng như quy trình áp dụng machine learning từ những giai đoạn chập chững bước vào ngành. Ngoài ra, khi hoàn thành được bài coding đầu tiên, cảm giác của bạn sẽ tự tin lên một ít, trong lòng tự nhủ với mình “thì ra Machine Learning cũng dễ học đấy chứ…”. Thì ra Research và Prototype là như thế này đây. Bạn cần prototype thật nhanh flow xử lý của Machine Learning, không cần biết bạn áp dụng Linear Regression hay Deep Learning cao siêu gì đi chăng nữa, bạn phải làm được flow hoàn chỉnh trước, sau đó hẵng tinh chỉnh và tối ưu lại.

Nếu bạn đang là sinh viên ngành IT thì bạn thật may mắn. Bạn có thể đăng ký học các lớp học chuyên ngành Khoa học máy tính. Các lớp học này sẽ là môi trường rất tốt để bạn tu luyện cùng bạn bè của mình đồng thời các project nhóm sẽ giúp bạn trưởng thành hơn trong làm việc nhóm cũng như bớt đi sự cô đơn trong nghiên cứu. Khi học, các bạn cố gắng ghi chép đầy đủ kiến thức mà thầy cô truyền đạt đặc biệt là những kinh nghiệm nghiên cứu quý giá cũng như cơ hội xin học bổng để du học. Đừng ngại đặt câu hỏi dù cho đó có vẻ là ngây ngô, thầy cô không chê trách gì các bạn đâu thay vì vậy họ rất vui vì bạn đang tò mò và thích thú với những gì họ đang giảng, biết đâu sau này bạn còn làm việc nhiều với họ và nhận được sự hướng dẫn cần thiết khi làm luận văn. May mắn hơn nữa nếu bạn được làm việc cùng các thầy cô đã từng có nhiều công trình nghiên cứu quốc tế. Họ sẽ có nhiều điều để chia sẻ cho bạn về hướng đi sau này trên con đường sự nghiệp nghiên cứu và làm việc. Những lúc như thế bạn sẽ cảm thấy mình có nhiều động lực nghiên cứu hơn, đỡ cảm thấy bơ vơ không biết mình học ra để làm gì.

Một trong những khó khăn đầu tiên chúng ta thường gặp phải đó là các thuật ngữ chuyên ngành. Nhiều lúc bạn đọc thuật ngữ tiếng Việt thì không hiểu nhưng chuyển qua tiếng Anh thì dễ hiểu vô cùng. Ngược lại, nhiều thuật ngữ tiếng Anh đọc vào thì không hiểu nhưng chuyển sang tiếng Việt thì lại sáng tỏ được tất cả. Vì vậy, vai trò của thầy cô hướng dẫn trong những buổi ban đầu rất quan trọng. Bạn nên đặt thật nhiều câu hỏi càng tốt để không còn bị vướng mắc khi nghe giảng cũng như tham khảo các tài liệu tiếng Anh. Dần dần khả năng đọc và nghiên cứu tài liệu của các bạn sẽ tăng lên.

Khi đi làm

Sự nghiệp Data Science

Trong 2 năm gần đây, Machine Learning tại Việt Nam ngày càng phát triển. Việt Nam đang trở thành thị trường lớn cho các nhà tuyển dụng nước ngoài nhắm tới. Ngoài sự thông minh, chuyên cần, hăng hái học hỏi, ta còn hơn họ ở mức lương cạnh tranh cho vị trí tương đương tại nước họ. Do đó, xu hướng các công ty AI nước ngoài hiện đang dần dần chuyển giao công nghệ cho bên VN và build team tại đây để giảm chi phí ngày càng tăng. Khi tôi tham khảo mặt bằng lương cho Data Scientist/Engineer/Analytics tại VN trên ITViec và Vietnamworks thì mức lương dao động từ $2000-$7000 USD. Tại sao các vị trí liên quan đến DS lại có mức lương cao như vậy? Theo tôi có ba lý do, một là do sự khan hiếm về nhân lực đủ trình độ đáp ứng được vị trí này, hai là do thời gian đào tạo và tự đào tạo ra DS mất nhiều thời gian từ 5-9 năm, và ba là do lợi nhuận mang lại cho doanh nghiệp của DS lớn hơn rất nhiều so với chi phí bỏ ra ban đầu. Tất nhiên kèm theo đó sẽ là trách nhiệm của bạn cao hơn, áp lực về công việc và thời gian sẽ nhiều hơn, kĩ năng của bạn phải tương xứng với mức lương như vậy. Không chỉ bạn giỏi nghiên cứu học thuật, bạn cần nắm bắt được các công nghệ đang là xu hướng hiện nay, bạn phải trau dồi nhiều hơn kĩ năng quản lý dự án, kỹ năng truyền đạt ý tưởng của mình cho đồng nghiệp cũng như cho những người điều hành công ty mình. Để bắt kịp xu hướng nền “Công nghiệp 4.0” này, các trường Đại học cũng đang thực hiện nhiều cuộc đổi mới trong giảng dạy và đào tạo của mình sao cho đáp ứng được nhu cầu của thị trường lao động hiện nay. Bên cạnh đó, nhiều công ty AI và Big Data cũng sớm chiêu mộ nhân tài vào nhóm của mình từ rất sớm dù các bạn chỉ mới là sinh viên năm 2-3 để tránh không tuyển được người khi các bạn đã ra trường và bị săn đón bởi nhiều công ty khác.

Những bạn sau này, khi xác định cho mình con đường làm nghiên cứu thì mình khuyên các bạn nên đăng ký làm luận văn tốt nghiệp thay vì tốt nghiệp bằng cách hoàn tất mọi khoá học. Tại sao bạn nên làm như vậy? Bởi vì khi làm luận văn bạn sẽ hiểu được một paper được trình bày như thế nào và nội dung trong từng phần tác giả sẽ trình bày những gì. Trong tương lai, nhờ vậy mà bạn có thể đọc lướt được rất nhiều paper cùng lúc, bạn sẽ đọc qua rất nhanh abstract, results và phần đánh giá thay vì đọc từ đầu đến cuối paper mà thật sự không nắm được gì cả.

Con đường học thuật

Nếu bạn thích con đường học thuật thì tôi khuyên bạn nên tiếp tục tu học lên cao học Master, PhD và nên kiếm học bổng để nghiên cứu bên nước ngoài. Một phần vì bản chất của Data Scientist là làm nghiên cứu nên bạn cần làm nhiều nghiên cứu hơn để cọ sát và nâng cao trình độ của mình. Một phần nữa là do trong nước lớp học khá đông và loãng, thầy cô hướng dẫn sẽ khó phân chia thời gian để theo sát các bạn được. Thêm nữa, bạn sẽ bị vướng bận khá nhiều về cơm áo gạo tiền, như vậy sẽ ảnh hưởng không tốt đến công việc nghiên cứu.

Nếu bạn thích đi làm ngay sau khi ra trường thì bạn nên tìm hiểu thêm về thị trường lao động hiện nay cần gì. Từ đó, bạn sẽ chuẩn bị cho mình những kiến thức và kĩ năng để đi làm thực tế. Vì sau khi tốt nghiệp, có thể bạn sẽ không xin được học bổng nào, hoặc muốn học tiếp lên cao học nhưng kinh phí chưa có. Bạn có thể xin vào một đơn vị làm việc một thời gian và vừa học vừa làm để xin học bổng và đi du học luôn. Giai đoạn này, tiền bạc không quan trọng bạn nhé, hãy làm thật tốt và thật nhiều để tích góp kinh nghiệm trước, mục đích sau này bạn có CV thật đẹp cho những công việc sắp tới. Tôi thấy cơ bản khi đi làm bạn cần phải biết những công cụ và ngôn ngữ sau: Linux, HTML, CSS, Javascript, Git, Python, command line, Spark, Mongo,… Và ở VN đa số tôi thấy sản phẩm chủ yếu liên quan đến các bài toán như recommender system, social network graph analysis, text summarization, sentiment analysis, predictive model, healthcare, … Nên nếu có đang làm nghiên cứu thì bạn cũng nên chọn cho mình những đề tài gần gũi với các lĩnh vực này.

Làm Data Science

Các công ty phần mềm làm về Machine Learning đều có cách tổ chức và quy trình phát triển khác nhau để cho ra sản phẩm tốt nhất. Trong công ty mình đang làm thì có lập ra team R&P (Research and Prototype) chuyên áp dụng Machine Learning để nâng cao giá trị của những sản phẩm này. Ở đây mình sẽ không đi sâu vì vấn đề bảo mật, nhìn chung các bước sẽ là:

  • Xác định bài toán cần giải quyết (dự đoán doanh thu chi phí, tối ưu hoá hệ thống hay ROI). Thường bài toán sẽ được leader đưa ra để các member tham gia.
  • Nhiệm vụ của bạn là tìm hiểu bài toán để hiểu vấn đề như các KPI hay metrics trong lĩnh vực của mình. Sau đó, bạn sẽ làm literature review để xem đã có nghiên cứu nào trong thời gian gần đây chưa. Tiếp đến, bạn sẽ lục lọi lại dữ liệu thu thập được từ công ty mình và viết proposal làm nghiên cứu: ước lượng thời gian, phương pháp áp dụng, kết quả mong đợi, hỗ trợ về máy móc thiết bị, tài khoản cloud computing (AWS, Google cloud, Azure cloud) …
  • Sau cùng bạn sẽ prototype để demo ý tưởng của mình. Bạn có thể sử dụng các thuật toán SVM, linear regression, Neural network, … để khảo sát dữ liệu. Bước đầu, tôi thường đơn giản hoá bài toán lại: giới hạn tập đang xét thay vì 1000 ta chỉ xét 1 hoặc 2 mẫu dữ liệu sau đó từ từ quy nạp cho nhiều mẫu dữ liệu hơn. Ta có thể định nghĩa môi trường lý tưởng cho giả thiết ban đầu như các giá trị đều là dương, số lượng đều bằng nhau, khởi tạo cold-start vector đều bằng 0, sử dụng phân bố uniform hay phân bố chuẩn để generate sample data, áp dụng greedy/brute force algorithm để giải… Sau khi giải được bài toán lý tưởng này, ta sẽ tiếp tục biến đổi các hằng số bias ban đầu bằng cách biến đổi chúng theo thời gian. Có khi bạn cần thêm bước tiền xử lý dữ liệu như loại bỏ các thông tin dư thừa, tìm kiếm thêm các dữ liệu liên quan để cải tiến mô hình đang xét. Cuối ngày, bạn sẽ commit source lên để team theo dõi tiến độ của bạn.
  • Hàng tuần, team sẽ có những cuộc họp để cập nhật tình hình nghiên cứu và đưa ra các hướng giải quyết tiếp theo. Vì đa phần thời gian đầu, bạn sẽ gặp khó khăn trong việc hiểu bài toán và bị bí không biết nên áp dụng phương pháp nào để giải quyết vấn đề, nhiều lúc bạn sẽ cảm thấy chán nản và buồn ngủ khi đọc các paper hay các thuật toán khó hiểu. Lúc này team sẽ giúp bạn gỡ rối như đề xuất cho bạn một vài giải pháp, giúp bạn định hình lại bài toán, chia sẻ kinh nghiệm về quá trình tìm hiểu… Sau nhiều vòng lặp như vậy bài toán gần như đã được giải quyết và độ chính xác đã đạt ở mức chấp nhận được khoảng 80-90%.
  • Bước cuối cùng là implement vào sản phẩm. Có thể bạn sẽ viết một API để cho developer sử dụng hoặc cài đặt luôn một ứng dụng cụ thể từ A-Z, tích hợp lên các hệ thông cloud computing, quản lý tài khoản và đánh giá mô hình dựa trên A/B testing, Multi-armed Bandit… Giai đoạn này cần sự phối hợp team work khá nhiều, vì hệ thống khá lớn và bạn không thể ôm đồm quá nhiều việc. Bạn cần sự hỗ trợ từ nhiều phía: hướng dẫn của cấp trên, share task với các bạn đồng nghiệp, chuyển giao cho các nhóm khác như QA để test sản phẩm, Developer để triển khai sản phẩm, System admin để xây dựng kiến trúc cơ sở hạ tầng cho sản phẩm…

Có nhiều tranh luận về làm Data Scientist có cần giỏi Toán không vì hiện nay hầu như bài toán nào cũng đã có sẵn tools và library rồi, công việc của bạn chỉ là cài đặt và chỉnh sửa các tham số sao cho phù hợp. Theo tôi thì bạn không cần quá xuất sắc về Toán nếu đi làm thực tế, nhưng khi muốn có những công trình nghiên cứu xuất sắc thì những chứng minh toán học bên trong bài báo của bạn sẽ là một ưu thế rất lớn cũng như giúp bạn giải quyết những bài toán phức tạp một cách ngắn gọn và thông minh hơn. Biết đâu sau này sẽ có thuật toán khác vượt trội hơn cả Deep Learning mà chỉ thông qua một vài phép tính đơn giản.

Bài viết đến đây cũng khá dài rồi nên tôi xin kết tại đây. Quá trình học tập và kiên định theo đuổi một lĩnh vực nào đó đòi hỏi bạn rất nhiều tính nhẫn nại, ham học hỏi, cũng như rèn luyện bản thân mình để tiến bộ từng ngày, quan trọng hơn là không bao giờ được từ bỏ. Hãy tiếp tục, tiếp tục cố gắng, tiếp tục bước trên còn đường mà mình đã chọn. Bạn thấy đấy, tôi cũng như bao sinh viên Đại học khác, cũng thử hết lĩnh vực này lĩnh vực kia, đứng núi này trông núi nọ, yếu kém điểm này điểm kia nhưng cuối cùng cũng gần đến được đích của mình. Hy vọng các bạn cũng theo đuổi và hoàn thành ước mơ của mình nhé.

Tham khảo thêm:

Một suy nghĩ 62 thoughts on “Con đường học tập Machine Learning của tôi

  1. Anh Hồng ạh! Em có đọc một vài bài viết của anh từ lâu viết về lĩnh vực MachineLearning. Cảm thấy anh là người cũng làm nhiều và chuyên sâu về mảng này, anh có thể chia sẻ thêm về việc làm MarchineLearning không anh?
    Em thì không làm về mảng này cũng chưa có ý định tìm hiểu sâu về nó. Em chỉ muốn tìm hiểu ở mức cưỡi ngựa xem hoa xem là làm MachineLearning cụ thể là làm gì? Nhiệm vụ chính là gì? Bài toán gặp phải là gì? Sản phẩm của MachineLearning là gì? Các vấn đề ở mức tổng quát để nhằm sau này nếu có điều kiện hoặc phải làm thì không cảm thấy bị bỡ ngỡ nhưng không có bài viết nào viết về chủ đề này cả.
    Anh có thể chia sẻ giúp em được không ạh?

    Thích

  2. Cảm ơn bạn, mình cũng đang tự học ML mới chi bắt đầu thôi. Theo kinh nghiệm của bạn thì một trong các mảng sau mảng nào thú vị hơn:
    1. Prediction
    2. NLP – mình cảm giác nhiều bạn đang theo xu hướng này
    3. Image + Video processing
    kiến thức có hạn nên mới tạm hiểu qua qua nó có 3 cái mảng đấy.

    Thích

    1. Hi, theo mình thì mảng nào cũng có điểm thú vị và thách thức riêng. Mình cũng vào ngành này chưa lâu nên chỉ chia sẻ được một ít như bên dưới 🙂

      1) Prediction thì thiên về Data mining nhiều, đã có nhiều nghiên cứu và công cụ có thể áp dụng vào thực tế. Tiếc là khoảng cách giữa học thuật và ứng dụng còn khá xa, do dữ liệu ngoài thực tế tuỳ công ty sẽ có cách xử lý riêng. Bạn build model, đưa vào ứng dụng, quan sát 1-2 tuần rồi sẽ thấy model của mình failed, rồi lặp lại các bước phân tích ban đầu. Hoặc các bài toán NP-hard sẽ thường xuyên bắt gặp khi đi làm, matching problem, approximate computing, scheduling, …

      2) NLP theo mình là lĩnh vực khó vì nhập nhằng theo cấp độ word -> phrases -> sentences -> paragraph và context trong văn bản. Ngay cả con người còn mắc lỗi thì làm sao train được cho máy không mắc phải sai lầm này. Đã hơn 50 năm nghiên cứu mà các bài toán kinh điển như translation, summarize, searching, text generation, question answering, discourse analysis vẫn đang được tiếp tục nghiên cứu để cải tiến độ chính xác. Và thế giới còn rất nhiều ngôn ngữ khác ngoài tiếng Việt như Anh, Hoa, Nhật, Hàn, …mỗi ngôn ngữ lại có đặc trưng và khó khăn riêng trong đó. Bạn sẽ cảm thấy ngành này nghiên cứu hoài không bao giờ hết. Hiện nay cũng đang có nhiều ứng dụng thú vị như phát hiện tin tức giả trên báo để bảo vệ bản thân khỏi những nguồn tin bạo động, thư ký ảo sắp xếp lịch làm việc, quản lý email, …

      3) Image + Video processing: gần đây mình thấy nổi lên là Deep learning. Xem ra hướng tiếp cận này khá hoàn hảo, độ chính xác của các bài toán nhận diện đã gần tới ngưỡng 100% độ chính xác. Ảnh và video trên internet hiện có rất nhiều nên mình nghĩ nhu cầu tìm kiếm và organize đang rất được quan tâm. Bạn search một đoạn nào đó trên video bằng string, tóm tắt video có nội dung chính là gì, cho một ảnh mặt người đi tìm toàn bộ thông tin của người đó, phát hiện và điều trị sớm ung thư, … Ứng dụng thì trên Appstore vô số.

      Ngoài ra thì còn lĩnh vực xử lý tín hiệu số (voice recognition, signal processing), robotics, cognitive modeling, nghiên cứu và ứng dụng liên ngành, … Nên tuỳ cảm nhận mà mình tập trung chuyên sâu vào lĩnh vực mà mình thích, các lĩnh vực xung quanh mình dùng tham khảo để lấy ý tưởng, tránh đi vào lối mòn suy nghĩ của lĩnh vực mình đang nghiên cứu 😀

      Đã thích bởi 2 người

      1. Cảm ơn bạn rất nhiều về những chia sẻ. Sau khi đọc và tìm hiểu qua mình thấy có quá nhiều thứ cần phải được hệ thống và tìm hiểu lại. Thôi thì cứ learn by example vướng đâu lại mò đấy.
        Theo quan điểm cá nhân của bạn thì ở VN mảng nào dễ có cơ hội phát triển hơn.

        Thích

  3. -Chào anh .! Em theo dõi, đọc các bài viết trên blog của anh đã lâu. Hiện tại em vẫn còn là sinh viên và cũng đang tự tập tành học ML. Cho em hỏi, khi làm về ML thì nhà tuyển dụng có yêu cầu bằng cấp như thế nào có cần thiết phải bằng cấp như Thạc sỹ, tiến sỹ… .Vì em đang phân vân không biết có nên học sau đại học hay là đi làm luôn..

    Thích

    1. Nếu là anh thì anh sẽ khuyên em nên tu học lên cao để có nhiều kinh nghiệm về nghiên cứu hơn cũng như đảm bảo hơn trong quá trình tuyển dụng. Nguyên tắc tuyển dụng ở đây là ưu tiên những người giỏi, có kinh nghiệm trước sau đó mới loại bỏ dần. Nếu em chỉ là sinh viên bình thường và cũng không có gì chứng minh em có thể làm việc với ML thì cơ hội của em rất thấp.
      Ngược lại, nếu em tự tin với năng lực của mình thì anh vẫn thấy các bạn tốt nghiệp xong có thể apply vào intern một công ty AI nào đó. Thường các bạn này là những sinh viên ưu tú của trường nên các nhà tuyển dụng thường sẽ chú ý và ưu tiên hơn các bạn khác.
      Cũng có bạn từ software engineer nhảy sang ML để làm. Mặc dù cũng triển khai được các dự án ML nhưng đòi hỏi các bạn thời gian nhiều để ôn tập lại các kiến thức bị bỏ sót trong quá trình học cũng như cần lắm một research leader để hướng dẫn các bạn tập tành bước vào lĩnh vực này.
      Nói tóm lại tuỳ vào mục đích cuối cùng của em là gì để đưa ra quyết định: tiền bạc, tấm bằng, kinh nghiệm, giảng dạy, khoa bảng hay sự nghiệp lâu dài…

      Đã thích bởi 1 người

  4. chào anh,
    em mới tốt nghiệp ngành marketing, nhưng e quyết định du học về ngành Data (khóa học kéo dài 1 năm thôi)
    => hiện tại em chưa có cơ bản về lập trình hay toán
    em có đăng ký học trên datacamp, thấy bài giảng cũng dễ hiểu, nhưng khi mua cuốn “python for data analysis” thì đọc k hiểu gì cả
    => liệu anh có thể gợi ý hướng đi nào hợp lý cho em nếu em muốn theo đuổi ngành này không ạ
    liệu 1,2 năm học có đủ kiến thức để xin được việc
    bản thân em thì muốn học xong 1 năm này, r đi làm lấy kn, sau đó tu học lên master sau
    em xin cảm ơn

    Thích

    1. Anh nghĩ em nên tập trung thế mạnh của mình bên Marketing là được, lập trình thì em nên biết cơ bản và cài đặt các phép phân tích thống kê khi làm việc là đủ.
      Công việc lập trình sẽ đòi hỏi nhiều thời gian hơn em tưởng. Các bạn IT lập trình thì giỏi nhưng business domain sẽ không tốt bằng em, nên làm việc nhóm sẽ thích hợp hơn trong tình huống này.
      Các khối kinh tế thì anh thấy các bạn nên đi làm một thời gian, khi quay lại học tiếp master mới phát huy được mục đích học lên cao này.

      Đã thích bởi 1 người

      1. vậy ý anh là em nên nhắm tới vị trí nào trong một dự án ạ. Vị trí nào mà yêu cầu business domain và 1 ít lập trình
        hiện tại thì e đã được nhận học khóa data analyst r (khóa này kéo dài 1 năm)
        mong anh gợi ý em hướng đi với ạ, vì đằng nào thì em cũng sẽ học khóa data 1 năm này
        em chưa rõ khi học xong thì em sẽ có thể làm được những vị trí nào trong 1 dự án

        Thích

        1. E có thể làm vị trí Data analyst, xây dựng các hệ thống BI, quản lý team marketing,…
          Ý của anh là bên ngành của em ngoài kiến thức chuyên môn, nếu có thêm kĩ năng của IT thì sẽ tạo cơ hội cạnh tranh lớn trong tuyển dụng so vs những bạn chỉ biết về marketing ko thôi.

          Thích

                1. DA áp dụng các kiến thức xác suất thống kê để phân tích, đánh giá, kiểm định giả thuyết trên tập dữ liệu. Mọi SV nếu giỏi về xstk đều đủ khả năng làm vị trí này nhưng cần thêm kĩ năng làm việc với các CSDL Big Data nữa là đủ.

                  Bên VN thì không quá phân biệt giữa DS/DE/DA vì họ muốn e càng biết nhiều càng tốt để đỡ tốn chi phí tuyển người, trừ phi dự án quá sức của 1 người thì mới bắt đầu chia nhỏ công việc ra để giảm tải. Nếu em theo làm PhD 3 năm thì chỉ có 1 mình em tự xử cho công trình nghiên cứu của mình. Từ khâu xác định bài toán, thu thập dữ liệu, phân tích sơ bộ, phát triển ý tưởng đến khâu xây dựng hệ thống, cài đặt và báo cáo kết quả nghiên cứu đều tự tay e làm. Nên các nhà tuyển dụng duyệt hồ sơ từ tấm bằng là như vậy, mặc dù em để nó trong tủ không bao giờ show ra nhưng họ hiểu em đã trải qua những gì để có được tấm bằng này nên mới tuyển em là vậy đó 😀

                  Thích

              1. em muốn hỏi cụ thể để chọn đường đi cho đúng
                anh trả lời giúp em nốt câu này là vị trí data analyst thì mất khoảng bao lâu để học ạ, cũng vs điều kiện chăm chỉ + bộ óc bình thường =))))
                data scientist thì chắc là cả đời hả a

                Thích

  5. Cảm ơn anh đã chia sẽ kinh nghiệm. Anh có thể nói thêm về những trải nghiệm khi làm việc với ML ở Việt Nam không ạ, chẳng hạn như các vị trí anh đã từng làm, chủ đề các project, khó khăn hay cái hay của nó,etc…Như vậy em sẽ có một cái nhìn cụ thể hơn về mảng Data mining. Hiện tại e cũng đang phân vân việc theo học ML cho computer vision hoặc là Data Scientist nên mong được nghe nhiều hơn từ anh. Em nghe bảo Data Scientist sẽ phải giao tiếp khá nhiều, vậy phần lớn là phải trao đổi trong team, giữa các team hay phải trao đổi với khách hàng và diector nữa ạ? Và có phải sử dụng nhiều tiếng anh không nếu làm tại Việt Nam?

    Thích

    1. – Có phải sử dụng nhiều tiếng anh không nếu làm tại Việt Nam? -> có em, đây là điều kiện cơ bản để làm việc. Hãy đăng ký các khoá học lấy chứng chỉ như TOEIC, TOEFLE, hay IELTS.
      – Em nghe bảo Data Scientist sẽ phải giao tiếp khá nhiều -> không nhiều lắm, chủ yếu em nghiên cứu để tìm kiếm giải pháp. Lâu lâu, em sẽ được mời lên present những gì mình đã tìm hiểu thôi.
      – vậy phần lớn là phải trao đổi trong team, giữa các team hay phải trao đổi với khách hàng và diector nữa ạ? -> mỗi công ty một vẻ, công việc của em liên quan nhiều đến team nào thì chỉ làm việc với team đó.
      – Hiện tại e cũng đang phân vân việc theo học ML cho computer vision hoặc là Data Scientist -> em phải thích một lĩnh vực trong lúc học rồi mới xác định được.

      Thích

      1. Cảm ơn anh đã bỏ ra thời gian để chia sẽ và trả lời các comment. Chúc anh sức khỏe và thành công. Mong sẽ được tiếp tục đọc nhiều bài viết hơn từ anh.

        Thích

  6. Thưa anh, em đang bị kẹt ở bài tập cuối chương Linear regression của Coursera vì chỉ code được 3/4 bài tập thôi. Sắp deadline rồi mà vẫn chưa có cách giải quyết, anh có thể giúp em không?

    Thích

  7. Anh cho em hỏi là định hướng của em là software engineer nhưng muốn tìm hiểu thêm về Machine learning để áp dụng vào các sản phẩm thì có nên tiếp cận bài bản như những gì anh hướng dẫn ở đây không? Nếu không thì anh có thể nói sơ qua cho em về con đường như thế nào cho hợp lí được không ạ?
    Và một câu hỏi nữa là ML có ứng dụng gì nhiều trong công việc cho các software engineer không ạ, hay chỉ khi mình tự phát triển sản phẩm của riêng mình thì mình mới quyết định có sử dụng hay không?

    Đã thích bởi 1 người

    1. Hi em,
      Nếu em đã định hướng là Software engineer và thích thú với công việc này thì em có thể tập trung vào thiết kế và triển khai các kiến trúc phần mềm đạt chất lượng cao bằng các quy trình (eXtreme Programming, Scrum) và kĩ thuật hiện đại (Design pattern, Behavior Driven Development, Test Driven Development,…). Một dự án phần mềm thành công rất cần những người như em. Về ML em có thể tham khảo qua để cập nhật thêm kiến thức của mình tránh bị lạc hậu bởi các thuật ngữ đang là xu hướng hiện nay là tốt rồi.
      Là SE khi làm việc chung với DS, em chỉ cần quan tâm đến input, output của họ là gì để đưa vào hệ thống của mình. Việc hiểu được các khái niệm bên trong ML giúp em giao tiếp với team DS được thuận tiện hơn để team work được trơn tru hơn. Và hầu hết các sản phẩm phần mềm hiện nay không cần ML vẫn thu được nhiều thành công.

      Thích

      1. Em cảm ơn anh đã quan tâm đến câu hỏi của em ạ.
        Như anh nói thì các dự án phần mềm bây giờ không cần ML, vậy thì ML thường được áp dụng vào những mảng nào ạ? Nếu theo hướng SE mà không muốn chỉ đi làm outsource thì nên học như thế nào ạ? (Em đang học KHMT và hầu hết chỉ dạy những thứ nền tảng, có cả AI và ML, còn các ngôn ngữ lập trình và công nghệ mới để đi làm thì đều tự học).

        Thích

  8. Dear anh!

    Em có 2 câu hỏi chân thành nhờ anh trả lời:

    1. Doanh nghiệp quy mô cỡ nào thì cần ứng dụng ML.
    2. Trong một tổ chức vừa phải thì làm sao để ứng dụng khoa học dữ liệu để cải thiện hiệu suất ạ.
    3. Chưa có kinh nghiệm thì có những công việc dự án online nào để mình tham gia và tích lũy kinh nghiệm không ạ?

    Thích

    1. Hi em, anh xin chia sẻ ngắn gọn như sau:
      1. Doanh nghiệp quy mô cỡ nào thì cần ứng dụng ML.
      Quy mô không quan trọng, quan trọng doanh nghiệp muốn gì và dữ liệu có đủ để áp dụng ML. Ví dụ: để chăm sóc khách hàng có thể sử dụng chatbot để đặt hàng, xây dựng hệ thống recommend sản phẩm thích hợp dựa trên số lượng mua, comment, mức độ yêu thích, …

      2. Trong một tổ chức vừa phải thì làm sao để ứng dụng khoa học dữ liệu để cải thiện hiệu suất ạ.
      Hiệu suất cần dựa trên KPIs cụ thể như doanh thu, số lượng khách hàng tháng, tỉ lệ pageview hàng tháng, ROIs, …
      Từ đây, ta mới đi xem xét dữ liệu hiện có (Data analysis, Exploration) xem xem có thể áp dụng Data Science không và như thế nào.

      3. Chưa có kinh nghiệm thì có những công việc dự án online nào để mình tham gia và tích lũy kinh nghiệm không ạ?
      – Học tiếp cao học (Master, PhD).
      – Các khoá học online, bootcamp, kaggle để hiểu qua công việc có phù hợp bản thân hay không.
      – Tự start project riêng hoặc gợi ý từ thầy cô trên trường. Sau đó chia sẻ lên blog hoặc open source để cộng đồng góp ý.
      – Làm internship các công ty làm về Data Science/AI/Machine Learning.

      Thích

  9. Anh cho em hỏi với ạ, em học kinh tế nhưng khá yêu thích CNTT, vậy em muốn học machine learning thì có học trực tiếp được không hay phải học lập trình trước ạ, cảm ơn anh!

    Thích

    1. Lập trình giúp em cài đặt các mô hình Machine Learning, mà Machine Learning base trên kiến thức toán và Khoa học máy tính. Nên em cần học song song 2 mảng lý thuyết và ứng dụng để tiếp cận nhé.
      Tương tự như việc chơi đàn piano và học nhạc lý vậy, em vẫn có thể chơi được nhạc nhưng hoàn toàn không có căn bản để đi xa và lâu dài.

      Thích

  10. ko biết nói gì cảm ơn anh em đang là năm 2 em may mắn biết dc cụm từ machine learning em cũng hoc MIS giống anh em nghĩ em sẽ hoc mấy cái toán ở truong truoc để có nền tảng , chứ giờ vao học em thấy ko hiểu lắm dù đã ngồi rat lâu , em sẽ hoc thêm pthon lun vì thay nó đang phat trien chỉ sau JAVa

    Thích

  11. Em chào anh ạ.
    Em cũng đang cố gắng theo đuổi Machine Learning nhưng kiến thức toán học chưa vững. Anh có thể gợi ý cho em một vài khóa học hay tài liệu mà anh đã sử dụng để xây lại nền tảng toán học không ạ(Toán rời rạc, xác suất thống kê, đại số tuyến tính, …)? Em có đọc qua bài chia sẻ của anh về chủ đề này nên muốn hỏi anh về tài liệu tham khảo.
    Em cảm ơn anh nhiều ạ. Một blog thực sự hữu ích với mọi người.

    Thích

  12. năm cuối rùi bắt đầu học ML có ổn k anh
    kiên thức toán h em quên hết rùi
    em nghĩ chắc mất 6 tháng đến 2 năm ms học lại toán lắm anh
    +giải tích
    +ma trân
    +xác suất
    +đai số tuyến tính
    +lý thuyết đồ thị
    +lý thuyết tối ưu
    và nâng cao tiếng anh nữa

    Thích

          1. em cảm ơn nhiều
            em biết về AI và thích nó khi em làm 1 cái wep có hộ trợ về recommendation system trong đồ án tốt nghiệp mà em đang làm. em thấy AI nó rất hay và e thấy nó quá rộng lớn, nó ứng dụng ở mọi nơi.

            Thích

  13. Anh ơi cho em hỏi năm cuối theo học datascience có ổn không ạ? Hiện em đã có kiến thức nền về toán ạ. Em thấy ngành này hiện nay xin việc khá khó đúng không anh? Em thấy người ta yêu cầu cần 1-2 năm kinh nghiệm. Nếu vậy muốn theo ngành này thì nên bắt đầu từ đâu nếu không học lên cao ạ?

    Thích

    1. hiện tại, DS đòi hỏi 3 skills chính: programming, big data, machine learning. Tuỳ nơi mà sẽ có yêu cầu tuyển dụng khác nhau, cái này em phải tìm hiểu nhiều nơi để biết mình có phù hợp hay không. SV mới ra trường cũng có thể apply intern hoặc junior DS nếu có tổ chức đang tuyển dụng em nhé. Không học lên cao thì không chắc được vì kinh nghiệm làm việc chưa có, nghiên cứu thì chưa đủ độ chín nên sẽ khó xin việc em ạ.

      Thích

  14. Em chào anh ạ. Thật vui vì tình cờ đọc được blog của anh. Cảm ơn anh vì những chia sẻ hữu ích. Anh có thể cho em một vài lời khuyên được không ạ?
    Em là dân trái ngành ạ. Hiện tại, em đang làm cho 1 công ty tư vấn và triển khai BI, công việc của em là viết API lấy dữ liệu, xây dựng DWH, viết các ETL để đẩy data vào DWH cho bên nghiệp vụ làm dashboard. Hướng phát triển sắp tới của công ty là ứng dụng ML, Data Mining để giúp doanh nghiệp phân tích và khai phá dữ liệu. Em đang băn khoăn không biết em cần trang bị những kiến thức, kĩ năng gì trong thời gian sắp tới. Em đọc thì thấy ML yêu cầu nhiều về toán đại số, giải tích và xác suất thống kê mà những kiến thức này e gần như không còn nhớ nhiều. Anh có thể tư vấn giúp em nên bắt đầu học từ đâu được không ạ? Nếu có tài liệu, lộ trình thì phiền anh share e với ạ.
    Em cảm ơn anh ạ.

    Thích

    1. Ứng dụng DS thành công cần 3 mảng:
      1. Business knowledge
      2. Programming
      3. Modeling
      Trong đó, số 1 là quan trọng nhất, khi em đã có đầu ra cụ thể thì các phần sau như kỹ năng hay kiến thức sẽ tự tìm đến
      Số 2 anh nghĩ là em ổn
      Số 3 thì em có thể đọc các bài viết này
      https://ongxuanhong.wordpress.com/2016/07/06/machine-learning-cho-nguoi-bat-dau/
      https://ongxuanhong.wordpress.com/2015/10/05/cach-xac-dinh-dang-bai-toan-trong-machine-learning/
      https://ongxuanhong.wordpress.com/category/du-an/

      Thích

  15. Em chào anh Xuân Hồng ạ,
    Em đang là sinh viên năm cuối khoa học máy tính ạ và hiện tại em đang hơi mất định hướng ạ
    Em bắt đầu học ML cách đây 2 tháng và đang cố gắng để có cơ hội thực tập ở các công ty.
    Nhưng hiện tại em khá phân vân vì điểm số trên trường em chỉ đạt mức bình thường, nên em hơi lo lắng việc bỏ quá nhiều thời gian học nhưng không xin được việc làm ạ.
    Anh có thể tư vấn giúp em việc nên tiếp tục học ML để thực tập hay tập trung học SE kiếm việc làm trước rồi dành thời gian nghiên cứu sau không ạ?
    Và sau khi thực tập ML xong rồi, làm thế nào để em có thể tiếp tục công việc chính thức không ạ
    Em xin cám ơn anh ạ

    Thích

    1. Hi em,

      Nếu em thích học thì cứ học lên tiếp đi em, không có gì phải vội, tốt nhất là kiếm học bổng du học nước ngoài thì sẽ không lo cơm áo gạo tiền.

      Nếu em là người thực dụng, muốn nhìn thấy sản phẩm và phát triển kỹ năng làm phần mềm thì nên đi làm 1-2 năm (không nhất thiết phải đúng AI/ML) để biết thế nào là làm sản phẩm.

      Nhìn chung thì không có con đường tắt em ạ, em đi hướng nào thì cũng quay về 2 chuyện: làm sản phẩm và nghiên cứu, đi song song thì cũng tới nơi nhưng nhanh chậm là tuỳ bản lĩnh mỗi người em nhé.

      Chúc em thành công,

      Thích

      1. Dạ vâng em cám ơn anh nhiều đã trả lời em ạ
        Vì em đang năm cuối rồi, nên nếu có cơ hội thực tập thì em sẽ có được ít tiền vừa học vừa trang trải cuộc sống vừa có kinh nghiệm làm việc sẽ có lợi cho em hơn
        Em chỉ sợ cơ hội kiếm việc làm em ít lại tốn quá nhiều thời gian nghiên cứu thay vì tập trung vào web trước đó ạ. Các bạn em đã bắt đầu thực tập ở các công ti rồi, riêng em vẫn lỡ cỡ nên lo lắng lắm ạ
        Nếu em tiếp tục học ML thì có cơ hội đươc thực tập khi còn là sinh viên không anh nhỉ?

        Thích

Bình luận về bài viết này