[Nhập môn Deep Learning] Bắt đầu từ Perceptron
Khái quát từ Perceptron đến Multilayer perceptron. Không biết liệu Spiderum có thể nhúng MathJax vào để thêm nhiều blog có toán được không?
I want to commit to starting my writing career soon, but I find it challenging to systematically write down complete thoughts on a topic. This is mainly because I lack deep knowledge about many subjects.
Chuỗi bài viết này tôi sẽ cố gắng viết về Deep Learning cũng như cùng độc giả tiếp cận deep learning sâu nhất có thể. Về phần bề mặt, không thiếu các CEO, co-founder, influencer, dreamer, etc. đang nói về nó hàng ngày, hàng giờ. Kính mời quý độc giả tìm kiếm họ để có thể phát biểu về AI hiện đại hay như họ. Về mặt học thuật, một trong các blog uy tín hàng đầu dùng tiếng Việt là Machine Learning cơ bản của anh Vũ Hữu Tiệp. Có thể nói đây là sách vỡ lòng cho người viết về Machine Learning, kính mong quý độc giả đọc qua chuỗi bài viết của anh để hiểu sâu về các kĩ thuật trong Machine Learning. Mặc dù đi rất sâu và dễ tiếp cận trong AI, blog của anh thiếu đi các phần về Deep Learning. Nhân cơ hội còn thứ để viết, tôi sẽ bắt đầu viết về Deep Learning. Về cơ bản, Deep Learning có rất nhiều phần rời rạc được nối với nhau bởi các kỹ thuật chung. Vì thế, mỗi bài viết tôi sẽ cố gắng hệ thống hoá cho người đọc dễ theo dõi. Nhưng tôi không thể đảm bảo chuỗi bài viết sẽ được hệ thống hoá vì tôi không có tư duy để tạo ra hệ thống một cuốn sách ngay từ đầu.
Vì tôi dùng tiếng Anh trong khi làm nghiên cứu về AI nên thật sự không nắm rõ các tên tiếng Việt của các khái niệm. Mong độc giả tự tìm hiểu trong các giáo trình tiếng Việt nếu cảm thấy cần thiết
AI, Học Máy, Học Sâu
Trí thông minh nhân tạo (trước sư ra đời của các mô hình đặc biệt thông minh, e.g. ChatGPT 2023) vốn được tạo ra để thay thế con người làm việc. Vì thế, về mặt lý thuyết, bất kể cơ cấu, máy móc nào có thể ra quyết định hoặc làm việc như “có trí thông minh” thì được coi là trí thông minh nhân tạo. Lấy ví dụ, một hệ thống chống thư rác chỉ quét các từ được lập trình sẵn để lọc các email có khả năng là rác thì cũng được coi là một “trí thông minh nhân tạo” dù chưa thông minh lắm. Các ứng dụng hoặc công cụ có chức năng tương tự vốn đã có từ rất lâu. Song, các lý thuyết cụ thể chỉ thực sự bắt đầu phát triển khi cha đẻ của ngành khoa học máy tính là Alan Turing công bố bài báo tên “COMPUTING MACHINERY AND INTELLIGENCE”[5]. Từ khi được đặt tên, ngành AI bắt đầu hấp dẫn các nhà nghiên cứu từ hầu hết lĩnh vực. Trong đó, các nhà toán học và khoa học não bộ tỏ ra là những người đóng góp nhiều cho sự phát triển của ngành. Ở một diễn biến song song, các nhà triết học cũng bắt đầu đặt ra những câu hỏi mới liên quan đến trí thông minh nhân tạo và đóng góp không nhỏ cho nhiều ngành, đặc biệt là ngành làm phim viễn tưởng.
Song song với sự phát triển của AI là sự phát triển nhanh chóng của máy tính với một phần không thể tách rời là bộ nhớ [1], (bạn đọc có thể tìm hiểu thêm về John Von Neuman). Nhờ có sự xuất hiện của bộ nhớ máy tính mà việc thu thập dữ liệu, tập trung chúng lại, và đưa lên máy tính trở lên dễ dàng hơn. Và điều đặc biệt nhất là, lượng dữ liệu máy tính có thể đọc được ngày càng lớn. Đặc biệt là sau khi Internet bắt đầu phổ biến, dữ liệu đa phương tiện bắt đầu có thể thu thập từ khắp thế giới chỉ bằng những cái click chuột ở bất cứ đâu. Dữ liệu bắt đầu lớn lên, có ý nghĩa thống kê và dần trở lên ngoài sức người xử lý. Và AI bắt đầu được đẩy mạnh để khám phá, phân tích, sử dụng lượng dữ liệu này. Từ đây, một hướng phát triển mới của AI là học tập từ dữ liệu đã được khai phá và nhanh chóng phát triển với các thuật toán nói tiếng: HMM, GMM, Bayesian, Linear Regression, etc. Ở đây, tôi muốn nhắc bạn đọc nhớ một điều rất quan trọng trong Machine Learning nói chung.
Tóm lại, dữ liệu là tối quan trọng trong Học máy, bất kể thuật toán nào được chọn. Ngoại trừ các yếu tố về thuật toán và tính toán, có thể nói OpenAI là một mẫu thành công cho việc xây dựng một bộ dataset cực lớn và cực sạch. Một số câu chuyện về data workers trong quá trình này khá nổi tiếng vào thời điểm OpenAI ra mắt ChatGPT lần đầu, ví dụ như: Exclusive: OpenAI Used Kenyan Workers on Less Than $2 Per Hour to Make ChatGPT Less Toxic
Khi đã có dữ liệu rồi, tôi xin đề cập đến lại ba khái niệm AI, Machine Learning, và Deep Learning một cách tổng quát, ngắn gọn, dễ nhớ để mong rằng người đọc thực sự nhìn thấy tìm hiểu Deep Learning là tìm hiểu những thứ như thế nào, tránh khỏi các lớp học/khoá học vẽ vời.
- AI: mọi thứ có thể khiến máy tính bắt chước (mimic) hành vi của con người
- Machine Learning: Khiến cho máy tính có thể học từ “data” mà không phải lập trình cụ thể
- Deep Learning: Học các “mẫu, khuôn mẫu, đặc trưng, đặc điểm,…” (pattern) từ data bằng MẠNG THẦN KINH NHÂN TẠO (NEURAL NETWORKS).
→ Tóm lại, để deep learning xoay quanh: dữ liệu và mạng thần kinh (data and neural networks.)
Từ đây, tôi sẽ đi từ các building block nhỏ trong Deep Learning. Vui lòng nhảy cóc đến section cuối để thiết lập một môi trường tính toán trước khi đọc tiếp từ đây.
Perceptron [2]
Một cách ngắn gọn thì Perceptron là Hồi quy tuyến tính theo sau là một phép biển đổi phi tuyến tính (như hình sau). Mời bạn đọc ghé thăm Bài 3: Linear Regression để đọc về hồi quy tuyến tính. Về mặt toán học và thực tiễn, hồi quy tuyến tính khá đơn giản, phần nào là thô sơ và thiếu chính xác trong thực tế. Nếu bạn đọc đã đọc qua sách toán cấp 3, hẳn biết rằng biểu diễn hình học của hàm tuyến tính là một đường thẳng. Chính vì tính chất này hồi quy tuyến tính bị giới hạn lại trên một số tập dữ liệu và bài toán cụ thể. Không phải là không thể ứng dụng hồi quy tuyến tính cho mọi bài toán, nhưng độ chính xác bị giới hạn.
Để vượt qua vấn đề này, vào năm 1957 Frank Rosenblatt đề xuất Perceptron như ta biết ngày nay gồm hồi quy tuyến tính theo sau là biến đổi phi tuyến tính. Nhờ vào biến đổi phi tuyến tính này mà kết quả của cả phép toán về mặt hình học sẽ không còn là một đường thẳng nữa mà sẽ được quyết định bởi phép biển đổi phi tuyến tính (hàm kích hoạt, từ đây dùng có thể hoán đổi với activation function). Nhờ đó mà khả năng biểu diễn của Perceptron đa dạng và vượt trội hơn hồi quy tuyến tính rất nhiều. Perceptron chính là một phần quan trọng của học sâu hiện đại, là building block của rất nhiều neural network.
Thêm một vấn đề cực kì quan trọng của lý thuyết học sâu là định lý Universal Approximation [3]. Định lý này chỉ ra rằng mọi hàm số có thể được xấp xỉ gần đúng bằng một hàm được tạo ra bằng cách xếp chồng các Perceptron lên nhau (multilayer perceptron). Về sau, các building block phức tạp lên và định lý này vẫn đúng. Có thể lấy ví dụ từ các mô hình ngôn ngữ lớn như ChatGPT. Việc tăng số lượng lớp này dẫn đến cái gọi là độ sâu (không dùng từ “cao” có lẽ để tận dụng thêm nghĩa về sự hiểu sâu dữ liệu), từ đó dẫn đến cái tên “Deep Learning”.
Lý thuyết về việc scale up này rất thú vị và là một phần không nhỏ trong thành công của các mô hình lớn hiện tại. Bạn đọc có thể đọc thêm về Scaling Law [4].
Bây giờ, hãy quay về chuyện chính bằng cách nhìn vào hình dưới.
Đã đến lúc dùng toán học!
Hình vẽ trên có thể được biểu diễn bằng phương trình sau đây:
Từ đây, rất cần bạn đọc bắt đầu đọc và hiểu song song các kí hiệu toán và tên gọi nên tôi sẽ chỉ ra cụ thể từng phần như sau:
Sau đây là ba trong số các hàm phi tuyến tác giả thường thấy trong các nghiên cứu AI hiện đại:
Perceptron một cách đại số hơn
Vì cách viết ở trên quá rườm rà, chúng ta hãy bắt đầu đơn giản hoá và làm quen với các tài liệu AI hiện đại bằng cách làm quen với các biểu diễn đại số. Cụ thể, ta có thể viết lại phương trình perceptron như sau:
Hãy bắt đầu bằng một đoạn code đơn giản, vui lòng chạy trong colab để khỏi phải cài đặt các package liên quan:
Perceptron có nhiều hơn một đầu ra.
Perceptron được trình bày trong phần trước chỉ có một đầu ra. Thường chỉ được dùng để đưa ra các kết quả (đọc giả có thể tham khảo bài toán mô phỏng cổng logic bằng Perceptron). Điều này vẫn làm giới hạn khả năng biểu diễn của Perceptron vì output chỉ là một số. Vì vậy, Perceptron nhiều đầu ra được ra đời như biểu diễn ở hình trên. Và chính Perceptron nhiều đầu ra mới là thứ building block thực sự của neural network hiện đại. Trước hết, biểu diễn toán học lúc này sẽ có thay đổi lớn như sau:
Đầu ra là nhiều hơn một số thì có thể biểu diễn là vector: y. Tương tự cho bias b. Thay đổi cuối cùng là trọng số từ vector đã biến thành ma trận. Sự thay đổi này đơn giản là vì với mỗi output, ta cần một bộ trọng số riêng. Điều này sẽ giúp cho các output sẽ không có giá trị giống nhau. Một cách trực tiếp, tạo điều kiện cho perceptron học được nhiều thứ hơn từ cùng một bộ input. Lấy ví dụ, đầu vào của perceptron là chiều cao, cân nặng, độ tuổi, và tần suất uống bia của một người. Với nhiều hơn một output, ta hi vọng mô hình có thể cho ra dự đoán về mức lương, xác suất bị viêm gan. Nếu các bộ trọng số là như nhau, thì đầu ra sẽ y như nhau, trong khi hai đầu ra mong muốn hoàn toàn khác nhau. Vì vậy, cần một bộ trọng số riêng cho mỗi output là cần thiết. Từ đó, xếp các bộ trọng số cạnh nhau ta có được một ma trận W.
Multi-layer perceptron và Deep Neural Network
Bằng việc xếp chồng nhiều multiple output perceptron lên nhau (mặc dù thường được vẽ theo chiều ngang), ta có được một mạng thần kinh (neural network) như trên. Đây chính là multi-layer perceptron. Đây cũng chính là hình thái mạng thần thường được dùng để minh hoạ nhất.
Viết đến đây thì người viết cũng đã sức cùng lực kiệt để bắt đầu đi vào phần dạy cho mô hình này học được. Nên đành hẹn độc giả ở phần tiếp theo.
Như vậy, tôi đã khái quát các khái niệm cơ bản nhất về mạng deep neural network để bắt đầu cho phần dạy cho nó học ở phần tiếp theo.
Cài đặt môi trường tính toán
Cách dễ nhất: sử dụng google colab (miễn phí về mặt tiền bạc)
Bước 1: Truy cập
Bước 2: Tạo một notebook mới
Bước 3: Bắt đầu code. Nếu bạn bắt đầu dùng thế có thể code theo tôi và tự google cách debug nếu gặp vấn đề.
Để thống nhất và chạy một số thí nghiệm trong các bài blog, cài đặt môi trường tính toán là khá quan trọng. Sau đây là một số thứ cần thiết để bắt đầu: Python, Pytorch, tqdm, numpy, scipy. Trong trường hợp thiếu packages nào vui lòng tự cài thêm.
Về cách cài đặt, tôi đề nghị người đọc tham khảo docs chính thức của ngôn ngữ, thư viện. Vừa là để rèn thói quen đọc docs, vừa tiết kiệm thời gian mặc dù có vẻ như xem hướng dẫn trên youtube nhanh hơn.
References
[1] Von Neumann, John. "First Draft of a Report on the EDVAC." IEEE Annals of the History of Computing 15.4 (1993): 27-75.
[2] Minsky, Marvin, and Seymour A. Papert. Perceptrons, reissue of the 1988 expanded edition with a new foreword by Léon Bottou: an introduction to computational geometry. MIT press, 2017.
[3] Hornik, Kurt; Stinchcombe, Maxwell; White, Halbert (January 1989). "Multilayer feedforward networks are universal approximators". Neural Networks. 2 (5): 359–366.
[4] Kaplan, Jared, et al. "Scaling laws for neural language models." arXiv preprint arXiv:2001.08361 (2020).
[5] Turing, Alan M. Computing machinery and intelligence. Springer Netherlands, 2009.
Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất