Giới thiệu về máy học – Bước chân vào deep learning [1]

Giới thiệu về máy học – Bước chân vào deep learning [1]

18 Tháng 5 2025 - 3:24 sáng
Ngày nay, hầu hết các chương trình máy tính phổ biến đều được các nhà phát triển phần mềm xây dựng từ đầu. Ví dụ, giả sử một lập trình viên muốn viết một ứng dụng quản lý cửa hàng trực tuyến. Sau khi cân nhắc, họ có thể đề xuất giải pháp như sau:

1. Giới thiệu

Ngày nay, hầu hết các chương trình máy tính phổ biến đều được các nhà phát triển phần mềm xây dựng từ đầu. Ví dụ, giả sử một lập trình viên muốn viết một ứng dụng quản lý cửa hàng trực tuyến. Sau khi cân nhắc, họ có thể đề xuất giải pháp như sau:

  • Đầu tiên, người dùng tương tác với ứng dụng thông qua trình duyệt web (hoặc ứng dụng di động).

  • Tiếp theo, ứng dụng giao tiếp với cơ sở dữ liệu để lưu lịch sử giao dịch và theo dõi hoạt động của từng người dùng.

  • Phần cốt lõi của ứng dụng – "logic nghiệp vụ" (business logic) – quy định chi tiết cách ứng dụng xử lý trong các tình huống khác nhau.

Để hoàn thiện logic nghiệp vụ, lập trình viên phải xem xét cẩn thận mọi trường hợp biên (edge cases) có thể xảy ra và thiết kế các quy tắc phù hợp. Khi người mua nhấn "Thêm vào giỏ hàng", ứng dụng sẽ thêm một mục vào bảng cơ sở dữ liệu giỏ hàng, liên kết ID người dùng với ID sản phẩm. Dù khả năng viết một ứng dụng hoàn hảo ngay từ đầu là rất thấp, trong hầu hết trường hợp, lập trình viên có thể dựa trên logic nghiệp vụ để phát triển ứng dụng, sau đó kiểm thử liên tục cho đến khi đáp ứng nhu cầu người dùng. Việc thiết kế hệ thống tự động dựa trên logic nghiệp vụ để vận hành sản phẩm và hệ thống là một thành tựu nhận thức phi thường của con người.

May mắn thay, đối với cộng đồng các nhà khoa học máy học ngày càng phát triển, việc tự động hóa nhiều tác vụ không còn phụ thuộc vào logic do con người đặt ra. Hãy thử tưởng tượng nếu lập trình viên phải giải quyết một trong các vấn đề sau:

  • Viết ứng dụng nhận thông tin địa lý, ảnh vệ tinh và dữ liệu thời tiết lịch sử để dự báo thời tiết ngày mai.

  • Viết ứng dụng nhận câu hỏi dưới dạng văn bản tự nhiên và trả lời chính xác.

  • Viết ứng dụng nhận một hình ảnh, xác định người trong ảnh và vẽ đường viền quanh mỗi người.

  • Viết ứng dụng đề xuất sản phẩm người dùng có thể thích nhưng khó bắt gặp khi duyệt web thông thường.

Trong những trường hợp này, ngay cả lập trình viên giỏi nhất cũng không thể đưa ra giải pháp hoàn hảo, vì nhiều lý do khác nhau. Đôi khi tác vụ tuân theo quy luật thay đổi theo thời gian, đòi hỏi chương trình tự điều chỉnh. Đôi khi mối quan hệ trong tác vụ quá phức tạp (ví dụ giữa điểm ảnh và danh mục trừu tượng), cần hàng nghìn hoặc hàng triệu phép tính. Ngay cả khi mắt người có thể thực hiện những tác vụ này dễ dàng, các phép tính liên quan vượt quá khả năng hiểu của ý thức con người.

Học máy (Machine Learning - ML) là tập hợp các kỹ thuật mạnh mẽ có khả năng học từ kinh nghiệm, thường thông qua dữ liệu quan sát hoặc tương tác với môi trường. Khi thuật toán học máy tích lũy thêm kinh nghiệm, hiệu suất của nó sẽ dần cải thiện. Ngược lại, với nền tảng thương mại điện tử đã đề cập, nếu chỉ chạy cùng một logic nghiệp vụ, dù có tích lũy bao nhiêu kinh nghiệm, hệ thống cũng không tự cải thiện trừ khi lập trình viên phát hiện vấn đề và cập nhật phần mềm.

Cuốn sách này sẽ dẫn dắt bạn vào hành trình khám phá học máy, đặc biệt tập trung vào kiến thức nền tảng của học sâu (Deep Learning - DL) – một nhánh quan trọng của học máy với sức mạnh thúc đẩy đổi mới trong nhiều lĩnh vực như thị giác máy tính, xử lý ngôn ngữ tự nhiên, chăm sóc sức khỏe và di truyền học.

2. Học máy trong đời sống hàng ngày

Học máy hiện diện khắp nơi trong cuộc sống. Giả sử các tác giả cuốn sách cùng lái xe đến quán cà phê. Aston cầm iPhone lên và nói: "Hey Siri!" – hệ thống nhận dạng giọng nói ngay lập tức được kích hoạt. Tiếp theo, Lý Mộc nói với Siri: "Đến quán cà phê Starbucks." Hệ thống tự động chuyển giọng nói thành văn bản và khởi chạy ứng dụng bản đồ, sau đó đề xuất một số tuyến đường kèm thời gian di chuyển dự kiến... Chỉ trong vài giây, quá trình tương tác thông thường với điện thoại thông minh đã liên quan đến nhiều mô hình học máy khác nhau.

Giả sử chúng ta cần viết chương trình phản hồi "từ đánh thức" (wake word) như "Alexa", "Tiểu Ái Đồng Học" hay "Hey Siri". Nếu thử lập trình bằng máy tính và trình soạn thảo mã như trong Hình 1.1.1, vấn đề có vẻ rất khó: microphone thu âm khoảng 44.000 mẫu/giây, mỗi mẫu đo biên độ sóng âm – làm sao liên kết trực tiếp giá trị này với từ đánh thức? Làm thế nào để viết chương trình nhận đầu vào là đoạn âm thanh thô và đưa ra dự đoán chính xác liệu đoạn đó có chứa từ đánh thức hay không? Đây chính là lúc chúng ta cần đến học máy.

Thông thường, ngay cả khi không biết cách lập trình máy tính ánh xạ đầu vào – đầu ra một cách tường minh, bộ não vẫn có thể thực hiện chức năng nhận thức. Nói cách khác, dù không viết được code nhận diện từ "Alexa", chúng ta vẫn nhận ra nó. Nhờ khả năng này, ta có thể thu thập tập dữ liệu (dataset) gồm nhiều mẫu âm thanh được gán nhãn (có hoặc không có từ đánh thức). Sử dụng thuật toán học máy, thay vì thiết kế hệ thống nhận diện từ đánh thức "tường minh", chúng ta chỉ cần định nghĩa thuật toán linh hoạt với đầu ra phụ thuộc vào nhiều tham số (parameter), sau đó dùng dữ liệu để xác định bộ tham số tối ưu giúp đạt hiệu suất tốt nhất theo tiêu chí đánh giá.

Vậy tham số là gì? Có thể hình dung chúng như núm vặn điều chỉnh hành vi chương trình. Mỗi phiên bản chương trình với tham số cụ thể được gọi là mô hình (model). Tập hợp tất cả chương trình (ánh xạ đầu vào – đầu ra) tạo ra bằng cách thay đổi tham số gọi là "họ mô hình". Chương trình siêu dữ liệu (meta-program) sử dụng tập dữ liệu để chọn tham số được gọi là thuật toán học (learning algorithm).

Trước khi áp dụng học máy, chúng ta phải xác định rõ vấn đề, đầu vào/đầu ra và chọn họ mô hình phù hợp. Trong ví dụ này, mô hình nhận đoạn âm thanh và đưa ra lựa chọn "có" hoặc "không". Nếu mọi thứ suôn sẻ, sau khi huấn luyện, mô hình sẽ dự đoán chính xác liệu đoạn âm thanh có chứa từ đánh thức hay không.

Giả sử mô hình hiện phản hồi "có" mỗi khi nghe từ "Alexa". Vì từ đánh thức là ngôn ngữ tự nhiên tùy chọn, chúng ta cần họ mô hình đủ đa dạng – ví dụ, một mô hình khác chỉ phản hồi "có" với "Hey Siri". Lý tưởng nhất, cùng một họ mô hình nên áp dụng cho cả hai từ này vì chúng thuộc tác vụ tương tự. Tuy nhiên, với đầu vào/đầu ra hoàn toàn khác (ví dụ: từ ảnh sang chú thích, tiếng Anh sang tiếng Trung), có thể cần họ mô hình khác.

Nếu tất cả tham số mô hình được khởi tạo ngẫu nhiên, khả năng nhận diện từ đánh thức gần như bằng không. Trong học máy, học (learning) là quá trình huấn luyện mô hình để tìm ra bộ tham số tối ưu, giúp mô hình thực hiện hành vi mong muốn. Nói cách khác, chúng ta huấn luyện (train) mô hình bằng dữ liệu. Như Hình 1.1.2 minh họa, quy trình huấn luyện thường gồm các bước:

  1. Bắt đầu từ mô hình có tham số khởi tạo ngẫu nhiên, gần như không có "trí thông minh".

  2. Thu thập một số mẫu dữ liệu (ví dụ: đoạn âm thanh và nhãn tương ứng).

  3. Điều chỉnh tham số để cải thiện hiệu suất mô hình trên các mẫu này.

  4. Lặp lại bước 2 và 3 cho đến khi mô hình đạt hiệu suất mong muốn.

Tóm lại, thay vì viết trình nhận diện từ đánh thức, chúng ta viết chương trình "học". Nếu sử dụng tập dữ liệu đủ lớn, nó có thể "học" cách nhận diện từ đánh thức. Phương pháp "lập trình bằng dữ liệu" này có thể áp dụng cho nhiều tác vụ – ví dụ: cung cấp hàng nghìn ảnh mèo/chó để xây dựng "bộ phát hiện ảnh mèo". Sau huấn luyện, bộ phát hiện có thể:

  • Đầu ra số dương lớn nếu đầu vào là ảnh mèo.

  • Đầu ra số âm nhỏ nếu đầu vào là ảnh chó.

  • Đầu ra gần 0 nếu không chắc chắn.

Đây chỉ là một trong vô số ứng dụng của học máy, còn học sâu – chủ đề chính của cuốn sách – sẽ được phân tích sâu hơn trong phần sau.

Nguyễn Văn Hiến

Tôi là Nguyễn Văn Hiến, Founder của Tummosoft. Tôi có hơn 20 năm lập trình, vào thời điểm máy vi tính còn là tài sản quý giá của người giàu. Nhưng sức đam mê công nghệ của tôi đã giúp tôi vượt qua những khó khăn và theo đuổi nghề lập trình. Đối với tôi, sáng tạo các sản phẩm công nghệ bằng ngôn ngữ cũng giống như người nghệ sĩ sáng tác những họa phẩm.

Bài viết liên quan