.. raw:: html
.. _sec_maximum_likelihood:
Hợp lý Cực đại
==============
.. raw:: html
Một trong những cách tư duy thường thấy nhất trong học máy là quan điểm
về hợp lý cực đại. Đây là khái niệm mà khi làm việc với một mô hình xác
suất mà các tham số chưa biết, các tham số làm cho các điểm dữ liệu đã
quan sát có xác suất xảy ra cao nhất là những tham số hợp lý nhất.
.. raw:: html
Nguyên lý Hợp lý Cực đại
------------------------
.. raw:: html
Nguyên lý này có cách diễn giải theo trường phái Bayes khá hữu ích. Giả
sử rằng ta có một mô hình với các tham số :math:`\boldsymbol{\theta}` và
một tập hợp các mẫu dữ liệu :math:`X`. Cụ thể hơn, ta có thể tưởng tượng
rằng :math:`\boldsymbol{\theta}` là một giá trị duy nhất đại diện cho
xác suất một đồng xu ngửa khi tung, và :math:`X` là một chuỗi các lần
tung đồng xu độc lập. Chúng ta sẽ xem xét ví dụ này sâu hơn ở phần sau.
.. raw:: html
Nếu ta muốn tìm giá trị hợp lý nhất cho các tham số của mô hình, điều đó
có nghĩa là ta muốn tìm
.. math:: \mathop{\mathrm{argmax}} P(\boldsymbol{\theta}\mid X).
:label: eq_max_like
.. raw:: html
Theo quy tắc Bayes, điều này giống với
.. math::
\mathop{\mathrm{argmax}} \frac{P(X \mid \boldsymbol{\theta})P(\boldsymbol{\theta})}{P(X)}.
.. raw:: html
Biểu thức :math:`P(X)` là xác suất sinh dữ liệu độc lập tham số, và nó
hoàn toàn không phụ thuộc vào tham số :math:`\boldsymbol{\theta}`, do đó
ta có thể bỏ qua nó mà không ảnh hưởng tới việc chọn ra
:math:`\boldsymbol{\theta}` tốt nhất. Tương tự, bây giờ ta có thể cho
rằng chúng ta không có giả định trước về bộ tham số nào là tốt hơn hết
thảy, vì vậy ta có thể phát biểu rằng :math:`P(\boldsymbol{\theta})`
cũng không phụ thuộc vào theta! Điều này hợp lý trong ví dụ tung đồng
xu, ở đây xác suất để ra mặt ngửa có thể là bất kỳ giá trị nào trong
khoảng :math:`[0,1]` khi mà ta không có bất kỳ niềm tin nào trước đó
rằng đồng xu có cân xứng hay không (thường được gọi là *tiên nghiệm
không chứa thông tin*). Do đó, ta thấy rằng việc áp dụng quy tắc Bayes
sẽ chỉ ra lựa chọn tốt nhất cho :math:`\boldsymbol{\theta}` là ước lượng
hợp lý cực đại cho :math:`\boldsymbol{\theta}`:
.. math::
\hat{\boldsymbol{\theta}} = \mathop{\mathrm{argmax}} _ {\boldsymbol{\theta}} P(X \mid \boldsymbol{\theta}).
.. raw:: html
Theo thuật ngữ thông thường, xác suất của dữ liệu với các tham số đã cho
(:math:`P(X \mid \boldsymbol{\theta})`) được gọi là *độ hợp lý*.
.. raw:: html
Một ví dụ Cụ thể
~~~~~~~~~~~~~~~~
.. raw:: html
Hãy cùng xem phương pháp này hoạt động như thế nào trong một ví dụ cụ
thể. Giả sử rằng ta có một tham số duy nhất :math:`\theta` biểu diễn cho
xác suất tung đồng xu một lần được mặt ngửa. Khi đó, xác suất nhận được
mặt sấp là :math:`1-\theta`, và vì vậy nếu dữ liệu quan sát :math:`X` là
một chuỗi có :math:`n_H` mặt ngửa và :math:`n_T` mặt sấp, ta có thể sử
dụng tính chất tích các xác suất độc lập với nhau để có được
.. math::
P(X \mid \theta) = \theta^{n_H}(1-\theta)^{n_T}.
.. raw:: html
Nếu ta tung :math:`13` đồng xu và nhận được chuỗi “HHHTHTTHHHHHT”, tức
ta có :math:`n_H = 9` và :math:`n_T = 4`, thì ta nhận được ở đây là
.. math::
P(X \mid \theta) = \theta^9(1-\theta)^4.
.. raw:: html
Một điều thú vị ở ví dụ này là ta biết trước câu trả lời. Thật vậy, nếu
chúng ta phát biểu bằng lời, “Tôi đã tung 13 đồng xu và 9 đồng xu ra mặt
ngửa, dự đoán tốt nhất cho xác suất tung đồng xu được mặt ngửa là bao
nhiêu?” mọi người sẽ đều đoán đúng :math:`9/13`. Điều mà phương pháp khả
năng hợp lý cực đại cung cấp cho chúng ta là một cách để thu được con số
đó từ các nguyên tắc cơ bản sao cho có thể khái quát được cho các tình
huống phức tạp hơn rất nhiều.
.. raw:: html
Với ví dụ này, đồ thị của :math:`P(X \mid \theta)` có dạng như sau:
.. code:: python
%matplotlib inline
from d2l import mxnet as d2l
from mxnet import autograd, np, npx
npx.set_np()
theta = np.arange(0, 1, 0.001)
p = theta**9 * (1 - theta)**4.
d2l.plot(theta, p, 'theta', 'likelihood')
.. figure:: output_maximum-likelihood_vn_ed288b_1_0.svg
.. raw:: html
Xác suất này có giá trị tối đa ở đâu đó gần
:math:`9/13 \approx 0.7\ldots` như đã dự đoán. Để kiểm tra xem nó có nằm
chính xác ở đó không, chúng ta có thể nhờ đến giải tích. Chú ý rằng ở
điểm cực đại, hàm này sẽ phẳng. Do đó, ta có thể tìm ước lượng hợp lý
cực đại :eq:`eq_max_like` bằng cách tìm các giá trị của
:math:`\theta` để đạo hàm bằng 0, rồi xem giá trị nào trả về xác suất
cao nhất. Ta tính toán:
.. math::
\begin{aligned}
0 & = \frac{d}{d\theta} P(X \mid \theta) \\
& = \frac{d}{d\theta} \theta^9(1-\theta)^4 \\
& = 9\theta^8(1-\theta)^4 - 4\theta^9(1-\theta)^3 \\
& = \theta^8(1-\theta)^3(9-13\theta).
\end{aligned}
.. raw:: html
Phương trình này có ba nghiệm: :math:`0`, :math:`1` và :math:`9/13`. Hai
giá trị đầu tiên rõ ràng là cực tiểu, không phải cực đại vì chúng cho
xác suất bằng :math:`0` đối với chuỗi kết quả tung đồng xu. Giá trị cuối
cùng *không* cho xác suất bằng 0 với chuỗi đã cho và do đó nó phải là
ước lượng hợp lý cực đại :math:`\hat \theta = 9/13`.
.. raw:: html
Tối ưu hóa Số học và hàm Log hợp lí Âm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Ví dụ trước khá ổn, nhưng điều gì sẽ xảy ra nếu chúng ta có hàng tỷ tham
số và mẫu dữ liệu.
.. raw:: html
Trước tiên, hãy lưu ý rằng, nếu chúng ta giả định rằng tất cả các mẫu dữ
liệu là độc lập, thì ta có thể không còn thấy tính khả thi từ độ hợp lý
khi chính nó là tích của nhiều xác suất. Thật vậy, mỗi xác suất nằm
trong đoạn :math:`[0,1]`, giá trị thường là :math:`1/2` và tích của
:math:`(1/2)^{1000000000}` nhỏ hơn nhiều so với độ chính xác của máy. Ta
không thể làm việc trực tiếp với biểu thức này.
.. raw:: html
Tuy nhiên, nhắc lại rằng hàm log chuyển đổi tích thành tổng, trong
trường hợp này thì
.. math::
\log((1/2)^{1000000000}) = 1000000000\cdot\log(1/2) \approx -301029995.6\ldots
.. raw:: html
Con số này hoàn toàn nằm trong khoảng giá trị của một số thực dấu phẩy
động :math:`32`-bit với độ chính xác đơn. Vì vậy, chúng ta nên xem xét
*độ hợp lý thang log* (*log-likelihood*), chính là
.. math::
\log(P(X \mid \boldsymbol{\theta})).
.. raw:: html
Vì hàm :math:`x \mapsto \log(x)` đồng biến, việc cực đại hóa độ hợp lý
đồng nghĩa với việc cực đại hóa log hợp lý. Thật vậy trong
:numref:`sec_naive_bayes`, ta sẽ thấy lập luận này được áp dụng khi
làm việc với ví dụ cụ thể cho bộ phân loại Naive Bayes.
.. raw:: html
Ta thường làm việc với các hàm mất mát, với mong muốn cực tiểu hóa
chúng. Ta có thể đổi từ việc tìm hợp lý cực đại thành việc tìm cực tiểu
mất mát bằng cách lấy :math:`-\log(P(X \mid \boldsymbol{\theta}))`, tức
*hàm đối log hợp lý (negative log-likelihood)*.
.. raw:: html
Để minh họa điều này, hãy xem xét bài toán tung đồng xu trước đó và giả
sử rằng ta không biết nghiệm dạng đóng. Ta có thể tính ra
.. math::
-\log(P(X \mid \boldsymbol{\theta})) = -\log(\theta^{n_H}(1-\theta)^{n_T}) = -(n_H\log(\theta) + n_T\log(1-\theta)).
.. raw:: html
Đẳng thức này có thể được lập trình và được tối ưu hóa hoàn toàn ngay cả
với hàng tỷ lần tung đồng xu.
.. code:: python
# Set up our data
n_H = 8675309
n_T = 25624
# Initialize our paramteres
theta = np.array(0.5)
theta.attach_grad()
# Perform gradient descent
lr = 0.00000000001
for iter in range(10):
with autograd.record():
loss = -(n_H * np.log(theta) + n_T * np.log(1 - theta))
loss.backward()
theta -= lr * theta.grad
# Check output
theta, n_H / (n_H + n_T)
.. parsed-literal::
:class: output
(array(0.50172704), 0.9970550284664874)
.. raw:: html
Sự thuận tiện số học chỉ là một trong những lý do khiến mọi người thích
dùng hàm đối log hợp lý. Thật ra còn có một vài lý do khác mà nó có thể
được lựa chọn.
.. raw:: html
Lý do thứ hai mà ta xem xét đến hàm log hợp lý là việc áp dụng các quy
tắc giải tích trở nên đơn giản hơn. Như đã thảo luận ở trên, do các giả
định về tính độc lập, hầu hết các xác suất mà chúng ta gặp phải trong
học máy là tích của các xác suất riêng lẻ.
.. math::
P(X\mid\boldsymbol{\theta}) = p(x_1\mid\boldsymbol{\theta})\cdot p(x_2\mid\boldsymbol{\theta})\cdots p(x_n\mid\boldsymbol{\theta}).
.. raw:: html
Điều này có nghĩa là nếu ta áp dựng trực tiếp quy tắc nhân để tính đạo
hàm thì ta sẽ có được
.. math::
\begin{aligned}
\frac{\partial}{\partial \boldsymbol{\theta}} P(X\mid\boldsymbol{\theta}) & = \left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_1\mid\boldsymbol{\theta})\right)\cdot P(x_2\mid\boldsymbol{\theta})\cdots P(x_n\mid\boldsymbol{\theta}) \\
& \quad + P(x_1\mid\boldsymbol{\theta})\cdot \left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_2\mid\boldsymbol{\theta})\right)\cdots P(x_n\mid\boldsymbol{\theta}) \\
& \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \vdots \\
& \quad + P(x_1\mid\boldsymbol{\theta})\cdot P(x_2\mid\boldsymbol{\theta}) \cdots \left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_n\mid\boldsymbol{\theta})\right).
\end{aligned}
.. raw:: html
Biểu thức này đòi hỏi :math:`n(n-1)` phép nhân, cùng với :math:`(n-1)`
phép cộng, vì vậy tổng thời gian chạy tỷ lệ bình phương với số lượng đầu
vào! Nếu ta khôn khéo trong việc nhóm các phần tử thì độ phức tạp sẽ
giảm xuống tuyến tính, nhưng việc này yêu cầu ta phải suy nghĩ một chút.
Đối với hàm đối log hợp lý, chúng ta có
.. math::
-\log\left(P(X\mid\boldsymbol{\theta})\right) = -\log(P(x_1\mid\boldsymbol{\theta})) - \log(P(x_2\mid\boldsymbol{\theta})) \cdots - \log(P(x_n\mid\boldsymbol{\theta})),
.. raw:: html
điều này đưa đến kết quả là
.. math::
- \frac{\partial}{\partial \boldsymbol{\theta}} \log\left(P(X\mid\boldsymbol{\theta})\right) = \frac{1}{P(x_1\mid\boldsymbol{\theta})}\left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_1\mid\boldsymbol{\theta})\right) + \cdots + \frac{1}{P(x_n\mid\boldsymbol{\theta})}\left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_n\mid\boldsymbol{\theta})\right).
.. raw:: html
Đẳng thức này chỉ yêu cầu :math:`n` phép chia và :math:`n-1` phép cộng,
và do đó thời gian chạy tỷ lệ tuyến tính với số đầu vào.
.. raw:: html
Lý do thứ ba và cũng là cuối cùng khi xem xét hàm đối log hợp lý đó là
sự liên hệ với lý thuyết thông tin, mà chúng ta sẽ thảo luận chi tiết
tại phần :numref:`sec_information_theory`. Đây là một lý thuyết toán
học chặt chẽ đưa ra cách đo lường mức độ thông tin hoặc độ ngẫu nhiên
của một biến ngẫu nhiên. Đối tượng nghiên cứu chính trong lĩnh vực đó là
entropy
.. math::
H(p) = -\sum_{i} p_i \log_2(p_i),
.. raw:: html
công thức trên đo lường độ ngẫu nhiên của một nguồn. Hãy để ý rằng đây
chỉ là giá trị trung bình của :math:`-\log` xác suất, và do đó, nếu ta
lấy hàm đối log hợp lý và chia cho số lượng mẫu dữ liệu, ta sẽ nhận được
một đại lượng liên quan được gọi là entropy chéo. Chỉ riêng việc diễn
giải mang tính lý thuyết này thôi là đủ thuyết phục để ta sử dụng giá
trị đối log hợp lý trung bình trên một tập dữ liệu như một cách đo lường
chất lượng của mô hình.
.. raw:: html
Hợp lý Cực đại cho Biến Liên tục
--------------------------------
.. raw:: html
Tất cả những điều chúng ta đã làm ở trước đều giả định rằng ta đang làm
việc với biến ngẫu nhiên rời rạc, nhưng nếu chúng ta muốn làm việc với
các biến liên tục thì sao?
.. raw:: html
Nói ngắn gọn thì không có thứ gì thay đổi cả, ngoại trừ việc ta thay thế
tất cả giá trị xác suất bằng mật độ xác suất. Nhắc lại rằng chúng ta ký
hiệu mật độ bằng chữ thường :math:`p`, nghĩa là bây giờ ta sẽ có
.. math::
-\log\left(p(X\mid\boldsymbol{\theta})\right) = -\log(p(x_1\mid\boldsymbol{\theta})) - \log(p(x_2\mid\boldsymbol{\theta})) \cdots - \log(p(x_n\mid\boldsymbol{\theta})) = -\sum_i \log(p(x_i \mid \theta)).
.. raw:: html
Câu hỏi lúc này trở thành, “Tại sao điều này lại ổn?” Rốt cuộc, lý do
chúng ta đưa ra khái niệm mật độ là vì xác suất nhận được một kết quả cụ
thể bằng không, và do đó chẳng phải xác suất sinh dữ liệu đối với tập
hợp tham số bất kỳ sẽ bằng không sao?
.. raw:: html
Quả thật điều này là đúng, và việc hiểu tại sao chúng ta có thể chuyển
sang mật độ là một bài tập trong việc truy ra những gì xảy ra đối với
các epsilon.
.. raw:: html
Đầu tiên hãy xác định lại mục tiêu của chúng ta. Giả sử rằng đối với các
biến ngẫu nhiên liên tục, ta không còn muốn tính xác suất tại chính ngay
mỗi giá trị, mà thay vào đó là tìm xác suất trong một phạm vi
:math:`\epsilon` nào đó. Để đơn giản, ta giả định rằng dữ liệu là các
mẫu quan sát lặp lại :math:`x_1, \ldots, x_N` của các biến ngẫu nhiên
được phân phối giống nhau :math:`X_1, \ldots, X_N`. Như chúng ta đã thấy
trước đây, giả định này có thể được biểu diễn như sau
.. math::
\begin{aligned}
&P(X_1 \in [x_1, x_1+\epsilon], X_2 \in [x_2, x_2+\epsilon], \ldots, X_N \in [x_N, x_N+\epsilon]\mid\boldsymbol{\theta}) \\
\approx &\epsilon^Np(x_1\mid\boldsymbol{\theta})\cdot p(x_2\mid\boldsymbol{\theta}) \cdots p(x_n\mid\boldsymbol{\theta}).
\end{aligned}
.. raw:: html
Do đó, nếu ta lấy đối của logarit cho biểu thức này thì ta sẽ nhận được
.. math::
\begin{aligned}
&-\log(P(X_1 \in [x_1, x_1+\epsilon], X_2 \in [x_2, x_2+\epsilon], \ldots, X_N \in [x_N, x_N+\epsilon]\mid\boldsymbol{\theta})) \\
\approx & -N\log(\epsilon) - \sum_{i} \log(p(x_i\mid\boldsymbol{\theta})).
\end{aligned}
.. raw:: html
Nếu chúng ta xem xét biểu thức này, vị trí duy nhất mà :math:`\epsilon`
xuất hiện là trong hằng số cộng :math:`-N\log(\epsilon)`. Hằng số này
hoàn toàn không phụ thuộc vào các tham số :math:`\boldsymbol{\theta}`,
vì vậy lựa chọn tối ưu cho :math:`\boldsymbol{\theta}` không phụ thuộc
vào việc lựa chọn :math:`\epsilon`! Dù ta muốn lấy bốn hoặc bốn trăm chữ
số, lựa chọn :math:`\boldsymbol{\theta}` tốt nhất sẽ không đổi, do đó ta
có thể loại bỏ hẳn epsilon để có được biểu thức mà ta muốn tối ưu là
.. math::
- \sum_{i} \log(p(x_i\mid\boldsymbol{\theta})).
.. raw:: html
Do đó, chúng ta thấy rằng quan điểm hợp lý cực đại có thể áp dụng được
với các biến ngẫu nhiên liên tục dễ dàng như với các biến rời rạc bằng
cách thay thế các xác suất bằng mật độ xác suất.
Tóm tắt
-------
.. raw:: html
- Nguyên lý hợp lý cực đại cho ta biết rằng mô hình phù hợp nhất cho
một tập dữ liệu nhất định là mô hình tạo ra các điểm dữ liệu đó với
xác suất cao nhất.
- Tuy nhiên, thường thì mọi người hay làm việc với hàm đối log hợp lý
vì nhiều lý do: tính ổn định số học, khả năng biến đổi tích thành
tổng (dẫn tới việc đơn giản hóa các phép tính gradient) và mối liên
hệ mật thiết về mặt lý thuyết với lý thuyết thông tin.
- Trong khi áp dụng phương pháp này là đơn giản nhất trong trường hợp
rời rạc, nó cũng có thể hoàn toàn tổng quát hóa cho trường hợp liên
tục bằng cách cực đại hóa mật độ xác suất của các điểm dữ liệu.
Bài tập
-------
.. raw:: html
1. Giả sử bạn biết rằng một biến ngẫu nhiên có mật độ bằng
:math:`\frac{1}{\alpha}e^{-\alpha x}` với một giá trị :math:`\alpha`
nào đó. Bạn nhận được một quan sát duy nhất từ biến ngẫu nhiên này là
số :math:`3`. Giá trị ước lượng hợp lý cực đại cho :math:`\alpha` là
bao nhiêu?
2. Giả sử rằng bạn có tập dữ liệu với các mẫu :math:`\{x_i\}_{i=1}^N`
được lấy từ một phân phối Gauss với giá trị trung bình chưa biết,
nhưng phương sai bằng :math:`1`. Giá trị ước lượng hợp lý cực đại của
trung bình là bao nhiêu?
Thảo luận
---------
- Tiếng Anh: `MXNet `__,
`Pytorch `__,
`Tensorflow `__
- Tiếng Việt: `Diễn đàn Machine Learning Cơ
Bản `__
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
- Trần Yến Thy
- Phạm Minh Đức
- Phạm Đăng Khoa
- Phạm Hồng Vinh