Trong machine learning, điều cốt yếu là đo lường mức độ chính xác mà các mô hình dự đoán kết quả thực tế. Dù bạn đang xây dựng mô hình dự báo thời tiết hay tối ưu hệ thống gợi ý, bạn cần một cách để định lượng mức độ khớp giữa dự đoán và thực tế. Một cách tiếp cận mạnh mẽ để đạt được điều này là KL-Divergence.
Trong bài viết này, tôi sẽ tìm hiểu KL-Divergence là gì, vì sao nó quan trọng, cách hiểu trực quan, nền tảng toán học và các ví dụ thực tiễn minh họa cách ứng dụng.
KL-Divergence (Kullback-Leibler Divergence) là một thước đo thống kê dùng để xác định mức độ một phân phối xác suất lệch khỏi một phân phối tham chiếu khác.
Giả sử chúng ta cùng xây dựng một mô hình dự đoán thời tiết ngày mai. Ẩn bên dưới, mô hình đang “đặt cược” — gán xác suất cho các kết quả có thể xảy ra. Nhưng đây là một câu hỏi quan trọng:
Bạn đo lường mức độ “lệch” của các cược đó so với thực tế như thế nào?
Chúng ta cần một cách để định lượng sự khác biệt này, và đó là lúc KL-Divergence phát huy tác dụng. Đây là một công cụ toán học định lượng chênh lệch giữa niềm tin của mô hình và sự thật.
Như tôi đã nói, KL-Divergence (hay chính thức là Kullback-Leibler Divergence) là nền tảng của khoa học dữ liệu, machine learning và AI hiện đại. Nó cho chúng ta biết, theo đơn vị bits hoặc nats (sẽ nói kỹ hơn sau), mức “ngạc nhiên thừa” hay “mất mát thông tin” khi dùng một phân phối xác suất (ví dụ dự đoán của mô hình, Q) để xấp xỉ một phân phối khác (sự thật P).
Nó đóng vai trò như “trọng tài” phía sau việc đánh giá mô hình, regularization trong mạng nơ-ron, cập nhật Bayes, và thậm chí cả cách nén dữ liệu hay truyền tin hiệu quả.
Để hình dung tầm quan trọng của KL-Divergence, hãy nghĩ thế này. Mỗi lần mô hình đưa ra dự đoán, thực chất là đang “đánh cược” vào tương lai. KL-Divergence là bảng điểm tính xem các cược đó “tốn kém” đến mức nào. Nguyên tắc này đúng trên nhiều chủ đề machine learning: từ huấn luyện chatbot, chẩn đoán bệnh, đến tối ưu chiến dịch quảng cáo.
Về mặt toán học, KL-Divergence được định nghĩa như sau:
Trên là công thức cho trường hợp rời rạc, còn công thức dưới đây là cho trường hợp liên tục.
Trực giác đằng sau KL-Divergence
Trong phần này, chúng ta sẽ suy ra KL-Divergence một cách trực quan. Hãy bắt đầu bằng một chuỗi câu hỏi.
Hiểu về sự ngạc nhiên
“Nếu bạn tung đồng xu và tôi đoán chính xác kết quả, bạn có ngạc nhiên không?” Tôi đoán bạn sẽ hơi ngạc nhiên nhưng không quá sốc. Giờ sang kịch bản thứ hai.
“Nếu bạn đổ xúc xắc và tôi đoán chính xác kết quả, bạn có ngạc nhiên hơn kịch bản trước không?” Có lẽ bạn sẽ nói có, vì khả năng tôi đoán đúng thấp hơn.
Giờ là kịch bản cuối:
“Nếu tôi đoán đúng dãy số trúng xổ số, bạn có ngạc nhiên hơn nữa không?” Chắc chắn bạn sẽ nói có và hoàn toàn sốc. Nhưng tại sao?
Bởi vì khi chuyển qua các kịch bản, xác suất tôi đoán đúng giảm dần, do đó mức độ ngạc nhiên của bạn tăng lên. Ta vừa nhận ra một mối quan hệ:
Xác suất xảy ra của một sự kiện có quan hệ nghịch với mức độ ngạc nhiên.
Nói rõ hơn, khi xác suất xảy ra giảm, sự ngạc nhiên tăng, và ngược lại.
Tuy nhiên, ta còn có thể quan sát điều thú vị khác. Quay lại xúc xắc: nếu bạn đổ cùng một viên xúc xắc 3 lần, và tôi đều đoán đúng, bạn sẽ ngạc nhiên hơn bao nhiêu so với khi chỉ đoán đúng 1 lần?
Mức ngạc nhiên của bạn sẽ không chỉ tăng nhẹ so với một lần đoán đúng; nó sẽ tăng mạnh, lý tưởng là gấp ba lần. Vì sao? Vì mỗi lần đoán đúng tiếp theo càng làm bạn khó tin hơn. Không chỉ cộng thêm một lượng ngạc nhiên cố định — mà là nhân lên mức “bất khả” của tình huống.
Vì vậy, khi cố gắng định nghĩa toán học cho “Sự ngạc nhiên”, ta muốn nó có:
Tính cộng: Nếu hai sự kiện độc lập xảy ra, tổng mức ngạc nhiên phải bằng tổng mức ngạc nhiên riêng lẻ.
Ví dụ: Đoán đúng 1 lần đổ xúc xắc → Ngạc nhiên = S. Đoán đúng 2 lần → Ngạc nhiên = S + S = 2S.
Quan hệ nghịch với xác suất. Sự kiện càng ít khả năng, càng gây ngạc nhiên.
Ví dụ: Tung đồng xu (50%) ít gây ngạc nhiên hơn trúng số (0,000001%).
Bằng không với sự kiện chắc chắn. Nếu điều gì đó luôn xảy ra (xác suất = 1), thì không có ngạc nhiên.
Tính biến thiên liên tục. Thay đổi nhỏ trong xác suất dẫn đến thay đổi mượt mà, hợp lý trong mức ngạc nhiên (không “nhảy cóc”).
Thoạt nhìn, vì có nhiều yêu cầu, ta có thể nghĩ định nghĩa toán học sẽ khá phức tạp. Nhưng không phải vậy!
Tất cả yêu cầu trên có thể giải quyết bằng cách thao tác với hàm logarit. Hàm log đơn (nhiều khi log(x) và ln(x) được dùng thay thế cho nhau) có dạng như sau:
Ta đã đáp ứng khá nhiều yêu cầu. Hãy tập trung vào Tính cộng trước. Nhớ rằng nếu hai sự kiện độc lập xảy ra, tổng ngạc nhiên là tổng ngạc nhiên riêng lẻ? Đó chính xác là điều hàm log làm!
Cụ thể như sau:
Xác suất ra mặt 6 của xúc xắc công bằng là ⅙ , và ta định nghĩa mức ngạc nhiên của sự kiện như sau:
Giờ xét sự kiện ra mặt 6 ba lần liên tiếp, xác suất gộp là: ⅙ * ⅙ * ⅙ = 1/216.
Về mức ngạc nhiên, ta có:
Đây là một quan sát quan trọng, vì tổng ngạc nhiên tăng gấp 3 lần nhờ tính chất của logarit. Hơn nữa, điều này cũng thỏa Mệnh đề 3, khi log(1) = 0, bởi sự kiện chắc chắn không gây ngạc nhiên.
Ngoài ra, Mệnh đề 4 cũng được thỏa vì log(x) là hàm đơn điệu liên tục! Tuy nhiên, Mệnh đề 2 chưa được thỏa, vì mức ngạc nhiên của ta lại giảm khi xác suất giảm (do giá trị log âm hơn).
Ta có thể khắc phục dễ dàng bằng cách thêm dấu âm! Như vậy, hàm của ta là -log(x), có dạng như dưới đây.
Cũng cần lưu ý rằng 3 mệnh đề còn lại vẫn được giữ nguyên với thay đổi này. Do đó, ta có thể định nghĩa toán học cho “sự ngạc nhiên” là:
Entropy
Trong machine learning, ta không chỉ quan tâm đến sự ngạc nhiên của một sự kiện đơn lẻ, mà là mức ngạc nhiên trung bình trên tất cả các sự kiện có thể. Đó là kỳ vọng của sự ngạc nhiên. Cụ thể hơn, ta muốn tìm kỳ vọng của sự ngạc nhiên trên toàn bộ phân phối.
Đây là công thức nổi tiếng, chính là kỳ vọng của sự ngạc nhiên, hay thường gọi là Entropy. Tuy hơi gây nhầm lẫn, ta thường dùng P và Q để ký hiệu các phân phối, nên đừng nhầm với p, ký hiệu cho xác suất!
Nói trực quan, ta đang nhân xác suất của từng kết quả với mức ngạc nhiên tương ứng, rồi cộng trên mọi kết quả có thể.
Từ đây trở đi, ta quy ước P(x) là phân phối thật sự bên dưới và Q(x)là phân phối ta dùng để xấp xỉ P(x) (tức Q(X) là phân phối “sai”). Đây là điều rất phổ biến trong machine learning — mô hình của ta không ngừng cố gắng ước lượng thế giới thực.
Giờ đến câu hỏi lớn:
Điều gì xảy ra nếu ta tính mức ngạc nhiên bằng phân phối sai?
Ta vẫn có thể tính mức ngạc nhiên, nhưng thay vì dùng P(x), ta đo theo Q(x). Điều này cho ta một kỳ vọng mới:
Bước này thường gây bối rối khi suy ra KL-Divergence. Ta vẫn lấy mẫu theo P(x) (vì đó là phân phối thật), nhưng ta đo mức ngạc nhiên theo Q(x) (niềm tin của mô hình).
Đại lượng này đôi khi được gọi là cross-entropy giữa P(x) và Q(x).
Công thức KL-Divergence
Đến lúc này, ta đã định nghĩa hai đại lượng:
Entropy: mức ngạc nhiên kỳ vọng khi dùng phân phối thật P(x)
Cross-entropy: mức ngạc nhiên kỳ vọng khi dùng phân phối saiQ(x)
Để thu được công thức KL-Divergence, ta chỉ cần lấy hiệu của hai đại lượng này và có:
Và vâng, câu hỏi là: tại sao?
Hãy quay lại trực giác về sự ngạc nhiên.
Entropy cho ta biết mức ngạc nhiên tối thiểu nếu biết phân phối thật P(x). Hãy coi đó là “chi phí lý tưởng”.
Cross-entropy cho ta biết mức ngạc nhiên thực tế khi dùng xấp xỉ Q(x). Hãy coi đó là “chi phí thực”.
Vì vậy, khi tính KL-Divergence bằng cách lấy hiệu, ta đang hỏi mức ngạc nhiên thừa ta phải trả là bao nhiêu vì đã dùng phân phối sai Q(x) thay vì phân phối thật P(x). Đó là khoản phạt cho “niềm tin sai”.
Điều quan trọng nữa là nếu Q(x) giống hệt P(x), thì KL-Divergence bằng 0. Điều này hợp lý — nếu dự đoán của mô hình khớp hoàn toàn với phân phối thật, thì không có ngạc nhiên thừa, nên không có phạt.
Điều này khác với cross-entropy, vốn không về 0 ngay cả khi P(x) bằng Q(x); nó chỉ bằng entropy của P(x).
Vì vậy, có thể coi KL-Divergence được “neo” tại 0, nghĩa là nó chỉ bắt đầu tăng khi phân phối dự đoán lệch khỏi phân phối thật.
Ví dụ về KL-Divergence
Bạn đã làm rất tốt khi suy ra phương trình! Để củng cố khái niệm, hãy làm một ví dụ.
Hãy tưởng tượng ta cần dự đoán thể loại phim yêu thích của một người dùng. Từ dữ liệu quá khứ, ta có phân phối thật trên bốn thể loại phim (tức đây là P(x)).
Thể loại phim
Xác suất
Hành động
0.4
Hài
0.3
Chính kịch
0.2
Kinh dị
0.1
Giờ chúng ta đã xây dựng một mô hình dự đoán như sau (tức đây là Q(x)).
Thể loại phim
Xác suất
Hành động
0.3
Hài
0.4
Chính kịch
0.2
Kinh dị
0.1
Rõ ràng có sự khác biệt giữa hai phân phối, nhưng khác bao nhiêu? Đây là lúc ta dùng KL-Divergence, với phương trình dưới đây:
Hãy để ý hạng tử sẽ bằng 0 khi hai phân phối có cùng xác suất cho kết quả đó.
KL-Divergence trong Python
Ta cũng có thể giải bài toán trên bằng Python:
import numpy as np
from scipy.stats import entropy # Important module from scipy
P = np.array([0.4,0.3,0.2,0.1])# This is our true distribution
Q = np.array([0.3,0.4,0.2,0.1])# This is our model’s prediction
kl_nats = entropy(P, Q)# natural log ⇒ nats
kl_bits = entropy(P, Q, base=2)# log₂ ⇒ bitsprint(f"KL(P‖Q) = {kl_nats} nats")print(f"KL(P‖Q) = {kl_bits} bits")Được hỗ trợ bởi
Đoạn mã này khá đơn giản và trực quan, ngoại trừ việc ta không dùng thuật ngữ KL-Divergence trong mã ở đâu cả! Thay vào đó, tôi dùng từ entropy nhiều lần.
Điều này dẫn đến một điểm quan trọng - KL-Divergence thường được gọi là Relative Entropy. Do đó, thực chất ta đang tính KL-Divergence vì mô-đun entropy đang tính relative entropy giữa hai phân phối.
Có vẻ hơi rối, nên tôi muốn tạm dừng ngắn và tóm tắt mọi thứ:
Thuật ngữ
Ký hiệu
Công thức
Entropy hay Shannon-Entropy
H(P)
−∑Pi logPi
Cross-Entropy
H(P,Q)
−∑Pi logQi
KL-Divergence hay Relative Entropy
D_KL (P∥Q)
−∑Pᵢ · log(Qᵢ/Pᵢ)
hoặc
∑Pi* log(Pi/Qi)
Các tính chất của KL-Divergence
Giờ khi đã tính ví dụ đầu tiên bằng công thức KL-Divergence, hãy dành chút thời gian để khám phá một số tính chất quan trọng nhất của nó.
Không âm: KL-Divergence không bao giờ âm. Điều này hợp lý về trực giác, vì giá trị thấp nhất là 0, khi phân phối dự đoán trùng với phân phối thật. Và ta không bao giờ có “chi phí âm” vì không thể “ít ngạc nhiên” hơn mức tối thiểu lý thuyết.
Neo tại 0: KL-Divergence bằng 0 khi phân phối dự đoán khớp với phân phối thật.
Đơn vị: Bits so với nats: Khi tính KL-Divergence, ta dùng logarit. Cơ số log quyết định đơn vị của kết quả cuối:
Nếu dùng log cơ số 2, kết quả đo bằng bits
Nếu dùng log tự nhiên (ln), kết quả đo bằng nats (viết tắt của “natural units of information”)
Bất đối xứng: Đây là tính chất quan trọng — KL-Divergence không đối xứng. Dùng Q(x) để xấp xỉ P(x) cho giá trị khác với dùng P(x) để xấp xỉ Q(x). Vì vậy KL-Divergence không phải là một metric khoảng cách đúng nghĩa — nó không hành xử như khoảng cách thông thường.
Ứng dụng của KL-Divergence trong Machine Learning
KL-Divergence hữu ích trong nhiều lĩnh vực của Machine Learning:
Đánh giá mô hình: đo mức sai lệch giữa dự đoán và nhãn thật
Language Modeling: so sánh dự đoán token với nhãn gốc
KL-Divergence có liên hệ chặt chẽ với Maximum Likelihood Estimation (MLE), một phương pháp nền tảng để ước lượng tham số mô hình. Để tìm hiểu thêm về MLE và cách nó bổ trợ các khái niệm trong bài viết này, hãy xem hướng dẫn chi tiết của tôi, Giới thiệu về Maximum Likelihood Estimation (MLE).
Hạn chế của KL-Divergence và cách khắc phục
Giống như mọi thứ, việc dùng KL-Divergence cũng có hạn chế. Hãy khám phá chi tiết:
Sai khác “support” làm KL bùng nổ: Trong trường hợp hiếm khi Q(x)=0 và P(x)>0, hạng tử log(P/Q) trở nên vô hạn. Cách giải là thêm làm trơn ε hoặc chuyển sang Jensen–Shannon divergence.
Đặc trưng phân loại có số hạng lớn: Có quá nhiều giá trị sẽ dẫn đến đếm thưa và ước lượng KL nhiễu. Khắc phục bằng cách gộp các nhóm hiếm hoặc áp dụng Bayesian smoothing.
Tính bất đối xứng có thể gây hiểu nhầm: Bởi KL(P || Q) và KL(Q || P) không cho cùng một giá trị. Một cách khắc phục tiềm năng là dùng Jensen-Shannon Divergence
Đơn vị: Nhiều khi ta quên nêu đơn vị của KL-Divergence, điều này đặc biệt rắc rối vì cả nats và bits đều được dùng phổ biến. Vì vậy, hãy luôn nêu cơ số log!
Jensen–Shannon divergence
Bạn có thể để ý tôi đã nhắc Jensen–Shannon Divergence trước đó, vậy hãy lướt qua nhanh.
Mặc dù phức tạp hơn một chút và tốn tính toán hơn KL-Divergence, Jensen–Shannon Divergence là đối xứng. Nó vẫn chưa phải một metric khoảng cách đúng nghĩa vì không thỏa bất đẳng thức tam giác. Tuy nhiên, nếu lấy căn bậc hai của JS-Divergence, nó thỏa bất đẳng thức tam giác và trở thành một metric đúng nghĩa.
Nó cũng là phiên bản được làm trơn của KL‑divergence và luôn nằm giữa 0 và 1 bit (nếu dùng log cơ số 2). Nhìn lại phương trình, mỗi hạng tử KL được đo so với điểm giữa chung M, không phải P hay Q, nên sẽ không có trường hợp chia cho 0, do đó không có vô hạn.
Kết luận
Tóm lại, KL‑Divergence là công cụ quan trọng để đo chi phí thông tin thừa khi ta dùng phân phối Q của mô hình thay cho phân phối thật P. Nó bằng 0 nếu chúng giống nhau, lớn hơn khi khác nhau, và luôn không âm. KL-Divergence kết nối entropy và cross‑entropy, và xuất hiện trong hàm mất mát, variational inference, và các ràng buộc chính sách.
Trong machine learning, điều cốt yếu là đo lường mức độ chính xác mà các mô hình dự đoán kết quả thực tế. Dù bạn đang xây dựng mô hình dự báo thời tiết hay tối ưu hệ thống gợi ý, bạn cần một cách để định lượng mức độ khớp giữa dự đoán và thực tế. Một cách tiếp cận mạnh mẽ để đạt được điều này là KL-Divergence.
Trong bài viết này, tôi sẽ tìm hiểu KL-Divergence là gì, vì sao nó quan trọng, cách hiểu trực quan, nền tảng toán học và các ví dụ thực tiễn minh họa cách ứng dụng.
Nếu bạn đang khám phá các khái niệm về machine learning, tôi rất khuyến nghị xem qua lộ trình kỹ năng Machine Learning Fundamentals in Python.
KL-Divergence là gì?
KL-Divergence (Kullback-Leibler Divergence) là một thước đo thống kê dùng để xác định mức độ một phân phối xác suất lệch khỏi một phân phối tham chiếu khác.
Giả sử chúng ta cùng xây dựng một mô hình dự đoán thời tiết ngày mai. Ẩn bên dưới, mô hình đang “đặt cược” — gán xác suất cho các kết quả có thể xảy ra. Nhưng đây là một câu hỏi quan trọng:
Bạn đo lường mức độ “lệch” của các cược đó so với thực tế như thế nào?
Chúng ta cần một cách để định lượng sự khác biệt này, và đó là lúc KL-Divergence phát huy tác dụng. Đây là một công cụ toán học định lượng chênh lệch giữa niềm tin của mô hình và sự thật.
Như tôi đã nói, KL-Divergence (hay chính thức là Kullback-Leibler Divergence) là nền tảng của khoa học dữ liệu, machine learning và AI hiện đại. Nó cho chúng ta biết, theo đơn vị bits hoặc nats (sẽ nói kỹ hơn sau), mức “ngạc nhiên thừa” hay “mất mát thông tin” khi dùng một phân phối xác suất (ví dụ dự đoán của mô hình, Q) để xấp xỉ một phân phối khác (sự thật P).
Nó đóng vai trò như “trọng tài” phía sau việc đánh giá mô hình, regularization trong mạng nơ-ron, cập nhật Bayes, và thậm chí cả cách nén dữ liệu hay truyền tin hiệu quả.
Để hình dung tầm quan trọng của KL-Divergence, hãy nghĩ thế này. Mỗi lần mô hình đưa ra dự đoán, thực chất là đang “đánh cược” vào tương lai. KL-Divergence là bảng điểm tính xem các cược đó “tốn kém” đến mức nào. Nguyên tắc này đúng trên nhiều chủ đề machine learning: từ huấn luyện chatbot, chẩn đoán bệnh, đến tối ưu chiến dịch quảng cáo.
Về mặt toán học, KL-Divergence được định nghĩa như sau:
Trên là công thức cho trường hợp rời rạc, còn công thức dưới đây là cho trường hợp liên tục.
Trực giác đằng sau KL-Divergence
Trong phần này, chúng ta sẽ suy ra KL-Divergence một cách trực quan. Hãy bắt đầu bằng một chuỗi câu hỏi.
Hiểu về sự ngạc nhiên
“Nếu bạn tung đồng xu và tôi đoán chính xác kết quả, bạn có ngạc nhiên không?” Tôi đoán bạn sẽ hơi ngạc nhiên nhưng không quá sốc. Giờ sang kịch bản thứ hai.
“Nếu bạn đổ xúc xắc và tôi đoán chính xác kết quả, bạn có ngạc nhiên hơn kịch bản trước không?” Có lẽ bạn sẽ nói có, vì khả năng tôi đoán đúng thấp hơn.
Giờ là kịch bản cuối:
“Nếu tôi đoán đúng dãy số trúng xổ số, bạn có ngạc nhiên hơn nữa không?” Chắc chắn bạn sẽ nói có và hoàn toàn sốc. Nhưng tại sao?
Bởi vì khi chuyển qua các kịch bản, xác suất tôi đoán đúng giảm dần, do đó mức độ ngạc nhiên của bạn tăng lên. Ta vừa nhận ra một mối quan hệ:
Xác suất xảy ra của một sự kiện có quan hệ nghịch với mức độ ngạc nhiên.
Nói rõ hơn, khi xác suất xảy ra giảm, sự ngạc nhiên tăng, và ngược lại.
Tuy nhiên, ta còn có thể quan sát điều thú vị khác. Quay lại xúc xắc: nếu bạn đổ cùng một viên xúc xắc 3 lần, và tôi đều đoán đúng, bạn sẽ ngạc nhiên hơn bao nhiêu so với khi chỉ đoán đúng 1 lần?
Mức ngạc nhiên của bạn sẽ không chỉ tăng nhẹ so với một lần đoán đúng; nó sẽ tăng mạnh, lý tưởng là gấp ba lần. Vì sao? Vì mỗi lần đoán đúng tiếp theo càng làm bạn khó tin hơn. Không chỉ cộng thêm một lượng ngạc nhiên cố định — mà là nhân lên mức “bất khả” của tình huống.
Vì vậy, khi cố gắng định nghĩa toán học cho “Sự ngạc nhiên”, ta muốn nó có:
Thoạt nhìn, vì có nhiều yêu cầu, ta có thể nghĩ định nghĩa toán học sẽ khá phức tạp. Nhưng không phải vậy!
Tất cả yêu cầu trên có thể giải quyết bằng cách thao tác với hàm logarit. Hàm log đơn (nhiều khi log(x) và ln(x) được dùng thay thế cho nhau) có dạng như sau:
Ta đã đáp ứng khá nhiều yêu cầu. Hãy tập trung vào Tính cộng trước. Nhớ rằng nếu hai sự kiện độc lập xảy ra, tổng ngạc nhiên là tổng ngạc nhiên riêng lẻ? Đó chính xác là điều hàm log làm!
Cụ thể như sau:
Xác suất ra mặt 6 của xúc xắc công bằng là ⅙ , và ta định nghĩa mức ngạc nhiên của sự kiện như sau:
Giờ xét sự kiện ra mặt 6 ba lần liên tiếp, xác suất gộp là: ⅙ * ⅙ * ⅙ = 1/216.
Về mức ngạc nhiên, ta có:
Đây là một quan sát quan trọng, vì tổng ngạc nhiên tăng gấp 3 lần nhờ tính chất của logarit. Hơn nữa, điều này cũng thỏa Mệnh đề 3, khi log(1) = 0, bởi sự kiện chắc chắn không gây ngạc nhiên.
Ngoài ra, Mệnh đề 4 cũng được thỏa vì log(x) là hàm đơn điệu liên tục! Tuy nhiên, Mệnh đề 2 chưa được thỏa, vì mức ngạc nhiên của ta lại giảm khi xác suất giảm (do giá trị log âm hơn).
Ta có thể khắc phục dễ dàng bằng cách thêm dấu âm! Như vậy, hàm của ta là -log(x), có dạng như dưới đây.
Cũng cần lưu ý rằng 3 mệnh đề còn lại vẫn được giữ nguyên với thay đổi này. Do đó, ta có thể định nghĩa toán học cho “sự ngạc nhiên” là:
Entropy
Trong machine learning, ta không chỉ quan tâm đến sự ngạc nhiên của một sự kiện đơn lẻ, mà là mức ngạc nhiên trung bình trên tất cả các sự kiện có thể. Đó là kỳ vọng của sự ngạc nhiên. Cụ thể hơn, ta muốn tìm kỳ vọng của sự ngạc nhiên trên toàn bộ phân phối.
Đây là công thức nổi tiếng, chính là kỳ vọng của sự ngạc nhiên, hay thường gọi là Entropy. Tuy hơi gây nhầm lẫn, ta thường dùng P và Q để ký hiệu các phân phối, nên đừng nhầm với p, ký hiệu cho xác suất!
Nói trực quan, ta đang nhân xác suất của từng kết quả với mức ngạc nhiên tương ứng, rồi cộng trên mọi kết quả có thể.
Từ đây trở đi, ta quy ước P(x) là phân phối thật sự bên dưới và Q(x)là phân phối ta dùng để xấp xỉ P(x) (tức Q(X) là phân phối “sai”). Đây là điều rất phổ biến trong machine learning — mô hình của ta không ngừng cố gắng ước lượng thế giới thực.
Giờ đến câu hỏi lớn:
Điều gì xảy ra nếu ta tính mức ngạc nhiên bằng phân phối sai?
Ta vẫn có thể tính mức ngạc nhiên, nhưng thay vì dùng P(x), ta đo theo Q(x). Điều này cho ta một kỳ vọng mới:
Bước này thường gây bối rối khi suy ra KL-Divergence. Ta vẫn lấy mẫu theo P(x) (vì đó là phân phối thật), nhưng ta đo mức ngạc nhiên theo Q(x) (niềm tin của mô hình).
Đại lượng này đôi khi được gọi là cross-entropy giữa P(x) và Q(x).
Công thức KL-Divergence
Đến lúc này, ta đã định nghĩa hai đại lượng:
Để thu được công thức KL-Divergence, ta chỉ cần lấy hiệu của hai đại lượng này và có:
Và vâng, câu hỏi là: tại sao?
Hãy quay lại trực giác về sự ngạc nhiên.
Vì vậy, khi tính KL-Divergence bằng cách lấy hiệu, ta đang hỏi mức ngạc nhiên thừa ta phải trả là bao nhiêu vì đã dùng phân phối sai Q(x) thay vì phân phối thật P(x). Đó là khoản phạt cho “niềm tin sai”.
Điều quan trọng nữa là nếu Q(x) giống hệt P(x), thì KL-Divergence bằng 0. Điều này hợp lý — nếu dự đoán của mô hình khớp hoàn toàn với phân phối thật, thì không có ngạc nhiên thừa, nên không có phạt.
Điều này khác với cross-entropy, vốn không về 0 ngay cả khi P(x) bằng Q(x); nó chỉ bằng entropy của P(x).
Vì vậy, có thể coi KL-Divergence được “neo” tại 0, nghĩa là nó chỉ bắt đầu tăng khi phân phối dự đoán lệch khỏi phân phối thật.
Ví dụ về KL-Divergence
Bạn đã làm rất tốt khi suy ra phương trình! Để củng cố khái niệm, hãy làm một ví dụ.
Hãy tưởng tượng ta cần dự đoán thể loại phim yêu thích của một người dùng. Từ dữ liệu quá khứ, ta có phân phối thật trên bốn thể loại phim (tức đây là P(x)).
Thể loại phim
Xác suất
Hành động
0.4
Hài
0.3
Chính kịch
0.2
Kinh dị
0.1
Giờ chúng ta đã xây dựng một mô hình dự đoán như sau (tức đây là Q(x)).
Thể loại phim
Xác suất
Hành động
0.3
Hài
0.4
Chính kịch
0.2
Kinh dị
0.1
Rõ ràng có sự khác biệt giữa hai phân phối, nhưng khác bao nhiêu? Đây là lúc ta dùng KL-Divergence, với phương trình dưới đây:
Hãy để ý hạng tử sẽ bằng 0 khi hai phân phối có cùng xác suất cho kết quả đó.
KL-Divergence trong Python
Ta cũng có thể giải bài toán trên bằng Python:
Đoạn mã này khá đơn giản và trực quan, ngoại trừ việc ta không dùng thuật ngữ KL-Divergence trong mã ở đâu cả! Thay vào đó, tôi dùng từ entropy nhiều lần.
Điều này dẫn đến một điểm quan trọng - KL-Divergence thường được gọi là Relative Entropy. Do đó, thực chất ta đang tính KL-Divergence vì mô-đun entropy đang tính relative entropy giữa hai phân phối.
Có vẻ hơi rối, nên tôi muốn tạm dừng ngắn và tóm tắt mọi thứ:
Thuật ngữ
Ký hiệu
Công thức
Entropy hay Shannon-Entropy
H(P)
−∑Pi logPi
Cross-Entropy
H(P,Q)
−∑Pi logQi
KL-Divergence hay Relative Entropy
D_KL (P∥Q)
−∑Pᵢ · log(Qᵢ/Pᵢ)
hoặc
∑Pi* log(Pi/Qi)
Các tính chất của KL-Divergence
Giờ khi đã tính ví dụ đầu tiên bằng công thức KL-Divergence, hãy dành chút thời gian để khám phá một số tính chất quan trọng nhất của nó.
Ứng dụng của KL-Divergence trong Machine Learning
KL-Divergence hữu ích trong nhiều lĩnh vực của Machine Learning:
KL-Divergence có liên hệ chặt chẽ với Maximum Likelihood Estimation (MLE), một phương pháp nền tảng để ước lượng tham số mô hình. Để tìm hiểu thêm về MLE và cách nó bổ trợ các khái niệm trong bài viết này, hãy xem hướng dẫn chi tiết của tôi, Giới thiệu về Maximum Likelihood Estimation (MLE).
Hạn chế của KL-Divergence và cách khắc phục
Giống như mọi thứ, việc dùng KL-Divergence cũng có hạn chế. Hãy khám phá chi tiết:
Jensen–Shannon divergence
Bạn có thể để ý tôi đã nhắc Jensen–Shannon Divergence trước đó, vậy hãy lướt qua nhanh.
Mặc dù phức tạp hơn một chút và tốn tính toán hơn KL-Divergence, Jensen–Shannon Divergence là đối xứng. Nó vẫn chưa phải một metric khoảng cách đúng nghĩa vì không thỏa bất đẳng thức tam giác. Tuy nhiên, nếu lấy căn bậc hai của JS-Divergence, nó thỏa bất đẳng thức tam giác và trở thành một metric đúng nghĩa.
Nó cũng là phiên bản được làm trơn của KL‑divergence và luôn nằm giữa 0 và 1 bit (nếu dùng log cơ số 2). Nhìn lại phương trình, mỗi hạng tử KL được đo so với điểm giữa chung M, không phải P hay Q, nên sẽ không có trường hợp chia cho 0, do đó không có vô hạn.
Kết luận
Tóm lại, KL‑Divergence là công cụ quan trọng để đo chi phí thông tin thừa khi ta dùng phân phối Q của mô hình thay cho phân phối thật P. Nó bằng 0 nếu chúng giống nhau, lớn hơn khi khác nhau, và luôn không âm. KL-Divergence kết nối entropy và cross‑entropy, và xuất hiện trong hàm mất mát, variational inference, và các ràng buộc chính sách.
KL-Divergence rất hữu ích nhưng vẫn chỉ là một công cụ khi xử lý các bài toán Machine Learning và Deep Learning. Để áp dụng xa hơn, hãy xem lộ trình nghề nghiệp Machine Learning Scientist in Python và lộ trình nghề nghiệp Machine Learning Engineer, nơi cả hai đều khám phá supervised, unsupervised và deep learning.
Nếu bạn sẵn sàng liên kết KL-Divergence với các khái niệm Toán học khác, hãy xem các tài nguyên sau: