Trí tuệ nhân tạo (Artificial Intelligence - AI) nói chung và Học máy (Machine Learning - ML) nói riêng không phải là một chủ đề mới nhưng được chú ý nhiều trong vài năm trở lại đây. Gần đây một loạt các ông lớn trong lĩnh vực công nghệ như Apple, Google, Microsoft đều ra mắt những bộ thư viện đồ sộ về ML khiến cho việc áp dụng ML vào những ứng dụng thực tế trở nên dễ dàng hơn bao giờ hết.

Là một developer, việc tìm hiểu xu thế công nghệ của thời đại để áp dụng vào công việc, cuộc sống là điều cần thiết.

Bài viết này mong muốn tóm tắt được những khái niệm chung về ML từ đó giúp ta có cái nhìn tổng quan để dễ dàng hơn khi đi vào tìm hiểu những bài toán cụ thể hơn.

Mục lục

1. Giới thiệu chung về Machine Learning

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

Biểu đồ trên cho ta thấy lịch sử phát triển cũng như mối quan hệ giữa AI, Machine Learning và Deep Learning.

1.1. Trí tuệ nhân tạo (AI) là gì?

Trí tuệ nhân tạo (AI) được hiểu là kỹ thuật giúp cho máy tính nói riêng và máy móc nói chung có trí thông minh và khả năng nhận biết cũng như tương tác với các hành động cụ thể của con người. AI có lịch sử khá lâu đời, và được sử dụng rộng rãi trong cuộc sống của chúng ta.
Gần gũi nhất có lẽ là các con bot ở chế độ Single Player (chế độ đấu với máy) trong các trò chơi điện tử mà chúng ta hay chơi thuở bé. Các con bot này được thiết kế để nhận biết các action của người chơi trong game và đưa ra các action đáp trả lại.

1.2. Học máy (Machine Learning) là gì?

Học máy (Machine Learning - ML) là một mảng thuộc AI và được coi là một bước nâng cấp của AI. Trước khi tìm hiểu ML là gì, ta nghĩ một chút xem thế nào là Học (Learning)?

Học là một quá trình bao gồm: ghi nhớ (remembering), áp dụng (adapting), và khái quát (generalising).
Lấy ví dụ như việc ta học Toán ở cấp 3, bắt đầu bằng việc ghi nhớ các công thức, bài tập mẫu, sau đó tự giải lại các bài tập mẫu này, và cuối cùng là dùng kiến thức đó để giải các bài tập mới.

Việc học của máy tính cũng tương tự, mục tiêu của ML là muốn cho máy tính không chỉ ghi nhớ và thực hiện các lệnh có sẵn, mà còn có thể khái quát vấn đề, từ đó giải được các bài toán mới không được lập trình sẵn.

Vậy máy tính học từ đâu? Học từ data.
Vì thế có thể nói ML là kỹ thuật thuộc ngành Khoa học dữ liệu (Data Science).

Quay trở lại ví dụ về con bot trong trò chơi điện tử ở trên. Nếu con bot được cài đặt sử dụng ML, giả sử rằng ban đầu ta chiến thắng con bot này dễ dàng, nhưng sau nhiều lần chơi, con bot học được cách chơi từ ta, từ đó nó phát kiến ra những cách chơi mới để thắng ta, và ta không thể thắng nó được nữa. Chưa hết, con bot này còn có thể đem cách chơi học được để thắng ta để đấu với các người chơi mới. Đó là một ví dụ của việc khái quát.

1.3. Học sâu (Deep Learning) là gì?

Học sâu (Deep Learning - DL) là một kỹ thuật nằm trong Machine Learning, được chú ý trong những năm trở lại đây vì hiệu quả và tính ứng dụng rộng rãi trên nhiều lĩnh vực. Deep Learning là một tên gọi khác, một bước phát triển của Neural Network, kỹ thuật mô phỏng hoạt động của bộ não con người.
Hầu hết các bài toán khó hiện nay đều sử dụng DL. Tuy vậy DL cũng giống như bộ não người, hoạt động như một black box khiến cho ta không thể dễ dàng quan sát cơ chế hoạt động.

2. Phân nhóm các kỹ thuật trong Machine Learning

Có nhiều cách để phân nhóm các kỹ thuật trong Machine Learning. Các phân nhóm dưới đây dựa trên phương pháp học.

  • Học có giám sát (Supervised learning):
    Là phương pháp học dựa trên tập dữ liệu có sẵn (gọi là tập training) và đáp án kết quả của tập dữ liệu đó (thường người ta hay gọi là dữ liệu được dán nhãn). Dựa dữ liệu training trên, máy tính khái quát hoá thành thuật toán, từ đó tìm kết quả cho những đầu vào là các dữ liệu mới.
    Trong học có giám sát phân chia tiếp thành 2 loại chính:
    • 1. Phân loại (Classification): các nhãn dán của dữ liệu là một số hữu hạn. Bài toán phân loại dữ liệu mới cho một trong các nhãn có sẵn. Ví dụ như bài toán phân loại thư rác, ta có 2 nhãn: thư rác hoặc không.
    • 2. Hồi quy (Regression): các nhãn dán không được chia thành các nhóm mà là một dữ liệu cụ thể. Bài toán cần tìm giá trị cụ thể cho dữ liệu mới. Ví dụ như bài toán định giá nhà ở dựa trên các thông số ngôi nhà như diện tích, địa điểm…
  • Học không giám sát (Unsupervised learning):
    Là phương pháp học mà tập dữ liệu training không được dán nhãn. Cách làm chủ yếu là tìm ra các điểm tương tự của dữ liệu từ đó phân nhóm dữ liệu, hoặc tìm ra thành phần chính nào đó của dữ liệu. Ví dụ như bài toán phân nhóm thư khiếu nại từ khách hàng.
  • Học tăng cường (Reinforcement learning):
    Là phương pháp học nằm giữa học có giám sát và không có giám sát. Kết quả đầu ra của thuật toán được đánh giá khi nào là sai tuy nhiên lại không có câu trả lời đáp án đúng. Máy tính cần thực hiện tìm kiếm tất cả các cách làm có thể, mỗi cách làm sẽ được chấm điểm, từ đó tìm ra cách làm nào có điểm cao nhất. Ví dụ như bài toán máy tính học đánh cờ.

3. Các bước thực hiện Machine Learning

Thực hiện Machine Learning bao gồm các bước như sau:

  • Thu thập và chuẩn bị dữ liệu:
    Yếu tố ban đầu cần thiết để thực hiện Machine Learning là cần có dữ liệu. Dữ liệu có thể được lấy từ nhiều nguồn khác nhau, có thể ít, có thể nhiều, có thể sạch, có thể nhiều dữ liệu lỗi…
    Sau khi thu thập, dữ liệu cần được làm sạch.

  • Chọn Feature:
    Với mỗi data có thể có rất nhiều feature (thành phần), nhưng không phải feature nào cũng liên quan tới bài toán mà ta cần giải, việc lựa chọn feature (loại bỏ các feature không cần thiết) giúp cho việc học của ta trở nên nhanh và hiệu quả hơn. Tuy nhiên lựa chọn feature đòi hỏi sự thấu hiểu về dữ liệu và bài toán, chủ yếu làm bằng tay và sức người.
    Sau khi chọn được feature, nhiều khi ta quay lại bước 1, tiến hành loại bỏ các dữ liệu không liên quan để thu nhỏ tập dữ liệu.
    Việc thu nhỏ tập dữ liệu cũng khiến cho việc học của ta tốn ít thời gian hơn, tuy nhiên dữ liệu ít quá cũng khiến việc học đạt độ chính xác không cao, cần cân đối giữa các yếu tố này.

  • Chuẩn hoá dữ liệu: Nhiều khi data của từng feature có định dạng, kích thước khác biệt lớn, ví dụ feature 1 có data trong khoảng $[0, 1]$, feature 2 có data trong khoảng $[-1000, 1000]$, feature 3 có data là hình ảnh… Để tăng tốc độ và hiệu quả của việc học, ta cần chuẩn hoá dữ liệu, đưa data của tất cả các feature về cùng một format (số hoá), và cùng khoảng biến thiên.
    Một ví dụ về chuẩn hoá dữ liệu có thể xem thêm ở đây.

  • Chọn thuật toán:
    Tuỳ vào dữ liệu, bài toán mà ta lựa chọn thuật toán ML tương ứng. Đôi khi lựa chọn thuật toán cũng cần dựa trên kinh nghiệm. Gợi ý cho việc lựa chọn thuật toán là tham khảo bảng Cheat Sheet của Scikit-learn.

Source: https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html Source: https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
  • Chọn parameter cho thuật toán:
    Tuỳ mỗi thuật toán mà có nhiều các cách cài đặt khác nhau. Hơn thế nữa các tham số tính toán cũng quyết định không nhỏ tới kết quả tính toán. Vì thế khi sau khi chọn thuật toán thì việc chọn parameter phù hợp với dữ liệu cũng khá quan trọng. Việc chọn Parameter chủ yếu dựa trên kinh nghiệm, nhiều khi có thể sử dụng các thư viện support. Tuỳ từng thuật toán có thể tham khảo ở đây.

  • Huấn luyện và Đánh giá:
    Sau khi chọn được thuật toán (một hoặc nhiều thuật toán) và parameter tương ứng ta cho dữ liệu vào train. Tiến hành cross-validation để điều chỉnh model.
    Sau khi train được model, ta đưa data test vào kiểm tra và đánh giá độ chính xác của model vừa train được.

Phân chia dữ liệu

Thông thường với tập data cho trước ta thường chia làm 3 tập để sử dụng với mục đích khác nhau:

  • Tập huấn luyện (Training set): dùng để huấn luyện model.
  • Tập kiểm chứng (Validation set): dùng để đánh giá, điều chỉnh model. Ví dụ như ta dùng tập huấn luyện cho nhiều thuật toán khác nhau rồi dùng tập kiểm chứng để chọn thuật toán phù hợp nhất. Hoặc tìm parameter phù hợp nhất cho một thuật toán cụ thể.
  • Tập kiểm tra (Test set): dùng để đánh giá model sau khi huấn luyện. Mô hình đã được đánh giá bằng tập test phải là mô hình cuối cùng, không được thay đổi nữa.

Việc phân chia tỉ lệ giữa 3 tập này được khuyên là 60% - 20% - 20%.
Nếu model cuối cùng thu được sau khi huấn luyện và kiểm chứng cần phải được đánh giá bằng tập kiểm tra. Nếu kết quả không tốt, cần thực hiện huấn luyện lại từ đầu.