.. raw:: html
.. _sec_information_theory:
Lý thuyết Thông tin
===================
.. raw:: html
Vũ trụ mà chúng ta đang sống thì tràn ngập với thông tin. Thông tin cung
cấp một ngôn ngữ chung giúp vượt qua rào cản ngăn cách nhiều lĩnh vực
riêng biệt: từ thơ của Shakespeare đến các bài báo khoa học của các nhà
nghiên cứu trên Cornell ArXiv, từ bản in Đêm Đầy Sao của Van Gogh đến
Bản Giao Hưởng Số 5 của Beethoven, từ ngôn ngữ lập trình đầu tiên
Plankalkül đến các thuật toán học máy hiện đại nhất. Mọi thứ phải tuân
theo các quy tắc của lý thuyết thông tin, bất kể chúng ở định dạng nào.
Với lý thuyết thông tin, chúng ta có thể đo lường và so sánh lượng thông
tin có trong các tín hiệu khác nhau. Trong phần này, chúng ta sẽ nghiên
cứu các khái niệm cơ bản của lý thuyết thông tin và các ứng dụng của lý
thuyết thông tin trong học máy.
.. raw:: html
Trước khi bắt đầu, chúng ta hãy phác thảo mối quan hệ giữa học máy và lý
thuyết thông tin. Mục tiêu của học máy là trích xuất các đặc trưng đáng
chú ý từ dữ liệu và đưa ra các dự đoán quan trọng. Mặt khác, lý thuyết
thông tin nghiên cứu vấn đề mã hóa, giải mã, truyền và thao tác với
thông tin. Do vậy, lý thuyết thông tin cung cấp ngôn ngữ cơ bản để thảo
luận về việc xử lý thông tin trong các hệ thống học máy. Ví dụ: nhiều
ứng dụng học máy sử dụng mất mát entropy chéo như được mô tả trong
:numref:`sec_softmax`. Mất mát này có thể được trực tiếp rút ra từ các
quan điểm từ góc nhìn lý thuyết thông tin.
.. raw:: html
Thông tin
---------
.. raw:: html
Ta hãy bắt đầu với “linh hồn” của lý thuyết thông tin: thông tin. *Thông
tin* có thể được mã hóa trong bất kỳ thứ gì với một hoặc nhiều chuỗi
định dạng mã hóa. Ta giả sử thử chính mình đưa ra một định nghĩa cho
khái niệm thông tin. Ta có thể bắt đầu từ đâu?
.. raw:: html
Hãy xem thí nghiệm tưởng tượng sau đây. Ta có một người bạn với một bộ
bài. Họ sẽ xáo trộn bộ bài, lật qua một số lá bài và cho chúng ta biết
vài điều về các quân bài. Chúng ta sẽ thử đánh giá nội dung thông tin
của từng phát biểu sau đây.
.. raw:: html
Đầu tiên, họ lật một lá và nói, “Tôi thấy một lá bài.” Điều này không
cung cấp cho ta thông tin nào. Rõ ràng là trong trường hợp này chúng ta
đã biết chắc chắn mệnh đề trên là đúng nên lượng thông tin mà nó chứa sẽ
là 0.
.. raw:: html
Tiếp theo, họ lật một lá khác và nói, “Tôi thấy một lá cơ.” Điều này
cung cấp cho ta một chút thông tin, mà trên thực tế chỉ có thể có
:math:`4` loại chất khác nhau, mỗi chất đều có khả năng như nhau, vì vậy
ta không ngạc nhiên trước kết quả này. Ta hy vọng rằng dù thông tin được
đo đạc dưới bất kể hình thức nào, sự kiện này nên có hàm lượng thông tin
thấp.
.. raw:: html
Tiếp theo, họ lật một lá và nói, “Đây là quân :math:`3` bích.”. Câu trên
chứa nhiều thông tin hơn. Quả thực có :math:`52` kết quả tương đương có
thể xảy ra, và ta đã được cho biết đó là lá bài nào. Đây là một lượng
thông tin trung bình.
.. raw:: html
Hãy đi đến cực hạn. Giả sử rằng cuối cùng họ lật từng lá bài từ bộ bài
và đọc ra toàn bộ trình tự của bộ bài đã bị xáo trộn đó. Có :math:`52!`
các thứ tự khác nhau cho bộ bài với khả năng như nhau, vì vậy chúng ta
cần rất nhiều thông tin để biết được chính xác trình tự rút bài.
.. raw:: html
Bất kỳ khái niệm thông tin nào chúng ta phát triển phải phù hợp với trực
giác này. Thật vậy, trong phần tiếp theo, chúng ta sẽ học cách tính toán
rằng các sự kiện trên có tương ứng :math:`0\text{ bit}`,
:math:`2\text{ bit}`, :math:`~5.7\text{ bit}`, và
:math:`~225.6\text{ bit}` thông tin.
.. raw:: html
Nếu đọc hết những thí nghiệm tưởng tượng này, chúng ta thấy một ý tưởng
tự nhiên. Để khởi đầu, thay vì quan tâm đến kiến thức đã biết, chúng ta
có thể xây dựng ý tưởng là thông tin đại diện cho mức độ bất ngờ hoặc
xác suất trừu tượng của sự kiện. Ví dụ, nếu chúng ta muốn mô tả một sự
kiện hiếm gặp, chúng ta cần rất nhiều thông tin. Đối với một sự kiện phổ
biến, chúng ta có thể không cần nhiều thông tin.
.. raw:: html
Năm 1948, Claude E. Shannon thiết lập lĩnh vực lý thuyết thông tin qua
bài báo khoa học *Lý thuyết Toán cho Truyền tải Thông tin - A
Mathematical Theory of Communication* :cite:`Shannon.1948`. Trong bài
báo của mình, Shannon đưa ra khái niệm entropy thông tin. Chúng ta sẽ
bắt đầu từ đây.
.. raw:: html
Lượng tin
~~~~~~~~~
.. raw:: html
Vì thông tin biểu diễn xác suất trừu tượng của một sự kiện, làm thế nào
để chúng ta ánh xạ xác suất đó thành số lượng bit? Shannon đã giới thiệu
thuật ngữ *bit* làm đơn vị thông tin, mà ban đầu được đề xuất bởi John
Tukey. Vậy “bit” là gì và tại sao ta sử dụng nó để đo lường thông tin?
Trong quá khứ, một máy phát tín hiệu chỉ có thể gửi hoặc nhận hai loại
mã: :math:`0` và :math:`1`. Mà thật ra mã hóa nhị phân vẫn được sử dụng
phổ biến trên tất cả các máy tính kỹ thuật số hiện đại. Bằng cách này,
bất kỳ thông tin nào cũng được mã hóa bởi một chuỗi :math:`0` và
:math:`1`. Và do đó, một chuỗi các chữ số nhị phân (*binary*) có độ dài
:math:`n` chứa :math:`n` bit thông tin.
.. raw:: html
Bây giờ, giả sử rằng đối với bất kỳ chuỗi mã nào, mỗi giá trị :math:`0`
hoặc :math:`1` xuất hiện với xác suất là :math:`\frac{1}{2}`. Do đó, sự
kiện :math:`X` với một chuỗi mã có độ dài :math:`n`, xảy ra với xác suất
:math:`\frac{1}{2^n}`. Đồng thời, như chúng tôi đã đề cập trước đây,
chuỗi số này chứa :math:`n` bit thông tin. Vì vậy, liệu có thể tổng quát
hóa thành một hàm toán học chuyển xác suất :math:`p` thành số lượng bit
không? Shannon đưa ra câu trả lời bằng cách định nghĩa *lượng tin*
.. math:: I(X) = - \log_2 (p),
.. raw:: html
là số *bit* thông tin ta đã nhận cho sự kiện :math:`X` này. Lưu ý rằng
ta sẽ luôn sử dụng logarit cơ số 2 trong phần này. Để đơn giản, phần còn
lại của phần này sẽ bỏ qua cơ số 2 trong ký hiệu logarit, tức là
:math:`\log(.)` luôn có nghĩa là :math:`\log_2(.)`. Ví dụ: mã “0010” có
lượng tin là
.. math:: I(\text{"0010"}) = - \log (p(\text{"0010"})) = - \log \left( \frac{1}{2^4} \right) = 4 \text{ bits}.
.. raw:: html
Chúng ta có thể tính toán lượng tin như phần dưới đây. Trước đó, hãy
nhập tất cả các gói cần thiết trong phần này.
.. code:: python
from mxnet import np
from mxnet.metric import NegativeLogLikelihood
from mxnet.ndarray import nansum
import random
def self_information(p):
return -np.log2(p)
self_information(1 / 64)
.. parsed-literal::
:class: output
6.0
.. raw:: html
Entropy
-------
.. raw:: html
Do lượng tin chỉ đo lường thông tin từ một biến cố rời rạc đơn lẻ, chúng
ta cần một thước đo khái quát hơn cho cả biến ngẫu nhiên có phân bố rời
rạc và liên tục.
.. raw:: html
Phát triển Lý thuyết Entropy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Hãy phân tích cụ thể hơn. Dưới đây là các phát biểu không chính thức của
*các tiên đề Shannon về entropy*. Chúng buộc ta đi tới một định nghĩa
độc nhất về thông tin. Một phiên bản chính quy của những tiên đề này
cùng với một số tiên đề khác có thể được tìm thấy trong
:cite:`Csiszar.2008`.
.. raw:: html
1. Thông tin thu được bằng cách quan sát một biến ngẫu nhiên không phụ
thuộc vào các yếu tố, hay sự xuất hiện của các yếu tố bổ sung mà có
xác suất bằng 0.
2. Thông tin thu được bằng cách quan sát hai biến ngẫu nhiên không lớn
hơn tổng thông tin thu được khi quan sát chúng một cách riêng rẽ. Nếu
hai biến ngẫu nhiên là độc lập thì thông tin thu được từ hai cách
bằng nhau.
3. Thông tin thu được khi quan sát những biến cố (gần như) chắc chắn thì
(gần như) bằng 0.
.. raw:: html
Việc chứng minh các tiên đề trên nằm ngoài phạm vi của cuốn sách, điều
quan trọng cần nhớ là chúng xác định một cách độc nhất hình thái mà
entropy phải có. Chỉ có duy nhất một điều chưa xác định từ những phát
biểu trên là về việc chọn đơn vị cho entropy, mà điều này thường được
chuẩn hóa bằng cách đặt thông tin cung cấp bởi một lần lật đồng xu cân
đối đồng chất là một bit, như đã thấy trước đó.
.. raw:: html
Định nghĩa
~~~~~~~~~~
.. raw:: html
Cho một biến ngẫu nhiên :math:`X` bất kỳ tuân theo phân phối xác suất
:math:`P` với hàm mật độ xác suất (p.d.f) hoặc hàm khối xác suất (p.m.f)
:math:`p(x)`, ta đo lượng thông tin kỳ vọng thu được thông qua *entropy*
(hoặc *entropy Shannon*):
.. math:: H(X) = - E_{x \sim P} [\log p(x)].
:label: eq_ent_def
.. raw:: html
Cụ thể hơn, nếu :math:`X` rời rạc:
.. math:: H(X) = - \sum_i p_i \log p_i \text{, where } p_i = P(X_i).
.. raw:: html
Ngược lại, nếu :math:`X` liên tục, ta gọi là *entropy vi phân*
(*differential entropy*):
.. math:: H(X) = - \int_x p(x) \log p(x) \; dx.
.. raw:: html
Chúng ta có thể định nghĩa entropy như sau.
.. code:: python
def entropy(p):
entropy = - p * np.log2(p)
# Operator nansum will sum up the non-nan number
out = nansum(entropy.as_nd_ndarray())
return out
entropy(np.array([0.1, 0.5, 0.1, 0.3]))
.. parsed-literal::
:class: output
[1.6854753]
.. raw:: html
Diễn giải
~~~~~~~~~
.. raw:: html
Bạn có thể thắc mắc: trong định nghĩa entropy :eq:`eq_ent_def`, tại
sao chúng ta sử dụng kỳ vọng của logarit âm? Dưới đây là một số cách
giải thích trực quan.
.. raw:: html
Đầu tiên, tại sao chúng ta sử dụng hàm *logarit* :math:`\log`? Giả sử
:math:`p(x) = f_1(x) f_2(x) \ldots, f_n(x)`, khi mỗi hàm thành tố
:math:`f_i(x)` độc lập lẫn nhau. Điều này nghĩa là mỗi :math:`f_i(x)`
đóng góp một cách độc lập vào tổng thông tin thu được từ :math:`p(x)`.
Như đã thảo luận ở trên, ta muốn công thức entropy là phép cộng trên các
biến ngẫu nhiên độc lập. May mắn thay, hàm :math:`\log` có thể chuyển
tích thành tổng.
.. raw:: html
Tiếp theo, tại sao chúng ta sử dụng :math:`\log` *âm*? Một cách trực
quan, những biến cố xảy ra thường xuyên sẽ chứa ít thông tin hơn những
biến cố hiếm vì ta thường thu được nhiều thông tin hơn từ những trường
hợp bất thường. Do đó, ta cần thiết lập mối quan hệ đơn điệu giảm giữa
xác suất của biến cố và entropy của chúng, và muốn entropy luôn dương
(vì các quan sát mới không nên buộc ta quên đi những gì đã biết). Tuy
nhiên, hàm :math:`\log` lại là đơn điệu tăng, và có giá trị âm với xác
suất trong đoạn :math:`[0, 1]`. Vậy nên ta thêm dấu âm vào trước hàm
:math:`\log`.
.. raw:: html
Cuối cùng, hàm *kỳ vọng* đến từ đâu? Xét một biến ngẫu nhiên :math:`X`.
Ta có thể diễn giải lượng tin (*self-information*) (:math:`-\log(p)`)
như mức độ *bất ngờ* khi quan sát được một kết quả cụ thể nào đó. Thật
vậy, khi xác suất xấp xỉ bằng 0, mức độ bất ngờ tiến tới vô cùng. Tương
tự, chúng ta có thể diễn giải entropy như mức độ bất ngờ trung bình từ
việc quan sát :math:`X`. Ví dụ, tưởng tượng một hệ thống máy đánh bạc
đưa ra các ký hiệu độc lập :math:`{s_1, \ldots, s_k}` với xác suất lần
lượt là :math:`{p_1, \ldots, p_k}`. Khi đó, entropy của hệ thống này
bằng với lượng tin trung bình thu được từ việc quan sát mỗi kết quả,
tức:
.. math:: H(S) = \sum_i {p_i \cdot I(s_i)} = - \sum_i {p_i \cdot \log p_i}.
.. raw:: html
Tính chất của Entropy
~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Bằng các ví dụ và diễn giải phía trên, ta có thể rút ra các tính chất
sau của entropy :eq:`eq_ent_def`. Ở đây, ta xem :math:`X` là một
biến cố và :math:`P` là phân phối xác suất của :math:`X`.
.. raw:: html
- Entropy có giá trị không âm, tức :math:`H(X) \geq 0, \forall X`.
- Nếu :math:`X \sim P` có hàm mật độ xác suất hoặc hàm khối xác suất
:math:`p(x)`, và ta muốn ước lượng :math:`P` bằng một phân phối xác
suất mới :math:`Q` với hàm mật độ xác suất hoặc hàm khối xác suất
:math:`q(x)`, ta có:
.. math:: H(X) = - E_{x \sim P} [\log p(x)] \leq - E_{x \sim P} [\log q(x)], \text{ dấu bằng xảy ra khi và chỉ khi } P = Q.
Ngoài ra, :math:`H(X)` cho biết cận dưới của số bit trung bình cần
dùng để mã hóa các giá trị lấy từ :math:`P`.
- Nếu :math:`X \sim P`, :math:`x` sẽ chứa lượng thông tin cực đại nếu
mọi biến cố khả dĩ chứa lượng thông tin như nhau. Cụ thể, nếu
:math:`P` là phân phối rời rạc với :math:`k` lớp
:math:`\{p_1, \ldots, p_k \}`:
.. math:: H(X) \leq \log(k), \text{ dấu bằng xảy ra khi và chỉ khi } p_i = \frac{1}{k}, \forall i.
Nếu :math:`P` là phân phối liên tục thì sẽ phức tạp hơn. Tuy nhiên,
nếu ta giả sử thêm rằng :math:`P` có miền giá trị nằm trong một
khoảng hữu hạn (với tất cả giá trị nằm trong khoảng :math:`0` và
:math:`1`), :math:`P` sẽ có entropy cực đại nếu nó là phân phối đều
trong khoảng đó.
.. raw:: html
Thông tin Tương hỗ
------------------
.. raw:: html
Ta đã định nghĩa entropy của một biễn ngẫu nhiên :math:`X` duy nhất, vậy
còn entropy của một cặp biến ngẫu nhiên :math:`(X,Y)` thì sao? Ta xem
xét khái niệm này để trả lời các câu hỏi: “Thông tin chứa trong cả
:math:`X` và :math:`Y` sẽ trông như thế nào so với thông tin trong từng
biến? Có thông tin thừa không, hay chúng đều độc nhất?”
.. raw:: html
Trong phần thảo luận dưới đây, chúng tôi sẽ luôn dùng :math:`(X,Y)` để
ký hiệu một cặp biễn ngẫu nhiên tuân theo phân phối xác suất kết hợp
:math:`P` với hàm mật độ xác suất hoặc hàm khối xác suất
:math:`p_{X,Y}(x,y)`, còn :math:`X` và :math:`Y` lần lượt tuân theo phân
phối xác suất :math:`p_X(x)` và :math:`p_Y(y)`.
.. raw:: html
Entropy Kết hợp
~~~~~~~~~~~~~~~
.. raw:: html
Tương tự như entropy của một biến ngẫu nhiên :eq:`eq_ent_def`, ta
định nghĩa *entropy kết hợp* (*joint entropy*) :math:`H(X,Y)` của cặp
biến ngẫu nhiên :math:`(X,Y)` như sau
.. math:: H(X, Y) = −E_{(x, y) \sim P} [\log p_{X, Y}(x, y)].
:label: eq_joint_ent_def
.. raw:: html
Nếu :math:`(X,Y)` là rời rạc:
.. math:: H(X, Y) = - \sum_{x} \sum_{y} p_{X, Y}(x, y) \log p_{X, Y}(x, y).
.. raw:: html
Mặt khác, nếu :math:`(X,Y)` là liên tục, ta định nghĩa *entropy kết hợp
vi phân (differential joint entropy)* như sau:
.. math:: H(X, Y) = - \int_{x, y} p_{X, Y}(x, y) \ \log p_{X, Y}(x, y) \;dx \;dy.
.. raw:: html
Ta có thể xem :eq:`eq_joint_ent_def` như tổng mức độ ngẫu nhiên của
cặp biến ngẫu nhiên. Ở một cực trị, nếu chúng giống hệt nhau
(:math:`X = Y`), thông tin của cặp biến này chính là thông tin của từng
biến: :math:`H(X,Y) = H(X) = H(Y)`. Ở cực trị còn lại, nếu :math:`X` và
:math:`Y` độc lập thì :math:`H(X,Y) = H(X) + H(Y)`. Tất nhiên, thông tin
chứa trong một cặp biến ngẫu nhiên sẽ không thể nhỏ hơn entropy của từng
biến ngẫu nhiên và không thể lớn hơn tổng entropy của chúng.
.. math::
H(X), H(Y) \le H(X, Y) \le H(X) + H(Y).
.. raw:: html
Hãy cùng lập trình entropy kết hợp từ đầu.
.. code:: python
def joint_entropy(p_xy):
joint_ent = -p_xy * np.log2(p_xy)
# Operator nansum will sum up the non-nan number
out = nansum(joint_ent.as_nd_ndarray())
return out
joint_entropy(np.array([[0.1, 0.5], [0.1, 0.3]]))
.. parsed-literal::
:class: output
[1.6854753]
.. raw:: html
Hãy để ý rằng đây chính là *đoạn mã* từ trước, nhưng giờ ta hiểu nó theo
cách khác khi làm việc với phân phối kết hợp của hai biến ngẫu nhiên.
.. raw:: html
Entropy có Điều kiện
~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Entropy kết hợp định nghĩa phía trên là lượng thông tin chứa trong một
cặp biến ngẫu nhiên. Đại lượng này khá hữu ích, nhưng thường nó không
phải là thứ mà ta quan tâm. Hãy xem xét trong ngữ cảnh học máy. Gọi
:math:`X` là biến ngẫu nhiên (hoặc vector biến ngẫu nhiên) mô tả giá trị
các điểm ảnh trong một bức ảnh, và :math:`Y` là biến ngẫu nhiên mô tả
nhãn lớp. :math:`X` chứa một lượng thông tin rất lớn — do một bức ảnh tự
nhiên khá phức tạp. Tuy nhiên, lượng thông tin trong :math:`Y` khi ta đã
thấy bức ảnh nên là nhỏ. Tất nhiên, bức ảnh chứa một chữ số cũng nên
chứa thông tin đó là chữ số nào, trừ khi chữ số trong ảnh không thể đọc
được. Vì vậy, để tiếp tục mở rộng lý thuyết thông tin, ta cần suy luận
được lượng thông tin trong một biến ngẫu nhiên khi nó phụ thuộc vào một
biến khác.
.. raw:: html
Trong lý thuyết xác suất, *xác suất có điều kiện* đo mối quan hệ giữa
các biến. Bây giờ ta muốn định nghĩa *entropy có điều kiện*
(*conditional entropy*) :math:`H(Y \mid X)` theo cách tương tự dưới
dạng:
.. math:: H(Y \mid X) = - E_{(x, y) \sim P} [\log p(y \mid x)],
:label: eq_cond_ent_def
.. raw:: html
trong đó :math:`p(y \mid x) = \frac{p_{X, Y}(x, y)}{p_X(x)}` là xác suất
có điều kiện. Cụ thể, nếu :math:`(X,Y)` là rời rạc, ta có:
.. math:: H(Y \mid X) = - \sum_{x} \sum_{y} p(x, y) \log p(y \mid x).
.. raw:: html
Nếu :math:`(X,Y)` là liên tục, *entropy có điều kiện vi phân* được định
nghĩa tương tự như sau:
.. math:: H(Y \mid X) = - \int_x \int_y p(x, y) \ \log p(y \mid x) \;dx \;dy.
.. raw:: html
Bây giờ một câu hỏi tự nhiên là: *entropy có điều kiện*
:math:`H(Y \mid X)` có mối quan hệ gì với entropy :math:`H(X)` và
entropy kết hợp :math:`H(X,Y)`? Sử dụng các định nghĩa ở trên, ta có thể
biểu diễn mối quan hệ đó một cách gọn gàng:
.. math:: H(Y \mid X) = H(X, Y) - H(X).
.. raw:: html
Điều này có thể được giải thích một cách trực quan như sau: thông tin
trong :math:`Y` khi biết :math:`X` (:math:`H(Y \mid X)`) bằng với thông
tin trong cả :math:`X` và :math:`Y` (:math:`H(X, Y)`) trừ đi thông tin
đã có trong :math:`X`. Nó cho ta biết thông tin có trong :math:`Y` mà
không chứa trong :math:`X`.
.. raw:: html
Bây giờ, hãy cùng lập trình entropy có điều kiện
:eq:`eq_cond_ent_def` từ đầu.
.. code:: python
def conditional_entropy(p_xy, p_x):
p_y_given_x = p_xy/p_x
cond_ent = -p_xy * np.log2(p_y_given_x)
# Operator nansum will sum up the non-nan number
out = nansum(cond_ent.as_nd_ndarray())
return out
conditional_entropy(np.array([[0.1, 0.5], [0.2, 0.3]]), np.array([0.2, 0.8]))
.. parsed-literal::
:class: output
[0.8635472]
.. raw:: html
Thông tin Tương hỗ
~~~~~~~~~~~~~~~~~~
.. raw:: html
Với định nghĩa trước đó về các biến ngẫu nhiên :math:`(X, Y)`, bạn có
thể tự hỏi:" Ta đã biết có bao nhiêu thông tin nằm trong Y nhưng không
nằm ở trong X, liệu có thể biết được có bao nhiêu thông tin giống nhau
giữa :math:`X` và :math:`Y` không?". Đại lượng đó là *thông tin tương
hỗ* của :math:`(X, Y)`, ký hiệu là :math:`I(X, Y)`.
.. raw:: html
Thay vì đề cập ngay đến định nghĩa chính thức, hãy cùng luyện tập trực
giác bằng cách suy luận biểu thức thông tin tương hỗ dựa trên những khái
niệm mà chúng ta đã xây dựng trước đó. Mục tiêu của chúng ta là tìm được
thông tin giống nhau giữa hai biến ngẫu nhiên. Ta có thể thử bắt đầu với
thông tin chứa trong cả :math:`X` và :math:`Y`, sau đó bỏ đi những thông
tin không giống nhau. Thông tin chứa trong cả :math:`X` và :math:`Y` là
:math:`H(X, Y)`. Thông tin nằm trong :math:`X` nhưng không nằm trong
:math:`Y` là H(X :raw-latex:`\mid `Y)$, tương tự, thông tin nằm trong
:math:`Y` nhưng không nằm trong :math:`X` là :math:`H(Y \mid X)`. Do đó,
ta có thông tin tương hỗ như sau:
.. math::
I(X, Y) = H(X, Y) - H(Y \mid X) − H(X \mid Y).
.. raw:: html
Thật vậy, đây là định nghĩa hợp lệ của thông tin tương hỗ. Nếu ta thay
các số hạng trên bằng định nghĩa của chúng, tổng hợp lại, rồi biến đổi
đại số một chút, ta sẽ có:
.. math:: I(X, Y) = E_{x} E_{y} \left\{ p_{X, Y}(x, y) \log\frac{p_{X, Y}(x, y)}{p_X(x) p_Y(y)} \right\}.
:label: eq_mut_ent_def
.. raw:: html
Ta có thể tóm tắt tất cả những mối quan hệ nêu trên ở hình
:numref:`fig_mutual_information`. Đây là một minh họa trực quan tuyệt
vời để hiểu tại sao các mệnh đề sau đây đều tương đương với
:math:`I(X, Y)`.
- :math:`H(X) − H(X \mid Y)`
- :math:`H(Y) − H(Y \mid X)`
- :math:`H(X) + H(Y) − H(X, Y)`
.. raw:: html
.. _fig_mutual_information:
.. figure:: ../img/mutual_information.svg
Mối quan hệ giữa thông tin tương hỗ với entropy kết hợp và entropy có
điều kiện.
.. raw:: html
Theo nhiều cách ta có thể xem thông tin tương hỗ
:eq:`eq_mut_ent_def` như là phần mở rộng của hệ số tương quan trong
:numref:`sec_random_variables`. Đại lượng này cho phép chúng ta hiểu
không chỉ về mối quan hệ tuyến tính của các biến, mà còn cả lượng thông
tin tối đa mà hai biến chia sẻ với nhau.
.. raw:: html
Bây giờ, hãy cùng lập trình thông tin tương hỗ từ đầu.
.. code:: python
def mutual_information(p_xy, p_x, p_y):
p = p_xy / (p_x * p_y)
mutual = p_xy * np.log2(p)
# Operator nansum will sum up the non-nan number
out = nansum(mutual.as_nd_ndarray())
return out
mutual_information(np.array([[0.1, 0.5], [0.1, 0.3]]),
np.array([0.2, 0.8]), np.array([[0.75, 0.25]]))
.. parsed-literal::
:class: output
[0.7194603]
.. raw:: html
Tính chất của Thông tin Tương Hỗ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Thay vì ghi nhớ định nghĩa thông tin tương hỗ :eq:`eq_mut_ent_def`,
bạn chỉ cần lưu ý những tính chất nổi trội của nó:
.. raw:: html
- Thông tin tương hỗ có tính đối xứng: :math:`I(X, Y) = I(Y, X)`.
- Thông tin tương hỗ có giá trị không âm: :math:`I(X, Y) \geq 0`.
- :math:`I(X, Y) = 0` khi và chỉ khi :math:`X` và :math:`Y` là hai biến
độc lập. Ví dụ, nếu :math:`X` và :math:`Y` độc lập thì việc biết
thông tin của :math:`Y` không cho ta thông tin của :math:`X` và ngược
lại, do đó thông tin tương hỗ của chúng bằng 0.
- Ngoài ra, nếu :math:`X` là hàm nghịch đảo của :math:`Y`, thì
:math:`Y` và :math:`X` có chung toàn bộ thông tin và
.. math:: I(X, Y) = H(Y) = H(X).
.. raw:: html
Thông tin Tương hỗ theo từng Điểm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Khi bắt đầu tìm hiểu về entropy ở đầu chương này, ta đã diễn giải
:math:`-\log(p_X(x))` như mức độ *ngạc nhiên* với kết quả cụ thể của
biến ngẫu nhiên. Ta có thể diễn giải tương tự với logarit trong thông
tin tương hỗ, thường được biết đến với cái tên *thông tin tương hỗ theo
từng điểm (pointwise mutual information)*:
.. math:: \mathrm{pmi}(x, y) = \log\frac{p_{X, Y}(x, y)}{p_X(x) p_Y(y)}.
:label: eq_pmi_def
.. raw:: html
:eq:`eq_pmi_def` so sánh xác suất :math:`x` và :math:`y` xảy ra
đồng thời qua phân phối kết hợp với khi chúng cùng xảy ra qua 2 phân
phối ngẫu nhiên độc lập. Nếu kết quả lớn và dương, thì :math:`x` và
:math:`y` có xác suất xảy ra đồng thời qua phân phối kết hợp cao hơn
nhiều. (*chú ý: mẫu số :math:`p_X(x) p_Y(y)` là xác suất của hai đầu ra
độc lập*), ngược lại nếu kết quả lớn và âm, thì xác suất xảy ra đồng
thời qua phân phối kết hợp sẽ rất thấp.
.. raw:: html
Điều này cho phép ta diễn giải thông tin tương hỗ
:eq:`eq_mut_ent_def` như độ ngạc nhiên trung bình khi hai biến cố
xảy ra đồng thời so với độ ngạc nhiên khi chúng là hai biến độc lập.
.. raw:: html
Ứng dụng Thông tin Tương hỗ
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Thông tin tương hỗ có thể hơi trừu tượng theo định nghĩa thuần túy, vậy
nó liên quan như thế nào đến học máy? Trong xử lý ngôn ngữ tự nhiên, một
trong những vấn đề khó khăn nhất là *giải quyết sự mơ hồ*, tức nghĩa của
từ đang không rõ ràng trong ngữ cảnh. Ví dụ, gần đây có một tiêu đề
trong bản tin thông báo rằng “Amazon đang cháy”. Bạn có thể tự hỏi là
liệu công ty Amazon có một tòa nhà bị cháy, hay rừng Amazon đang cháy.
.. raw:: html
Thông tin tương hỗ có thể giúp ta giải quyết sự mơ hồ này. Đầu tiên, ta
tìm nhóm từ có thông tin tương hỗ tương đối lớn tới công ty Amazon,
chẳng hạn như thương mại điện tử, công nghệ và trực tuyến. Thứ hai, ta
tìm một nhóm từ khác có một thông tin tương hỗ tương đối lớn tới rừng
mưa Amazon, chẳng hạn như mưa, rừng và nhiệt đới. Khi cần phân biệt
“Amazon”, ta có thể so sánh nhóm nào xuất hiện nhiều hơn trong ngữ cảnh
của từ này. Trong trường hợp này, bài báo sẽ tiếp tục mô tả khu rừng và
ngữ cảnh sẽ được làm rõ.
.. raw:: html
Phân kỳ Kullback–Leibler
------------------------
.. raw:: html
Như đã thảo luận trong :numref:`sec_linear-algebra`, ta có thể sử dụng
chuẩn (*norms*) để đo khoảng cách giữa hai điểm trong không gian với số
chiều bất kỳ. Ta muốn thực hiện công việc tương tự với các phân phối xác
suất. Có nhiều cách để giải quyết vấn đề này, nhưng lý thuyết thông tin
cung cấp một trong những cách tốt nhất. Bây giờ ta sẽ tìm hiểu về *phân
kỳ Kullback–Leibler (KL)* (*Kullback–Leibler divergence*), là phương
pháp đo lường xem hai phân phối có gần nhau hay không.
.. raw:: html
Định nghĩa
~~~~~~~~~~
.. raw:: html
Cho một biến ngẫu nhiên :math:`X` tuân theo phân phối xác suất :math:`P`
với hàm mật độ xác suất hay hàm khối xác suất là :math:`p(x)`, và ta ước
lượng :math:`P` bằng một phân phối xác suất :math:`Q` khác với hàm mật
độ xác suất hoặc hàm khối xác suất :math:`q(x)`. Khi đó, *phân kỳ
Kullback–Leibler* (hoặc *entropy tương đối*) giữa :math:`P` và :math:`Q`
là
.. math:: D_{\mathrm{KL}}(P\|Q) = E_{x \sim P} \left[ \log \frac{p(x)}{q(x)} \right].
:label: eq_kl_def
.. raw:: html
Như với thông tin tương hỗ theo từng điểm :eq:`eq_pmi_def`, ta lại
có thể diễn giải hạng tử logarit:
:math:`-\log \frac{q (x)}{p (x)} = -\log(q(x)) - (-\log(p(x)))` sẽ lớn
và dương nếu ta thấy :math:`x` xuất hiện thường xuyên hơn theo phân phối
:math:`P` so với mức ta kỳ vọng cho phân phối :math:`Q`, và lớn và âm
nếu chúng ta thấy kết quả ít hơn nhiều so với kỳ vọng. Theo cách này, ta
có thể hiểu nó là mức độ ngạc nhiên *tương đối* khi quan sát phân phối
mục tiêu so với phân phối tham chiếu.
.. raw:: html
Ta hãy thực hiện tính phân kỳ KL từ đầu.
.. code:: python
def kl_divergence(p, q):
kl = p * np.log2(p / q)
out = nansum(kl.as_nd_ndarray())
return out.abs().asscalar()
.. raw:: html
Các tính chất của Phân kỳ KL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Hãy cùng xem xét một số tính chất của phân kỳ KL :eq:`eq_kl_def`.
.. raw:: html
- Phân kỳ KL là bất đối xứng, tức tồn tại :math:`P,Q` sao cho
.. math:: D_{\mathrm{KL}}(P\|Q) \neq D_{\mathrm{KL}}(Q\|P).
- Phân kỳ KL có giá trị không âm, tức
.. math:: D_{\mathrm{KL}}(P\|Q) \geq 0.
\ Chú ý rằng dấu bằng xảy ra chỉ khi :math:`P = Q`.
- Nếu tồn tại :math:`x` sao cho :math:`p(x) > 0` và :math:`q(x) = 0`
thì :math:`D_{\mathrm{KL}}(P\|Q) = \infty`.
- Phân kỳ KL có mối quan hệ mật thiết với thông tin tương hỗ. Ngoài các
dạng trong :numref:`fig_mutual_information`, thông tin tương hỗ
:math:`I(X, Y)` về mặt số học cũng tương đương với các dạng sau:
1. :math:`D_{\mathrm{KL}}(P(X, Y) \ \| \ P(X)P(Y))`;
2. :math:`E_Y \{ D_{\mathrm{KL}}(P(X \mid Y) \ \| \ P(X)) \}`;
3. :math:`E_X \{ D_{\mathrm{KL}}(P(Y \mid X) \ \| \ P(Y)) \}`.
Với dạng đầu tiên, ta diễn giải thông tin tương hỗ dưới dạng phân kỳ
KL giữa :math:`P(X, Y)` và tích của :math:`P(X)` và :math:`P(Y)`, đây
là phép đo mức độ khác nhau của phân phối kết hợp so với phân phối
khi hai biến là độc lập. Với dạng thứ hai, thông tin tương hỗ cho ta
biết mức giảm trung bình trong độ bất định của :math:`Y` xảy ra do
việc biết được giá trị trong phân phối của :math:`X`. Dạng thứ ba
cũng tương tự.
.. raw:: html
Ví dụ
~~~~~
.. raw:: html
Hãy cùng xét một ví dụ đơn giản để thấy rõ hơn tính bất đối xứng.
.. raw:: html
Đầu tiên, ta sinh ba tensor có độ dài :math:`10,000` và sắp xếp chúng:
một tensor mục tiêu :math:`p` tuân theo phân phối chuẩn :math:`N(0, 1)`,
và hai tensor tiềm năng :math:`q_1` và :math:`q_2` lần lượt tuân theo
phân phối chuẩn :math:`N(-1, 1)` và :math:`N(1, 1)`.
.. code:: python
random.seed(1)
nd_len = 10000
p = np.random.normal(loc=0, scale=1, size=(nd_len, ))
q1 = np.random.normal(loc=-1, scale=1, size=(nd_len, ))
q2 = np.random.normal(loc=1, scale=1, size=(nd_len, ))
p = np.array(sorted(p.asnumpy()))
q1 = np.array(sorted(q1.asnumpy()))
q2 = np.array(sorted(q2.asnumpy()))
.. raw:: html
Do :math:`q_1` và :math:`q_2` đối xứng qua trục y (có :math:`x=0`), ta
kỳ vọng giá trị phân kỳ KL giữa :math:`D_{\mathrm{KL}}(p\|q_1)` và
:math:`D_{\mathrm{KL}}(p\|q_2)` là như nhau. Như có thể thấy,
:math:`D_{\mathrm{KL}}(p\|q_1)` và :math:`D_{\mathrm{KL}}(p\|q_2)` chỉ
chênh nhau không đến 3%.
.. code:: python
kl_pq1 = kl_divergence(p, q1)
kl_pq2 = kl_divergence(p, q2)
similar_percentage = abs(kl_pq1 - kl_pq2) / ((kl_pq1 + kl_pq2) / 2) * 100
kl_pq1, kl_pq2, similar_percentage
.. parsed-literal::
:class: output
(8470.638, 8664.998, 2.268492904612395)
.. raw:: html
Trái lại, giá trị :math:`D_{\mathrm{KL}}(q_2 \|p)` và
:math:`D_{\mathrm{KL}}(p \| q_2)` chênh nhau khá nhiều, với sai khác tới
khoảng 40% như dưới đây.
.. code:: python
kl_q2p = kl_divergence(q2, p)
differ_percentage = abs(kl_q2p - kl_pq2) / ((kl_q2p + kl_pq2) / 2) * 100
kl_q2p, differ_percentage
.. parsed-literal::
:class: output
(13536.835, 43.88680093791528)
.. raw:: html
Entropy Chéo
------------
.. raw:: html
Nếu bạn tò mò về ứng dụng của lý thuyết thông tin trong học sâu, đây là
một ví dụ nhanh. Ta định nghĩa phân phối thực là :math:`P` với phân phối
xác suất :math:`p(x)`, và phân phối xấp xỉ là :math:`Q` với phân phối
xác suất :math:`q(x)`. Ta sẽ sử dụng các định nghĩa này trong suốt phần
còn lại.
.. raw:: html
Giả sử ta cần giải bài toán phân loại nhị phân dựa vào :math:`n` điểm dữ
liệu cho trước {:math:`x_1, \ldots, x_n`}. Ta mã hóa :math:`1` và
:math:`0` lần lượt là lớp dương tính và âm tính cho nhãn :math:`y_i`, và
mạng nơ-ron được tham số hóa bởi :math:`\theta`. Nếu ta tập trung vào
việc tìm :math:`\theta` tốt nhất sao cho
:math:`\hat{y}_i= p_{\theta}(y_i \mid x_i)`, việc áp dụng hướng tiếp cận
log hợp lý cực đại (*maximum log-likelihood*) là hoàn toàn tự nhiên như
ta thấy trong :numref:`sec_maximum_likelihood`. Cụ thể hơn, với nhãn
thực :math:`y_i` và các dự đoán
:math:`\hat{y}_i= p_{\theta}(y_i \mid x_i)`, xác suất được phân loại
thành nhãn dương là :math:`\pi_i= p_{\theta}(y_i = 1 \mid x_i)`. Do đó,
hàm log hợp lý sẽ là
.. math::
\begin{aligned}
l(\theta) &= \log L(\theta) \\
&= \log \prod_{i=1}^n \pi_i^{y_i} (1 - \pi_i)^{1 - y_i} \\
&= \sum_{i=1}^n y_i \log(\pi_i) + (1 - y_i) \log (1 - \pi_i). \\
\end{aligned}
.. raw:: html
Việc cực đại hóa hàm log hợp lý :math:`l(\theta)` giống hệt với việc cực
tiểu hóa :math:`- l(\theta)`, và do đó ta có thể tìm :math:`\theta` tốt
nhất từ đây. Để khái quát hóa hàm mất mát trên với mọi phân phối, ta gọi
:math:`-l(\theta)` là *mất mát entropy chéo (cross entropy loss)*
:math:`\mathrm{CE}(y, \hat{y})`, trong đó :math:`y` tuân theo phân phối
thực :math:`P` và :math:`\hat{y}` tuân theo phân phối ước lượng
:math:`Q`.
.. raw:: html
Điều này được suy ra theo góc nhìn của hợp lý cực đại. Tuy nhiên, nếu
quan sát kỹ hơn ta có thể thấy rằng các số hạng như :math:`\log(\pi_i)`
có tham gia vào phép tính, và đây là một dấu hiệu cho thấy ta có thể
hiểu được biểu thức theo góc nhìn của lý thuyết thông tin.
.. raw:: html
Định nghĩa Chuẩn
~~~~~~~~~~~~~~~~
.. raw:: html
Giống với phân kỳ KL, với biến ngẫu nhiên :math:`X`, ta cũng có thể đo
được độ phân kỳ giữa phân phối ước lượng :math:`Q` và phân phối thực
:math:`P` thông qua *entropy chéo*,
.. math:: \mathrm{CE}(P, Q) = - E_{x \sim P} [\log(q(x))].
:label: eq_ce_def
.. raw:: html
Bằng cách sử dụng các tính chất của entropy đã liệt kê ở trên, ta có thể
viết lại công thức trên dưới dạng tổng giữa entropy :math:`H(P)` và phân
kỳ KL giữa :math:`P` và :math:`Q`, tức
.. math:: \mathrm{CE} (P, Q) = H(P) + D_{\mathrm{KL}}(P\|Q).
.. raw:: html
Ta có thể lập trình mất mát entropy chéo như dưới đây.
.. code:: python
def cross_entropy(y_hat, y):
ce = -np.log(y_hat[range(len(y_hat)), y])
return ce.mean()
.. raw:: html
Giờ ta định nghĩa hai tensor cho nhãn và giá trị dự đoán, và tính mất
mát entropy chéo của chúng.
.. code:: python
labels = np.array([0, 2])
preds = np.array([[0.3, 0.6, 0.1], [0.2, 0.3, 0.5]])
cross_entropy(preds, labels)
.. parsed-literal::
:class: output
array(0.94856)
.. raw:: html
Tính chất
~~~~~~~~~
.. raw:: html
Như đã ám chỉ ở đoạn đầu của phần này, entropy chéo :eq:`eq_ce_def`
có thể được sử dụng để định nghĩa hàm mất mát trong bài toán tối ưu. Các
mục tiêu sau là tương đương:
.. raw:: html
1. Cực đại hóa xác suất dự đoán của :math:`Q` cho phân phối :math:`P`,
tức :math:`E_{x \sim P} [\log (q(x))]`);
2. Cực tiểu hóa entropy chéo :math:`\mathrm{CE} (P, Q)`;
3. Cực tiểu hóa phân kỳ KL :math:`D_{\mathrm{KL}}(P\|Q)`.
.. raw:: html
Định nghĩa của entropy chéo gián tiếp chứng minh mối quan hệ tương đồng
giữa mục tiêu 2 và mục tiêu 3, miễn là entropy của dữ liệu thực
:math:`H(P)` là hằng số.
.. raw:: html
Hàm Mục tiêu Entropy Chéo khi Phân loại Đa lớp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Nếu đi sâu vào hàm mục tiêu mất mát entropy chéo :math:`\mathrm{CE}` cho
bài toán phân loại, ta sẽ thấy rằng cực tiểu hóa :math:`\mathrm{CE}`
tương đương với cực đại hóa hàm log hợp lý :math:`L`.
.. raw:: html
Đề bắt đầu, giả sử ta có tập dữ liệu với :math:`n` mẫu, được phân loại
thành :math:`k` lớp. Với mỗi mẫu dữ liệu :math:`i`, ta biểu diễn nhãn
lớp :math:`k` bất kì :math:`\mathbf{y}_i = (y_{i1}, \ldots, y_{ik})`
bằng *biểu diễn one-hot*. Cụ thể, nếu mẫu :math:`i` thuộc về lớp
:math:`j` thì ta đặt phần tử thứ :math:`j` bằng :math:`1`, và tất cả các
phần tử khác bằng :math:`0`, tức
.. math:: y_{ij} = \begin{cases}1 & j \in J; \\ 0 &\text{otherwise.}\end{cases}
.. raw:: html
Ví dụ, nếu một bài toán phân loại gồm có ba lớp :math:`A`, :math:`B`, và
:math:`C`, thì các nhãn :math:`\mathbf{y}_i` có thể được mã hóa thành
{:math:`A: (1, 0, 0); B: (0, 1, 0); C: (0, 0, 1)`}.
.. raw:: html
Giả sử mạng nơ-ron được tham số hóa bởi :math:`\theta`. Với vector nhãn
gốc :math:`\mathbf{y}_i` và dự đoán
.. math:: \hat{\mathbf{y}}_i= p_{\theta}(\mathbf{y}_i \mid \mathbf{x}_i) = \sum_{j=1}^k y_{ij} p_{\theta} (y_{ij} \mid \mathbf{x}_i).
.. raw:: html
Từ đó, *mất mát entropy chéo* sẽ là
.. math::
\mathrm{CE}(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{i=1}^n \mathbf{y}_i \log \hat{\mathbf{y}}_i
= - \sum_{i=1}^n \sum_{j=1}^k y_{ij} \log{p_{\theta} (y_{ij} \mid \mathbf{x}_i)}.\\
.. raw:: html
Mặt khác, ta cũng có thể tiếp cận bài toán thông qua ước lượng hợp lý
cực đại. Đề bắt đầu, chúng tôi sẽ giới thiệu nhanh về phân phối đa thức
(*multinoulli distribution*) :math:`k` lớp. Đây là dạng mở rộng của phân
phối Bernoulli từ hai lớp thành nhiều lớp. Nếu một biến ngẫu nhiên
:math:`\mathbf{z} = (z_{1}, \ldots, z_{k})` tuân theo *phân phối đa
thức* :math:`k` lớp với xác suất :math:`\mathbf{p} =`
(:math:`p_{1}, \ldots, p_{k}`), tức
.. math:: p(\mathbf{z}) = p(z_1, \ldots, z_k) = \mathrm{Multi} (p_1, \ldots, p_k), \text{ với } \sum_{i=1}^k p_i = 1,
thì hàm khối xác suất (*probability mass function - p.m.f*) kết hợp của
:math:`\mathbf{z}` bằng
.. math:: \mathbf{p}^\mathbf{z} = \prod_{j=1}^k p_{j}^{z_{j}}.
.. raw:: html
Có thể thấy nhãn của từng mẫu dữ liệu, :math:`\mathbf{y}_i`, tuân theo
một phân phối đa thức :math:`k` lớp với xác suất
:math:`\boldsymbol{\pi} =` (:math:`\pi_{1}, \ldots, \pi_{k}`). Do đó,
hàm khối xác suất kết hợp của mỗi mẫu dữ liệu là :math:`\mathbf{y}_i` is
:math:`\mathbf{\pi}^{\mathbf{y}_i} = \prod_{j=1}^k \pi_{j}^{y_{ij}}.` Từ
đây, hàm log hợp lý sẽ là
.. math::
\begin{aligned}
l(\theta)
= \log L(\theta)
= \log \prod_{i=1}^n \boldsymbol{\pi}^{\mathbf{y}_i}
= \log \prod_{i=1}^n \prod_{j=1}^k \pi_{j}^{y_{ij}}
= \sum_{i=1}^n \sum_{j=1}^k y_{ij} \log{\pi_{j}}.\\
\end{aligned}
.. raw:: html
Do trong ước lượng hợp lý cực đại, ta cực đại hóa hàm mục tiêu
:math:`l(\theta)` với
:math:`\pi_{j} = p_{\theta} (y_{ij} \mid \mathbf{x}_i)`. Vậy nên với bài
toán phân loại đa lớp bất kỳ, việc cực đại hóa hàm log hợp lý trên
:math:`l(\theta)` tương đương với việc cực tiểu hóa hàm mất mát CE
:math:`\mathrm{CE}(y, \hat{y})`.
.. raw:: html
Để kiểm tra chứng minh trên, hãy áp dụng phép đo
``NegativeLogLikelihood`` được tích hợp sẵn. Với việc sử dụng ``labels``
và ``preds`` giống như ví dụ trước, ta sẽ thu được mất mát xấp xỉ giống
ví dụ trước tới 5 số thập phân sau dấu phẩy.
.. code:: python
nll_loss = NegativeLogLikelihood()
nll_loss.update(labels.as_nd_ndarray(), preds.as_nd_ndarray())
nll_loss.get()
.. parsed-literal::
:class: output
('nll-loss', 0.9485599994659424)
Tóm tắt
-------
.. raw:: html
- Lý thuyết thông tin là một lĩnh vực nghiên cứu về mã hóa, giải mã,
truyền phát và xử lý thông tin.
- Entropy là đơn vị đo lượng thông tin có trong các tín hiệu khác nhau.
- Phân kỳ KL có thể đo khoảng cách giữa hai phân phối.
- Entropy Chéo có thể được coi như một hàm mục tiêu trong phân loại đa
lớp. Việc cực tiểu hóa mất mát entropy chéo tương đương với việc cực
đại hóa hàm log hợp lý.
Bài tập
-------
.. raw:: html
1. Kiểm chứng rằng ví dụ lá bài ở phần đầu quả thực có entropy như đã
nhận định.
2. Chứng minh rằng phân kỳ KL :math:`D(p\|q)` là không âm với mọi phân
phối :math:`p` và :math:`q`. Gợi ý: sử dụng bất đẳng thức Jensen, tức
là sử dụng thực tế là :math:`-\log x` là một hàm lồi.
3. Hãy tính entropy từ một số nguồn dữ liệu sau:
- Giả sử bạn đang theo dõi văn bản sinh ra khi một con khỉ dùng máy
đánh chữ. Con khỉ nhấn ngẫu nhiên bất kì phím nào trong :math:`44`
phím của máy đánh chữ (bạn có thể giả sử nó chưa phát hiện ra phím
shift hay bất kì phím đặc biệt nào). Mỗi kí tự ngẫu nhiên bạn quan
sát được chứa bao nhiêu bit?
- Giả sử thay vì con khỉ, ta có một người đang say rượu đánh chữ.
Người đó có thể tạo ra các từ ngẫu nhiên trong bảng từ vựng gồm
:math:`2,000` từ, mặc dù câu văn không được mạch lạc. Giả sử độ
dài trung bình của một từ là :math:`4.5` chữ cái Tiếng Anh. Lúc
này mỗi ký tự ngẫu nhiên bạn quan sát được chứa bao nhiêu bit?
- Vẫn không hài lòng với kết quả, bạn dùng một mô hình ngôn ngữ chất
lượng cao, có perplexity chỉ cỡ :math:`15` điểm cho mỗi từ.
*Perplexity* mức ký tự của một mô hình ngôn ngữ trên một từ được
định nghĩa là tích của nghịch đảo xác suất của mỗi ký tự xuất hiện
trong từ đó, rồi được chuẩn hóa bằng độ dài của từ như sau
.. math:: PPL(\text{từ}) = \left[\prod_i p(\text{ký tự}_i)\right]^{ -\frac{1}{\text{length(từ)}} }.
Giả sử từ kiểm tra có :math:`4.5` chữ cái, lúc này mỗi ký tự ngẫu
nhiên bạn quan sát được chứa bao nhiêu bit?
4. Giải thích một cách trực quan tại sao
:math:`I(X, Y) = H(X) - H(X|Y)`. Sau đó, chứng minh biểu thức này
đúng bằng cách biểu diễn hai vế theo kỳ vọng của phân phối kết hợp.
5. Phân kỳ KL giữa hai phân phối Gauss
:math:`\mathcal{N}(\mu_1, \sigma_1^2)` và
:math:`\mathcal{N}(\mu_2, \sigma_2^2)` là gì?
Thảo luận
---------
- Tiếng Anh: `MXNet `__
- 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
- Nguyễn Thanh Hòa
- Lê Khắc Hồng Phúc
- Nguyễn Lê Quang Nhật
- Phạm Hồng Vinh
- Phạm Minh Đức
- Nguyễn Mai Hoàng Long
- Đỗ Trường Giang
- Nguyễn Văn Cường