- Published on
AI - trí tuệ nhân tạo là gì?
- Author
- Nom
- Ngoc Duong van
AI, hay trí tuệ nhân tạo, là một khái niệm phù phiếm, vì hiện nay chưa có tổ chức uy tín nào khẳng định sự xuất hiện của nó, AI hiện chỉ tồn tại trong tưởng tượng của con người. Ở đây chúng ta sẽ bàn về machine learning (ML) - học máy, là một nhánh nhỏ của AI. ChatGPT hay các large language model (LLM) khác hiện nay vẫn được coi là ML - dưới góc nhìn kỹ thuật.
Bài toán
Giả sử nhà bạn bán kẹo, cạnh nhà bạn có một cô gái rất xinh. Bạn muốn lấy lòng người ta, nên lén lấy kẹo ở nhà đem tặng. Tuỳ từng lúc, bạn có thể lấy số lượng kẹo khác nhau để đảm bảo an toàn. Bạn nhận ra mức độ phản ứng của cô bạn kia “khác nhau theo số kẹo” mà bạn tặng.
Một ngày đẹp trời bạn muốn cầu hôn cô ấy! và bạn biết rằng kết quả sẽ thành công nếu nhịp tim lớn hơn 130 -> chúng ta cần biết cần bao nhiêu kẹo để đạt “mục tiêu” này. Nhịp tim bình thường của cổ là 70 (giả thuyết) -> ta cần tăng 60 nhịp.
Thật may mắn là cô bạn của chúng ta có đeo đồng hồ thông minh đo nhịp tim, do đó bạn dễ dàng theo dõi mức độ tăng nhịp tim của cổ để đánh giá phản ứng khi nhận kẹo.
Bạn thử nhiều lần nhưng “chưa đạt” được mục tiêu tăng 60 nhịp -> vấn đề là điều kiện không cho phép, bạn không thể thử với quá nhiều kẹo được, mà có thể chúng ta cần một số lượng kẹo rất lớn (đoán vậy!).
-> bạn chỉ có thể chơi tất tay 1 lần (xác định bị ăn đòn) -> bạn cần 1 lần đó sẽ thành công mỹ mãn -> bạn làm một vài “phép thử” với “hy vọng sẽ dự đoán” được số kẹo mình cần -> và một vấn đề học máy ra đời.
Tiến hành thu thập thông tin, bạn thử vài lần và có kết quả như sau:
1 cái kẹo -> nhịp tim +5
2 cái kẹo -> nhịp tim +10
3 cái kẹo -> nhịp tim +15
Và bạn suy ra là:
Nhịp tim tăng = 5 x (số kẹo)
-> để tăng 60 nhịp ta cần 12 cái kẹo😀
Đây là một ví dụ đơn giản nhất của học máy, cái ta học là “quy luật” tăng nhịp tim của cô gái hàng xóm theo số lượng kẹo, mục tiêu là tăng 60 nhịp tim, điều mà ta “chưa thử” bao giờ. Mô hình mà ta học được là tham số 5, phương pháp học sử dụng ở đây là bằng “trực giác” 😂.
Chắc bạn nghĩ mình đang đùa ha, thế này cũng gọi là học máy á! Mình có thể đảm bảo với bạn, mình không đùa 😅. Tuy nhiên, trong thực tế bài toán của chúng ta sẽ phức tạp hơn, ta sẽ từng bước thử phức tạp nó dưới đây. Nhưng trước hết, mình cần làm rõ các đặc điểm của bài toán học máy trên đã.
Ở trên, nhận thấy rằng:
- Chúng ta đã giả định rằng có “quy luật tồn tại” giữa nhịp tim của cô gái với số kẹo ta tặng. ML không khẳng định rằng quy luật này có tồn tại hay không, mà nó chỉ cho ta biết: nếu nó tồn tại, và giả định là theo mô hình nào đó (ví dụ tuyến tính: ) thì tham số sẽ là và . Điều này rất quan trọng, vì nếu không có quy luật, kết quả ta đạt được chỉ là một phép đoán mò vô dụng, không có gì ở đây để máy nó "học" cả!!
- Mục đích của việc học quy luật là để dự đoán điều ta “chưa biết”. Trong ví dụ trên, nếu nhà ta thừa kẹo, và có thời gian 😅, cứ thử đến lúc đạt mục tiêu tăng 60 nhịp, không cần bày đặt dùng ML làm gì! (Nhà có điều kiện tán gái nó dễ a 😅)
- Bài toán này cũng có thể giải bằng cách lưu trữ thật nhiều kết quả đã biết trước và dự đoán từ đám dữ liệu đó (thử thật nhiều với số lượng kẹo bất kỳ, lúc nào cần đem ra tham khảo), nhưng trong thực tế số lượng mẫu thường rất lớn và việc dự đoán trực tiếp từ đám dữ liệu đó cũng cần năng lực tính toán cao, mất nhiều thời gian -> cần học máy ở đây nhằm tổng hợp, tinh gọn tri thức để lưu trữ hiệu quả hơn. Trong một số trường hợp, dữ liệu là liên tục chứ không rời rạc, tức là có tính vô hạn, việc lưu trữ toàn bộ kết quả là bất khả thi.
Underfitting
Nếu cô gái của chúng ta phức tạp hơn, bài toán của chúng ta có thể trở thành như sau:
1 cái kẹo -> nhịp tim +4
1 cái kẹo -> nhịp tim +5
2 cái kẹo -> nhịp tim +10
3 cái kẹo -> nhịp tim +15
4 cái kẹo -> nhịp tim +30
Ta thấy 1 cái kẹo không phải lúc nào cũng +5 nhịp tim -> có nhiễu trong dữ liệu. Ta có 4 cái kẹo +30 chứ không phải +20 (4x5). Điều này gợi ý rằng:
- Mô hình mà ta giả định không đủ để mô tả quy luật - lòng dạ cô ấy không thẳng tuột như ta nghĩ (ta gọi đây là underfitting) -> cần đổi mô hình.
- Điều kiện kẹo là không đủ để phán đoán nhịp tim -> cần thêm đầu vào, tặng thêm hoa chẳng hạn.
Overfitting
Giả sử ta quyết định đổi mô hình mới là phức tạp hơn mô hình cũ “rất nhiều”. Sau khi tính toán ra mô hình như trên bạn quyết định thử đoán với mô hình mới xem sao, không may bạn thu được kết quả:
.
.
3 cái kẹo -> nhịp tim +15
3,5 cái kẹo -> nhịp tim +200
4 cái kẹo -> nhịp tim +30
-> đoạn 3,5 thật vô lý, nhịp tim thế này không còn là người nữa rồi! Vì 3,5 nằm giữa 3 và 4 nên chúng ta hy vọng là nhịp tim cũng phải giữa 15 và 30. Việc mô hình vượt quá giới hạn mà ta “cho là vô lý” này gọi là “overfitting”.
Mở rộng bài toán
Bây giờ, nếu nhà bạn có rất nhiều kẹo, bạn thử rất nhiều, đến 100, 1000 cái kẹo nhưng nhịp tim chỉ +40, tức là chưa đạt mục tiêu là +60 của chúng ta -> bạn quyết định tặng thêm hoa kèm với kẹo, khi đó ta có bài toán mới:
1 cái kẹo + 1 hoa hồng -> nhịp tim +7
1 cái kẹo + 2 hoa hồng -> nhịp tim +9
2 cái kẹo + 1 hoa hồng -> nhịp tim +15
3 cái kẹo + 1 hoa hồng -> nhịp tim +20
4 cái kẹo + 1 hoa hồng -> nhịp tim +35
Đây là bài toán đa biến với (kẹo) và (hoa). Tiếp tục như vậy bạn quyết định tặng: gấu bông, gối ôm, nhẫn, đi chơi, sự bất ngờ, sự quan tâm…
-> bài toán thêm nhiều biến đầu vào.
Tương tự, bạn nhận thấy đo mỗi nhịp tim không ăn chắc lắm, nên bạn quyết định đo thêm: niềm vui, nụ cười…
-> bài toán thêm nhiều biến đầu ra.
Việc tìm lời giải của bài toán này cần nhiều công cụ toán học phức tạp hơn là mò như ở trên!
Tới đây, theo mình là bạn có thể thoải mái "bốc phét" với mọi người về ML rồi! Chỉ cần nhớ rằng: Machine learning - học máy, bản chất là một bộ giải pháp nhằm tìm ra một quy luật ẩn nào đó, nếu nó tồn tại.
Tức là, bất kỳ một sự kiện gì mà bạn cho rằng có quy luật ẩn tồn tại ở đó, đều có thể dùng ML để tìm ra quy luật đó, kết quả phụ thuộc vào kỹ thuật giải, và năng lực tính toán của máy tính.
Trong các công cụ toán để giải một vấn đề ML, có 3 lĩnh vực trọng tâm, liên quan mật thiết với ML là: đại số ma trận, giải tích, và xác suất thống kê. Ta sẽ đảo qua lý tại sao chúng lại quan trọng và nó giải quyết vấn đề gì? (để có thêm nhiều điều vui hơn trong các cuộc trò chuyện!)
ML thì liên quan gì đến đại số ma trận?
Máy tính của chúng ta được thiết kế để lưu trữ và xử lý các bit dữ liệu 0 và 1, nên nó không thể hiểu các khái niệm trừu tượng được (ví dụ "sự quan tâm")
-> ta phải tìm cách lượng hoá, số hoá.
Khi tới tay con “AI” của chúng ta, cái nó thấy chỉ là một đống số liệu thôi. Các số liệu này “thông thường” có cấu trúc dạng bảng, nhiều hàng cột hoặc nhiều bảng, mà trong toán học ta gọi là ma trận, đây là lý do kiến thức ma trận rất bổ ích trong ML, nó giúp ta xử lý dữ liệu hiệu quả, hiểu dữ liệu tốt hơn.
Ví dụ rõ ràng nhất là bài toán xử lý ảnh, hình ảnh thực chất là một mảng 3 chiều của các con số (dải từ 0-255).
Tại sao phải học giải tích trong ML?
Quay lại bài toán tìm tham số trên, đoạn mà ta tìm ra:
Nhịp tim = 5 x (số kẹo)
Ta tìm ra đáp án là 5 dựa vào trực giác, và 5 là đáp án thoả mãn tất cả phép thử của chúng ta, nhưng thực tế, bài toán mà ta cần giải phức tạp hơn, đa biến và bậc cao... -> không có đáp án thoả mãn “toàn bộ” phép thử. Chúng ta chỉ có thể tìm một đáp án mà “gần đúng nhất” với các phép thử. Để lượng hoá cái gần đúng này, người ta tính toán một hàm gọi là Loss function (hàm mất mát) sao cho: hàm này càng nhỏ thì đáp án của ta gần đúng nhất với “toàn bộ” các phép thử.
Việc tìm đáp án biến thành việc giải bài toán tìm cực trị của Loss function.
-> giải bài toán này cũng không đơn giản, ta “thường” dùng cách mò theo “độ dốc” của hàm này để tìm cực trị, vì về mặt kỹ thuật, trong "bối cảnh" này, độ dốc là đơn giản nhất và nhanh nhất để tính toán.
-> giống như việc đi tìm đỉnh "cao nhất" của một "dãy núi" có rất nhiều đỉnh địa phương, nhưng tầm nhìn có giới hạn, ta chỉ nhìn thấy xung quanh 100m thôi -> ta mò theo độ dốc để tìm bằng cách nhảy cóc theo độ dốc và theo dõi xem hiện tại ta đang ở sườn bên nào, ta cứ đi lên theo hướng dốc nhất, nếu đang lên mà lại thành xuống, thì tức là ta vừa qua đỉnh đấy!
(máy tính không thể nhìn “toàn cảnh” cái dãy núi này (vì nhìn toàn cảnh -> tính toán toàn bộ khả năng -> khối lượng tính toán là vô cùng lớn)).
Phương pháp này cũng không phải lúc nào cũng cho kết quả tốt nhất, nhưng là khả thi nhất với “giới hạn phần cứng” máy tính hiện tại.
-> Cái độ dốc này chính là đạo hàm của loss function (giải tính cấp 3). Đạo hàm của hàm đa biến gọi là gradient -> ta gọi phương pháp này là gradient descent.
-> ta cần học giải tích để xử lý bài toán ML.
ML liên quan gì đến xác suất mà phải học?
Nhắc lại bài toán kinh điển của xác suất: tung đồng xu. Ta “biết” rằng khi tung một số lượng lớn, số mặt sấp và ngửa là bằng nhau. Cái mà ta “biết” ở đây là quy luật của đồng xu. Nhớ lại với bài toán ML, cái ta muốn tìm cũng là một quy luật nào đó (quy luật của phụ nữ!).
-> ý tưởng ở đây là việc ta tặng kẹo cũng như tung đồng xu vậy, nhưng đồng xu này có nhiều “mặt” hơn là 2 mặt sấp và ngửa.
Với đồng xu, số mặt ngửa = số mặt sấp chính là một loại quy luật (phân bố) của kết quả tung đồng xu. Và tương tự vậy, ta kỳ vọng rằng nhịp tim cũng có một “phân bố” nào đó mà ta có thể tìm được bằng cách tung “kẹo” nhiều lần.
Thực tế xác suất trong ML được sử dụng như một “công cụ phân tích phân bố của dữ liệu” nhiều hơn là một cái gì đó liên quan đến sự “ngẫu nhiên”.
Giả sử ta thử bài toán trên chỉ với 1 chiếc kẹo:
1 cái kẹo -> nhịp tim +4
1 cái kẹo -> nhịp tim +5
1 cái kẹo -> nhịp tim +4
1 cái kẹo -> nhịp tim +3
1 cái kẹo -> nhịp tim +4
Ta thấy rằng nhịp tim phản ứng với việc tặng kẹo là không cố định, hay theo một “xác suất” với một phân bố nào đó. Theo trực giác ta thấy phân bố này cực đại tại 4 và giảm dần về hai phía. Ta giả định phân bố này là phân phối gauss (hình quả chuông lộn ngược) "vì trông nó giống" (tương tự như trên ta cũng đoán lời giản là hàm tuyến tính , vì trông nó giống)
-> bài toán trở thành tìm tham số của phân phối gauss để “khả năng” xảy ra các phép thử là “hợp lý” nhất (maximum likelihood estimation).
Với các bài toán thực tế, số lượng và phân bố của dữ liệu phức tạp hơn nhiều, đòi hỏi nhiều thủ thuật hơn để tìm lời giải mà mình sẽ không đề cập ở đây, vì suy cho cùng, đo đạc trái tim của phụ nữ đâu phải việc đơn giản đâu, phải không? 😅.