.. raw:: html
.. raw:: html
.. _chap_introduction:
Giới thiệu
==========
.. raw:: html
Cho tới tận gần đây, gần như tất cả mọi chương trình máy tính mà chúng
ta tương tác hàng ngày đều được tạo ra bởi lập trình viên phần mềm từ
những định đề cơ bản. Giả sử chúng ta muốn viết một ứng dụng quản lý hệ
thống thương mại điện tử. Sau khi tụm lại quanh chiếc bảng trắng để suy
nghĩ về vấn đề một cách cặn kẽ, chúng ta có thể phác thảo một giải pháp
vận hành được, phần nào sẽ nhìn giống như sau: (i) người dùng tương tác
với ứng dụng thông qua một giao diện chạy trên trình duyệt web hoặc ứng
dụng trên điện thoại; (ii) ứng dụng tương tác với một hệ thống cơ sở dữ
liệu thương mại để theo dõi trạng thái của từng người dùng và duy trì hồ
sơ lịch sử các giao dịch; và (iii) (cũng là cốt lõi của ứng dụng) các
logic nghiệp vụ (hay cũng có thể nói *bộ não*) mô tả cách thức xử lí cụ
thể của ứng dụng trong từng tình huống có thể xảy ra.
.. raw:: html
Để xây dựng *bộ não* của ứng dụng này, ta phải xem xét tất cả mọi trường
hợp mà chúng ta cho rằng sẽ gặp phải, qua đó đặt ra những quy tắc thích
hợp. Ví dụ, mỗi lần người dùng nhấn để thêm một món đồ vào giỏ hàng, ta
thêm một trường vào bảng giỏ hàng trong cơ sở dữ liệu, liên kết ID của
người dùng với ID của món hàng được yêu cầu. Mặc dù hầu như rất ít lập
trình viên có thể làm đúng hết trong lần đầu tiên, (sẽ cần vài lần chạy
kiểm tra để xử lý hết được những trường hợp hiểm hóc), hầu như phần lớn
ta có thể lập trình được từ những định đề cơ bản và tự tin chạy ứng dụng
*trước khi được dùng bởi một khách hàng thực sự nào*. Khả năng phát
triển những sản phầm và hệ thống tự động từ những định đề cơ bản, thường
là trong những điều kiện mới lạ, là một kỳ công trong suy luận và nhận
thức của con người. Và khi bạn có thể tạo ra một giải pháp hoạt động
được trong mọi tình huống, *bạn không nên sử dụng học máy*.
.. raw:: html
May mắn thay cho cộng đồng đang tăng trưởng của các nhà khoa học về học
máy, nhiều tác vụ mà chúng ta muốn tự động hoá không dễ dàng bị khuất
phục bởi sự tài tình của con người. Thử tưởng tượng bạn đang quây quần
bên tấm bảng trắng với những bộ não thông minh nhất mà bạn biết, nhưng
lần này bạn đang đương đầu với một trong những vấn đề dưới đây:
.. raw:: html
- Viết một chương trình dự báo thời tiết ngày mai, cho biết trước thông
tin địa lý, hình ảnh vệ tinh, và một chuỗi dữ liệu thời tiết trong
quá khứ.
- Viết một chương trình lấy đầu vào là một câu hỏi, được diễn đạt không
theo khuôn mẫu nào, và trả lời nó một cách chính xác.
- Viết một chương trình hiển thị ra cho người dùng những sản phẩm mà họ
có khả năng cao sẽ thích, nhưng lại ít có khả năng gặp được khi duyệt
qua môt cách tự nhiên.
.. raw:: html
Trong mỗi trường hợp trên, cho dù có là lập trình viên thượng thừa cũng
không thể lập trình lên được từ con số không. Có nhiều lý do khác nhau.
Đôi khi chương trình mà chúng ta cần lại đi theo một khuôn mẫu thay đổi
theo thời gian và chương trình của chúng ta cần phải thích ứng với điều
đó. Trong trường hợp khác, mối quan hệ (giả dụ như giữa các điểm ảnh và
các hạng mục trừu tượng) có thể là quá phức tạp, yêu cầu hàng ngàn hàng
triệu phép tính vượt ngoài khả năng thấu hiểu của nhận thức chúng ta
(mặc dù mắt của chúng ta có thể xử lý tác vụ này một cách dễ dàng). Học
máy (Machine Learning - ML) là lĩnh vực nghiên cứu những kỹ thuật tiên
tiến mà có thể *học* từ *kinh nghiệm*. Khi thuật toán ML tích luỹ thêm
nhiều kinh nghiệm, thường là dưới dạng dữ liệu quan sát hoặc tương tác
với môi trường, chất lượng của nó sẽ tăng lên. Tương phản với hệ thống
thương mại điện tử tất định của chúng ta, khi mà nó luôn tuân theo cùng
logic nghiệp vụ đã có, mặc cho đã tích luỹ thêm bao nhiêu kinh nghiệm,
tận cho tới khi lập trình viên tự *học* và quyết định rằng đã tới lúc
cập nhật phần mềm này. Trong cuốn sách này, chúng tôi sẽ dạy cho bạn về
những điều căn bản nhất trong học máy, và tập trung đặc biệt vào học
sâu, một tập hợp hùng mạnh những kỹ thuật đang thúc đẩy sự đổi mới ở
nhiều lĩnh vực khác nhau như thị giác máy tính, xử lý ngôn ngữ tự nhiên,
chăm sóc y tế và nghiên cứu cấu trúc gen.
.. raw:: html
.. raw:: html
.. raw:: html
Một ví dụ truyền cảm hứng
-------------------------
.. raw:: html
Các tác giả của cuốn sách cũng giống như nhiều người lao động khác, cần
một tách cà phê trước khi bắt đầu công việc biên soạn của mình. Chúng
tôi leo lên xe và bắt đầu lái. Sở hữu chiếc iPhone, Alex gọi “Hey Siri”
để đánh thức hệ thống nhận dạng giọng nói của điện thoại. Sau đó Mu ra
lệnh “chỉ đường đến quán cà phê Blue Bottle”. Chiếc điện thoại nhanh
chóng hiển thị bản ghi thoại (*transcription*) của câu lệnh. Nó cũng
nhận ra rằng chúng tôi đang yêu cầu chỉ dẫn đường đi và tự khởi động ứng
dụng Bản đồ để hoàn thành yêu cầu đó. Khởi động xong, ứng dụng Bản đồ tự
xác định một vài lộ trình tới đích. Đến mỗi tuyến đường, ứng dụng lại
cập nhật và hiển thị thời gian di chuyển dự tính mới. Mặc dù đây chỉ là
câu chuyện dựng lên cho mục đích giảng dạy, nó cũng cho thấy chỉ trong
khoảng vài giây, những tương tác hàng ngày của chúng ta với chiếc điện
thoại thông minh có thể liên quan đến nhiều mô hình học máy.
.. raw:: html
Tưởng tượng rằng ta mới viết một chương trình để phản hồi một *hiệu lệnh
đánh thức* như là “Alexa”, “Okay, Google” hoặc “Siri”. Hãy thử tự viết
nó chỉ với một chiếc máy tính và một trình soạn thảo mã nguồn như minh
hoạ trong :numref:`fig_wake_word`. Bạn sẽ bắt đầu viết một chương
trình như vậy như thế nào? Thử nghĩ xem… vấn đề này khó đấy. Cứ mỗi
giây, chiếc mic sẽ thu thập cỡ tầm 44,000 mẫu tín hiệu. Mỗi mẫu là một
giá trị biên độ của sóng âm. Quy tắc đáng tin cậy nào có thể từ một đoạn
âm thanh thô đưa ra các dự đoán ``{có, không}`` để xác định đoạn âm
thanh đó có chứa hiệu lệnh đánh thức hay không? Nếu bạn không biết xử lý
điều này như thế nào, thì cũng đừng lo lắng. Chúng tôi cũng không biết
làm cách nào để viết một chương trình như vậy từ đầu. Đó là lý do vì sao
chúng tôi sử dụng học máy.
.. raw:: html
.. _fig_wake_word:
.. figure:: ../img/wake-word.svg
Xác định một hiệu lệnh đánh thức
.. raw:: html
Thủ thuật là thế này. Ngay cả khi không thể giải thích cụ thể cho một
cái máy tính về cách ánh xạ từ đầu vào đến đầu ra như thế nào, thì chúng
ta vẫn có khả năng làm việc đó bằng bộ não của mình. Hay nói cách khác,
thậm chí nếu chúng ta không biết *cách lập trình một cái máy tính* để
nhận dạng từ “Alexa”, chính chúng ta lại *có khả năng* nhận thức được từ
“Alexa”. Với khả năng này, chúng ta có thể thu thập một *tập dữ liệu*
lớn các mẫu âm thanh kèm nhãn mà *có chứa* hoặc *không chứa* hiệu lệnh
đánh thức. Trong cách tiếp cận học máy, chúng ta không thiết kế một hệ
thống *rõ ràng* để nhận dạng hiệu lệnh đánh thức. Thay vào đó, chúng ta
định nghĩa một chương trình linh hoạt mà hành vi của nó được xác định
bởi những *tham số*. Sau đó chúng ta sử dụng tập dữ liệu để xác định bộ
các tham số tốt nhất có khả năng cải thiện chất lượng của chương trình,
cũng như thoả mãn một số yêu cầu về chất lượng trong nhiệm vụ được giao.
.. raw:: html
Bạn có thể coi những tham số như các núm vặn có thể điều chỉnh để thay
đổi hành vi của chương trình. Sau khi đã cố định các tham số, chúng ta
gọi chương trình này là một *mô hình*. Tập hợp của tất cả các chương
trình khác nhau (ánh xạ đầu vào-đầu ra) mà chúng ta có thể tạo ra chỉ
bằng cách thay đổi các tham số được gọi là một *nhóm* các mô hình. Và
*chương trình học tham số* sử dụng tập dữ liệu để chọn ra các tham số
được gọi là *thuật toán học*.
.. raw:: html
.. raw:: html
.. raw:: html
Trước khi tiếp tục và bắt đầu với các thuật toán học, chúng ta phải định
nghĩa rõ ràng vấn đề, hiểu chính xác bản chất của đầu vào và đầu ra và
lựa chọn một nhóm mô hình thích hợp. Trong trường hợp này, mô hình của
chúng ta nhận *đầu vào* là một đoạn âm thanh và *đầu ra* là một giá trị
trong ``{đúng, sai}``. Nếu tất cả diễn ra như kế hoạch, mô hình thông
thường sẽ dự đoán chính xác liệu đoạn âm thanh có hay không chứa hiệu
lệnh kích hoạt.
.. raw:: html
Nếu chúng ta lựa chọn đúng nhóm mô hình, sẽ tồn tại một cách thiết lập
các núm vặn mà mô hình sẽ đưa ra ``đúng`` mỗi khi nghe thấy từ “Alexa”.
Bởi vì việc lựa chọn hiệu lệnh đánh thức nào là tuỳ ý, chúng ta sẽ muốn
có một nhóm mô hình đủ mạnh để trong trường hợp với một thiết lập khác
của các núm quay, nó sẽ đưa ra kết quả ``đúng`` mỗi khi nghe từ
“Apricot” (“quả mơ”). Bằng trực giác ta có thể nhận thấy rằng việc *nhận
dạng “Alexa”* và *nhận dạng “Apricot”* cũng tương tự nhau và có thể sử
dụng chung một nhóm mô hình. Tuy nhiên, trong trường hợp có sự khác biệt
về bản chất ở đầu vào và đầu ra, chẳng hạn như việc ánh xạ từ hình ảnh
sang chú thích, hoặc từ câu tiếng Anh sang câu tiếng Trung thì ta có thể
sẽ phải sử dụng các nhóm mô hình hoàn toàn khác nhau.
.. raw:: html
Dễ dàng nhận thấy, nếu như chúng ta chỉ thiết lập một cách ngẫu nhiên
các núm vặn, thì mô hình gần như sẽ không có khả năng nhận dạng “Alexa”,
“Apricot” hay bất cứ từ tiếng Anh nào khác. Trong học sâu, *học* là quá
trình khám phá ra thiết lập đúng của các núm vặn để mô hình có thể hành
xử như chúng ta mong muốn.
.. raw:: html
Quá trình huấn luyện thường giống như mô tả trong hình
:numref:`fig_ml_loop`:
.. raw:: html
1. Khởi tạo mô hình một cách ngẫu nhiên. Lúc này nó vẫn chưa thể thực
hiện bất kỳ tác vụ có ích nào.
2. Thu thập một số dữ liệu đã được gán nhán (ví dụ như đoạn âm thanh kèm
nhãn ``{có, không}`` tương ứng).
3. Thay đổi các núm vặn để mô hình dự đoán chính xác hơn trên các mẫu.
4. Lặp lại cho đến khi có một mô hình hoạt động tốt.
.. raw:: html
.. _fig_ml_loop:
.. figure:: ../img/ml-loop.svg
Một quá trình huấn luyện điển hình
.. raw:: html
.. raw:: html
.. raw:: html
Tóm lại, thay vì tự lập trình một chương trình nhận dạng từ đánh thức,
ta tạo ra một chương trình có thể *học* cách nhận dạng các từ đánh thức
*khi được cho xem một tập lớn những ví dụ đã được gán nhãn*. Ta có thể
gọi việc xác định hành vi của một chương trình bằng cách cho nó xem một
tập dữ liệu là *lập trình với dữ liệu*. Chúng ta có thể “lập trình” một
bộ phát hiện mèo bằng cách cung cấp cho hệ thống học máy nhiều mẫu ảnh
chó và mèo, ví dụ như các hình ảnh dưới đây:
.. raw:: html
+--------+--------+--------+--------+
| |cat1| | |cat2| | |dog1| | |dog2| |
+========+========+========+========+
| mèo | mèo | chó | chó |
+--------+--------+--------+--------+
.. raw:: html
Bằng cách này bộ phát hiện sẽ dần học cách trả về một số dương lớn nếu
đó là một con mèo, hoặc một số âm lớn nếu đó là một con chó, hoặc một
giá trị gần với không nếu nó không chắc chắn. Và đấy mới chỉ là một ví
dụ nhỏ về những gì mà học máy có thể làm được.
.. raw:: html
Học sâu chỉ là một trong nhiều phương pháp phổ biến để giải quyết những
bài toán học máy. Tới giờ chúng ta mới chỉ nói tổng quát về học máy chứ
chưa nói về học sâu. Để thấy được tại sao học sâu lại quan trọng, ta nên
dừng lại một chút để làm rõ một vài điểm thiết yếu.
.. raw:: html
Thứ nhất, những vấn đề mà chúng ta đã thảo luận–học từ tín hiệu âm thanh
thô, từ những giá trị điểm ảnh của tấm ảnh, hoặc dịch những câu có độ
dài bất kỳ sang một ngôn ngữ khác–là những vấn đề học sâu có thể xử lý
tốt còn học máy truyền thống thì không. Mô hình sâu thực sự *sâu* theo
nghĩa nó có thể học nhiều *tầng* tính toán. Những mô hình đa tầng (hoặc
có thứ bậc) này có khả năng xử lý dữ liệu tri giác mức thấp theo cái
cách mà những công cụ trước đây không thể. Trước đây, một phần quan
trọng trong việc áp dụng học máy vào các bài toán này là tìm thủ công
những kỹ thuật biến đổi dữ liệu sang một hình thức mà những mô hình
*nông* có khả năng xử lý. Một lợi thế then chốt của học sâu là nó không
chỉ thay thế mô hình *nông* ở thành phần cuối cùng của pipeline học tập
truyền thống mà còn thay thế quá trình thiết kế đặc trưng tốn nhiều công
sức. Thứ hai, bằng cách thay thế các kỹ thuật “tiền xử lý theo từng phân
ngành”, học sâu đã loại bỏ ranh giới giữa thị giác máy tính, nhận dạng
tiếng nói, xử lý ngôn ngữ tự nhiên, tin học y khoa và các lĩnh vực khác,
cung cấp một tập hợp các công cụ xử lý những loại bài toán khác nhau.
.. raw:: html
.. raw:: html
.. raw:: html
Các thành phần chính: Dữ liệu, Mô hình và Thuật toán
----------------------------------------------------
.. raw:: html
Trong ví dụ về *từ đánh thức*, chúng tôi đã mô tả một bộ dữ liệu bao gồm
các đoạn âm thanh và các nhãn nhị phân, giúp các bạn hiểu một cách chung
chung về cách *huấn luyện* một mô hình để phân loại các đoạn âm thanh.
Với loại bài toán này, ta cố gắng dự đoán một *nhãn* chưa biết với *đầu
vào* cho trước, dựa trên tập dữ liệu cho trước bao gồm các mẫu đã được
gán nhãn. Đây là ví dụ về bài toán *học có giám sát* và chỉ là một trong
số rất nhiều *dạng* bài toán học máy khác nhau mà chúng ta sẽ học trong
các chương sau. Trước hết, chúng tôi muốn giải thích rõ hơn về các thành
phần cốt lõi sẽ theo chúng ta xuyên suốt tất cả các bài toán học máy:
.. raw:: html
1. *Dữ liệu* mà chúng ta có thể học.
2. Một *mô hình* về cách biến đổi dữ liệu.
3. Một hàm *mất mát* định lượng *độ lỗi* của mô hình.
4. Một *thuật toán* điều chỉnh các tham số của mô hình để giảm thiểu mất
mát.
.. raw:: html
Dữ liệu
~~~~~~~
.. raw:: html
Có một sự thật hiển nhiên là bạn không thể làm khoa học dữ liệu mà không
có dữ liệu. Chúng ta sẽ tốn rất nhiều giấy mực để cân nhắc chính xác
những gì cấu thành nên dữ liệu, nhưng bây giờ chúng ta sẽ rẽ sang khía
cạnh thực tế và tập trung vào các thuộc tính quan trọng cần quan tâm.
Thông thường, chúng ta quan tâm đến một bộ *mẫu* (còn được gọi là *điểm
dữ liệu*, *ví dụ* hoặc *trường hợp*). Để làm việc với dữ liệu một cách
hữu ích, chúng ta thường cần có một cách biễu diễn chúng phù hợp dưới
dạng số. Mỗi *ví dụ* thường bao gồm một bộ thuộc tính số gọi là *đặc
trưng*. Trong các bài toán học có giám sát ở trên, một đặc trưng đặc
biệt được chọn làm *mục tiêu* dự đoán, (còn được gọi là *nhãn* hoặc
*biến phụ thuộc*). Các đặc trưng mà mô hình dựa vào để đưa ra dự đoán có
thể được gọi đơn giản là các *đặc trưng*, (hoặc thường là *đầu vào*,
*hiệp biến* hoặc *biến độc lập*).
.. raw:: html
Nếu chúng ta đang làm việc với dữ liệu hình ảnh, mỗi bức ảnh riêng lẻ có
thể tạo thành một *mẫu* được biểu diễn bởi một danh sách các giá trị số
theo thứ tự tương ứng với độ sáng của từng pixel. Một bức ảnh màu có
kích thước :math:`200\times 200` sẽ bao gồm
:math:`200\times200\times3=120000` giá trị số, tương ứng với độ sáng của
các kênh màu đỏ, xanh lá cây và xanh dương cho từng vị trí trong không
gian. Trong một tác vụ truyền thống hơn, chúng ta có thể cố gắng dự đoán
xem một bệnh nhân liệu có cơ hội sống sót hay không, dựa trên bộ đặc
trưng tiêu chuẩn cho trước như tuổi, các triệu chứng quan trọng, thông
số chẩn đoán, .v.v.
.. raw:: html
.. raw:: html
.. raw:: html
Khi mỗi mẫu được biểu diễn bởi cùng một số lượng các giá trị, ta nói
rằng dữ liệu bao gồm các vector có *độ dài cố định* và ta mô tả độ dài
(không đổi) của vector là *chiều* của dữ liệu. Bạn có thể hình dung,
chiều dài cố định có thể là một thuộc tính thuận tiện. Nếu ta mong muốn
huấn luyện một mô hình để nhận biết ung thư qua hình ảnh từ kính hiển
vi, độ dài cố định của đầu vào sẽ giúp ta loại bỏ một vấn đề cần quan
tâm.
.. raw:: html
Tuy nhiên, không phải tất cả dữ liệu có thể được dễ dàng biểu diễn dưới
dạng vector có độ dài cố định. Đôi khi ta có thể mong đợi hình ảnh từ
kính hiển vi đến từ thiết bị tiêu chuẩn, nhưng ta không thể mong đợi
hình ảnh được khai thác từ Internet sẽ hiển thị với cùng độ phân giải
hoặc tỉ lệ được. Đối với hình ảnh, ta có thể tính đến việc cắt xén nhằm
đưa chúng về kích thước tiêu chuẩn, nhưng chiến lược này chỉ đưa ta đến
đấy mà thôi. Và ta có nguy cơ sẽ mất đi thông tin trong các phần bị cắt
bỏ. Hơn nữa, dữ liệu văn bản không thích hợp với cách biểu diễn dưới
dạng vector có độ dài cố định. Suy xét một chút về những đánh giá của
khách hàng để lại trên các trang Thương mại điện tử như Amazon, IMDB
hoặc TripAdvisor. Ta có thể thấy có những bình luận ngắn gọn như: “nó
bốc mùi!”, một số khác thì bình luận lan man hàng trang. Một lợi thế lớn
của học sâu so với các phương pháp truyền thống đó là các mô hình học
sâu hiện đại có thể xử lý dữ liệu có *độ dài biến đổi* một cách uyển
chuyển hơn.
.. raw:: html
Nhìn chung, chúng ta có càng nhiều dữ liệu thì công việc sẽ càng dễ dàng
hơn. Khi ta có nhiều dữ liệu hơn, ta có thể huấn luyện ra những mô hình
mạnh mẽ hơn và ít phụ thuộc hơn vào các giả định được hình thành từ
trước. Việc chuyển từ dữ liệu nhỏ sang dữ liệu lớn là một đóng góp chính
cho sự thành công của học sâu hiện đại. Để cho rõ hơn, nhiều mô hình thú
vị nhất trong học sâu có thể không hoạt động nếu như không có bộ dữ liệu
lớn. Một số người vẫn áp dụng học sâu với số dữ liệu ít ỏi mà mình có
được, nhưng trong trường hợp này nó không tốt hơn các cách tiếp cận
truyền thống.
.. raw:: html
Cuối cùng, có nhiều dữ liệu và xử lý dữ liệu một cách khéo léo thôi thì
chưa đủ. Ta cần những dữ liệu *đúng*. Nếu dữ liệu mang đầy lỗi, hoặc nếu
các đặc trưng được chọn lại không dự đoán được số lượng mục tiêu cần
quan tâm, việc học sẽ thất bại. Tình huống trên có thể được khái quát
bởi thuật ngữ: *đưa rác vào thì nhận rác ra* (*garbage in, garbage
out*). Hơn nữa, chất lượng dự đoán kém không phải hậu quả tiềm tàng duy
nhất. Trong các ứng dụng học máy có tính nhạy cảm như: dự đoán hành vi
phạm pháp, sàng lọc hồ sơ cá nhân và mô hình rủi ro được sử dụng để cho
vay, chúng ta phải đặc biệt cảnh giác với hậu quả của dữ liệu rác. Một
dạng lỗi thường thấy xảy ra trong các bộ dữ liệu là khi một nhóm người
không tồn tại trong dữ liệu huấn luyện. Hãy hình dung khi áp dụng một hệ
thống nhận diện ung thư da trong thực tế mà trước đây nó chưa từng thấy
qua da màu đen. Thất bại cũng có thể xảy ra khi dữ liệu không đại diện
đầy đủ và chính xác cho một số nhóm người, nhưng lại đánh giá nhóm người
này dựa vào định kiến của xã hội. Một ví dụ, nếu như các quyết định
tuyển dụng trong quá khứ được sử dụng để huấn luyện một mô hình dự đoán
sẽ được sử dụng nhằm sàng lọc sơ yếu lý lịch, thì các mô hình học máy có
thể vô tình học được từ những bất công trong quá khứ. Lưu ý rằng tất cả
vấn đề trên có thể xảy ra mà không hề có tác động xấu nào của nhà khoa
học dữ liệu hoặc thậm chí họ còn không ý thức được về các vấn đề đó.
.. raw:: html
.. raw:: html
.. raw:: html
Mô hình
~~~~~~~
.. raw:: html
Phần lớn học máy đều liên quan đến việc *biến đổi* dữ liệu theo một cách
nào đó. Có thể ta muốn xây dựng một hệ thống nhận ảnh đầu vào và dự đoán
*mức độ cười* của khuôn mặt trong ảnh. Hoặc đó cũng có thể là một hệ
thống nhận vào dữ liệu đo đạc từ cảm biến và dự đoán độ *bình thường*
hay *bất thường* của chúng. Ở đây chúng ta gọi *mô hình* là một hệ thống
tính toán nhận đầu vào là một dạng dữ liệu và sau đó trả về kết quả dự
đoán, có thể ở một dạng dữ liệu khác. Cụ thể, ta quan tâm tới các mô
hình thống kê mà ta có thể ước lượng được từ dữ liệu. Dù các mô hình đơn
giản hoàn toàn có thể giải quyết các bài toán đơn giản phù hợp, những
bài toán được để tâm tới trong cuốn sách này sẽ đẩy các phương pháp cổ
điển tới giới hạn của chúng. Điểm khác biệt chính của học sâu so với các
phương pháp cổ điển là các mô hình mạnh mẽ mà nó nhắm vào. Những mô hình
đó bao gồm rất nhiều phép biến đổi dữ liệu liên tiếp, được liên kết với
nhau từ trên xuống dưới, và đó cũng là ý nghĩa của cái tên “học sâu”.
Trong quá trình thảo luận về các mạng nơ-ron sâu, ta cũng sẽ nhắc tới
các phương pháp truyền thống.
.. raw:: html
Hàm mục tiêu
~~~~~~~~~~~~
.. raw:: html
Trước đó, chúng tôi có giới thiệu học máy là việc “học từ kinh nghiệm”.
*Học* ở đây tức là việc *tiến bộ* ở một tác vụ nào đó theo thời gian.
Nhưng ai biết được như thế nào là tiến bộ? Thử tưởng tượng ta đang đề
xuất cập nhật mô hình, nhưng một số người có thể có bất đồng về việc bản
cập nhật này có giúp cải thiện mô hình hay không.
.. raw:: html
Để có thể phát triển một mô hình toán học chính quy cho học máy, chúng
ta cần những phép đo chính quy xem mô hình đang tốt (hoặc tệ) như thế
nào. Trong học máy, hay rộng hơn là lĩnh vực tối ưu hoá, ta gọi chúng là
các hàm mục tiêu (*objective function*). Theo quy ước, ta thường định
nghĩa các hàm tối ưu sao cho giá trị càng thấp thì mô hình càng tốt.
Nhưng đó cũng chỉ là một quy ước ngầm. Bạn có thể lấy một hàm :math:`f`
sao cho giá trị càng cao thì càng tốt, sau đó đặt một hàm tương đương
:math:`f' = -f`, có giá trị càng thấp thì mô hình càng tốt. Chính vì ta
mong muốn hàm có giá trị thấp, nó còn được gọi là *hàm mất mát* (*loss
function*) và *hàm chi phí* (*cost function*).
.. raw:: html
.. raw:: html
.. raw:: html
Khi muốn dự đoán một giá trị số, hàm mục tiêu phổ biến nhất là hàm bình
phương sai số :math:`(y-\hat{y})^2`. Với bài toán phân loại, mục tiêu
phổ biến nhất là cực tiểu hóa tỉ lệ lỗi, tức tỉ lệ mẫu mà dự đoán của mô
hình lệch với nhãn thực tế. Một vài hàm mục tiêu (ví dụ như bình phương
sai số) khá dễ tối ưu hóa. Các hàm khác (như tỉ lệ lỗi) lại khó tối ưu
hóa trực tiếp, có thể do các hàm này không khả vi hoặc những vấn đề
khác. Trong những trường hợp như vậy, ta thường tối ưu hóa một *hàm mục
tiêu thay thế* (*surrogate objective*).
.. raw:: html
Thông thường, hàm mất mát được định nghĩa theo các tham số mô hình và
phụ thuộc vào tập dữ liệu. Những giá trị tham số mô hình tốt nhất được
học bằng cách cực tiểu hóa hàm mất mát trên một *tập huấn luyện* bao gồm
các *mẫu* được thu thập cho việc huấn luyện. Tuy nhiên, mô hình hoạt
động tốt trên tập huấn luyện không có nghĩa là nó sẽ hoạt động tốt trên
dữ liệu kiểm tra (mà mô hình chưa nhìn thấy). Bởi vậy, ta thường chia dữ
liệu sẵn có thành hai phần: dữ liệu huấn luyện (để khớp các tham số mô
hình) và dữ liệu kiểm tra (được giữ lại cho việc đánh giá). Sau đó ta
quan sát hai đại lượng:
.. raw:: html
- **Lỗi huấn luyện:** Lỗi trên dữ liệu được dùng để huấn luyện mô hình.
Bạn có thể coi nó như điểm của một sinh viên trên bài thi thử để
chuẩn bị cho bài thi thật. Ngay cả khi kết quả thi thử khả quan,
không thể đảm bảo rằng bài thi thật sẽ đạt kết quả tốt.
- **Lỗi kiểm tra:** Đây là lỗi trên tập kiểm tra (không dùng để huấn
luyện mô hình). Đại lượng này có thể chênh lệch đáng kể so với lỗi
huấn luyện. Khi một mô hình hoạt động tốt trên tập huấn luyện nhưng
lại không có khả năng tổng quát hóa trên dữ liệu chưa gặp, ta nói
rằng mô hình bị *quá khớp* (overfit). Theo ngôn ngữ thường ngày, đây
là hiện tượng “học lệch tủ” khi kết quả bài thi thật rất kém mặc dù
có kết quả cao trong bài thi thử.
.. raw:: html
.. raw:: html
.. raw:: html
Các thuật toán tối ưu
~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Một khi ta có dữ liệu, một mô hình và một hàm mục tiêu rõ ràng, ta cần
một thuật toán có khả năng tìm kiếm các tham số khả dĩ tốt nhất để cực
tiểu hóa hàm mất mát. Các thuật toán tối ưu phổ biến nhất cho mạng
nơ-ron đều theo một hướng tiếp cận gọi là hạ gradient. Một cách ngắn
gọn, tại mỗi bước và với mỗi tham số, ta kiểm tra xem hàm mất mát thay
đổi như thế nào nếu ta thay đổi tham số đó bởi một lượng nhỏ. Sau đó các
tham số này được cập nhật theo hướng làm giảm hàm mất mát.
.. raw:: html
Các dạng Học Máy
----------------
.. raw:: html
Trong các mục tiếp theo, chúng ta sẽ thảo luận chi tiết hơn một số
*dạng* bài toán học máy. Cùng bắt đầu với một danh sách *các mục tiêu*,
tức một danh sách các tác vụ chúng ta muốn học máy thực hiện. Chú ý rằng
các mục tiêu sẽ được gắn liền với một tập các kỹ thuật để đạt được mục
tiêu đó, bao gồm các kiểu dữ liệu, mô hình, kỹ thuật huấn luyện, v.v.
Danh sách dưới đây là một tuyển tập các bài toán mà học máy có thể xử lý
nhằm tạo động lực cho độc giả, đồng thời cung cấp một ngôn ngữ chung khi
nói về những bài toán khác xuyên suốt cuốn sách.
.. raw:: html
.. raw:: html
.. raw:: html
Học có giám sát
~~~~~~~~~~~~~~~
.. raw:: html
Học có giám sát giải quyết tác vụ dự đoán *mục tiêu* với *đầu vào* cho
trước. Các mục tiêu, thường được gọi là *nhãn*, phần lớn được ký hiệu
bằng :math:`y`. Dữ liệu đầu vào, thường được gọi là *đặc trưng* hoặc
hiệp biến, thông thường được ký hiệu là :math:`\mathbf{x}`. Mỗi cặp (đầu
vào, mục tiêu) được gọi là một *mẫu*. Thi thoảng, khi văn cảnh rõ ràng
hơn, chúng ta có thể sử dụng thuật ngữ *các mẫu* để chỉ một tập các đầu
vào, ngay cả khi chưa xác định được mục tiêu tương ứng. Ta ký hiệu một
mẫu cụ thể với một chỉ số dưới, thường là :math:`i`, ví dụ
(:math:`\mathbf{x}_i, y_i`). Một tập dữ liệu là một tập của :math:`n`
mẫu :math:`\{\mathbf{x}_i, y_i\}_{i=1}^n`. Mục đích của chúng ta là xây
dựng một mô hình :math:`f_\theta` ánh xạ đầu vào bất kỳ
:math:`\mathbf{x}_i` tới một dự đoán :math:`f_{\theta}(\mathbf{x}_i)`.
.. raw:: html
Một ví dụ cụ thể hơn, trong lĩnh vực chăm sóc sức khoẻ, chúng ta có thể
muốn dự đoán liệu một bệnh nhân có bị đau tim hay không. Việc *bị đau
tim* hay *không bị đau tim* sẽ là nhãn :math:`y`. Dữ liệu đầu vào
:math:`\mathbf{x}` có thể là các dấu hiệu quan trọng như nhịp tim, huyết
áp tâm trương và tâm thu, v.v.
.. raw:: html
Sự giám sát xuất hiện ở đây bởi để chọn các tham số :math:`\theta`,
chúng ta (các giám sát viên) cung cấp cho mô hình một tập dữ liệu chứa
các *mẫu được gán nhãn* (:math:`\mathbf{x}_i, y_i`), ở đó mỗi mẫu
:math:`\mathbf{x}_i` tương ứng một nhãn cho trước.
.. raw:: html
Theo thuật ngữ xác suất, ta thường quan tâm tới việc đánh giá xác suất
có điều kiện :math:`P(y|\mathbf{x})`. Dù chỉ là một trong số nhiều mô
hình trong học máy, học có giám sát là nhân tố chính đem đến sự thành
công cho các ứng dụng của học máy trong công nghiệp. Một phần vì rất
nhiều tác vụ có thể được mô tả dưới dạng ước lượng xác suất của một đại
lượng chưa biết cho trước trong một tập dữ liệu cụ thể:
.. raw:: html
- Dự đoán có bị ung thư hay không cho trước một bức ảnh CT.
- Dự đoán bản dịch chính xác trong tiếng Pháp cho trước một câu trong
tiếng Anh.
- Dự đoán giá của cổ phiếu trong tháng tới dựa trên dữ liệu báo cáo tài
chính của tháng này.
.. raw:: html
.. raw:: html
.. raw:: html
Ngay cả với mô tả đơn giản là “dự đoán mục tiêu từ đầu vào”, học có giám
sát đã có nhiều hình thái đa dạng và đòi hỏi đưa ra nhiều quyết định mô
hình hoá khác nhau, tuỳ thuộc vào kiểu, kích thước, số lượng của cặp đầu
vào và đầu ra cũng như các yếu tố khác. Ví dụ, ta sử dụng các mô hình
khác nhau để xử lý các chuỗi (như chuỗi ký tự hay dữ liệu chuỗi thời
gian) và các biểu diễn vector với chiều dài cố định. Chúng ta sẽ đào sâu
vào rất nhiều bài toán dạng này thông qua chín phần đầu của cuốn sách.
.. raw:: html
Một cách dễ hiểu, quá trình học gồm những bước sau: Lấy một tập mẫu lớn
với các hiệp biến đã biết trước. Từ đó chọn ra một tập con ngẫu nhiên và
thu thập các nhãn gốc cho chúng. Đôi khi những nhãn này có thể đã có sẵn
trong dữ liệu (ví dụ, liệu bệnh nhân đã qua đời trong năm tiếp theo?).
Trong trường hợp khác, chúng ta cần thuê người gán nhãn cho dữ liệu (ví
dụ, gán một bức ảnh vào một hạng mục nào đó).
.. raw:: html
Những đầu vào và nhãn tương ứng này cùng tạo nên tập huấn luyện. Chúng
ta đưa tập dữ liệu huấn luyện vào một thuật toán học có giám sát – một
hàm số với đầu vào là tập dữ liệu và đầu ra là một hàm số khác thể hiện
*mô hình đã học được*. Cuối cùng, ta có thể đưa dữ liệu chưa nhìn thấy
vào mô hình đã học được, sử dụng đầu ra của nó như là giá trị dự đoán
của các nhãn tương ứng. Toàn bộ quá trình được mô tả trong
:numref:`fig_supervised_learning`.
.. raw:: html
.. raw:: html
.. raw:: html
.. _fig_supervised_learning:
.. figure:: ../img/supervised-learning.svg
Học có giám sát.
.. raw:: html
Hồi quy
^^^^^^^
.. raw:: html
Có lẽ tác vụ học có giám sát đơn giản nhất là *hồi quy*. Xét ví dụ một
tập dữ liệu thu thập được từ cơ sở dữ liệu buôn bán nhà. Chúng ta có thể
xây dựng một bảng dữ liệu, ở đó mỗi hàng tương ứng với một nhà và mỗi
cột tương ứng với một thuộc tính liên quan nào đó, chẳng hạn như diện
tích nhà, số lượng phòng ngủ, số lượng phòng tắm và thời gian (theo
phút) để đi bộ tới trung tâm thành phố. Trong tập dữ liệu này, mỗi *mẫu*
là một căn nhà cụ thể và *vector đặc trưng* tương ứng là một hàng trong
bảng.
.. raw:: html
Nếu bạn sống ở New York hoặc San Francisco và bạn không phải là CEO của
Amazon, Google, Microsoft hay Facebook, thì vector đặc trưng (diện tích,
số phòng ngủ, số phòng tắm, khoảng cách đi bộ) của căn nhà của bạn có
thể có dạng :math:`[100, 0, 0.5, 60]`. Tuy nhiên, nếu bạn sống ở
Pittsburgh, vector đó có thể là :math:`[3000, 4, 3, 10]`. Các vector đặc
trưng như vậy là thiết yếu trong hầu hết các thuật toán học máy cổ điển.
Chúng ta sẽ tiếp tục ký hiệu vector đặc trưng tương ứng với bất ký mẫu
:math:`i` nào bởi :math:`\mathbf{x}_i` và có thể đặt :math:`X` là bảng
chứa tất cả các vector đặc trưng.
.. raw:: html
Để xác định một bài toán là *hồi quy* hay không, ta dựa vào đầu ra của
nó. Chẳng hạn, bạn đang khảo sát thị trường cho một căn nhà mới. Bạn có
thể ước lượng giá thị trường của một căn nhà khi biết những đặc trưng
phía trên. Giá trị mục tiêu, hay giá bán của căn nhà, là một *số thực*.
Nếu bạn còn nhớ định nghĩa toán học của số thực, bạn có thể đang cảm
thấy băn khoăn. Nhà đất có lẽ không bao giờ bán với giá được tính bằng
các phần nhỏ hơn cent, chứ đừng nói đến việc giá bán được biểu diễn bằng
các số vô tỉ. Trong những trường hợp này, khi mục tiêu thực sự là các số
rời rạc, nhưng việc làm tròn có thể chấp nhận được, chúng ta sẽ lạm dụng
cách dùng từ một chút để tiếp tục mô tả đầu ra và mục tiêu là các số
thực.
.. raw:: html
.. raw:: html
.. raw:: html
Ta ký hiệu mục tiêu bất kỳ là :math:`y_i` (tương ứng với mẫu
:math:`\mathbf{x}_i`) và tập tất cả các mục tiêu là :math:`\mathbf{y}`
(tương ứng với tất cả các mẫu :math:`X`). Khi các mục tiêu mang các giá
trị bất kỳ trong một khoảng nào đó, chúng ta gọi đây là bài toán hồi
quy. Mục đích của chúng ta là tạo ra một mô hình mà các dự đoán của nó
xấp xỉ với các giá trị mục tiêu thực sự. Chúng ta ký hiệu dự đoán mục
tiêu của một mẫu là :math:`\hat{y}_i`. Đừng quá lo lắng nếu các ký hiệu
đang làm bạn nản chí. Chúng ta sẽ tìm hiểu kỹ từng ký hiệu trong các
chương tiếp theo.
.. raw:: html
Rất nhiều bài toán thực tế là các bài toán hồi quy. Dự đoán điểm đánh
giá của một người dùng cho một bộ phim có thể được coi là một bài toán
hồi quy và nếu bạn thiết kế một thuật toán vĩ đại để đạt được điều này
vào năm 2009, bạn có thể đã giành `giải thưởng Netflix một triệu
Đô-la `__. Dự đoán thời
gian nằm viện của một bệnh nhân cũng là một bài toán hồi quy. Một quy
tắc dễ nhớ là khi ta phải trả lời câu hỏi *bao nhiêu* (*bao lâu*, *bao
xa*, v.v.), khá chắc chắn đó là bài toán hồi quy.
.. raw:: html
- “Ca phẫu thuật này sẽ mất bao lâu?”: *hồi quy*
- “Có bao nhiêu chú chó trong bức ảnh?”: *hồi quy*
.. raw:: html
Tuy nhiên, nếu bạn có thể diễn đạt bài toán của bạn bằng câu hỏi “Đây có
phải là \_?” thì khả năng cao đó là bài toán phân loại, một dạng khác
của bài toán học có giám sát mà chúng ta sẽ thảo luận trong phần tiếp
theo. Ngay cả khi bạn chưa từng làm việc với học máy, bạn có thể đã làm
việc với các bài toán hồi quy một cách không chính thức. Ví dụ, hãy
tưởng tượng bạn cần sửa chữa đường ống cống và người thợ đã dành
:math:`x_1=3` giờ để thông cống rồi gửi hoá đơn :math:`y_1 = \$350`. Bây
giờ bạn của bạn thuê cũng thuê người thợ đó trong :math:`x_2 = 2` tiếng
và cô ấy nhận được hoá đơn là :math:`y_2 = \$250`. Nếu một người khác
sau đó hỏi bạn giá dự tính phải trả cho việc thông cống, bạn có thể có
một vài giả sử có lý, chẳng hạn như mất nhiều thời gian sẽ tốn nhiều
tiền hơn. Bạn cũng có thể giả sử rằng có một mức phí cơ bản và sau đó
người thợ tính tiền theo giờ. Nếu giả sử này là đúng, thì với hai điểm
dữ liệu trên, bạn đã có thể tính được cách mà người thợ tính tiền công:
$100 cho mỗi giờ cộng với $50 để có mặt tại nhà bạn. Nếu bạn theo được
logic tới đây thì bạn đã hiểu ý tưởng tổng quan của hồi quy tuyến tính
(và bạn đã vô tình thiết kế một mô hình tuyến tính với thành phần điều
chỉnh).
.. raw:: html
.. raw:: html
.. raw:: html
Trong trường hợp này, chúng ta có thể tìm được các tham số sao cho mô
hình ước tính chính xác được chi phí người thợ sửa ống cống đưa ra. Đôi
khi việc này là không khả thi, ví dụ một biến thể nào đó gây ra bởi các
yếu tố ngoài hai đặc trưng kể trên. Trong những trường hợp này, ta sẽ cố
học các mô hình sao cho khoảng cách giữa các giá trị dự đoán và các giá
trị thực sự được cực tiểu hoá. Trong hầu hết các chương, chúng ta sẽ tập
trong vào một trong hai hàm mất mát phổ biến nhất: hàm `mất mát
L1 `__,
ở đó
.. math:: l(y, y') = \sum_i |y_i-y_i'|
.. raw:: html
và hàm thứ hai là mất mát trung bình bình phương nhỏ nhất, hoặc `mất mát
L2 `__,
ở đó
.. math:: l(y, y') = \sum_i (y_i - y_i')^2.
.. raw:: html
Như chúng ta sẽ thấy về sau, mất mát :math:`L_2` tương ứng với giả sử
rằng dữ liệu của chúng ta có nhiễu Gauss, trong khi mất mát :math:`L_1`
tương ứng với giả sử nhiễu đến từ một phân phối Laplace.
.. raw:: html
.. raw:: html
.. raw:: html
Phân loại
^^^^^^^^^
.. raw:: html
Trong khi các mô hình hồi quy hiệu quả trong việc trả lời các câu hỏi
*có bao nhiêu?*, rất nhiều bài toán không phù hợp với nhóm câu hỏi này.
Ví dụ, một ngân hàng muốn thêm chức năng quét ngân phiếu trong ứng dụng
di động của họ. Tác vụ này bao gồm việc khách hàng chụp một tấm ngân
phiếu với camera của điện thoại và mô hình học máy cần tự động hiểu nội
dung chữ trong bức ảnh. Hiểu được cả chữ viết tay sẽ giúp ứng dụng hoạt
động càng mạnh mẽ hơn. Kiểu hệ thống này được gọi là nhận dạng ký tự
quang học (*optical character recognition* – OCR), và kiểu bài toán mà
nó giải quyết được gọi là *phân loại* (*classification*). Nó được giải
quyết với một tập các thuật toán khác với thuật toán dùng trong hồi quy
(mặc dù có nhiều kỹ thuật chung).
.. raw:: html
Trong bài toán phân loại, ta muốn mô hình nhìn vào một vector đặc trưng,
ví dụ như các giá trị điểm ảnh trong một bức ảnh, và sau đó dự đoán mẫu
đó rơi vào hạng mục (được gọi là *lớp*) nào trong một tập các lựa chọn
(rời rạc). Với chữ số viết tay, ta có thể có 10 lớp tương ứng với các
chữ số từ 0 tới 9. Dạng đơn giản nhất của phân loại là khi chỉ có hai
lớp, khi đó ta gọi bài toán này là phân loại nhị phân. Ví dụ, tập dữ
liệu :math:`X` có thể chứa các bức ảnh động vật và các *nhãn* :math:`Y`
có thể là các lớp :math:`\mathrm{\{chó, mèo\}}`. Trong khi với bài toán
hồi quy, ta cần tìm một *bộ hồi quy* để đưa ra một giá trị thực
:math:`\hat{y}`, thì với bài toán phân loại, ta tìm một *bộ phân loại*
để dự đoán lớp :math:`\hat{y}`.
.. raw:: html
Khi cuốn sách đi sâu hơn vào các vấn đề kỹ thuật, chúng ta sẽ bàn về các
lý do tại sao lại khó hơn để tối ưu hoá một mô hình mà đầu ra là các giá
trị hạng mục rời rạc, ví dụ, *mèo* hoặc *chó*. Trong những trường hợp
này, thường sẽ dễ hơn khi thay vào đó, ta biểu diễn mô hình dưới ngôn
ngữ xác suất. Cho trước một mẫu :math:`\mathbf{x}`, mô hình cần gán một
giá trị xác suất :math:`\hat{y}_k` cho mỗi nhãn :math:`k`. Vì là các giá
trị xác suất, chúng phải là các số dương có tổng bằng :math:`1`. Bởi
vậy, ta chỉ cần :math:`K-1` số để gán xác suất cho :math:`K` hạng mục.
Việc này dễ nhận thấy đối với phân loại nhị phân. Nếu một đồng xu không
đều có xác suất ra mặt ngửa là :math:`0.6` (:math:`60\%`), thì xác suất
ra mặt sấp là :math:`0.4` (:math:`40\%`). Trở lại với ví dụ phân loại
động vật, một bộ phân loại có thể nhìn một bức ảnh và đưa ra xác suất để
bức ảnh đó là mèo :math:`P(y=\text{mèo} \mid x) = 0.9`. Chúng ta có thể
diễn giải giá trị này tương ứng với việc bộ phân loại :math:`90\%` tin
rằng bức ảnh đó chứa một con mèo. Giá trị xác suất của lớp được dự đoán
truyền đạt một ý niệm về sự không chắc chắn. Tuy nhiên, đó không phải là
ý niệm duy nhất về sự không chắc chắn, chúng ta sẽ thảo luận thêm về
những loại khác trong các chương nâng cao.
.. raw:: html
Khi có nhiều hơn hai lớp, ta gọi bài toán này là *phân loại đa lớp*. Bài
toán phân loại chữ viết tay ``[0, 1, 2, 3 ... 9, a, b, c, ...]`` là một
trong số các ví dụ điển hình. Trong khi các hàm mất mát thường được sử
dụng trong các bài toán hồi quy là hàm mất mát L1 hoặc L2, hàm mất mát
phổ biến cho bài toán phân loại được gọi là entropy chéo
(*cross-entropy*), hàm tương ứng trong MXNet Gluon có thể tìm được `tại
đây `__
.. raw:: html
.. raw:: html
.. raw:: html
Lưu ý rằng lớp có khả năng xảy ra nhất theo dự đoán của mô hình không
nhất thiết là lớp mà ta quyết định sử dụng. Giả sử bạn tìm được một cây
nấm rất đẹp trong sân nhà như hình :numref:`fig_death_cap`.
.. raw:: html
.. _fig_death_cap:
.. figure:: ../img/death_cap.jpg
:width: 200px
Nấm độc—đừng ăn!
.. raw:: html
Bây giờ giả sử ta đã xây dựng một bộ phân loại và huấn luyện nó để dự
đoán liệu một cây nấm có độc hay không dựa trên ảnh chụp. Giả sử bộ phân
loại phát hiện chất độc đưa ra
:math:`P(y=\mathrm{\text{nấm độc}}|\mathrm{\text{bức ảnh}}) = 0.2`. Nói
cách khác, bộ phân loại này chắc chắn rằng :math:`80\%` cây này *không
phải* nấm độc. Dù vậy, đừng dại mà ăn nhé. Vì việc có bữa tối ngon lành
không đáng gì so với rủi ro :math:`20\%` sẽ chết vì nấm độc. Nói cách
khác, hậu quả của *rủi ro không chắc chắn* nghiêm trọng hơn nhiều so với
lợi ích thu được. Ta có thể nhìn việc này theo khía cạnh lý thuyết. Về
cơ bản, ta cần tính toán rủi ro kỳ vọng mà mình sẽ gánh chịu, ví dụ, ta
nhân xác suất xảy ra kết quả đó với lợi ích (hoặc hậu quả) đi liền tương
ứng:
.. math:: L(\mathrm{\text{hành động}}| x) = E_{y \sim p(y| x)}[\mathrm{\text{mất_mát}}(\mathrm{\text{hành động}},y)].
.. raw:: html
Do đó, mất mát :math:`L` do ăn phải nấm là
:math:`L(a=\mathrm{ăn}| x) = 0.2 * \infty + 0.8 * 0 = \infty`, mặc dù
phí tổn do bỏ nấm đi là
:math:`L(a=\mathrm{\text{bỏ đi}}| x) = 0.2 * 0 + 0.8 * 1 = 0.8`.
.. raw:: html
Sự thận trọng của chúng ta là chính đáng: như bất kỳ nhà nghiên cứu nấm
nào cũng sẽ nói, cây nấm ở trên thực sự *là* nấm độc. Việc phân loại có
thể còn phức tạp hơn nhiều so với phân loại nhị phân, đa lớp, hoặc thậm
chí đa nhãn. Ví dụ, có vài biến thể của phân loại để xử lý vấn đề phân
cấp bậc (*hierarchy*). Việc phân cấp giả định rằng tồn tại các mối quan
hệ giữa các lớp với nhau. Vậy nên không phải tất cả các lỗi đều như
nhau—nếu bắt buộc có lỗi, ta sẽ mong rằng các mẫu bị phân loại nhầm
thành một lớp họ hàng thay vì một lớp khác xa nào đó. Thông thường, việc
này được gọi là *phân loại cấp bậc* (*hierarchical classification*). Một
trong những ví dụ đầu tiên về việc xây dựng hệ thống phân cấp là từ
`Linnaeus `__, người đã sắp
xếp các loại động vật theo một hệ thống phân cấp.
.. raw:: html
Trong trường hợp phân loại động vật, cũng không tệ lắm nếu phân loại
nhầm hai giống chó xù poodle và schnauzer với nhau, nhưng sẽ rất nghiêm
trọng nếu ta nhầm lẫn chó poodle với một con khủng long. Hệ phân cấp nào
là phù hợp phụ thuộc vào việc ta dự định dùng mô hình như thế nào. Ví
dụ, rắn đuôi chuông và rắn sọc không độc có thể nằm gần nhau trong cây
phả hệ, nhưng phân loại nhầm hai loài này có thể dẫn tới hậu quả chết
người.
.. raw:: html
.. raw:: html
.. raw:: html
Gán thẻ
^^^^^^^
.. raw:: html
Một vài bài toán phân loại không phù hợp với các mô hình phân loại nhị
phân hoặc đa lớp. Ví dụ, chúng ta có thể huấn luyện một bộ phân loại nhị
phân thông thường để phân loại mèo và chó. Với khả năng hiện tại của thị
giác máy tính, việc này có thể được thực hiện dễ dàng bằng các công cụ
sẵn có. Tuy nhiên, bất kể mô hình của bạn chính xác đến đâu, nó có thể
gặp rắc rối khi thấy bức ảnh Những Nhạc Sĩ thành Bremen.
.. raw:: html
.. _subsec_recommender_systems:
.. figure:: ../img/stackedanimals.jpg
:width: 300px
Mèo, gà trống, chó và lừa
.. raw:: html
Bạn có thể thấy trong ảnh có một con mèo, một con gà trống, một con chó,
một con lừa và một con chim, cùng với một vài cái cây ở hậu cảnh. Tuỳ
vào mục đích cuối cùng của mô hình, sẽ không hợp lý nếu coi đây là một
bài toán phân loại nhị phân. Thay vào đó, có thể chúng ta muốn cung cấp
cho mô hình tuỳ chọn để mô tả bức ảnh gồm một con mèo *và* một con chó
*và* một con lừa *và* một con gà trống *và* một con chim.
.. raw:: html
Bài toán học để dự đoán các lớp *không xung khắc* được gọi là phân loại
đa nhãn. Các bài toán tự động gán thẻ là các ví dụ điển hình của phân
loại đa nhãn. Nghĩ về các thẻ mà một người có thể gán cho một blog công
nghệ, ví dụ “học máy”, “công nghệ”, “ngôn ngữ lập trình”, “linux”, “điện
toán đám mây” hay “AWS”. Một bài báo thông thường có thể có từ 5-10 thẻ
bởi các khái niệm này có liên quan với nhau. Các bài về “điện toán đám
mây” khả năng cao đề cập “AWS” và các bài về “học máy” cũng có thể dính
dáng tới “ngôn ngữ lập trình”.
.. raw:: html
.. raw:: html
Ta cũng phải xử lý các vấn đề này trong nghiên cứu y sinh, ở đó việc gán
thẻ cho các bài báo một cách chính xác là quan trọng bởi nó cho phép các
nhà nghiên cứu tổng hợp đầy đủ các tài liệu liên quan. Tại Thư viện Y
khoa Quốc gia, một số chuyên gia gán nhãn duyệt qua tất cả các bài báo
được lưu trên PubMed để gán chúng với các thuật ngữ y khoa (*MeSH*) liên
quan – một bộ sưu tập với khoảng 28 nghìn thẻ. Đây là một quá trình tốn
thời gian và những người gán nhãn thường bị trễ một năm kể từ khi lưu
trữ cho tới lúc gán thẻ. Học máy có thể được sử dụng ở đây để cung cấp
các thẻ tạm thời cho tới khi được kiểm chứng lại một cách thủ công. Thực
vậy, BioASQ đã `tổ chức một cuộc thi `__ dành riêng
cho việc này.
.. raw:: html
.. raw:: html
.. raw:: html
Tìm kiếm và xếp hạng
^^^^^^^^^^^^^^^^^^^^
.. raw:: html
Đôi khi ta không chỉ muốn gán một lớp hoặc một giá trị vào một mẫu.
Trong lĩnh vực thu thập thông tin (*information retrieval*), ta muốn gán
thứ hạng cho một tập các mẫu. Lấy ví dụ trong tìm kiếm trang web, mục
tiêu không chỉ dừng lại ở việc xác định liệu một trang web có liên quan
tới từ khoá tìm kiếm, mà xa hơn, trang web nào trong số vô vàn kết quả
trả về *liên quan nhất* tới người dùng. Chúng ta rất quan tâm đến thứ tự
của các kết quả tìm kiếm và thuật toán cần đưa ra các tập con có thứ tự
từ những thành phần trong một tập lớn hơn. Nói cách khác, nếu được hỏi
đưa ra năm chữ cái từ bảng chữ cái, hai kết quả ``A B C D E`` và
``C A B E D`` là khác nhau. Ngay cả khi các phần tử trong hai tập kết
quả là như nhau, thứ tự các phần tử trong mỗi tập mới là điều quan
trọng.
.. raw:: html
Một giải pháp khả dĩ cho bài toán này là trước tiên gán cho mỗi phần tử
trong tập hợp một số điểm về sự phù hợp và sau đó trả về những phẩn tử
có điểm cao nhất. `PageRank `__,
vũ khí bí mật đằng sau cỗ máy tìm kiếm của Google, là một trong những ví
dụ đầu tiên của hệ thống tính điểm kiểu này. Tuy nhiên, điều bất thường
là nó không phụ thuộc vào từ khoá tìm kiếm. Chúng phụ thuộc vào một bộ
lọc đơn giản để xác định tập hợp các trang phù hợp rồi sau đó mới dùng
PageRank để sắp xếp các kết quả có chứa cụm tìm kiếm. Có cả những hội
thảo khoa học chuyên nghiên cứu về lĩnh vực này.
.. raw:: html
.. raw:: html
.. raw:: html
Hệ thống gợi ý
^^^^^^^^^^^^^^
.. raw:: html
Hệ thống gợi ý là một bài toán khác liên quan đến tìm kiếm và xếp hạng.
Tuy có chung mục đích hiển thị một tập các kết quả liên quan tới người
dùng, hệ thống gợi ý nhấn mạnh việc *cá nhân hoá* cho từng người dùng cụ
thể. Ví dụ khi gợi ý phim ảnh, kết quả gợi ý cho một fan của phim khoa
học viễn tưởng và cho một người sành sỏi hài Peter Sellers có thể khác
nhau một cách đáng kể. Các bài toán gợi ý khác có thể bao gồm hệ thống
gợi ý sản phẩm bán lẻ, âm nhạc hoặc tin tức.
.. raw:: html
Trong một vài trường hợp, khách hàng cung cấp phản hồi trực tiếp
(*explicit feedback*) thể hiện mức độ yêu thích một sản phẩm cụ thể (ví
dụ các đánh giá sản phẩm và phản hồi trên Amazon, IMDB, Goodreads,
v.v.). Trong những trường hợp khác, họ cung cấp phản hồi gián tiếp
(*implicit feedback*), ví dụ như khi bỏ qua bài hát trong danh sách chơi
nhạc. Những bài hát đó có thể đã không làm hài lòng người nghe, hoặc chỉ
đơn thuần là không phù hợp với bối cảnh. Diễn giải một cách đơn giản,
những hệ thống này được huấn luyện để ước lượng một điểm :math:`y_{ij}`
nào đó, ví dụ như ước lượng điểm đánh giá hoặc ước lượng xác suất mua
hàng, của một người dùng :math:`u_i` tới một sản phẩm :math:`p_j`.
.. raw:: html
Với một mô hình như vậy, cho một người dùng bất kỳ, ta có thể thu thập
một tập các sản phẩm với điểm :math:`y_{ij}` lớn nhất để gợi ý cho khách
hàng. Các hệ thống đang vận hành trong thương mại còn cao cấp hơn nữa.
Chúng sử dụng hành vi của người dùng và các thuộc tính sản phẩm để tính
điểm. :numref:`fig_deeplearning_amazon` là một ví dụ về các cuốn sách
học sâu được gợi ý bởi Amazon dựa trên các thuật toán cá nhân hoá được
điều chỉnh phù hợp với sở thích của tác giả cuốn sách này.
.. raw:: html
.. _fig_deeplearning_amazon:
.. figure:: ../img/deeplearning_amazon.png
Các sách học sâu được gợi ý bởi Amazon.
.. raw:: html
Mặc dù có giá trị kinh tế lớn, các hệ thống gợi ý được xây dựng đơn
thuần theo các mô hình dự đoán về bản chất có những hạn chế nghiêm
trọng. Ban đầu, ta chỉ quan sát các *phản hồi được kiểm duyệt*. Người
dùng thường có xu hướng đánh giá các bộ phim họ thực sự thích hoặc ghét:
bạn có thể để ý rằng các bộ phim nhận được rất nhiều đánh giá 5 và 1 sao
nhưng rất ít các bộ phim với 3 sao. Hơn nữa, thói quen mua hàng hiện tại
thường là kết quả của thuật toán gợi ý đang được dùng, nhưng các thuật
toán gợi ý không luôn để ý đến chi tiết này. Vì vậy, các vòng phản hồi
(*feedback loop*) luẩn quẩn có thể xảy ra khi mà hệ thống gợi ý đẩy lên
một sản phẩm và cho rằng sản phẩm này tốt hơn (do được mua nhiều hơn),
từ đó sản phẩm này lại được hệ thống gợi ý thường xuyên hơn nữa. Rất
nhiều trong số các vấn đề về cách xử lý với kiểm duyệt, động cơ của việc
đánh giá và vòng phản hồi là các câu hỏi quan trọng cho nghiên cứu.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Học chuỗi
^^^^^^^^^
.. raw:: html
.. raw:: html
Cho tới giờ, chúng ta đã gặp các bài toán mà ở đó mô hình nhận đầu vào
với kích thước cố định và đưa ra kết quả cũng với kích thước cố định.
Trước đây chúng ta xem xét dự đoán giá nhà từ một tập các đặc trưng cố
định: diện tích, số phòng ngủ, số phòng tắm và thời gian đi bộ tới trung
tâm thành phố. Ta cũng đã thảo luận cách ánh xạ từ một bức ảnh (với kích
thước cố định) tới các dự đoán xác suất nó thuộc vào một tập cố định các
lớp, hoặc lấy một mã người dùng và mã sản phẩm để dự đoán số sao đánh
giá. Trong những trường hợp này, một khi chúng ta đưa cho mô hình một
đầu vào có độ dài cố định để dự đoán một đầu ra, mô hình ngay lập tức
“quên” dữ liệu nó vừa thấy.
.. raw:: html
Việc này không ảnh hưởng nhiều nếu mọi đầu vào đều có cùng kích thước và
nếu các đầu vào liên tiếp thật sự không liên quan đến nhau. Nhưng ta sẽ
xử lý các đoạn video như thế nào khi mỗi đoạn có thể có số lượng khung
hình khác nhau? Và dự đoán của chúng ta về việc gì đang xảy ra ở mỗi
khung hình có thể sẽ chính xác hơn nếu ta xem xét cả các khung hình kề
nó. Hiện tượng tương tự xảy ra trong ngôn ngữ. Một bài toán học sâu phổ
biến là dịch máy (*machine translation*): tác vụ lấy đầu vào là các câu
trong một ngôn ngữ nguồn và trả về bản dịch của chúng ở một ngôn ngữ
khác.
.. raw:: html
Các bài toán này cũng xảy ra trong y khoa. Với một mô hình theo dõi bệnh
nhân trong phòng hồi sức tích cực, ta có thể muốn nó đưa ra cảnh báo nếu
nguy cơ tử vong của họ trong 24 giờ tới vượt một ngưỡng nào đó. Dĩ
nhiên, ta chắc chắn không muốn mô mình này vứt bỏ mọi số liệu trong quá
khứ và chỉ đưa ra dự đoán dựa trên các thông số mới nhất.
.. raw:: html
Những bài toán này nằm trong những ứng dụng thú vị nhất của học máy và
chúng là các ví dụ của *học chuỗi*. Chúng đòi hỏi một mô hình có khả
năng nhận chuỗi các đầu vào hoặc dự đoán chuỗi các đầu ra. Thậm chí có
mô hình phải thỏa mãn cả hai tiêu chí đó, và những bài toán có cấu trúc
như vậy còn được gọi là ``seq2seq`` (*sequence to sequence: chuỗi sang
chuỗi*). Dịch ngôn ngữ là một bài toán ``seq2seq``. Chuyển một bài nói
về dạng văn bản cũng là một bài toán ``seq2seq``. Mặc dù không thể xét
hết mọi dạng của biến đổi chuỗi, có một vài trường hợp đặc biệt đáng
được lưu tâm:
.. raw:: html
.. raw:: html
.. raw:: html
**Gán thẻ và Phân tích cú pháp**. Đây là bài toán chú thích cho một
chuỗi văn bản. Nói cách khác, số lượng đầu vào và đầu ra là như nhau. Ví
dụ, ta có thể muốn biết vị trí của động từ và chủ ngữ. Hoặc ta cũng có
thể muốn biết từ nào là danh từ riêng. Mục tiêu tổng quát là phân tích
và chú thích văn bản dựa trên các giả định về cấu trúc và ngữ pháp. Việc
này nghe có vẻ phức tạp hơn thực tế. Dưới đây là một ví dụ rất đơn giản
về việc chú thích một câu bằng các thẻ đánh dấu danh từ riêng.
.. code:: text
Tom has dinner in Washington with Sally.
Ent - - - Ent - Ent
.. raw:: html
**Tự động nhận dạng giọng nói**. Với nhận dạng giọng nói, chuỗi đầu vào
:math:`\mathbf{x}` là một bản thu âm giọng nói của một người
(:numref:`fig_speech`) và đầu ra :math:`y` là một văn bản ghi lại
những gì người đó nói. Thử thách ở đây là việc số lượng các khung âm
thanh (âm thanh thường được lấy mẫu ở 8kHz or 16kHz) nhiều hơn hẳn so
với số lượng từ, nghĩa là không tồn tại một phép ánh xạ 1:1 nào giữa các
khung âm thanh và các từ, bởi một từ có thể tương ứng với hàng ngàn mẫu
âm thanh. Có các bài toán ``seq2seq`` mà đầu ra ngắn hơn rất nhiều so
với đầu vào.
.. _fig_speech:
.. figure:: ../img/speech.png
:width: 700px
``-D-e-e-p- L-ea-r-ni-ng-``
.. raw:: html
**Chuyển văn bản thành giọng nói** (*Text-to-Speech* hay TTS) là bài
toán ngược của bài toán nhận dạng giọng nói. Nói cách khác, đầu vào
:math:`\mathbf{x}` là văn bản và đầu ra :math:`y` là tệp tin âm thanh.
Trong trường hợp này, đầu ra *dài hơn rất nhiều* so với đầu vào. Việc
nhận dạng các tệp tin âm thanh chất lượng kém không khó với *con người*
nhưng lại không hề đơn giản với máy tính.
.. raw:: html
**Dịch máy**. Khác với nhận dạng giọng nói, khi các đầu vào và đầu ra
tương ứng có cùng thứ tự (sau khi căn chỉnh), trong dịch máy việc đảo
thứ tự lại có thể rất quan trọng. Nói cách khác, ta vẫn chuyển đổi từ
chuỗi này sang chuỗi khác, nhưng ta không thể giả định số lượng đầu vào
và đầu ra cũng như thứ tự của các điểm dữ liệu tương ứng là giống nhau.
Xét ví dụ minh họa dưới đây về trật tự từ kỳ lạ khi dịch tiếng Anh sang
tiếng Việt.
.. code:: text
Tiếng Anh: Did you already check out this excellent tutorial?
Tiếng Việt: Bạn đã xem qua hướng dẫn tuyệt vời này chưa?
Căn chỉnh sai: Đã chưa bạn xem qua này tuyệt vời hướng dẫn?
.. raw:: html
Rất nhiều bài toán liên quan xuất hiện trong các tác vụ học khác. Chẳng
hạn, xác định thứ tự người dùng đọc một trang mạng là một bài toán phân
tích bố cục hai chiều. Các bài toán hội thoại thì chứa đủ các loại vấn
đề phức tạp khác, như việc xác định câu nói tiếp theo đòi hỏi kiến thức
thực tế cũng như trạng thái trước đó rất lâu của cuộc hội thoại. Đây là
một lĩnh vực nghiên cứu đang phát triển.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Học không giám sát
~~~~~~~~~~~~~~~~~~
.. raw:: html
Tất cả các ví dụ từ trước đến nay đều liên quan tới lĩnh vực *Học có
giám sát*, ví dụ, những trường hợp mà ta nạp vào mô hình lượng dữ liệu
khổng lồ gồm cả các đặc trưng và giá trị mục tiêu tương ứng. Bạn có thể
tưởng tượng người học có giám sát giống như anh nhân viên đang làm một
công việc có tính chuyên môn cao cùng với một ông sếp cực kỳ hãm tài.
Ông sếp đứng ngay bên cạnh bạn và chỉ bảo chi tiết những điều phải làm
trong từng tình huống một cho tới khi bạn học được cách liên kết các
tình huống đó với hành động tương ứng. Làm việc với ông sếp kiểu này có
vẻ khá là chán. Nhưng ở một khía cạnh khác, thì làm ông sếp này hài lòng
rất là dễ dàng. Bạn chỉ việc nhận ra những khuôn mẫu thật nhanh và bắt
chước lại những hành động theo khuôn mẫu đó.
.. raw:: html
Trong một hoàn cảnh hoàn toàn trái ngược, nếu gặp phải người sếp không
biết họ muốn bạn làm cái gì thì sẽ rất là khó chịu. Tuy nhiên, nếu định
trở thành nhà khoa học dữ liệu, tốt nhất hãy làm quen với điều này. Ông
ta có thể chỉ đưa cho bạn một đống dữ liệu to sụ và bảo *sử dụng khoa
học dữ liệu với cái này đi!* Nghe có vẻ khá mơ hồ bởi vì đúng là nó mơ
hồ thật. Chúng ta gọi những loại vấn đề như thế này là *học không giám
sát* (*unsupervised learning*); với chúng, loại câu hỏi và lượng câu hỏi
ta có thể đặt ra chỉ bị giới hạn bởi trí tưởng tượng của chính mình. Ta
sẽ đề cập tới một số kỹ thuật học không giám sát ở các chương sau. Bây
giờ, để gợi cho bạn đọc chút hứng khởi, chúng tôi sẽ diễn giải một vài
câu hỏi bạn có thể sẽ hỏi:
.. raw:: html
- Liệu có thể dùng một lượng nhỏ nguyên mẫu để tóm lược dữ liệu một
cách chính xác? Giả sử với một bộ ảnh, liệu có thể nhóm chúng thành
các ảnh phong cảnh, chó, trẻ con, mèo, đỉnh núi, v.v.? Tương tự, với
bộ dữ liệu duyệt web của người dùng, liệu có thể chia họ thành các
nhóm người dùng có hành vi giống nhau? Vấn đề như này thường được gọi
là *phân cụm* (*clustering*).
.. raw:: html
- Liệu ta có tìm được một lượng nhỏ các tham số mà vẫn tóm lược được
chính xác những thuộc tính cốt lõi của dữ liệu? Như là quỹ đạo bay
của quả bóng được miêu tả tương đối tốt bởi số liệu vận tốc, đường
kính và khối lượng của quả bóng. Như một người thợ may chỉ cần một
lượng nhỏ các số đo để miêu tả hình dáng cơ thể người tương đối chuẩn
xác để may ra quần áo vừa vặn. Những ví dụ trên được gọi là bài toán
*ước lượng không gian con* (*subspace estimation*). Nếu mối quan hệ
phụ thuộc là tuyến tính, bài toán này được gọi là phép *phân tích
thành phần chính* (*principal component analysis* – PCA).
.. raw:: html
- Liệu có tồn tại cách biểu diễn các đối tượng (có cấu trúc bất kỳ)
trong không gian Euclid (ví dụ: không gian vector
:math:`\mathbb{R}^n`) mà những thuộc tính đặc trưng có thể được ghép
khớp với nhau? Phương pháp này được gọi là *học biểu diễn*
(*representation learning*) và được dùng để miêu tả các thực thể và
mối quan hệ giữa chúng, giống như Rome :math:`-` Ý :math:`+` Pháp
:math:`=` Paris.
.. raw:: html
- Liệu có tồn tại cách miêu tả những nguyên nhân gốc rễ của lượng dữ
liệu mà ta đang quan sát được? Ví dụ, nếu chúng ta có dữ liệu nhân
khẩu học về giá nhà, mức độ ô nhiễm, tệ nạn, vị trí, trình độ học
vấn, mức lương, v.v.. thì liệu ta có thể khám phá ra cách chúng liên
hệ với nhau chỉ đơn thuần dựa vào dữ liệu thực nghiệm? Những lĩnh vực
liên quan tới *nhân quả* và *mô hình đồ thị xác suất* (*probabilistic
graphical models*) sẽ giải quyết bài toán này.
.. raw:: html
Một bước phát triển quan trọng và thú vị gần đây của học không giám sát
là sự ra đời của *mạng đối sinh* (*generative adversarial network* –
GAN). GAN cho ta một quy trình sinh dữ liệu, kể cả những dữ liệu cấu
trúc phức tạp như hình ảnh và âm thanh. Cùng các cơ chế toán thống kê ẩn
bên dưới sẽ kiểm tra xem liệu những dữ liệu thật và giả này có giống
nhau không. Chúng tôi sẽ viết vài mục về chủ đề này sau.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Tương tác với Môi trường
~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Cho tới giờ, chúng ta chưa thảo luận về việc dữ liệu tới từ đâu hoặc
chuyện gì thực sự sẽ *xảy ra* khi một mô hình học máy trả về kết quả dự
đoán. Điều này là do học có giám sát và học không giám sát chưa giải
quyết các vấn đề một cách thấu đáo. Trong cả hai cách học, chúng ta yêu
cầu mô hình học từ một lượng dữ liệu lớn đã được cung cấp từ đầu mà
không cho nó tương tác trở lại với môi trường trong suốt quá trình học.
Bởi vì toàn bộ việc học diễn ra khi thuật toán đã được ngắt kết nối khỏi
môi trường, đôi khi ta gọi đó là *học ngoại tuyến* (*offline learning*).
Quá trình này cho học có giám sát được mô tả trong
:numref:`fig_data_collection`.
.. raw:: html
.. _fig_data_collection:
.. figure:: ../img/data-collection.svg
Thu thập dữ liệu từ môi trường cho học có giám sát
.. raw:: html
Sự đơn giản của học ngoại tuyến có nét đẹp của nó. Ưu điểm là ta chỉ cần
quan tâm đến vấn đề nhận dạng mẫu mà không bị phân tâm bởi những vấn đề
khác. Nhưng nhược điểm là sự hạn chế trong việc thiết lập các bài toán.
Nếu bạn đã đọc loạt truyện ngắn Robots của Asimov hoặc là người có tham
vọng, bạn có thể đang tưởng tượng ra trí tuệ nhân tạo không những biết
đưa ra dự đoán mà còn có thể tương tác với thế giới. Chúng ta muốn nghĩ
tới những *tác nhân* (*agent*) thông minh chứ không chỉ những *mô hình*
dự đoán. Tức là ta phải nhắm tới việc chọn *hành động* chứ không chỉ đưa
ra những *dự đoán*. Hơn thế nữa, không giống dự đoán, hành động còn tác
động đến môi trường. Nếu muốn huấn luyện một tác nhân thông minh, chúng
ta phải tính đến cách những hành động của nó có thể tác động đến những
gì nó nhận lại trong tương lai.
.. raw:: html
Xem xét việc tương tác với môi trường mở ra một loạt những câu hỏi về mô
hình hoá mới. Liệu môi trường có:
.. raw:: html
- Nhớ những gì ta đã làm trước đó?
- Muốn giúp đỡ chúng ta, chẳng hạn: một người dùng đọc văn bản vào một
bộ nhận dạng giọng nói?
- Muốn đánh bại chúng ta, chẳng hạn: một thiết lập đối kháng giống như
bộ lọc thư rác (chống lại những kẻ viết thư rác) hay là chơi game
(với đối thủ)?
- Không quan tâm (có rất nhiều trường hợp thế này)?
- Có xu hướng thay đổi (dữ liệu trong tương lai có giống với trong quá
khứ không, hay là khuôn mẫu có thay đổi theo thời gian một cách tự
nhiên hoặc do phản ứng với những công cụ tự động)?
.. raw:: html
Câu hỏi cuối cùng nêu lên vấn đề về *dịch chuyển phân phối*
(*distribution shift*), khi dữ liệu huấn luyện và dữ liệu kiểm tra khác
nhau. Vấn đề này giống như khi chúng ta phải làm bài kiểm tra được cho
bởi giảng viên trong khi bài tập về nhà lại do trợ giảng chuẩn bị. Chúng
ta sẽ thảo luận sơ qua về học tăng cường (*reinforcement learning*) và
học đối kháng (*adversarial learning*), đây là hai thiết lập đặc biệt có
xét tới tương tác với môi trường.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Học tăng cường
~~~~~~~~~~~~~~
.. raw:: html
Nếu bạn muốn dùng học máy để phát triển một tác nhân tương tác với môi
trường và đưa ra hành động, khả năng cao là bạn sẽ cần tập trung vào
*học tăng cường* (*reinforcemnent learning* – RL). Học tăng cường có các
ứng dụng trong ngành công nghệ robot, hệ thống đối thoại và cả việc phát
triển AI cho trò chơi điện tử. *Học sâu tăng cường* (*Deep reinforcement
learning* – DRL) áp dụng kỹ thuật học sâu để giải quyết những vấn đề của
học tăng cường và đã trở nên phổ biến trong thời gian gần đây. Hai ví dụ
tiêu biểu nhất là thành tựu đột phá của `mạng-Q sâu đánh bại con người
trong các trò chơi điện tử Atari chỉ sử dụng đầu vào hình
ảnh `__,
và `chương trình AlphaGo chiếm ngôi vô địch thế giới trong môn Cờ
Vây `__.
.. raw:: html
Học tăng cường mô tả bài toán theo cách rất tổng quát, trong đó tác nhân
tương tác với môi trường qua một chuỗi các *bước thời gian*
(*timesteps*). Tại mỗi bước thời gian :math:`t`, tác nhân sẽ nhận được
một quan sát :math:`o_t` từ môi trường và phải chọn một hành động
:math:`a_t` để tương tác với môi trường thông qua một cơ chế nào đó (đôi
khi còn được gọi là bộ dẫn động). Sau cùng, tác nhân sẽ nhận được một
điểm thưởng :math:`r_t` từ môi trường. Sau đó, tác nhân lại nhận một
quan sát khác và chọn ra một hành động, cứ tiếp tục như thế. Hành vi của
tác nhân học tăng cường được kiểm soát bởi một *chính sách* (*policy*).
Nói ngắn gọn, một *chính sách* là một hàm ánh xạ từ những quan sát (từ
môi trường) tới các hành động. Mục tiêu của học tăng cường là tạo ra một
chính sách tốt.
.. raw:: html
.. figure:: ../img/rl-environment.svg
Sự tương tác giữa học tăng cường và môi trường.
.. raw:: html
Tính tổng quát của mô hình học tăng cường không phải là một thứ được nói
quá lên. Ví dụ, ta có thể chuyển bất cứ bài toán học có giám sát nào
thành một bài toán học tăng cường. Chẳng hạn với một bài toán phân loại,
ta có thể tạo một tác nhân học tăng cường với một *hành động* tương ứng
với mỗi lớp. Sau đó ta có thể tạo một môi trường mà trả về điểm thưởng
đúng bằng với giá trị của hàm mất mát từ bài toán học có giám sát ban
đầu.
.. raw:: html
.. raw:: html
.. raw:: html
Vì thế, học tăng cường có thể giải quyết nhiều vấn đề mà học có giám sát
không thể. Lấy ví dụ ở trong học có giám sát, chúng ta luôn đòi hỏi dữ
liệu huấn luyện phải đi kèm với đúng nhãn. Tuy nhiên với học tăng cường,
ta không giả định rằng môi trường sẽ chỉ ra hành động nào là tối ưu tại
mỗi quan sát (điểm dữ liệu). Nhìn chung, mô hình sẽ chỉ nhận được một
điểm thưởng nào đó. Hơn thế nữa, môi trường có thể sẽ không chỉ ra những
hành động nào đã dẫn tới điểm thưởng đó.
.. raw:: html
Lấy cờ vua làm ví dụ. Phần thưởng thật sự sẽ đến vào cuối trò chơi. Khi
thắng, ta sẽ được 1 điểm, hoặc khi thua, ta sẽ nhận về -1 điểm. Vì vậy,
việc học tăng cường phải giải quyết *bài toán phân bố công trạng*
(*credit assignment problem*): xác định hành động nào sẽ được thưởng hay
bị phạt dựa theo kết quả. Tương tự như khi một nhân viên được thăng chức
vào ngày 11/10. Việc thăng chức khả năng cao phản ánh những việc làm tốt
của nhân viên này trong suốt một năm qua. Để được thăng chức sau này đòi
hỏi nhân viên đó phải nhận ra đâu là những hành động dẫn đến việc thăng
chức này.
.. raw:: html
Học tăng cường còn phải đương đầu với vấn đề về những quan sát không
hoàn chỉnh. Có nghĩa là quan sát hiện tại có thể không cho bạn biết mọi
thứ về tình trạng lúc này. Lấy ví dụ, khi robot hút bụi bị kẹt tại một
trong nhiều phòng giống y như nhau trong căn nhà. Việc can thiệp vào vị
trí chính xác (cũng là trạng thái) của robot có thể cần đến những quan
sát từ trước khi nó đi vào phòng.
.. raw:: html
Cuối cùng, tại một thời điểm bất kỳ, các thuật toán học tăng cường có
thể biết một chính sách tốt, tuy nhiên có thể có những chính sách khác
tốt hơn mà tác nhân chưa bao giờ thử tới. Các thuật toán học tăng cường
phải luôn lựa chọn giữa việc tiếp tục *khai thác* chính sách tốt nhất
hiện thời hay *khám phá* thêm những giải pháp khác, tức bỏ qua những
điểm thưởng ngắn hạn để thu về thêm kiến thức.
.. raw:: html
.. raw:: html
.. raw:: html
MDPs, máy đánh bạc, và những người bạn
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. raw:: html
Các bài toán học tăng cường thường có một thiết lập rất tổng quát. Các
hành động của tác nhân có ảnh hưởng đến những quan sát về sau. Những
điểm thưởng nhận được tương ứng chỉ với các hành động được chọn. Môi
trường có thể được quan sát đầy đủ hoặc chỉ một phần. Tính toán tất cả
sự phức tạp này cùng lúc có thể cần sự tham gia của quá nhiều nhà nghiên
cứu. Hơn nữa, không phải mọi vấn đề thực tế đều thể hiện tất cả sự phức
tạp này. Vì vậy, các nhà nghiên cứu đã nghiên cứu một số *trường hợp đặc
biệt* về những bài toán học tăng cường.
.. raw:: html
Khi ở môi trường được quan sát đầy đủ, ta gọi bài toán học tăng cường
này là *Quá trình Quyết định Markov* (*Markov Decision Process* – MDP).
Khi trạng thái không phụ thuộc vào các hành động trước đó, ta gọi bài
toán này là *bài toán máy đánh bạc theo ngữ cảnh* (*contextual bandit
problem*). Khi không có trạng thái, chỉ có một tập hợp các hành động có
sẵn với điểm thưởng chưa biết ban đầu, bài toán kinh điển này là *bài
toán máy đánh bạc đa cần* (*multi-armed bandit problem*).
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Nguồn gốc
---------
.. raw:: html
Mặc dù có nhiều phương pháp học sâu được phát minh gần đây, nhưng mong
muốn phân tích dữ liệu để dự đoán kết quả tương lai của con người đã tồi
tại trong nhiều thế kỷ. Và trong thực tế, phần lớn khoa học tự nhiên đều
có nguồn gốc từ điều này. Ví dụ, phân phối Bernoulli được đặt theo tên
của `Jacob Bernoulli
(1655-1705) `__, và bản
phân phối Gausian được phát hiện bởi `Carl Friedrich Gauss
(1777-1855) `__. Ông
đã phát minh ra thuật toán trung bình bình phương nhỏ nhất, thuật toán
này vẫn được sử dụng cho rất nhiều vấn đề từ tính toán bảo hiểm cho đến
chẩn đoán y khoa. Những công cụ này đã mở đường cho một cách tiếp cận
dựa trên thử nghiệm trong các ngành khoa học tự nhiên – ví dụ, định luật
Ohm mô tả rằng dòng điện và điện áp trong một điện trở được diễn tả hoàn
hảo bằng một mô hình tuyến tính.
.. raw:: html
Ngay cả trong thời kỳ trung cổ, các nhà toán học đã có một trực giác
nhạy bén trong các ước tính của mình. Chẳng hạn, cuốn sách hình học của
`Jacob Köbel
(1460-1533) `__
minh hoạ việc lấy trung bình chiều dài 16 bàn chân của những người đàn
ông trưởng thành để có được chiều dài bàn chân trung bình.
.. raw:: html
.. _fig_koebel:
.. figure:: ../img/koebel.jpg
:width: 500px
Ước tính chiều dài của một bàn chân
.. raw:: html
:numref:`fig_koebel` minh hoạ cách các công cụ ước tính này hoạt động.
16 người đàn ông trưởng thành được yêu cầu xếp hàng nối tiếp nhau khi
rời nhà thờ. Tổng chiều dài của các bàn chân sau đó được chia cho 16 để
có được ước tính trị số hiện tại tầm 1 feet. “Thuật toán” này đã được
cải tiến ngay sau đó nhằm giải quyết trường hợp bàn chân bị biến dạng –
2 người đàn ông có bàn chân ngắn nhất và dài nhất tương ứng được loại
ra, trung bình chỉ được tính trong phần còn lại. Đây là một trong những
ví dụ đầu tiên về ước tính trung bình cắt ngọn.
.. raw:: html
Thống kê thật sự khởi sắc với việc thu thập và có sẵn dữ liệu. Một trong
số những người phi thường đã đóng góp lớn vào lý thuyết và ứng dụng của
nó trong di truyền học, đó là `Ronald Fisher
(1890-1962) `__. Nhiều
thuật toán và công thức của ông (như Phân tích biệt thức tuyến tính -
Linear Discriminant Analysis hay Ma trận thông tin Fisher - Fisher
Information Matrix) vẫn được sử dụng thường xuyên cho đến ngày nay (ngay
cả bộ dữ liệu Iris mà ông công bố năm 1936 đôi khi vẫn được sử dụng để
minh hoạ cho các thuật toán học máy). Fisher cũng là một người ủng hộ
thuyết ưu sinh. Điều này nhắc chúng ta rằng việc áp dụng khoa học dữ
liệu vào những ứng dụng mờ ám trên phương diện đạo đức cũng như các ứng
dụng có ích trong công nghiệp và khoa học tự nhiên đều đã có lịch sử tồn
tại và phát triển lâu đời.
.. raw:: html
.. raw:: html
.. raw:: html
Ảnh hưởng thứ hai đối với học máy đến từ Lý Thuyết Thông Tin `(Claude
Shannon, 1916-2001) `__ và
Lý Thuyết Điện Toán của `Alan Turing
(1912-1954) `__. Turing đã
đặt ra câu hỏi “Liệu máy móc có thể suy nghĩ?” trong bài báo nổi tiếng
của mình `Máy Tính và Trí Thông
Minh `__
(Mind, Tháng 10 1950). Tại đó ông ấy đã giới thiệu về phép thử Turing:
một máy tính được xem là thông minh nếu như người đánh giá khó có thể
phân biệt phản hồi mà anh ta nhận được thông qua tương tác văn bản xuất
phát từ máy tính hay con người.
.. raw:: html
Một ảnh hưởng khác có thể được tìm thấy trong khoa học thần kinh và tâm
lý học. Trên hết, loài người thể hiện rất rõ ràng hành vi thông minh của
mình. Bởi vậy câu hỏi tự nhiên là liệu một người có thể giải thích và
lần ngược để tận dụng năng lực này. Một trong những thuật toán lâu đời
nhất lấy cảm hứng từ câu hỏi trên được giới thiệu bởi `Donald Hebb
(1904-1985) `__. Trong
cuốn sách đột phá của mình về Tổ Chức Hành Vi :cite:`Hebb.Hebb.1949`,
ông ấy cho rằng các nơ-ron học bằng cách dựa trên những phản hồi tích
cực. Điều này về sau được biết đến với cái tên là luật học Hebbian. Nó
là nguyên mẫu cho thuật toán perceptron của Rosenblatt và là nền tảng
của rất nhiều thuật toán hạ gradient ngẫu nhiên đã đặt nền móng cho học
sâu ngày nay: tăng cường các hành vi mong muốn và giảm bớt các hành vi
không mong muốn để đạt được những thông số tốt trong một mạng nơ-ron.
.. raw:: html
Niềm cảm hứng từ sinh học đã tạo nên cái tên *mạng nơ-ron*. Trong suốt
hơn một thế kỷ (từ mô hình của Alexander Bain, 1873 và James
Sherrington, 1890), các nhà ngiên cứu đã cố gắng lắp ráp các mạch tính
toán tương tự như các mạng tương tác giữa các nơ-ron. Theo thời gian,
yếu tố sinh học ngày càng giảm đi nhưng tên gọi của nó thì vẫn ở lại.
Những nguyên tắc thứ yếu của mạng nơ-ron vẫn có thể tìm thấy ở hầu hết
các mạng ngày nay:
.. raw:: html
- Sự đan xen giữa các đơn vị xử lý tuyến tính và phi tuyến tính, thường
được đề cập tới như là *các tầng*.
- Việc sử dụng quy tắc chuỗi (còn được biết đến là *lan truyền ngược –
backpropagation*) để điều chỉnh các tham số trong toàn bộ mạng cùng
lúc.
.. raw:: html
Sau những tiến bộ nhanh chóng ban đầu, các nghiên cứu về mạng nơ-ron
giảm dần trong khoảng từ 1995 tới 2005 bởi một vài lí do. Thứ nhất là
huấn luyện mạng rất tốt kém tài nguyên tính toán. Mặc dù dung lượng RAM
đã dồi dào vào cuối thế kỷ trước, sức mạnh tính toán vẫn còn hạn chế.
Thứ hai là tập dữ liệu vẫn còn tương đối nhỏ. Lúc đó tập dữ liệu
Fisher’s Iris từ năm 1932 vẫn là công cụ phổ biến để kiểm tra tính hiệu
quả của các thuật toán. MNIST với 60.000 ký tự viết tay đã được xem là
rất lớn.
.. raw:: html
Với sự khan hiếm của dữ liệu và tài nguyên tính toán, các công cụ thống
kê mạnh như Phương Pháp Hạt Nhân, Cây Quyết Định và Mô Hình Đồ Thị đã
chứng tỏ sự vượt trội trong thực nghiệm. Khác với mạng nơ-ron, chúng
không đòi hỏi nhiều tuần huấn luyện nhưng vẫn đưa ra những kết quả dự
đoán với sự đảm bảo vững chắc về lý thuyết .
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Con đường tới Học Sâu
---------------------
.. raw:: html
Con đường tới học sâu đã có rất nhiều thay đổi cùng với sự sẵn có của
lượng lớn dữ liệu nhờ vào Mạng Lưới Toàn Cầu (World Wide Web)– sự phát
triển của các công ty với hàng triệu người dùng trực tuyến, sự phổ biến
của các cảm biến giá rẻ với chất lượng cao, bộ lưu trữ dữ liệu giá rẻ
(theo quy luật Kryder), và tính toán chi phí thấp (theo định luật
Moore)– đặc biệt là các GPU, với thiết kế ban đầu được dành cho việc xử
lý các trò chơi máy tính. Và rồi những thuật toán và mô hình tưởng chừng
không khả thi về mặt tính toán đã không còn ngoài tầm với. Điều này được
minh họa trong :numref:`tab_intro_decade`.
.. raw:: html
.. raw:: html
.. _tab_intro_decade:
.. table:: Liên hệ giữa tập dữ liệu với bộ nhớ máy tính và năng lực tính
toán
+-----------------+-----------------+-----------------+-----------------+
| Thập kỷ | Tập dữ liệu | Bộ nhớ | Số lượng phép |
| | | | tính dấu phẩy |
| | | | động trên giây |
+=================+=================+=================+=================+
| 1970 | 100 (Iris) | 1 KB | 100 KF (Intel |
| | | | 8080) |
+-----------------+-----------------+-----------------+-----------------+
| 1980 | 1 K (Giá nhà ở | 100 KB | 1 MF (Intel |
| | Boston) | | 80186) |
+-----------------+-----------------+-----------------+-----------------+
| 1990 | 10 K (Nhận dạng | 10 MB | 10 MF (Intel |
| | ký tự quang | | 80486) |
| | học) | | |
+-----------------+-----------------+-----------------+-----------------+
| 2000 | 10 M (các trang | 100 MB | 1 GF (Intel |
| | web) | | Core) |
+-----------------+-----------------+-----------------+-----------------+
| 2010 | 10 G (quảng | 1 GB | 1 TF (Nvidia |
| | cáo) | | C2050) |
+-----------------+-----------------+-----------------+-----------------+
| 2020 | 1 T (mạng xã | 100 GB | 1 PF (Nvidia |
| | hội) | | DGX-2) |
+-----------------+-----------------+-----------------+-----------------+
.. raw:: html
Sự thật là RAM đã không theo kịp với tốc độ phát triển của dữ liệu. Đồng
thời, sự tiến bộ trong năng lực tính toán đã vượt lên tốc độ phát triển
của dữ liệu có sẵn. Vì vậy, mô hình thống kê cần phải trở nên hiệu quả
hơn về bộ nhớ (thường đạt được bằng cách thêm các thành phần phi tuyến)
đồng thời có thể tập trung thời gian cho việc tối ưu các tham số nhờ sự
gia tăng trong khả năng tính toán. Kéo theo đó, tiêu điểm trong học máy
và thống kê đã chuyển từ các mô hình tuyến tính (tổng quát) và các
phương pháp hạt nhân (*kernel methods*) sang các mạng nơ-ron sâu. Đây
cũng là một trong những lý do những kỹ thuật cổ điển trong học sâu như
perceptron đa tầng :cite:`McCulloch.Pitts.1943`, mạng nơ-ron tích
chập, :cite:`LeCun.Bottou.Bengio.ea.1998`, bộ nhớ ngắn hạn dài (*Long
Short-Term Memory* – LSTM) :cite:`Hochreiter.Schmidhuber.1997`, và học
Q :cite:`Watkins.Dayan.1992`, đã được “tái khám phá” trong thập kỷ
trước sau một khoảng thời gian dài ít được sử dụng.
.. raw:: html
Những tiến bộ gần đây trong các mô hình thống kê, các ứng dụng và các
thuật toán đôi khi được liên hệ với Sự bùng nổ kỷ Cambry: thời điểm phát
triển nhanh chóng trong sự tiến hoá của các loài. Thật vậy, các kỹ thuật
tiên tiến nhất hiện nay không chỉ đơn thuần chỉ là hệ quả của việc các
kỹ thuật cũ được áp dụng với các nguồn tài nguyên hiện tại. Danh sách
dưới đây còn chưa thấm vào đâu với số lượng những ý tưởng đã và đang
giúp các nhà nghiên cứu đạt được những thành tựu khổng lồ trong thập kỷ
vừa qua.
.. raw:: html
.. raw:: html
.. raw:: html
- Các phương pháp tiên tiến trong việc kiểm soát năng lực, như Dropout
:cite:`Srivastava.Hinton.Krizhevsky.ea.2014`, đã giúp làm giảm sự
nguy hiểm của quá khớp. Việc này đạt được bằng cách thêm nhiễu
:cite:`Bishop.1995` xuyên suốt khắp mạng, thay các trọng số bởi các
biến ngẫu nhiên cho mục đích huấn luyện.
.. raw:: html
- Cơ chế tập trung giải quyết vấn đề thứ hai đã ám ảnh ngành thống kê
trong hơn một thế kỷ: làm thế nào để tăng bộ nhớ và độ phức tạp của
một hệ thống mà không làm tăng lượng tham số cần học.
:cite:`Bahdanau.Cho.Bengio.2014` đã tìm ra một giải pháp tinh tế
bằng cách sử dụng một cấu trúc con trỏ có thể học được. Ví dụ trong
dịch máy, thay vì phải nhớ toàn một bộ câu với cách biểu diễn có số
chiều cố định, ta chỉ cần lưu một con trỏ tới trạng thái trung gian
của quá trình dịch. Việc này giúp tăng đáng kể độ chính xác của các
câu dài vì lúc này mô hình không còn cần nhớ toàn bộ câu trước khi
chuyển sang tạo câu tiếp theo.
.. raw:: html
- Thiết kế đa bước, ví dụ thông qua các Mạng Bộ Nhớ (*MemNets*)
:cite:`Sukhbaatar.Weston.Fergus.ea.2015` và Bộ Lập trình-Phiên dịch
Nơ-ron :cite:`Reed.De-Freitas.2015` cho phép các các nhà nghiên cứu
mô hình hóa thống kê mô tả các hướng tiếp cận tới việc suy luận
(*reasoning*) qua nhiều chu kỳ. Những công cụ này cho phép các trạng
thái nội tại của mạng nơ-ron sâu được biến đổi liên tục, từ đó có thể
thực hiện một chuỗi các bước suy luận, tương tự như cách bộ vi xử lý
thay đổi bộ nhớ khi thực hiện một phép tính toán.
.. raw:: html
- Một bước phát triển quan trọng khác là sự ra đời của GAN
:cite:`Goodfellow.Pouget-Abadie.Mirza.ea.2014`. Trong quá khứ, các
phương pháp thống kê để đánh giá hàm mật độ xác suất và các mô hình
sinh (*generative models*) tập trung vào việc tìm các phân phối xác
suất hợp lý và các thuật toán (thường là xấp xỉ) để lấy mẫu từ các
phân phối đó. Vì vậy, những thuật toán này có rất nhiều hạn chế và sự
thiếu linh động khi kế thừa chính các mô hình thống kê đó. Phát kiến
quan trọng của GANs là thay thế các thuật toán lấy mẫu đó bởi một
thuật toán với các tham số khả vi (*differentiable*: có thể tính đạo
hàm để áp dụng các thuật toán tối ưu dựa trên đó) bất kỳ. Các phương
pháp này sau đó được điều chỉnh sao cho bộ phân loại (có hiệu quả
giống bài kiểm tra hai mẫu trong xác suất) không thể phân biệt giữa
dữ liệu thật và giả. Khả năng sử dụng các thuật toán bất kỳ để sinh
dữ liệu đã thúc đẩy phương pháp đánh giá hàm mật độ xác suất khai
sinh một loạt các kỹ thuật. Các ví dụ về biến đổi Ngựa thường thành
Ngựa Vằn :cite:`Zhu.Park.Isola.ea.2017` và tạo giả khuôn mặt người
nổi tiếng là các minh chứng của quá trình này.
.. raw:: html
Trong rất nhiều trường hợp, một GPU là không đủ để xử lý một lượng lớn
dữ liệu sẵn có cho huấn luyện. Khả năng xây dựng các thuật toán huấn
luyện phân tán song song đã cải tiến đáng kể trong thập kỷ vừa rồi. Một
trong những thách thức chính trong việc thiết kế các thuật toán cho quy
mô lớn là việc thuật toán tối ưu học sâu – hạ gradient ngẫu nhiên – phụ
thuộc vào cách xử lý một lượng nhỏ dữ liệu, được gọi là minibatch. Đồng
thời, batch nhỏ lại hạn chế sự hiệu quả của GPU. Bởi vậy, nếu ta huấn
luyện trên 1024 GPU với 32 ảnh trong một batch sẽ cấu thành một
minibatch lớn với 32 ngàn ảnh. Các công trình gần đây, khởi nguồn bởi Li
:cite:`Li.2017`, tiếp tục bởi :cite:`You.Gitman.Ginsburg.2017` và
:cite:`Jia.Song.He.ea.2018` đẩy kích thước lên tới 64 ngàn mẫu, giảm
thời gian huấn luyện ResNet50 trên ImageNet xuống dưới bảy phút so với
thời gian huấn luyện hàng nhiều ngày trước đó.
.. raw:: html
- Khả năng song song hóa việc tính toán cũng đã góp phần quan trọng cho
sự phát triển của học tăng cường, ít nhất là với ứng dụng mà có thể
tạo và sử dụng môi trường giả lập. Việc này đã dẫn tới sự tiến triển
đáng kể ở môn cờ vây, các game Atari, Starcraft, và trong giả lập vật
lý (ví dụ, sử dụng MuJoCo). Máy tính đạt được chất lượng vượt mức con
người ở các ứng dụng này. Xem thêm mô tả về cách đạt được điều này
trong Alphago tại :cite:`Silver.Huang.Maddison.ea.2016`. Tóm lại,
học tăng cường làm việc tốt nhất nếu có cực nhiều bộ (trạng thái,
hành động, điểm thưởng) để mô hình có thể thử và học cách chúng được
liên hệ với nhau như thế nào. Các phần mềm mô phỏng giả lập cung cấp
một môi trường như thế.
.. raw:: html
- Các framework Học Sâu đóng một vai trò thiết yếu trong việc thực hiện
hóa các ý tưởng. Các framework thế hệ đầu tiên cho phép dễ dàng mô
hình hóa bao gồm `Caffe `__,
`Torch `__, và
`Theano `__. Rất nhiều bài báo được
viết về cách sử dụng các công cụ này. Hiện tại, chúng bị thay thế bởi
`TensorFlow `__, thường
được sử dụng thông qua API mức cao
`Keras `__,
`CNTK `__, `Caffe
2 `__ và `Apache
MxNet `__. Thế hệ công cụ
thứ ba – công cụ học sâu dạng mệnh lệnh – được tiên phong bởi
`Chainer `__, công cụ này sử dụng
cú pháp tương tự như Python NumPy để mô tả các mô hình. Ý tưởng này
được áp dụng bởi `PyTorch `__ và
`Gluon API `__ của MXNet.
Khóa học này sử dụng nhóm công cụ cuối cùng để dạy về học sâu.
.. raw:: html
Sự phân chia công việc giữa (i) các nhà nghiên cứu hệ thống xây dựng các
công cụ tốt hơn và (ii) các nhà mô hình hóa thống kê xây dựng các mạng
tốt hơn đã đơn giản hóa công việc một cách đáng kể. Ví dụ, huấn luyện
một mô hình hồi quy logistic tuyến tính từng là một bài tập về nhà không
đơn giản cho tân nghiên cứu sinh tiến sĩ ngành học máy tại Đại học
Carnegie Mellon năm 2014. Hiện nay, tác vụ này có thể đạt được với ít
hơn 10 dòng mã, khiến việc này trở nên đơn giản với các lập trình viên.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Các câu chuyện thành công
-------------------------
.. raw:: html
Trí Tuệ Nhân Tạo có một lịch sử lâu dài trong việc mang đến những kết
quả mà khó có thể đạt được bằng các phương pháp khác. Ví dụ, sắp xếp thư
tín sử dụng công nghệ nhận dạng ký tự quang. Những hệ thống này được
triển khai từ những năm 90 (đây là nguồn của các bộ dữ liệu chữ viết tay
nổi tiếng MNIST và USPS). Các hệ thống tương tự cũng được áp dụng vào
đọc ngân phiếu nộp tiền vào ngân hàng và tính điểm tín dụng cho ứng
viên. Các giao dịch tài chính được kiểm tra có phải lừa đảo không một
cách tự động. Đây là nền tảng phát triển cho rất nhiều hệ thống thanh
toán điện tử như Paypal, Stripe, AliPay, WeChat, Apple, Visa và
MasterCard. Các chương trình máy tính cho cờ vua đã phát triển trong
hàng thập kỷ. Học máy đứng sau các hệ thống tìm kiếm, gợi ý, cá nhân hóa
và xếp hạng trên mạng Internet. Nói cách khác, trí tuệ nhân tạo và học
máy xuất hiện mọi nơi tuy đôi khi ta không để ý thấy.
.. raw:: html
Chỉ tới gần đây AI mới được chú ý đến, chủ yếu là bởi nó cung cấp giải
pháp cho các bài toán mà trước đây được coi là không khả thi.
.. raw:: html
.. raw:: html
.. raw:: html
- Các trợ lý thông minh như: Apple Siri, Amazon Alexa, hay Google
Assistant có khả năng trả lời các câu hỏi thoại với độ chính xác chấp
nhận được. Việc này cũng bao gồm những tác vụ đơn giản như bật đèn
(hữu ích cho người tàn tật) tới đặt lịch hẹn cắt tóc và đưa ra các
đoạn hội thoại để hỗ trợ các tổng đài chăm sóc khách hàng. Đây có lẽ
là tín hiệu đáng chú ý nhất cho thấy AI đang ảnh hưởng tới cuộc sống
thường ngày.
.. raw:: html
- Một thành phần chính trong trợ lý số là khả năng nhận dạng chính xác
tiếng nói. Dần dần độ chính xác của những hệ thống này được cải thiện
tới mức tương đương con người (:cite:`Xiong.Wu.Alleva.ea.2018`) cho
vài ứng dụng cụ thể.
.. raw:: html
- Tương tự, nhận dạng vật thể cũng đã tiến một bước dài. Đánh giá một
vật thể trong ảnh là một tác vụ khó trong năm 2010. Trong bảng xếp
hạng ImageNet, :cite:`Lin.Lv.Zhu.ea.2010` đạt được tỉ lệ lỗi top-5
là 28%. Tới 2017, :cite:`Hu.Shen.Sun.2018` giảm tỉ lệ lỗi này xuống
còn 2,25%. Các kết quả kinh ngạc tương tự cũng đã đạt được trong việc
xác định chim cũng như chẩn đoán ung thư da.
.. raw:: html
- Các trò chơi từng là một pháo đài của trí tuệ loài người. Bắt đầu từ
TDGammon [23], một chương chình chơi Backgammon (một môn cờ) sử dụng
học tăng cường sai khác thời gian (*temporal difference* – TD), tiến
triển trong giải thuật và tính toán đã dẫn đến các thuật toán cho một
loạt các ứng dụng. Không giống Backgamon, cờ vua có một không gian
trạng thái và tập các nước đi phức tạp hơn nhiều. DeepBlue chiến
thắng Gary Kasparov, Campbell et al.
:cite:`Campbell.Hoane-Jr.Hsu.2002`, bằng cách sử dụng phần cứng
chuyên biệt, đa luồng khổng lồ và thuật toán tìm kiếm hiệu quả trên
toàn bộ cây trò chơi. Cờ vây còn khó hơn vì không gian trạng thái
khổng lồ của nó. Năm 2015, AlphaGo đạt tới đẳng cấp con người,
:cite:`Silver.Huang.Maddison.ea.2016` nhờ sử dụng Học Sâu kết hợp
với lấy mẫu cây Monte Carlo (*Monte Carlo tree sampling*). Thách thức
trong Poker là không gian của trạng thái lớn và nó không được quan
sát đầy đủ (ta không biết các quân bài của đối thủ). Libratus vượt
chất lượng con người trong môn Poker sử dụng các chiến thuật có cấu
trúc một cách hiệu quả :cite:`Brown.Sandholm.2017`. Những điều này
thể hiện một sự tiến triển ấn tượng trong các trò chơi và tầm quan
trọng của các thuật toán nâng cao trong đó.
.. raw:: html
- Dấu hiệu khác của tiến triển trong AI là sự phát triển của xe hơi và
xe tải tự hành. Trong khi hệ thống tự động hoàn toàn còn xa mới đạt
được, tiến triển ấn tượng đã được tạo ra theo hướng này với việc các
công ty như Tesla, NVIDIA và Waymo ra mắt các sản phẩm ít nhất hỗ trợ
bán tự động. Điều khiến tự động hoàn toàn mang nhiều thách thức là
việc lái xe chuẩn mực đòi khỏi khả năng tiếp nhận, suy đoán và tích
hợp các quy tắc vào hệ thống. Tại thời điểm hiện tại, học máy được sử
dụng chủ yếu trong phần thị giác máy tính của các bài toán này. Phần
còn lại vẫn phụ thuộc chủ yếu bởi những điều chỉnh của các kỹ sư.
.. raw:: html
.. raw:: html
.. raw:: html
Danh sách trên đây chỉ lướt qua những ứng dụng mà học máy có ảnh hưởng
lớn. Ngoài ra, robot, hậu cần, sinh học điện toán, vật lý hạt và thiên
văn học cũng tạo ra những thành quả ấn tượng gần đây phần nào nhờ vào
học máy. Bởi vậy, Học Máy đang trở thành một công cụ phổ biến cho các kỹ
sư và nhà khoa học.
.. raw:: html
Gần đây, câu hỏi về ngày tận thế do AI, hay điểm kỳ dị (*singularity*)
của AI đã được nhắc tới trong các bài viết phi kỹ thuật về AI. Đã có
những nỗi lo sợ về việc các hệ thống học máy bằng cách nào đó sẽ trở nên
có cảm xúc và ra quyết định độc lập với những lập trình viên (và chủ
nhân) về những điều ảnh hưởng trực tiếp tới sự sống của nhân loại. Trong
phạm vi nào đó, AI đã ảnh hưởng tới sự sống của con người một cách trực
tiếp, chẳng hạn như điểm tín dụng được tính tự động, tự động điều hướng
xe hơi, hay các quyết định về việc liệu có chấp nhận bảo lãnh hay không
sử dụng đầu vào là dữ liệu thống kê. Hoặc ít nghiêm trọng hơn, ta có thể
yêu cầu Alexa bật máy pha cà phê.
.. raw:: html
May mắn thay, chúng ta còn xa mới đạt được một hệ thống AI có cảm xúc
sẵn sàng điều khiển chủ nhân của nó (hay đốt cháy cà phê của họ). Thứ
nhất, các hệ thống AI được thiết kế, huấn luyện và triển khai trong một
môi trường cụ thể hướng mục đích. Trong khi hành vi của chúng có thể tạo
ra ảo giác về trí tuệ phổ quát, đó vẫn là một tổ hợp của các quy tắc và
các mô hình thống kê. Thứ hai, hiện tại các công cụ cho *trí tuệ nhân
tạo phổ quát* đơn giản là không tồn tại. Chúng không thể tự cải thiện,
hoài nghi bản thân, không thể thay đổi, mở rộng và tự cải thiện cấu trúc
trong khi cố gắng giải quyết các tác vụ thông thường.
.. raw:: html
Một mối lo cấp bách hơn đó là AI có thể được sử dụng trong cuộc sống
thường nhật như thế nào. Nhiều khả năng rất nhiều tác vụ đơn giản đang
được thực hiện bởi tài xế xe tải và trợ lý cửa hàng có thể và sẽ bị tự
động hóa. Các robot nông trại sẽ không những có khả năng làm giảm chi
phí của nông nghiệp hữu cơ mà còn tự động hóa quá trình thu hoạch. Thời
điểm này của cuộc cách mạng công nghiệp có thể có những hậu quả lan rộng
khắp toàn xã hội (tài xế xe tải và trợ lý cửa hàng là một vài trong số
những ngành phổ biến nhất ở nhiều địa phương). Đối với các mô hình thống
kê khi được áp dụng không cẩn thận, có thể dẫn đến các quyết định phân
biệt chủng tộc, giới tính hoặc tuổi tác và gây nên những nỗi lo có cơ sở
về tính công bằng nếu chúng được tự động hóa để đưa ra các quyết định có
nhiều hệ lụy. Việc sử dụng các thuật toán này một cách cẩn thận là rất
quan trọng. Với những gì ta biết ngày nay, việc này dấy lên một nỗi lo
lớn hơn so với khả năng hủy diệt loài người của các siêu trí tuệ độc ác.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Tóm tắt
-------
.. raw:: html
- Học máy nghiên cứu cách mà các hệ thống máy tính tận dụng *kinh
nghiệm* (thường là dữ liệu) để cải thiện chất lượng trong những tác
vụ cụ thể. Lĩnh vực này kết hợp các ý tưởng từ thống kê, khai phá dữ
liệu, trí tuệ nhân tạo và tối ưu hóa. Học máy thường được sử dụng như
một công cụ để triển khai các giải pháp trí tuệ nhân tạo.
- Là một nhánh của học máy, học biểu diễn (*representational learning*)
tập trung vào việc tự động tìm kiếm phương pháp biểu diễn dữ liệu
thích hợp, phần lớn thông qua việc học một quá trình biến đổi gồm
nhiều bước.
- Hầu hết các tiến triển gần đây trong học sâu đạt được nhờ một lượng
lớn dữ liệu thu thập từ các cảm biến giá rẻ và các ứng dụng quy mô
Internet, cùng với sự phát triển đáng kể trong điện toán, chủ yếu là
GPU.
- Việc tối ưu hóa toàn bộ hệ thống là yếu tố chính để đạt được chất
lượng tốt. Sự sẵn có của các framework học sâu hiệu quả giúp cho việc
thiết kế và triển khai tối ưu hóa trở nên dễ dàng hơn rất nhiều.
.. raw:: html
Bài tập
-------
.. raw:: html
1. Phần nào của mã nguồn mà bạn đang viết có thể “được học”, tức có thể
được cải thiện bằng cách học và tự động xác định các lựa chọn thiết
kế? Trong mã nguồn của bạn có hiện diện các lựa chọn thiết kế dựa
trên trực giác không?
2. Những bài toán nào bạn từng gặp có nhiều cách giải quyết, nhưng lại
không có cách cụ thể nào để tự động hóa? Những bài toán này có thể
rất phù hợp để áp dụng học sâu.
3. Nếu xem sự phát triển của trí tuệ nhân tạo như một cuộc cách mạng
công nghiệp mới thì mối quan hệ giữa thuật toán và dữ liệu là gì? Nó
có tương tự như động cơ hơi nước và than đá không (sự khác nhau căn
bản là gì)?
4. Bạn còn có thể áp dụng phương pháp huấn luyện đầu-cuối ở lĩnh vực nào
nữa? Vật lý? Kỹ thuật? Kinh tế lượng?
.. raw:: html
Thảo luận
---------
- `Tiếng Anh `__
- `Tiếng Việt `__
.. raw:: html
.. raw:: html
Những người thực hiện
---------------------
Bản dịch trong trang này được thực hiện bởi:
- Lê Khắc Hồng Phúc
- Vũ Hữu Tiệp
- Sâm Thế Hải
- Hoàng Trọng Tuấn
- Trần Thị Hồng Hạnh
- Đoàn Võ Duy Thanh
- Phạm Chí Thành
- Mai Sơn Hải
- Vũ Đình Quyền
- Nguyễn Cảnh Thướng
- Lê Đàm Hồng Lộc
- Nguyễn Lê Quang Nhật
.. |cat1| image:: ../img/cat3.jpg
.. |cat2| image:: ../img/cat2.jpg
.. |dog1| image:: ../img/dog1.jpg
.. |dog2| image:: ../img/dog2.jpg