Tôi học trí tuệ nhân tạo

 


Chào mọi người, từ lúc dịch covid-19 bắt đầu xuất hiện cho đến nay mình đã dành thời gian đọc và tìm hiểu về Deep Learning, Machine Learning. Đến hiện tại mình nghĩ là mình đã có cơ sở để hiểu cơ bản về các tài liệu đã được đọc. Trong chuỗi bài viết chia sẻ này, mình muốn viết lại những gì mình đã học đồng thời cung cấp một số gợi ý thú vị dành cho những ai có cùng sở thích. Mình cũng rất thoải mái khi nhận được các phản hồi nếu có bất kỳ thắc mắc nào trong bài viết, bắt đầu với bài tổng quan này.

Mình biết về trí tuệ nhân tạo trong lần đọc thông tin về trận đấu cờ vây giữa tuyển thủ cờ vây chuyên nghiệp Lee Sedol và chương trình trí tuệ nhân tạo của Google - Alpha Go vào năm 2016. Lee Sedol được biết đến như một tuyển thủ có thứ hạng nhất nhì trên thế giới. Thế nhưng qua các lượt đấu, tỉ số chung cuộc là 1 - 4 với chiến thắng áp đảo đến từ phe máy học. Sự kiện này đã đánh dấu một cột mốc quan trọng trong chặng đường phát triển của lĩnh vực trí tuệ nhân tạo. Ngay sau đó, hàng loạt các nghiên cứu mới và cải tiến ra đời, từng bước một đưa trí tuệ nhân tạo vào xử lý các vấn đề thực tế. Không dừng lại ở đó, trong các năm gần đây nhiều nỗ lực khác hướng đến việc phổ cập trí tuệ nhân tạo đến với mọi người cũng được đón nhận và mang lại nhiều thành tựu.

Trí tuệ nhân tạo chỉ là xu thế và sẽ sớm chấm dứt?

Mình nghĩ là không. Trí tuệ nhân tạo là một phần trong cuộc cách mạng công nghiệp 4.0 mà ai ai cũng đã từng nhắc đến. Sở dĩ lĩnh vực này bùng nổ trong các năm gần đây là do 3 lý do đơn giản sau:

1. Các nguồn dữ liệu đã đủ lớn
2. Các thiết bị lưu trữ đã đủ khả năng lưu trữ dữ liệu khổng lồ
3. Các máy tính đã được trang bị khả năng tính toán tuyệt vời

Có thể xem xét các mô hình học sâu như một mạng thần kinh nơ-ron lớn và phức tạp. Mạng thần kinh nơ-ron này có thể trình bày dưới dạng đồ thị định hướng không tuần hoàn như sau: input layer (lớp đầu vào) là các vec-tơ tín hiệu, hidden layers (các lớp ẩn) đảm nhiệm việc xử lý và cuối cùng là output layer (lớp đầu ra) chứa kết quả sau khi xử lý. Một mạng nơ-ron lớn có thể được tạo thành từ nhiều layers và rất nhiều các nodes (các nút) nằm trong mỗi layer. Tạm thời mình sẽ không đề cập đến hidden layers vì sẽ được nói ở các phần sau.


Khi so sánh mô hình mạng nơ-ron lớn với các mô hình sử dụng các thuật toán truyền thống. Kết quả cho thấy, đối với các tệp dữ liệu nhỏ đến vừa thì các thuật toán hồi quy, cây quyết định, SBM, GBM, ... hoặc thống kê hoạt động tốt. Tuy nhiên, khi kích thước dữ liệu trở nên rất lớn, các mô hình mạng nơ-ron lớn sẽ chứng minh được tính ưu việt của mình khi có khả năng học với các mô hình phi tuyến tính phức tạp với nhiều tham số. (Kết quả tham khảo từ video của Andrew Ng.



Mô hình mạng thần kinh tích chập - thị giác máy tính

Convolutional Neural Network (CNN) - mạng nơ-ron tích chập, thuộc loại mạng nơ-ron nhân tạo chuyển tiếp tức là tín hiệu đi theo một hướng từ đầu vào đến đầu ra hay không có sự phản hồi tín hiệu trở lại.  Thiết kế được lấy cảm hứng từ hệ thống vỏ não thị giác, khu vực vỏ não thị giác sơ cấp (V1) tiếp nhận hình ảnh thô từ võng mạc. Sau đó, khu vực vỏ não thị giác thứ cấp (V2) - vỏ não trước nhận các điểm đường biên từ hình ảnh vừ V1 và trích xuất các đặc tính cơ bản như định hướng, tần số không gian và màu sắc. Khu vực vỏ não trực quan (V4) tiếp tục tiếp nhận thông tin và thực hiện phân tích các thông tin phức tạp hơn. Tất cả các thông tin này được tập hợp tại hồi thái dương dưới để nhận dạng đối tượng.

Trong nhiệm vụ xử lý ảnh, các ảnh cần xử lý sẽ được biến đổi để trở thành một ma trận, tạm gọi là ma trận input. Convolution là một thuật ngữ toán học, ở đây đề cập đến một phép toán giữa hai ma trận. Convolution layer (lớp tích chập) là một ma trận nhỏ và cố định còn được gọi là filter (bộ lọc). Ma trận này có kích thước khoảng 5x5, 3x3. Khi bộ lọc này trượt (đối với ma trận có số chiều không lớn hơn 2) hoặc quay quanh ma trận biểu diễn hình ảnh đầu vào. Quá trình này lặp đi lăp lại việc nhân từng phần tử của 2 ma trận. Các filter này được thiết kế đặc biệt sao cho khi quét qua các ma trận input sẽ biến đổi các ma trận này và cho ra các hiệu ứng đặc biệt như làm mờ, làm nét, tách cạnh hoặc các mục đích khác.

Mô hình mạng thần kinh hồi quy - dự đoán tương lai

Recurrent Neural Network (RNN) - mạng nơ-ron hồi quy, được thiết kế để biến đổi một trình tự đầu vào thành một trình tự đầu ra trong một miền khác. Mô hình này phù hợp trong việc giải quyết các vấn đề về nhận dạng chữ viết tay, nhận dạng giọng nói và máy phiên dịch. Mô hình phía dưới giải thích quá trình hoạt động của một mạng nơ-ron hồi quy khi các bước được thực hiện lặp lại theo thời gian t. Để thử áp dụng mô hình này, chúng ta có thể sử dụng RNN để tạo ra các tên mới dựa vào bộ dữ liệu tên có sẵn tại đây trong các bài viết tiếp theo.



Tuy nhiên, các perceptron (được hiểu là một quá trình biến đổi các input sang một output duy nhất) đơn giản chỉ dựa vào các đầu vào để quyết định giá trị của đầu ra nên các kết quả này sẽ không được sử dụng theo thời gian. Chẳng hạn như trong thiết kế hệ thống chatbot, RNN xác định giới tính trong câu "Tôi là Nguyễn Triệu Phong" là nam và đưa ra quyết định trong câu trả lời kế tiếp là "Chào anh". Tuy nhiên, ở các câu sau nếu như giới tính không được lưu lại thì chatbot không thể biết được phải giao tiếp với người trò chuyện với cách xưng hô nào (ngữ cảnh không được thiết lập). Từ đó, các nhà nghiên cứu đã tạo ra một đơn vị nhớ dành riêng cho nhiệm vụ này gọi là LSTM - trí nhớ ngắn hạn. Công nghệ này thông minh đến nỗi nó có thể tự biết được rằng thông tin này nên được nhớ trong bao lâu, khi nào nên quên, khi nào nên dùng dữ liệu mới và nên kết hợp các dữ liệu cũ và mới như thế nào. Để tìm hiểu sâu hơn về LSTM mình sẽ viết một bài riêng.

Mô hình Seq2Seq - dịch máy

Mô hình RNN - Sequence to Sequence là một nhánh của RNN, tuy nhiên với các ứng dụng riêng biệt của nó mà mình muốn tách nó ra để giới thiệu. Seq2seq thường được dùng trong các ứng dụng Chatbot và dịch thuật, cả RNN và Seq2Seq đều có khả năng tạo ra các câu trả lời thích hợp cho các câu hỏi đầu vào. Tuy nhiên, Seq2Seq ưu việt hơn khi được thiết kế từ một bộ mã hoá và một bộ giải mã. Bộ mã hoá sẽ đảm nhiệm phân tích các từ ngữ đầu vào sau đó chuyển thông tin đến bộ giải mã thông qua một vector ngữ cảnh. Sau cùng, bộ giải mã dựa vào vector ngữ cảnh để tạo ra câu trả lời thích hợp. Mô hình này được Google sử dụng như một máy trả lời Email tự động và được đăng tải trong bài báo sau đây với tiêu đề "Computer, response to this Email" vào năm 2015.

Mô hình học tăng cường - dạy cho máy làm việc

Đây là một lĩnh vực thật sự có sức hút và khiến mình mê mẩn trong quá trình tìm hiểu. Chính mô hình này mang lại chiến thắng cho Alpha Go trước kiện tướng cờ vây quốc tế, bí mật đằng sau mô hình này thực sự khiến mọi người tò mò.

Học tăng cường - Reinforcement Learning (RL) là một tập con của Machine Learning. Mô hình này cho phép các máy trong quá trình học một quy trình nào đó tự động xác định hành vi tối ưu trong ngữ cảnh nhất định. Mục tiêu tối ưu hoá hiệu suất dài hạn này được đánh giá bằng một giá trị - thường gọi là reward. Nói cách khác, đúng với tên của nó thì mô hình này sẽ càng thông minh nếu chinh chiến càng nhiều lần và học được nhiều kinh nghiệm. Các ứng dụng mà RL mang lạ thực sự khổng lồ, trong số đó có thể kể đến như bài toán dạy một robot 2 chân vượt chướng ngại vật.

Mô hình đối nghịch tạo sinh - trí tưởng tượng nhân tạo

GAN cũng là một mô hình được sử dụng phổ biến khi có khả năng tạo ra các ví dụ mới sau khi học các bộ dữ liệu cho trước. Trong một bài báo về GAN mà mình từng đọc, mô hình này thực hiện nhiệm vụ tạo ra một bức tranh mới từ dữ liệu những bức tranh đã học. Mô hình được thiết kế với 2 phần riêng biệt tự cải tiến lẫn nhau: Bộ phận khởi tạobộ phận đánh giá, bộ phận khởi tạo cố gắng tạo ra những bức ảnh mới (ảnh giả) và bộ phận đánh giá sẽ xem xét các bức ảnh này để quyết định xem đây là ảnh thật hay ảnh giả.



Có thể xem ví dụ sau, sau khi học tệp hình ảnh về mèo thì từ một nhiễu Z bất kỳ, khối Generator tạo ra hình ảnh G(z) có kích thước bằng các ảnh thật (X) nhưng là ảnh giả và có nội dung lộn xộn, không có hình dạng cụ thể. G(z) và X cùng được đưa vào khối Discriminator kèm với nhãn đúng hoặc sai. Ở đây, D(x) sẽ được train và đưa ra quyết định ảnh đưa vào có phải ảnh thật hay không (đúng hoặc sai), tất nhiên với những nhiễu đầu kết quả luôn là sai. Những phản hồi này được chuyển về khối Generator để cải thiện khả năng fake của mình. Quá trình này lặp đi lắp lại và khối Generator ngày càng cải thiện khả năng fake, khối Discriminator cải thiện khả năng phán đoán. Cho tới khi D(x) nhầm lẫn giữa ảnh fake D(x) và ảnh thật X thì quá trình dừng lại.

Tổng kết

Để có thể nghiên cứu về lĩnh vực này, các bạn cần trang bị kiến thức về ngôn ngữ lập trình Python và đặc biệt quan trọng là nền tảng về toán. Mình là một người không giỏi về toán, nên trong quá trình nghiên cứu rất hay bị stuck vì một vài vấn đề không thể hiểu nổi. Ngoài ra, tiếng anh cũng là một điều cần thiết cho việc đọc tài liệu mới. Nếu phải đề xuất một cuốn sách cho các bạn muốn nghiên cứu bằng tiếng việt thì cuốn Machine Learning cơ bản của tác giả Vũ Hữu Tiệp sẽ là lựa chọn của mình. Các diễn đàn thì có machinelearningcoban.com, blog thì có blog của thầy Ông Xuân Hồng. Ngoài ra, có cuốn Deep Learning A Practitioner’s Approach của bộ đôi tác giả Josh Patterson and Adam Gibson viết bằng tiếng anh. Chúc các bạn luôn theo đuổi đam mê của chính mình.