Hướng dẫn bắt đầu học lập trình deep learning

Hướng dẫn học lập trình trí tuệ nhân tạo (AI) cho người mới bắt đầu

Translate this page:

Trong thời gian vừa qua, tôi bắt đầu học Deep learning, hướng đi mới của trí tuệ nhận tạo (AI) trong thập kỷ vừa qua.

Với kinh nghiệm tự học và làm các projects AI ứng dụng trong ngoại ngữ cùng nền tảng nhiều năm kinh nghiệm trong ngành IT, tôi nghĩ mình có thể chia sẻ một số trải nghiệm để giúp các bạn đang có ý định bắt đầu lập trình AI có thể thấy được một lộ trình học rõ ràng hơn và qua đó tạo ra động lực để giúp bạn bắt đầu.

2 nền tảng hữu ích để bắt đầu

  1. Hầu hết những bài giảng và bài viết tôi giới thiệu ở dưới đây đều bằng tiếng Anh nên có lẽ yêu cầu cơ bản và đầu tiên là bạn cần biết tiếng Anh. Tuy nhiên, nếu bạn là lập trình viên thì bạn nhiều khả năng là đã có khả năng research bằng tiếng Anh. Và chừng đó có lẻ là đã đủ để bạn có thể bắt đầu với AI.
  2. Nền tảng hữu ích thứ 2 là biết ngôn ngữ lập trình Python.
    Nếu bạn chưa dùng Python, bạn vẫn có thể bắt đầu và nắm vững phần lý thuyết trước. Sau đó bạn có thể quyết định học python nếu bạn muốn ứng dụng. Nếu bạn là lập trình viên có kinh nghiệm với các ngôn ngữ khác, thì việc học Python sẽ khá dễ dàng và vì thế bạn không cần phải dừng lại để học Python trước khi học deep learning.

Một lưu ý cuối trước khi chúng ta bắt đầu là trong bài này tôi nói nhiều về việc học và nắm vững các khái niệm & lý thuyết quan trọng trong deep learning. Nếu bạn muốn phát triển xa hơn trong AI, tôi nghĩ việc học những nền tảng lý thuyết này là quan trọng. (Nếu bạn chỉ muốn bắt đầu với ứng dụng, bạn có thể đến ngay phần “Ứng dụng Transformers vào phần mềm” ở dưới đây).

Bắt đầu học lập trình Deep learning từ đâu?

Bắt đầu từ đầu với Deeplearning specialization ở Coursera. Các khóa học này do Andrew Ng dạy và tôi thấy rất dễ hiểu.

Đây là một chương trình gổm 5 khóa học, như bạn thấy ở link trên:

  • Course 1: Neural Networks and Deep Learning
    • Giúp bạn bắt đầu từ đầu với neural networks (mạng nơ ron).
    • Bạn không cần biết gì về mạng nơ ron để bắt đầu.
  • Course 2: Improving Deep Neural Networks
    • Đi vào chi tiết về các tham số và thuật toán tìm kiếm giá trị tối ưu cho các tham số (back propagation).
  • Course 3: Structuring Machine Learning Projects
  • Course 4: Convolutional Neural Networks
  • Course 5: Sequence Models
    • Những mô hình mô phỏng text như RNN.

Trong 5 course trên, bạn nên học Course 1, 2 & 5. Course 3 là về tổ chức projects & Course 4 là về một loại network thường sử dụng trong xử lí hình ảnh. Nếu bạn quan tâm nhiều hơn về Xứ lí ngôn ngữ tự nhiên (NLP) thì bạn có thể tạm thời bỏ qua Course này và học sau nếu bạn quan tâm. Course 3 về tổ chức projects khá đơn giản nên bạn có thể học sau cùng.

Các course này bạn có thể học miễn phí ở chế độ “dự thính”: ở trang của mỗi course, click “Enroll for free” -> chọn “Audit” ở cuối của pop-up. Hạn chế của chế độ này bạn sẽ không thể nộp bài tập (chỉ xem được videos bài giảng).

Course 1 cung cấp nển tảng quan trọng nhất về neural networks, đặc biệt là về cách lưu trữ tham số dùng ma trận (matrix) và thuận toán gradient descent sử dụng để tìm kiếm các giá trị tối ưu. Dành nhiều thời gian cho bước này sẽ sẽ giúp bạn xây dựng một nền móng tốt về sau.

Theo kinh nghiệm của tôi, bạn không cần phải học hay ôn lại gì về các thuận toán của Machine Learning trước đây như Decision tree, SVMs, … bởi lẽ deep learning nó khá là khác và bạn không cần mất thời gian vào những thuật toán không thiết yếu cho việc học deep learning. (Học thuật toán không bao giờ là thừa vì nó sẽ giúp chúng ta phát triển khả năng tư duy của mình; tuy nhiên ở đây tôi giả sử là bạn đang muốn học Deep learning một cách tập trung nhất).

Sau khi học xong Course 5, bạn sẽ biết đến được RNN & “Addictive Attentions”. Đến lúc này, tất cả những gì bạn biết sẽ là lí thuyết nhưng đó là những lí thuyết nền tảng cần thiết.

Học về kiến trúc Transformers

Sau khi hoàn thành xong Course 5 ở trên, bạn đã biết về RNNs và bây giờ là lúc học về Transformers (ra đời cuối năm 2017). Đến thời điểm này (Jan 2022), Transformers vẫn là architecture tốt nhất hiện nay trong NLP.

Đến đây, bạn đã có nền tảng và đây là lúc bạn có thể bắt đầu học thông qua cách đọc trực tiếp các bài báo nghiên cứu (research papers).

Học thông qua videos ở bước trên chỉ để giúp chúng ta nhanh chóng có được nền tảng, nhưng đến khi bạn bắt đầu tiếp cận những thông tin mới nhất thì đọc trực tiếp những bài báo là cách dễ hiểu nhất (vì chúng do chính tác giả viết).

Đây là các bài báo trụ cột (và tối thiểu) mà bạn nên đọc theo thứ tự, theo kinh nghiệm của tôi:

  • Sequence to Sequence Learning with Neural Networks (2014)
    • Bài viết này giới thiệu khái niệm “sequence to sequence” và cách ứng dụng nó vào bài toán machine translation (ML). ML cũng là bài toán được sử dụng trong bài báo Transformer (bài ở dưới đây).
    • Mặc dù không sử dụng Transformer (mà sử dụng RNN) đây là một bài tôi nghĩ nên đọc để giúp hiểu được bài tiếp theo tốt hơn.
  • Attention is all you need (2017)
    • Đây là bài báo ra mắt Transformers architecture, mở ra một bước tiến mới cho NLP/AI.
  • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)
    • Đây là bài báo sử dụng Transformers architecture + Transfer learning.
    • Bài báo này xác lập tính ưu việt của Transfer learning trong NLP thông qua việc đạt được các kết quả tốt nhất (tại thời điểm đó).

Bài báo về Transformer (bài #2 ở trên) thật sự không dễ để hiểu bởi vì kiến thức nền của những người mới bắt đầu như chúng ta không nhiều và vì thế sẽ gặp khá nhiều trở ngại.

Theo kinh nghiệm của tôi, bạn hãy dành thật thật nhiều thời gian cho các bài báo này cho đến khi bạn cảm thấy bạn đã nắm được những ý quan trọng nhất.

  • Đối với kiến trúc Transformer: những khái niệm chính là self-attention & cách inputs đi qua model như thế nào. Có rất nhiều kiến thức nền khác được đề cập trong paper mà tôi nghĩ bạn có thể tạm thời bỏ qua mà không ảnh hưởng gì đến việc bạn hiểu Transformer.
  • Bạn cũng đừng quên google để xem thêm các giải thích của kiến trúc này để giúp bạn tháo gỡ các vướng mắc của mình.

Một khi bạn qua được bước này, tất cả những bước tiếp theo sẽ dễ dàng hơn nhiều, vì đây chính là nền tảng quan trọng nhất rồi. Vì thế, đừng vội vàng qua bước này bạn nhé.

Ghi lại các khái niệm & cái bạn hiểu

Có một điểm nhỏ nhưng quan trọng tôi muốn chia sẻ thêm ở đây là về việc viết ghi chú (take notes). Theo kinh nghiệm của tôi, sẽ có rất rất nhiều kiến thức chúng ta không biết và vì thế một cách hay là ghi lại những khái niệm đó, kèm theo những gì chúng ta hiểu về nó ở thời điểm đó. Ghi lại sẽ giúp chúng ta hệ thống hóa được kiến thức và các khái niệm mình đã “biết”.

Rất nhiều lần, tôi đã nghĩ là mình đã hiểu một khái niệm, nhưng sau này khi đọc một bài báo mới thì tôi mới phát hiện ra là mình đã hiểu sai. Vì đây là một quá trình tự học, và những kiến thức này vẫn là khá mới mẻ, việc ghi chú để xem lại và cải thiện là một việc đã rất hữu ích cho tôi. Vì thế, tôi nghĩ đây là một điểm quan trọng để chia sẻ với bạn.

Trên máy tính, bạn có thể sử dụng Google Doc hay một chương trình tương tự.

Ứng dụng Transformers vào phần mềm

Để ứng dụng Transformers, thật may là chúng ta đã có thư viện Transfomers do team HuggingFace xây dựng.

Bạn có thể bắt đầu với phần Get-started & sau đó là phần Course .

Sau khi hoàn thành 2 phần này là bạn có thể ứng dụng ngay các mô hình đã được trained sẵn vào ứng dụng của mình.

Sử dụng Google Colab

Tuy chúng ta có thể chạy các models này trên CPUs, nó khá là chậm. Các model của deep learning, do có nhiều phép tính ma trận, sẽ chạy nhanh hơn trên các GPUs.

Và thật may mắn là với Google Colab, bạn có thể sử dụng 1 GPU miễn phí. Nâng cấp lên các phiên bản có phí tùy theo nhu cầu sử dụng của bạn.

  • Google Colab hoạt động như các Jupyter notebooks. Bạn chỉ cần có 1 tk gmail là có thể sử dụng Google colab ngay online, mà không cần set up gì khác.

Qua đây, bạn cũng sẽ thấy là để deploy một deep learning models vào các ứng dụng thực tế, bạn sẽ cần GPUs để có thể chạy được nhanh.

Models finetuning

Sau khi sử dụng được các models đã được train sẵn, bước tiếp theo bạn sẽ muốn “finetune” một pretrained models cho một ứng dụng nào đó.

Cách nhanh nhất để trải nghiệm là bạn có thể finetune BERT cho các task như POS tagging, NER. Bạn có thể tìm thấy hướng dẫn thực hiện trong Course của HF linked ở trên.

Sau đó, bạn sẽ muốn thực hiện finetuning trên một projects của mình, theo nhu cầu hay sở thích. Việc thực hiện finetuning trên một bài toán mới mặc dù vẫn sẽ sử dụng standard finetuning flow nhưng sẽ giúp chúng ta đi vào chi tiết và làm quen với các bước trước và sau finetuning flow như: building datasets, data preprocessing, problems modelling, …

Về một project ví dụ, bạn có thể tham khảo bài toán điền dấu tiếng Việt mà tôi đã làm và report ở đây.

Trong quá trình finetuing, bạn có thể sẽ cần tham khảo thêm các scripts dùng để finetuning của HF ở đây và đặc biệt là các Colab ex files ở đây.

Các pretrained models tiếp theo sau BERT

Trong kiến trúc Transformers (2017), chúng ta thấy nó gồm có Encoder & Decoder.

BERT là một pretrained Transformer encoder (không có phần decoder).

Bước tiếp theo, bạn sẽ có thể muốn tìm hiểu thêm các mô hình về pretrained decoders (như GPT) và pretrained encoder-decoders (như BART) và các ứng dụng của nó.

Khi đó, bạn sẽ hiểu được khi nào chỉ cần encoders, khi nào chỉ cần decoders & both. Quá trình này cũng sẽ giúp chúng ta hiểu thêm được sâu sắc hơn kiến trúc Transformers.

Nếu bạn tìm hiểu cả về phần lí thuyết như được giới thiệu ở trên thì bạn có thể cần ~1 năm với ~10h/tuần, cho các bạn lập trình viên đã có kinh nghiệm và vững kiến thức computer science nền. Nếu bạn chưa có nền vững về computer science hay không thể đọc/nghe hiểu tiếng Anh tốt, bạn sẽ cần đầu tư thời gian nhiều hơn và chuẩn bị tâm lí cho một quá trình kéo dài hơn.

Chúc bạn may mắn và nhiều thuận lợi học lập trình AI trong năm 2022!

BONUS: Những khóa học hữu ích khác cho deep learning NLP

Dưới đây là 2 khóa học sau đây được recommended bởi anh Duy Vu:

 

Photo credit: Photo by cottonbro from Pexels

Nhận thông báo qua email khi có bài viết mới

Stay updated about new posts

Nếu bạn muốn nhận được email thông báo khi có bài viết mới, bạn hãy đăng ký ở đưới đây (miễn phí):

Spread the love