Thời gian gần đây AI nổi lên mạnh mẽ xâm nhập vào rất nhiều lĩnh vực trong cuộc sống như tự động dịch thuật, nhận dạng giọng nói, điều khiển tự động, v.v. Nó giờ được coi là xu hướng công nghệ thế giới và nhiều người cho rằng đó là cuộc cách mạng công nghiệp lần thứ 4.

Chính vì vậy, việc tìm hiểu AI có lẽ cũng là một nhu cầu thiết yếu trong bối cảnh hiện tại. Bài viết khởi đầu này ra đời nhằm mục đích đem lại một bức tranh tổng quan về lĩnh vực AI. Ngoài ra tôi cũng nói qua 1 chút về động lực viết bài của mình.

Mục lục

1. Tổng quan

AI - Trí tuệ nhân tạo (Artificial Intelligence) là các kỹ thuật giúp cho máy tính thực hiện được những công việc của con người chúng ta. Ví dụ như một chương trình cờ vua tự động có thể coi là một chương trình có sử dụng AI hay viết tắt là một chương trình AI.

Tổng quan AI. Source: https://blogs.nvidia.com/blog/2016/07/29/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/ Tổng quan AI. Source: https://blogs.nvidia.com/blog/2016/07/29/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/

Trong lĩnh vực AI có một nhánh nghiên cứu về khả năng tự học của máy tính được gọi là học máy (machine learning). Hiện nay không có 1 định nghĩa chính thức nào về học máy cả nhưng có thể hiểu rằng nó là các kỹ thuật giúp cho máy tính có thể tự học mà không cần phải cài đặt các luật quyết định. Thường một chương trình máy tính cần các quy tắc, luật lệ để có thể thực thi được một tác vụ nào đó như dán nhãn cho các email là thư rác nếu nội dung email có chứ từ khoá “quảng cáo”. Nhưng với học máy, các máy tính có thể tự động phân lại các thư rác thành mà không cần chỉ trước bất kỳ quy tắc nào cả. Nói hơi khó thoát ý, nhưng có thể hiểu đơn giản là nó giúp cho máy tính có được cảm quan và suy nghĩ được như con người. Còn nếu nói nôm na kỹ thuật một chút thì học máy là phương pháp vẽ các đường thể hiện mối quan hệ của tập dữ liệu. Ví dụ như đường ngăn cách 2 loại dữ liệu cho nhãn khác nhau, đường thể hiện xu hướng của giá nhà phụ thuộc vào diện tích và trí hay các đường phân cụm dữ liệu.

Một nhánh nhỏ trong học máy gần đây rất được ưu chuộng là học sâu (deep learning). Học sâu là kỹ thuật sử dụng các mạng nơ-ron tương tự như các nơ-ron của não người để xây dựng hệ thống học máy. Đây là một sự kết hợp tuyệt vời giữa toán học và khoa học thần kinh. Kết quả của nó mang lại cực kỳ to lớn, có thể coi là khởi nguyên của ngành công nghiệp mới. Tại thời điểm này, hầu hết các anh lớn cả trong ngành công nghệ lẫn các ngành khác như ôto, điện tử đều đang tập trung phát triển và ứng dụng kỹ thuật học sâu cho bài toán của mình. Ví dụ như AlphaGo của Google đã chiến thắng nhà vô địch cờ vây Lee Sedol vào tháng 3 năm 2016. Tính năng nhận diện khuôn mặt khá chính xác của Facebook được triển khai vào năm 2016. Trợ lý ảo Siri của Apple được giới thiệu từ năm 2006. Xe tự lái của Google được thử nghiệm chính thức trên đường phố vào năm 2015,…

2. Phân loại kỹ thuật học máy

Các giải thuật học máy được phân ra làm 2 loại chính là:

  • Học có giám sát (Supervised Learning): Là phương pháp sử dụng những dữ liệu đã được gán nhãn từ trước để suy luận ra quan hệ giữa đầu vào và đầu ra. Các dữ liệu này được gọi là dữ liệu huấn luyện và chúng là cặp các đầu vào-đầu ra. Học có giám sát sẽ xem xét các tập huấn luyện này để từ đó có thể đưa ra dự đoán đầu ra cho 1 đầu vào mới chưa gặp bao giờ. Ví dụ dự đoán giá nhà, phân loại email.
  • Học phi giám sát (Unsupervised Learning): Khác với học có giám sát, học phi giám sát sử dụng những dữ liệu chưa được gán nhãn từ trước để suy luận. Phương pháp này thường được sử dụng để tìm cấu trúc của tập dữ liệu. Tuy nhiên lại không có phương pháp đánh giá được cấu trúc tìm ra được là đúng hay sai. Ví dụ như phân cụm dữ liệu, triết xuất thành phần chính của một chất nào đó.

Ngoài ra còn có 1 loại nữa là học tăng cường (reinforcement learning). Phương pháp học tăng cường tập trung vào việc làm sao để cho 1 tác tử trong môi trường có thế hành động sao cho lấy được phần thưởng nhiều nhất có thể. Khác với học có giám sát nó không có cặp dữ liệu gán nhãn trước làm đầu vào và cũng không có đánh giá các hành động là đúng hay sai.

3. Các bước học máy

Một bài toán học máy cần trải qua 3 bước chính:

  • Chọn mô hình: Chọn một mô hình thống kê cho tập dữ liệu. Ví dụ như mô hình thống kê Bec-nu-li, mô hình phân phối chuẩn.
  • Tìm tham số: Các mô hình thống kê có các tham số tương ứng, nhiệm vụ lúc này là tìm các tham số này sao cho phù hợp với tập dữ liệu nhất có thể.
  • Suy luận: Sau khi có được mô hình và tham số, ta có thể dựa vào chúng để đưa ra suy luận cho một đầu vào mới nào đó.

Bất cứ một bài toán học máy nào cũng đều cần có dữ liệu để huấn luyện, ta có thể coi nó là điều kiện tiên quyết. Dữ liệu sau khi có được cần phải:

  • Chuẩn hoá: Tất cả các dữ liệu đầu vào đều cần được chuẩn hoá để máy tính có thể xử lý được. Quá trình chuẩn hoá bao gồm số hoá dữ liệu, co giãn thông số cho phù hợp với bài toán. Việc chuẩn hoá này ảnh hưởng trực tiếp tới tốc độ huấn luyện cũng như cả hiệu quả huấn luyện. Cụ thể ra sao thì ta sẽ cùng thảo luận trong một bài viết khác.
  • Phân chia: Việc mô hình được chọn rất khớp với tập dữ liệu đang có không có nghĩa là giả thuyết của ta là đúng mà có thể xảy ra tình huống dữ liệu thật lại không khớp. Vấn đề này trong học máy được gọi là khớp quá (Overfitting). Vì vậy khi huấn luyện người ta phải phân chia dữ liệu ra thành 3 loại để có thể kiểm chứng được phần nào mức độ tổng quát của mô hình. Cụ thể 3 loại đó là:

    • Tập huấn luyện (Training set): Chiếm 60%. Dùng để học khi huấn luyện.
    • Tập kiểm chứng (Cross validation set): Chiếm 20%. Dùng để kiểm chứng mô hình khi huấn luyện.
    • Tập kiểm tra (Test set): Chiếm 20%. Dùng để kiểm tra xem mô hình đã phù hợp chưa sau khi huấn luyện.

Lưu ý rằng, tập kiểm tra ta phải lọc riêng ra và không được sờ tới, sử dụng nó trong khi huấn luyện. Còn tập huấn luyện và tập kiểm chứng thì nên xáo trộn đổi cho nhau để mô hình của ta được huấn luyện với các mẫu ngẫu nhiên nhất có thể.

4. Cần học những gì?

Theo mình thì muốn đi vào lĩnh vực này cần 3 kiến thức sau:

  • Lập trình: Học máy suy cho cùng cũng là phát triển phần mềm máy tính, nên kiến thức về lập trình là không thể thiếu được. Nếu làm mở mức nghiên cứu thì có thể hơi yếu lập trình cũng được, nhưng nếu làm sản phẩm thì lập trình phải giỏi. Đương nhiên là để lập trình được thì cần ti tỉ thứ và mình không đề cập ở đây nữa.
    Thế nên học ngôn ngữ gì? Hiện nay hầu hết người làm học máy sử dụng Python bởi các gói thư viện bằng Python hỗ trợ học máy rất mạnh như Numpy, SciPy hay TensorFlowPyTorch. Nói vậy nhưng không phải là các ngôn ngữ khác không sài được như JavaScript, Java, Rust,… Nhưng nhập môn thì có lẽ cứ theo Python để tận dụng được tài nguyên hiện có là cách tốt nhất.
  • Toán: Học máy chủ yếu là toán! Muốn đi vào lĩnh vực này thì toán là kiến thức tiên quyết. Với hiểu biết của mình - một kẻ nhập môn thì cần học Giải TíchĐại Số Tuyến Tính để có thể nhập môn học máy.
  • Xác suất thống kê: Như đề cập ở phần 3 phía trên, các bài toán học máy được mô hình hoá với mô hình phân phối xác suất. Nên kiến thức về thống kê cũng được coi là điều kiện tiên quyết để nhập môn học máy. Với xác suất thống kê ta phải học cả phân phối xác suất, mô hình phân phối và cả phương pháp thống kê dữ liệu. Ngoài ra, cũng cần có cả kiến thức về lý thuyết thông tin nữa thì mới có thể dễ dàng tiếp cận được.

Hiện giờ mình có viết lại một số kiến thức cơ bản về toán trong phần Toán và xác suất trong phần Xác Xuất của blog, nếu bạn có hứng thú thì xem qua và góp ý với mình nhé.

5. Động lực

Cái này nếu bạn không hứng thú thì có thể bỏ qua nhé vì mình nói qua chút động lực để viết bài ở đây thôi. Nhưng bỏ qua thì hãy xem phần 6. Tham khảo bên dưới để nắm được một số tài liệu tham khảo theo mình là hữu ích nhé.

  1. Tác giả là một pro?
    Ngược lại! Tôi là một người nhập môn không hơn không kém. Nhưng tôi có mong muốn thành pro, không phải pro trong nghiên cứu mà là ứng dụng công nghệ cho sản phẩm thực tiễn.

  2. Tác giả viết ra để dạy đời?
    Ngược lại! Tôi viết ra để học! Tôi chỉ viết lại những gì tôi học thôi chứ chẳng có gì là vĩ đại cả. Hơn nữa tôi cũng muốn kiểm chứng lại kiến thức của mình nữa. Nên tôi rất mong các bạn đọc và góp ý giúp tôi, tôi sẽ nhớ ơn sự giúp đỡ và hào phóng của bạn.

  3. Tại sao lại viết ở đây?
    Ở câu 2 tôi có trả lời đôi chút rồi. Theo tôi việc không giải thích được đồng nghĩa với việc chẳng hiểu gì. Vì vậy mà chỉ đọc và bắt chước là chưa đủ. Cần phải đủ quy trình: Tìm→Hiểu→Giải thích. Tức là việc học cần phải trả qua 3 bước đó. Bước đầu là học từ việc đọc, nghe, xem hay sờ mó. Bước thứ 2 là tìm nguyên lý, thấu hiểu nguyên lý. Và cuối cùng là đi giải thích lại những thứ tìm hiểu được đó.

  4. Chỉ viết ra cho bản thân thôi à?
    Đúng nhưng chưa đủ! Tôi viết ra để tôi học là đúng. Còn chưa đủ ở chỗ tôi cũng mong những thứ tôi tổng hợp lại có ích cho các bạn đang tìm hiểu về lĩnh vực này. Không chỉ các bài về học máy mà toàn bộ các bài viết trên blog này đều có chung mục tiêu như vậy. Thế nên tôi rất mong được sự góp ý của tất cả các bạn để bài viết được hoàn hiện hơn.

  5. Ngôn ngữ sử dụng
    Bạn đang đọc tiếng Việt đó thôi :D Tôi sẽ viết lại bằng tiếng Việt. Tuy nhiên một số thuật ngữ quan trọng hoặc tiếng Việt không có thì tôi sẽ cố gắng dịch ra tiếng Việt và viết ghi chú bằng tiếng Anh. Ví dụ: Học máy (Machine Learning). Tôi cho rằng việc này là quan trọng vì đã mất công viết tiếng Việt thì gắng sài tiếng Việt cả, còn chú thích tiếng Anh để giúp đọc tài liệu hay tra cứu bằng tiếng Anh dễ dàng hơn. Đương nhiên tôi không phải chuyên ngữ và tiếng Anh của tôi cũng dở, nên việc dịch ra chính xác là rất khó khăn. Chính vì vậy tôi cũng muốn các bạn góp ý giùm tôi khoản này. Đôi lúc tôi cũng sẽ biết bằng tiếng Anh hoặc tiếng Nhật, lúc đó mục tiêu chỉ là để rèn ngôn ngữ hoặc viết nhanh mà thôi. Thú thật một điều là thuật ngữ chuyên môn bằng tiếng Việt tôi không thạo.

6. Tham khảo

Một số tài liệu tham khảo hữu ích mình sẽ liệt kê bên dưới đây, khi nào có tài liệu khác nữa thì mình sẽ cập nhập dần.

6.1. Khoá học

6.2. Blog, web

6.3. Sách