.. raw:: html
.. raw:: html
.. raw:: html
Cân nhắc tới Môi trường
=======================
.. raw:: html
Trong các chương trước ta đã thực hành một số ứng dụng của học máy và
khớp mô hình với nhiều tập dữ liệu khác nhau. Tuy nhiên, ta chưa bao giờ
dừng lại để nhìn nhận về nguồn gốc của dữ liệu, hoặc dự định sẽ làm gì
với đầu ra của mô hình. Đa phần là khi có được dữ liệu, các nhà phát
triển học máy thường đâm đầu vào triển khai các mô hình mà không tạm
dừng để xem xét các vấn đề cơ bản này.
.. raw:: html
Nhiều triển khai học máy thất bại có thể bắt nguồn từ khuôn mẫu này. Đôi
khi các mô hình có độ chính xác rất tốt trên tập kiểm tra nhưng lại thất
bại thảm hại trong triển khai thực tế, khi mà phân phối của dữ liệu thay
đổi đột ngột. Đáng sợ hơn, đôi khi chính việc triển khai một mô hình có
thể là chất xúc tác gây nhiễu cho phân phối dữ liệu. Ví dụ, giả sử rằng
ta huấn luyện một mô hình để dự đoán xem một người có trả được nợ hay
không, rồi mô hình chỉ ra rằng việc chọn giày dép của ứng viên có liên
quan đến rủi ro vỡ nợ (giày tây thì trả được nợ, giày thể thao thì
không). Từ đó, ta có thể sẽ có xu hướng chỉ cấp các khoản vay cho các
ứng viên mang giày tây và sẽ từ chối cho vay đối với những trường hợp
mang giày thể thao.
.. raw:: html
Trong trường hợp này, việc ta không cân nhắc kỹ khi nhảy vọt từ nhận
dạng khuôn mẫu đến ra quyết định và việc không nghiêm túc xem xét các
yếu tố môi trường có thể gây ra hậu quả nghiêm trọng. Như ví dụ trên,
không sớm thì muộn khi ta bắt đầu đưa ra quyết định dựa trên kiểu giày,
khách hàng sẽ để ý và thay đổi hành vi của họ. Chẳng bao lâu sau, tất cả
các người vay tiền sẽ mang giày tây, nhưng chỉ số tín dụng của họ thì
không hề cải thiện. Hãy dành một phút để “thấm” điều này vì có rất nhiều
vấn đề tương tự trong các ứng dụng của học máy: bằng việc ra quyết định
dựa trên mô hình trong một môi trường, ta có thể làm hỏng chính mô hình
đó.
.. raw:: html
Dù không thể thảo luận kỹ lưỡng về các vấn đề này chỉ trong một mục,
chúng tôi vẫn muốn đề cập một vài mối bận tâm phổ biến và kích thích tư
duy phản biện để có thể sớm phát hiện ra các tình huống này, từ đó giảm
thiểu thiệt hại và có trách nhiệm hơn trong việc sử dụng học máy. Một
vài giải pháp khá đơn giản (thu thập dữ liệu “phù hợp”), còn một vài
giải pháp lại khó hơn về mặt kỹ thuật (lập trình một hệ thống học tăng
cường), và một số khác thì hoàn toàn nằm ngoài lĩnh vực dự đoán thống kê
và cần ta phải vật lộn với các câu hỏi triết học khó khăn về khía cạnh
đạo đức trong việc ứng dụng thuật toán.
.. raw:: html
.. raw:: html
.. raw:: html
Dịch chuyển Phân phối
---------------------
.. raw:: html
Để bắt đầu, ta sẽ trở lại vị trí quan sát và tạm gác lại các tác động
của ta lên môi trường. Trong các mục tiếp theo, ta sẽ xem xét kỹ vài
cách khác nhau mà phân phối dữ liệu có thể dịch chuyển và những gì ta có
thể làm để cứu vãn hiệu suất mô hình. Chúng tôi sẽ cảnh báo ngay từ đầu
rằng nếu phân phối sinh dữ liệu :math:`p(\mathbf{x},y)` có thể dịch
chuyển theo các cách khác nhau tại bất kỳ thời điểm nào, việc học một bộ
phân loại mạnh mẽ là điều bất khả thi. Trong trường hợp xấu nhất, nếu
bản thân định nghĩa của nhãn có thể thay đổi bất cứ khi nào: nếu đột
nhiên con vật mà chúng ta gọi là “mèo” bây giờ là “chó” và con vật trước
đây chúng ta gọi là “chó” thì giờ lại là “mèo”, trong khi không có bất
kỳ thay đổi rõ ràng nào trong phân phối của đầu vào
:math:`p(\mathbf{x})`, thì không có cách nào để phát hiện được sự thay
đổi này hay điều chỉnh lại bộ phân loại tại thời điểm kiểm tra. May mắn
thay, dưới một vài giả định chặt về cách dữ liệu có thể thay đổi trong
tương lai, một vài thuật toán có thể phát hiện được sự dịch chuyển và
thậm chí có thể thích nghi để đạt được độ chính xác cao hơn so với việc
tiếp tục dựa vào bộ phân loại ban đầu một cách ngây thơ.
.. raw:: html
.. raw:: html
.. raw:: html
Dịch chuyển Hiệp biến
~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Một trong những dạng dịch chuyển phân phối được nghiên cứu rộng rãi nhất
là *dịch chuyển hiệp biến* (*covariate shift*). Ở đây, ta giả định rằng
mặc dù phân phối đầu vào có thể biến đổi theo thời gian, nhưng hàm gán
nhãn, tức phân phối có điều kiện :math:`P(y \mid \mathbf{x})` thì không
thay đổi. Mặc dù vấn đề này khá dễ hiểu, trong thực tế nó thường dễ bị
bỏ qua. Hãy xem xét bài toán phân biệt mèo và chó với tập dữ liệu huấn
luyện bao gồm các ảnh sau:
.. raw:: html
+----------+----------+----------+----------+
| mèo | mèo | chó | chó |
+==========+==========+==========+==========+
| |image0| | |image1| | |image2| | |image3| |
+----------+----------+----------+----------+
.. raw:: html
Tại thời điểm kiểm tra ta phải phân loại các ảnh dưới đây:
.. raw:: html
+----------+----------+----------+----------+
| mèo | mèo | chó | chó |
+==========+==========+==========+==========+
| |image4| | |image5| | |image6| | |image7| |
+----------+----------+----------+----------+
.. raw:: html
Rõ ràng việc phân loại tốt trong trường hợp này là rất khó khăn. Trong
khi tập huấn luyện bao gồm các ảnh đời thực thì tập kiểm tra chỉ chứa
các ảnh hoạt hình với màu sắc thậm chí còn không thực tế. Việc huấn
luyện trên một tập dữ liệu khác biệt đáng kể so với tập kiểm tra mà
không có một kế hoạch để thích ứng với sự thay đổi này là một ý tưởng
tồi. Thật không may, đây lại là một cạm bẫy rất phổ biến. Các nhà thống
kê gọi vấn đề này là *dịch chuyển hiệp biến* bởi vì gốc rễ của nó là do
sự thay đổi trong phân phối của các đặc trưng (tức các *hiệp biến*).
Theo ngôn ngữ toán học, ta có thể nói rằng :math:`P(\mathbf{x})` thay
đổi nhưng :math:`P(y \mid \mathbf{x})` thì không. Khi ta tin rằng
:math:`\mathbf{x}` gây ra :math:`y` thì dịch chuyển hiệp biến thường là
một giả định hợp lý, mặc dù tính hữu dụng của nó không chỉ giới hạn
trong trường hợp này.
.. raw:: html
.. raw:: html
.. raw:: html
Dịch chuyển Nhãn
~~~~~~~~~~~~~~~~
.. raw:: html
Vấn đề ngược lại xuất hiện khi chúng ta tin rằng điều gây ra sự dịch
chuyển là một thay đổi trong phân phối biên của nhãn :math:`P(y)` trong
khi phân phối có điều kiện theo lớp :math:`P(\mathbf{x} \mid y)` vẫn
không đổi. Dịch chuyển nhãn là một giả định hợp lý khi chúng ta tin rằng
:math:`y` gây ra :math:`\mathbf{x}`. Chẳng hạn, thông thường chúng ta
muốn dự đoán kết quả chẩn đoán nếu biết các biểu hiện của bệnh. Trong
trường hợp này chúng ta tin rằng kết quả chẩn đoán gây ra các biểu hiện,
tức bệnh gây ra các triệu chứng. Thỉnh thoảng các giả định dịch chuyển
nhãn và dịch chuyển hiệp biến có thể xảy ra đồng thời. Ví dụ, khi hàm
gán nhãn là tất định và không đổi, dịch chuyển hiệp biến sẽ luôn xảy ra,
kể cả khi dịch chuyển nhãn cũng đang xảy ra. Một điều thú vị là khi
chúng ta tin rằng cả dịch chuyển nhãn và dịch chuyển hiệp biến đều đang
xảy ra, làm việc với các phương pháp được suy ra từ giả định dịch chuyển
nhãn thường chiếm lợi thế. Các phương pháp này thường sẽ dễ làm việc hơn
vì chúng thao tác trên nhãn thay vì trên các đầu vào đa chiều trong học
sâu.
.. raw:: html
Dịch chuyển Khái niệm
~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Một vấn đề liên quan nữa nằm ở việc *dịch chuyển khái niệm* (*concept
shift*), khi chính định nghĩa của các nhãn thay đổi. Điều này nghe có vẻ
lạ vì sau cùng, con mèo là con mèo. Quả thực định nghĩa của một con mèo
có thể không thay đổi, nhưng điều này có đúng với thuật ngữ “đồ uống có
ga” hay không? Hoá ra nếu chúng ta di chuyển vòng quanh nước Mỹ, dịch
chuyển nguồn dữ liệu theo vùng địa lý, ta sẽ thấy sự dịch chuyển khái
niệm đáng kể liên quan đến thuật ngữ đơn giản này như thể hiện trong
:numref:`fig_popvssoda`.
.. raw:: html
.. _fig_popvssoda:
.. figure:: ../img/popvssoda.png
:width: 400px
Dịch chuyển khái niệm của tên các loại đồ uống có ga ở Mỹ.
.. raw:: html
Nếu chúng ta xây dựng một hệ thống dịch máy, phân phối
:math:`P(y \mid x)` có thể khác nhau tùy thuộc vào vị trí của chúng ta.
Vấn đề này có thể khó nhận ra, nhưng bù lại :math:`P(y \mid x)` thường
chỉ dịch chuyển một cách chậm rãi.
.. raw:: html
.. raw:: html
.. raw:: html
Ví dụ
~~~~~
.. raw:: html
Trước khi đi vào chi tiết và thảo luận các giải pháp, ta có thể bàn thêm
về một số tình huống khi dịch chuyển hiệp biến và khái niệm có thể có
biểu hiện không quá rõ ràng.
.. raw:: html
.. raw:: html
.. raw:: html
Chẩn đoán Y khoa
^^^^^^^^^^^^^^^^
.. raw:: html
Hãy tưởng tượng rằng bạn muốn thiết kế một giải thuật có khả năng phát
hiện bệnh ung thư. Bạn thu thập dữ liệu từ cả người khoẻ mạnh lẫn người
bệnh rồi sau đó huấn luyện giải thuật. Nó hoạt động hiệu quả, có độ
chính xác cao và bạn kết luận rằng bạn đã sẵn sàng cho một sự nghiệp
chẩn đoán y khoa thành công. Đừng vội mừng…
.. raw:: html
Bạn có thể đã mắc nhiều sai lầm. Cụ thể, các phân phối mà bạn dùng để
huấn luyện và các phân phối bạn gặp phải trong thực tế có thể rất khác
nhau. Điều này đã từng xảy ra với một công ty khởi nghiệp không may mắn
mà tôi đã tư vấn nhiều năm về trước. Họ đã phát triển một bộ xét nghiệm
máu cho một căn bệnh xảy ra chủ yếu ở đàn ông lớn tuổi và họ đã thu thập
được một lượng kha khá mẫu máu từ các bệnh nhân. Mặc dù vậy, việc thu
thập mẫu máu từ những người đàn ông khoẻ mạnh lại khó khăn hơn (chủ yếu
là vì lý do đạo đức). Để giải quyết sự thiếu hụt này, họ đã kêu gọi một
lượng lớn các sinh viên trong trường học tham gia hiến máu tình nguyện
để thực hiện xét nghiệm máu của họ. Sau đó họ đã nhờ tôi xây dựng một bộ
phân loại để phát hiện căn bệnh. Tôi đã nói với họ rằng việc phân biệt
hai tập dữ liệu trên với độ chính xác gần như hoàn hảo là rất dễ dàng.
Sau cùng, các đối tượng kiểm tra có nhiều khác biệt về tuổi, nồng độ hóc
môn, hoạt động thể chất, chế độ ăn uống, mức tiêu thụ rượu bia, và nhiều
nhân tố khác không liên quan đến căn bệnh. Điều này không giống với
trường hợp của những bệnh nhân thật sự: Quy trình lấy mẫu của họ khả
năng cao đã gây ra hiện tượng dịch chuyển hiệp biến rất nặng giữa phân
phối *gốc* và phân phối *mục tiêu*, và thêm vào đó, nó không thể được
khắc phục bằng các biện pháp thông thường. Nói cách khác, dữ liệu huấn
luyện và kiểm tra khác biệt đến nỗi không thể xây dựng được một mô hình
hữu dụng và họ đã lãng phí rất nhiều tiền của.
.. raw:: html
Xe tự hành
^^^^^^^^^^
.. raw:: html
Giả sử có một công ty muốn xây dựng một hệ thống học máy cho xe tự hành.
Một trong những bộ phận quan trọng là bộ phát hiện lề đường. Vì việc gán
nhãn dữ liệu thực tế rất tốn kém, họ đã có một ý tưởng (thông minh và
đầy nghi vấn) là sử dụng dữ liệu giả từ một bộ kết xuất đồ hoạ để thêm
vào dữ liệu huấn luyện. Nó đã hoạt động rất tốt trên “dữ liệu kiểm tra”
được lấy mẫu từ bộ kết xuất đồ hoạ. Nhưng khi áp dụng trên xe thực tế,
nó là một thảm hoạ. Hoá ra, lề đường đã được kết xuất chỉ với một kết
cấu rất đơn giản. Quan trọng hơn, *tất cả* các lề đường đều được kết
xuất với *cùng một* kết cấu và bộ phát hiện lề đường đã nhanh chóng học
được “đặc trưng” này.
.. raw:: html
Một điều tương tự cũng đã xảy ra với quân đội Mỹ trong lần đầu tiên họ
thử nghiệm nhận diện xe tăng trong rừng. Họ chụp các bức ảnh khu rừng từ
trên cao khi không có xe tăng, sau đó lái xe tăng vào khu rừng và chụp
một bộ ảnh khác. Bộ phân loại này được huấn luyện tới mức “hoàn hảo”.
Không may thay, tất cả những gì nó đã học được là phân loại cây có bóng
với cây không có bóng—bộ ảnh đầu tiên được chụp vào buổi sáng sớm, trong
khi bộ thứ hai được chụp vào buổi trưa.
.. raw:: html
.. raw:: html
.. raw:: html
Phân phối không dừng
^^^^^^^^^^^^^^^^^^^^
.. raw:: html
Một vấn đề khó phát hiện hơn phát sinh khi phân phối thay đổi chậm rãi
và mô hình không được cập nhật một cách thoả đáng. Dưới đây là một vài
trường hợp điển hình:
.. raw:: html
- Chúng ta huấn luyện mô hình quảng cáo điện toán và sau đó không cập
nhật nó thường xuyên (chẳng hạn như quên bổ sung thêm thiết bị iPad
mới vừa được ra mắt vào mô hình).
- Xây dựng một mô hình lọc thư rác. Mô hình làm việc rất tốt cho việc
phát hiện tất cả các thư rác mà chúng ta biết cho đến nay. Nhưng rồi
những người gửi thư rác cũng khôn khéo hơn và tạo ra các mẫu thư mới
khác hẳn với những thư trước đây.
- Ta xây dựng hệ thống đề xuất sản phẩm. Hệ thống làm việc tốt trong
suốt mùa đông… nhưng sau đó nó vẫn tiếp tục đề xuất các mẫu nón ông
già Noel ngay cả khi Giáng Sinh đã qua từ lâu.
.. raw:: html
Các giai thoại khác
^^^^^^^^^^^^^^^^^^^
.. raw:: html
- Chúng ta xây dựng mô hình phát hiện gương mặt. Nó hoạt động rất tốt
trên các bài kiểm tra đánh giá. Không may mắn là mô hình lại thất bại
trên tập dữ liệu kiểm tra—các ví dụ đánh bại được mô hình khi khuôn
mặt lấp đầy hoàn toàn cả bức ảnh, trong khi không có dữ liệu nào
tương tự như vậy xuất hiện trong tập huấn luyện.
- Ta xây dựng hệ thống tìm kiếm web cho thị trường Hoa Kỳ và hiện tại
muốn triển khai nó cho thị trường Anh.
- Chúng ta huấn luyện một bộ phân loại hình ảnh bằng cách biên soạn một
tập dữ liệu lớn, trong đó mỗi lớp trong tập dữ liệu đều có số lượng
mẫu bằng nhau, ví dụ 1000 lớp và mỗi lớp được biểu diễn bởi 1000 ảnh.
Sau đó chúng ta triển khai hệ thống trong khi trên thực tế phân phối
của nhãn chắc chắn là không đồng đều.
.. raw:: html
Chung quy lại, có nhiều trường hợp mà phân phối huấn luyện và kiểm tra
:math:`p(\mathbf{x}, y)` là khác nhau. Trong một số trường hợp may mắn
thì các mô hình vẫn chạy tốt dù phân phối của hiệp biến, nhãn hay khái
niệm đều dịch chuyển. Trong một số trường hợp khác, chúng ta có thể làm
tốt hơn bằng cách sử dụng nhiều chiến lược một cách có nguyên tắc để đối
phó với sự dịch chuyển này. Phần còn lại của mục này sẽ tập trung nhiều
hơn hẳn vào mặt kỹ thuật. Tuy nhiên, những độc giả vội vàng có thể bỏ
qua mục này vì các khái niệm được trình bày dưới đây không phải là tiền
đề cho các phần tiếp theo.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Hiệu chỉnh Dịch chuyển Hiệp biến
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Giả sử rằng ta muốn ước lượng mối liên hệ phụ thuộc
:math:`P(y \mid \mathbf{x})` khi đã có dữ liệu được gán nhãn
:math:`(\mathbf{x}_i, y_i)`. Thật không may, các mẫu quan sát
:math:`x_i` được thu thập từ một phân phối *mục tiêu*
:math:`q(\mathbf{x})` thay vì từ phân phối *gốc* :math:`p(\mathbf{x})`.
Để có được tiến triển, chúng ta cần nhìn lại xem chính xác thì việc gì
đang diễn ra trong quá trình huấn luyện: ta duyệt qua tập dữ liệu huấn
luyện cùng với nhãn kèm theo
:math:`\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}` và cập nhật
vector trọng số của mô hình sau mỗi minibatch. Đôi khi chúng ta cũng áp
dụng thêm một lượng phạt nào đó lên các tham số, bằng cách dùng suy giảm
trọng số, dropout hoặc các kĩ thuật liên quan khác. Điều này nghĩa là ta
hầu như chỉ đang giảm thiểu giá trị mất mát trên tập huấn luyện.
.. math::
\mathop{\mathrm{minimize}}_w \frac{1}{n} \sum_{i=1}^n l(x_i, y_i, f(x_i)) + \mathrm{một~lượng~phạt}(w).
.. raw:: html
Các nhà thống kê gọi số hạng đầu tiên là *trung bình thực nghiệm*, tức
trung bình được tính qua dữ liệu lấy từ phân phối
:math:`P(x) P(y \mid x)`. Nếu dữ liệu được lấy “nhầm” từ phân phối
:math:`q`, ta có thể hiệu chỉnh lại bằng cách sử dụng đồng nhất thức:
.. math::
\begin{aligned}
\int p(\mathbf{x}) f(\mathbf{x}) dx
& = \int q(\mathbf{x}) f(\mathbf{x}) \frac{p(\mathbf{x})}{q(\mathbf{x})} dx.
\end{aligned}
.. raw:: html
Nói cách khác, chúng ta cần đánh lại trọng số cho mỗi mẫu bằng tỉ lệ của
các xác suất mà mẫu được lấy từ đúng phân phối
:math:`\beta(\mathbf{x}) := p(\mathbf{x})/q(\mathbf{x})`. Đáng buồn là
ta không biết tỉ lệ đó, nên trước khi ta có thể làm được bất cứ thứ gì
hữu ích thì ta cần phải ước lượng được nó. Nhiều phương pháp có sẵn sử
dụng cách tiếp cận lý thuyết toán tử màu mè nhằm cố tái cân bằng trực
tiếp toán tử kỳ vọng bằng cách sử dụng nguyên lý chuẩn cực tiểu hay
entropy cực đại. Lưu ý rằng những phương thức này yêu cầu ta lấy mẫu từ
cả phân phối “đúng” :math:`p` (bằng cách sử dụng tập huấn luyện) và phân
phối được dùng để tạo ra tập kiểm tra :math:`q` (việc này hiển nhiên là
có thể được). Tuy nhiên cũng cần để ý là ta chỉ cần mẫu
:math:`\mathbf{x} \sim q(\mathbf{x})`; ta không cần sử dụng đến nhãn
:math:`y \sim q(y)`.
.. raw:: html
Trong trường hợp này có một cách tiếp cận rất hiệu quả và sẽ cho kết quả
tốt gần ngang ngửa, đó là: hồi quy logistic. Đấy là tất cả những gì ta
cần để tính xấp xỉ tỉ lệ xác suất. Chúng ta cho học một bộ phân loại để
phân biệt giữa dữ liệu được lấy từ phân phối :math:`p(\mathbf{x})` và
phân phối :math:`q(x)`. Nếu không thể phân biệt được giữa hai phân phối
thì điều đó có nghĩa là khả năng các mẫu liên quan đến từ một trong hai
phân phối là ngang nhau. Mặt khác, bất kì mẫu nào mà có thể được phân
biệt dễ dàng thì cần được đánh trọng số tăng lên hoặc giảm đi tương ứng.
Để cho đơn giản, giả sử ta có số lượng mẫu đến từ hai phân phối là bằng
nhau, được kí hiệu lần lượt là :math:`\mathbf{x}_i \sim p(\mathbf{x})`
và :math:`\mathbf{x}_i' \sim q(\mathbf{x})`. Ta kí hiệu nhãn :math:`z_i`
bằng 1 cho dữ liệu từ phân phối :math:`p` và -1 cho dữ liệu từ
:math:`q`. Lúc này xác suất trong một bộ dữ liệu được trộn lẫn sẽ là
.. math:: P(z=1 \mid \mathbf{x}) = \frac{p(\mathbf{x})}{p(\mathbf{x})+q(\mathbf{x})} \text{ và~từ~đó } \frac{P(z=1 \mid \mathbf{x})}{P(z=-1 \mid \mathbf{x})} = \frac{p(\mathbf{x})}{q(\mathbf{x})}.
.. raw:: html
Do đó, nếu sử dụng cách tiếp cận hồi quy logistic mà trong đó
:math:`P(z=1 \mid \mathbf{x})=\frac{1}{1+\exp(-f(\mathbf{x}))}`, ta có
.. math::
\beta(\mathbf{x}) = \frac{1/(1 + \exp(-f(\mathbf{x})))}{\exp(-f(\mathbf{x}))/(1 + \exp(-f(\mathbf{x})))} = \exp(f(\mathbf{x})).
.. raw:: html
.. raw:: html
.. raw:: html
Vì vậy, có hai bài toán cần được giải quyết: đầu tiên là bài toán phân
biệt giữa dữ liệu được lấy ra từ hai phân phối, và sau đó là bài toán
cực tiểu hóa với trọng số cho các mẫu được đánh lại với :math:`\beta`,
ví dụ như thông qua các gradient đầu. Dưới đây là một thuật toán nguyên
mẫu để giải quyết hai bài toán trên. Thuật toán này sử dụng tập huấn
luyện không được gán nhãn :math:`X` và tập kiểm tra :math:`Z`:
.. raw:: html
1. Tạo một tập huấn luyện với
:math:`\{(\mathbf{x}_i, -1) ... (\mathbf{z}_j, 1)\}`.
2. Huấn luyện một bộ phân loại nhị phân sử dụng hồi quy logistic để tìm
hàm :math:`f`.
3. Đánh trọng số cho dữ liệu huấn luyện bằng cách sử dụng
:math:`\beta_i = \exp(f(\mathbf{x}_i))`, hoặc tốt hơn là
:math:`\beta_i = \min(\exp(f(\mathbf{x}_i)), c)`.
4. Sử dụng trọng số :math:`\beta_i` để huấn luyện trên :math:`X` với
nhãn :math:`Y`.
.. raw:: html
Lưu ý rằng phương pháp này được dựa trên một giả định quan trọng. Để có
được một kết quả tốt, ta cần đảm bảo rằng mỗi điểm dữ liệu trong phân
phối mục tiêu (tại thời điểm kiểm tra) có xác suất xảy ra tại thời điểm
huấn luyện khác không. Nếu một điểm có :math:`q(\mathbf{x}) > 0` nhưng
:math:`p(\mathbf{x}) = 0`, thì trọng số quan trọng tương ứng bằng vô
hạn.
.. raw:: html
*Mạng Đối sinh* sử dụng một ý tưởng rất giống với mô tả ở trên để thiết
kế một *bộ sinh dữ liệu* có khả năng tạo dữ liệu không thể phân biệt
được với các mẫu được lấy từ một tập dữ liệu tham chiếu. Trong các
phương pháp này, ta sử dụng một mạng :math:`f` để phân biệt dữ liệu thật
với dữ liệu giả, và một mạng thứ hai :math:`g` cố gắng đánh lừa bộ phân
biệt :math:`f` rằng dữ liệu giả là thật. Ta sẽ thảo luận vấn đề này một
cách chi tiết hơn sau.
.. raw:: html
.. raw:: html
.. raw:: html
Hiệu chỉnh Dịch chuyển nhãn
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Để thảo luận về dịch chuyển nhãn, giả định rằng ta đang giải quyết một
bài toán phân loại :math:`k` lớp. Nếu phân phối của nhãn thay đổi theo
thời gian :math:`p(y) \neq q(y)` nhưng các phân phối có điều kiện của
lớp vẫn giữ nguyên :math:`p(\mathbf{x})=q(\mathbf{x})`, thì trọng số
quan trọng sẽ tương ứng với tỉ lệ hợp lý (*likelihood ratio*) của nhãn
:math:`q(y)/p(y)`. Một điều tốt về dịch chuyển nhãn là nếu ta có một mô
hình tương đối tốt (trên phân phối gốc), ta có thể có các ước lượng nhất
quán cho các trọng số này mà không phải làm việc với không gian đầu vào
(trong học sâu, đầu vào thường là dữ liệu nhiều chiều như hình ảnh,
trong khi làm việc với các nhãn thường dễ hơn vì chúng chỉ là các vector
có chiều dài tương ứng với số lượng lớp).
.. raw:: html
Để ước lượng phân phối nhãn mục tiêu, đầu tiên ta dùng một bộ phân loại
sẵn có tương đối tốt (thường được học trên tập huấn luyện) và sử dụng
một tập kiểm định (cùng phân phối với tập huấn luyện) để tính ma trận
nhầm lẫn. Ma trận nhầm lẫn C là một ma trận :math:`k \times k`, trong đó
mỗi cột tương ứng với một nhãn *thật* và mỗi hàng tương ứng với nhãn dự
đoán của mô hình. Giá trị của mỗi phần tử :math:`c_{ij}` là số lượng mẫu
có nhãn thật là :math:`j` *và* nhãn dự đoán là :math:`i`.
.. raw:: html
.. raw:: html
.. raw:: html
Giờ thì ta không thể tính trực tiếp ma trận nhầm lẫn trên dữ liệu mục
tiêu được bởi vì ta không thể quan sát được nhãn của các mẫu trong thực
tế, trừ khi ta đầu tư vào một pipeline phức tạp để đánh nhãn theo thời
gian thực. Tuy nhiên điều mà ta có thể làm là lấy trung bình tất cả dự
đoán của mô hình tại lúc kiểm tra, từ đó có được giá trị đầu ra trung
bình của mô hình :math:`\mu_y`.
.. raw:: html
Hoá ra là dưới các giả định đơn giản — chẳng hạn như bộ phân loại vốn đã
khá chính xác, dữ liệu mục tiêu chỉ chứa ảnh thuộc các lớp đã quan sát
được từ trước, và giả định dịch chuyển nhãn là đúng (đây là giả định lớn
nhất tới bây giờ), thì ta có thể khôi phục phân phối nhãn trên tập kiểm
tra bằng cách giải một hệ phương trình tuyến tính đơn giản
:math:`C \cdot q(y) = \mu_y`. Nếu bộ phân loại đã khá chính xác ngay từ
đầu thì ma trận nhầm lẫn C là khả nghịch và ta có nghiệm
:math:`q(y) = C^{-1} \mu_y`. Ở đây ta đang lạm dụng kí hiệu một chút khi
sử dụng :math:`q(y)` để kí hiệu vector tần suất nhãn. Vì ta quan sát
được nhãn trên dữ liệu gốc, nên có thể dễ dàng ước lượng phân phối
:math:`p(y)`. Sau đó với bất kì mẫu huấn luyện :math:`i` với nhãn
:math:`y`, ta có thể lấy tỉ lệ ước lượng :math:`\hat{q}(y)/\hat{p}(y)`
để tính trọng số :math:`w_i` và đưa vào thuật toán cực tiểu hóa rủi ro
có trọng số được mô tả ở trên.
.. raw:: html
Hiệu chỉnh Dịch chuyển Khái niệm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Khắc phục vấn đề dịch chuyển khái niệm theo một cách có nguyên tắc khó
hơn rất nhiều. Chẳng hạn như khi bài toán đột nhiên chuyển từ phân biệt
chó và mèo sang phân biệt động vật có màu trắng và động vật có màu đen,
hoàn toàn có lý khi tin rằng ta không thể làm gì tốt hơn ngoài việc thu
thập tập nhãn mới và huấn luyện lại từ đầu. May mắn thay vấn đề dịch
chuyển tới mức cực đoan như vậy trong thực tế khá hiếm. Thay vào đó,
điều thường diễn ra là tác vụ cứ dần dần thay đổi. Để làm rõ hơn, ta xét
các ví dụ dưới đây:
.. raw:: html
- Trong ngành quảng cáo điện toán, khi một sản phẩm mới ra mắt, các sản
phẩm cũ trở nên ít phổ biến hơn. Điều này nghĩa là phân phối của các
mẩu quảng cáo và mức phổ biến của chúng sẽ thay đổi dần dần và bất kì
bộ dự đoán tỉ lệ click chuột nào cũng cần thay đổi theo.
- Ống kính của các camera giao thông bị mờ đi theo thời gian do tác
động của môi trường, có ảnh hưởng lớn dần tới chất lượng ảnh.
- Nội dung các mẩu tin thay đổi theo thời gian, tức là tin tức thì
không đổi nhưng các sự kiện mới luôn diễn ra.
.. raw:: html
Với các trường hợp trên, ta có thể sử dụng cùng cách tiếp cận trong việc
huấn luyện mô hình để chúng thích ứng với các biến đổi trong dữ liệu.
Nói cách khác, chúng ta sử dụng trọng số đang có của mạng và chỉ thực
hiện thêm vài bước cập nhật trên dữ liệu mới thay vì huấn luyện lại từ
đầu.
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
.. raw:: html
Phân loại các Bài toán Học máy
------------------------------
.. raw:: html
Ta đã được trang bị kiến thức về cách xử lý các thay đổi trong
:math:`p(x)` và :math:`P(y \mid x)`, giờ đây ta có thể xem xét một số
khía cạnh khác của việc xây dựng các bài toán học máy.
.. raw:: html
- **Học theo batch.** Ở đây ta có dữ liệu và nhãn huấn luyện
:math:`\{(x_1, y_1), \ldots, (x_n, y_n)\}`, được sử dụng để huấn
luyện mạng :math:`f(x, w)`. Sau đó, ta dùng mô hình này để đánh giá
điểm dữ liệu mới :math:`(x, y)` được lấy từ cùng một phân phối. Đây
là giả thuyết mặc định cho bất kỳ bài toán nào mà ta bàn ở đây. Ví
dụ, ta có thể huấn luyện một mô hình phát hiện mèo dựa trên nhiều
hình ảnh của mèo và chó. Sau khi hoàn tất quá trình huấn luyện, ta
đưa mô hình vào một hệ thống thị giác máy tính cho cửa sập thông minh
mà chỉ cho phép mèo đi vào. Hệ thống này sẽ được lắp đặt tại nhà của
khách hàng và nó không bao giờ được cập nhật lại (ngoại trừ một vài
trường hợp hiếm hoi).
- **Học trực tuyến.** Bây giờ hãy tưởng tượng rằng tại một thời điểm ta
chỉ nhận được một mẫu dữ liệu :math:`(x_i, y_i)`. Cụ thể hơn, giả sử
đầu tiên ta có một quan sát :math:`x_i`, sau đó ta cần tính
:math:`f(x_i, w)` và chỉ khi ta hoàn thành việc đưa ra quyết định, ta
mới có thể quan sát giá trị :math:`y_i`, rồi dựa vào nó mà nhận lại
phần thưởng (hoặc chịu mất mát). Nhiều bài toán thực tế rơi vào loại
này. Ví dụ, ta cần dự đoán giá cổ phiếu vào ngày mai, điều này cho
phép ta giao dịch dựa trên dự đoán đó và vào cuối ngày ta sẽ biết
được liệu nó có mang lại lợi nhuận hay không. Nói cách khác, ta có
chu trình sau, trong đó mô hình dần được cải thiện cùng với những
quan sát mới.
.. math::
\mathrm{mô~hình} ~ f_t \longrightarrow
\mathrm{dữ~liệu} ~ x_t \longrightarrow
\mathrm{ước~lượng} ~ f_t(x_t) \longrightarrow
\mathrm{quan~sát} ~ y_t \longrightarrow
\mathrm{mất~mát} ~ l(y_t, f_t(x_t)) \longrightarrow
\mathrm{mô~hình} ~ f_{t+1}
.. raw:: html
- **Máy đánh bạc.** Đây là một *trường hợp đặc biệt* của bài toán trên.
Trong khi ở hầu hết các bài toán ta luôn có một hàm liên tục được
tham số hóa :math:`f` và công việc của ta là học các tham số của nó
(ví dụ như một mạng học sâu), trong bài toán máy đánh bạc ta chỉ có
một số hữu hạn các cần mà ta có thể gạt (tức một số lượng giới hạn
những hành động mà ta có thể thực hiện). Không có gì quá ngạc nhiên
khi với bài toán đơn giản này, ta có được các cơ sở lý thuyết tối ưu
mạnh mẽ hơn. Chúng tôi liệt kê nó ở đây chủ yếu là vì bài toán này
thường được xem (một cách nhầm lẫn) như là một môi trường học tập
khác biệt.
- **Kiểm soát (và Học Tăng cường phi đối kháng).** Trong nhiều trường
hợp, môi trường ghi nhớ những gì ta đã làm. Việc này không nhất thiết
phải có tính chất đối kháng, môi trường chỉ nhớ và phản hồi phụ thuộc
vào những gì đã xảy ra trước đó. Ví dụ, bộ điều khiển của ấm pha cà
phê sẽ quan sát được nhiệt độ khác nhau tùy thuộc vào việc nó có đun
ấm trước đó không. Giải thuật điều khiển PID (*proportional integral
derivative* hay *vi tích phân tỉ lệ*) là một lựa chọn phổ biến để làm
điều đó. Tương tự như vậy, hành vi của người dùng trên một trang tin
tức sẽ phụ thuộc vào những gì ta đã cho họ xem trước đây (chẳng hạn
như là mỗi người chỉ đọc mỗi mẫu tin một lần duy nhất). Nhiều thuật
toán như vậy cấu thành một mô hình của môi trường mà trong đó chúng
muốn làm cho các quyết định của mình trông có vẻ ít ngẫu nhiên hơn
(tức để giảm phương sai).
- **Học Tăng cường.** Trong trường hợp khái quát hơn của môi trường có
khả năng ghi nhớ, ta có thể gặp phải tình huống môi trường đang cố
gắng *hợp tác* với ta (trò chơi hợp tác, đặc biệt là các trò chơi có
tổng khác không), hoặc môi trường sẽ cố gắng *chiến thắng* ta như Cờ
vua, Cờ vây, Backgammon hay StarCraft. Tương tự như vậy, có thể ta
muốn xây dựng một bộ điều khiển tốt cho những chiếc xe tự hành. Những
chiếc xe khác khả năng cao sẽ có những phản ứng đáng kể với cách lái
của những chiếc xe tự hành, ví dụ như cố gắng tránh nó, cố gắng gây
ra tai nạn, cố gắng hợp tác với nó, v.v.
.. raw:: html
Điểm khác biệt mấu chốt giữa các tình huống khác nhau ở trên là: một
chiến lược hoạt động xuyên suốt các môi trường cố định, có thể lại không
hoạt động xuyên suốt được khi môi trường có khả năng thích nghi. Chẳng
hạn, nếu một thương nhân phát hiện ra cơ hội kiếm lời từ chênh lệch giá
cả thị trường, khả năng cao cơ hội đó sẽ biến mất ngay khi anh ta bắt
đầu lợi dụng nó. Tốc độ và cách môi trường thay đổi có ảnh hưởng lớn đến
loại thuật toán mà ta có thể sử dụng. Ví dụ, nếu ta *biết trước* mọi
việc chỉ có thể thay đổi một cách từ từ, ta có thể ép những ước lượng
phải thay đổi dần theo. Còn nếu ta biết môi trường có thể thay đổi ngay
lập tức, nhưng không thường xuyên, ta có thể cho phép điều này xảy ra.
Đối với các nhà khoa học dữ liệu giỏi, những kiến thức này rất quan
trọng trong việc giải quyết các toán dịch chuyển khái niệm khi vấn đề
cần giải quyết lại thay đổi theo thời gian.
.. raw:: html
.. raw:: html
.. raw:: html
Công bằng, Trách nhiệm và Minh bạch trong Học máy
-------------------------------------------------
.. raw:: html
| Cuối cùng, cần ghi nhớ một điều quan trọng sau đây: khi triển khai một
hệ thống học máy, bạn không chỉ đơn thuần cực tiểu hóa hàm đối log hợp
lý hay cực đại hóa độ chính xác mà còn đang tự động hóa một quy trình
quyết định nào đó. Thường thì những hệ thống được tự động hóa việc ra
quyết định mà chúng ta triển khai có thể sẽ gây ra những hậu quả cho
những ai chịu ảnh hưởng bởi quyết định của nó. Nếu chúng ta triển khai
một hệ thống chẩn đoán y khoa, ta cần biết hệ thống này sẽ hoạt động
và không hoạt động với những ai. Bỏ qua những rủi ro có thể lường
trước được để chạy theo phúc lợi của một bộ phận dân số sẽ đi ngược
lại những nguyên tắc đạo đức cơ bản. Ngoài ra, “độ chính xác” hiếm khi
là một thước đo đúng. Khi chuyển những dự đoán thành hành động, chúng
ta thường để ý đến chi phí tiềm tàng của các loại lỗi khác nhau. Nếu
kết quả phân loại một bức ảnh có thể được xem như một sự phân biệt
chủng tộc, trong khi việc phân loại sai sang một lớp khác thì lại vô
hại, bạn có thể sẽ muốn cân nhắc cả các giá trị xã hội khi điều chỉnh
ngưỡng của hệ thống ra quyết định đó. Ta cũng muốn cẩn thận về cách
những hệ thống dự đoán có thể dẫn đến vòng lặp phản hồi. Ví dụ, nếu hệ
thống dự đoán được áp dụng theo cách ngây ngô để dự đoán các hành động
phi pháp và theo đó phân bổ sĩ quan tuần tra, một vòng luẩn quẩn có
thể xuất hiện. Một khu xóm có nhiều tội phạm hơn sẽ có nhiều sĩ quan
tuần tra hơn, phát hiện ra nhiều tội phạm hơn, thêm nhiều dữ liệu huấn
luyện, nhận được dự đoán tốt hơn, dẫn đến nhiều sĩ quan tuần tra hơn,
và càng nhiều tội ác được phát hiện,… Thêm vào đó, chúng ta cũng muốn
cẩn thận ngay từ đầu về việc chúng ta có đang giải quyết đúng vấn đề
hay không.
| Hiện tại, các thuật toán dự đoán đóng một vai trò lớn khi làm bên
trung gian trong việc phân tán thông tin. Những tin tức nào được hiển
thị đến người dùng có nên được quyết định bởi những trang Facebook nào
mà họ *đã thích* hay không? Đây chỉ là một số trong rất nhiều vấn đề
về đạo đức mà bạn có thể bắt gặp trong việc theo đuổi sự nghiệp học
máy của mình.
.. raw:: html
Tóm tắt
-------
.. raw:: html
- Trong nhiều trường hợp, tập huấn luyện và tập kiểm tra không được lấy
mẫu từ cùng một phân phối. Đây là hiện tượng dịch chuyển hiệp biến.
- Dịch chuyển hiệp biến có thể được phát hiện và khắc phục nếu sự dịch
chuyển không quá nghiêm trọng. Thất bại trong việc khắc phục có thể
dẫn đến những kết quả không lường được lúc kiểm thử.
- Trong nhiều trường hợp, môi trường sẽ ghi nhớ những gì chúng ta đã
làm và sẽ phản hồi theo những cách không lường trước được. Chúng ta
cần xem xét điều này khi xây dựng mô hình.
.. raw:: html
Bài tập
-------
.. raw:: html
1. Điều gì có thể xảy ra khi chúng ta thay đổi hành vi của công cụ tìm
kiếm? Người dùng có thể sẽ làm gì? Còn các nhà quảng cáo thì sao?
2. Xây dựng một chương trình phát hiện dịch chuyển hiệp biến. Gợi ý: hãy
xây dựng một hệ thống phân lớp.
3. Xây dựng một chương trình khắc phục vấn đề dịch chuyển hiệp biến.
4. Chuyện tồi tệ gì có thể xảy ra nếu tập huấn luyện và tập kiểm tra rất
khác nhau? Chuyện gì sẽ xảy ra đối với trọng số mẫu?
.. raw:: html
.. raw:: html
.. raw:: html
Thảo luận
---------
- `Tiếng Anh `__
- `Tiếng Việt `__
Những người thực hiện
---------------------
Bản dịch trong trang này được thực hiện bởi:
- Đoàn Võ Duy Thanh
- Lý Phi Long
- Lê Khắc Hồng Phúc
- Nguyễn Duy Du
- Phạm Minh Đức
- Lê Cao Thăng
- Nguyễn Minh Thư
- Nguyễn Thành Nhân
- Phạm Hồng Vinh
- Vũ Hữu Tiệp
.. |image0| image:: ../img/cat3.jpg
.. |image1| image:: ../img/cat2.jpg
.. |image2| image:: ../img/dog1.jpg
.. |image3| image:: ../img/dog2.jpg
.. |image4| image:: ../img/cat-cartoon1.png
.. |image5| image:: ../img/cat-cartoon2.png
.. |image6| image:: ../img/dog-cartoon1.png
.. |image7| image:: ../img/dog-cartoon2.png