以下内容均参考王木头学科学B站up主的视频和专栏
导:比较两个概率分布的最大障碍出现了。两个不同类型的概率分布,它们无法直接公度。 所有的概率分布,都可以统一地被转换成熵,比较两个概率分布是不是相同,不同的话,它们之间又相差多少,都可以用熵来进行衡量了。
1.信息量
信息量它应该是,某个消息对“某个事件的确定程度改变了多少”进行的衡量。
具体例子在原博客中
信息量 ( P ( X ) ) : = − l o g 2 P ( X ) 信息量(P(X)):=-log_2P(X) 信息量(P(X)):=−log2P(X)
2.熵
信息论和热力学中均有熵
熵:对一个系统的混乱程度的度量(是一个系统里信息量的期望值)
H ( S ) : = E ( I ( S ) ) = ∑ i = 1 m P ( x i ) I ( x i ) = ∑ i = 1 m P ( x i ) l o g 2 P ( x i ) ) = − ∑ i = 1 m P ( x i ) l o g 2 P ( x i ) H(S):=E(I(S)) = \textstyle \sum_{i=1}^mP(x_i)I(x_i)=\textstyle \sum_{i=1}^mP(x_i)log_2P(x_i))=-\textstyle \sum_{i=1}^mP(x_i)log_2P(x_i) H(S):=E(I(S))=∑i=1mP(xi)I(xi)=∑i=1mP(xi)log2P(xi))=−∑i=1mP(xi)log2P(xi)
其中 H ( S ) H(S) H(S)表示 S S S系统的熵, E E E表示求期望, I ( x ) I(x) I(x)求信息量, P ( x i ) P(x_i) P(xi)表示 x i x_i xi事件的概率
现在有了熵,我们是不是就可以直接比较两个概率分布的差距了呢?把两个概率分布的熵都算出来,然后看看相差多少。
哪有这么简单,别忘了,真实规律我们是不知道的,既然不知道,那它的熵还怎么求呢?没有办法。
那么有没有什么方法,即便不知道一个概率分布的熵具体是多少,也能知道两个概率分布之间的差距是多少呢?
有!这就是KL散度和交叉熵了。
3.KL散度/相对熵
KL散度不是粗暴的比较一个总体的熵,而是对每一个事件xi对应的信息量,都会拿来进行比较。如果每一个事件的信息量都是相同的,那么两个概率分布肯定就是相同的了。
D K L ( S ∣ ∣ O ) : = ∑ i = 1 m P S ( x i ) ∗ ( I ( P O ( x i ) ) − I ( P S ( x i ) ) ) D_{KL}(S||O):=\textstyle\sum_{i=1}^mP_S(x_i)*(I(P_O(x_i))-I(P_S(x_i))) DKL(S∣∣O):=∑i=1mPS(xi)∗(I(PO(xi))−I(PS(xi)))
其中系统 S S S代表的是真实的规律,系统 O O O代表的是机器学习模型里面猜测的那个规律, D K L ( S ∣ ∣ O ) D_{KL}(S||O) DKL(S∣∣O)表示在 S S S系统的基准下另一系统 O O O的熵, P S ( x i ) P_S(x_i) PS(xi)表示事件 x i x_i xi在 S S S系统中发生的概率, I ( P O ( x i ) ) − I ( P S ( x i ) ) I(P_O(x_i))-I(P_S(x_i)) I(PO(xi))−I(PS(xi))表示事件 x i x_i xi在两个系统中信息量的差值。
给上式进行变形:
D K L ( S ∣ ∣ O ) : = ∑ i = 1 m P S ( x i ) ∗ ( I ( P O ( x i ) ) − I ( P S ( x i ) ) ) = ∑ i = 1 m P S ( x i ) ∗ ( ( − l o g 2 P O ( x i ) ) − ( − l o g 2 P S ( x i ) ) ) = ∑ i = 1 m P S ( x i ) ∗ ( ( − l o g 2 P O ( x i ) ) − ∑ i = 1 m P S ( x i ) ∗ ( − l o g 2 P S ( x i ) ) D_{KL}(S||O):= \textstyle\sum_{i=1}^mP_S(x_i)*(I(P_O(x_i))-I(P_S(x_i)))= \textstyle\sum_{i=1}^mP_S(x_i)*((-log_2P_O(x_i))-(-log_2P_S(x_i)))= \textstyle\sum_{i=1}^mP_S(x_i)*((-log_2P_O(x_i))- \textstyle\sum_{i=1}^mP_S(x_i)*(-log_2P_S(x_i)) DKL(S∣∣O):=∑i=1mPS(xi)∗(I(PO(xi))−I(PS(xi)))=∑i=1mPS(xi)∗((−log2PO(xi))−(−log2PS(xi)))=∑i=1mPS(xi)∗((−log2PO(xi))−∑i=1mPS(xi)∗(−log2PS(xi))
前者是交叉熵,后者是系统 S S S的熵
4.交叉熵
H ( S , O ) : = − ∑ i = 1 m P S ( x i ) ∗ ( l o g 2 P O ( x i ) ) H(S,O):=-\textstyle\sum_{i=1}^mP_S(x_i)*(log_2P_O(x_i)) H(S,O):=−∑i=1mPS(xi)∗(log2PO(xi))
特例:二分类交叉熵
用猫狗分类举例
H ( S , O ) : = − ∑ i = c a t , d o g P S ( x i ) ∗ ( l o g 2 P O ( x i ) ) = − P S ( c a t ) ∗ l o g 2 P O ( c a t ) − P S ( d o g ) l o g 2 P O ( d o g ) = − P S ( c a t ) ∗ l o g 2 P O ( c a t ) − P S ( 1 − P S ( c a t ) ) l o g 2 P O ( 1 − P S ( c a t ) ) H(S,O):=-\textstyle\sum_{i=cat,dog}P_S(x_i)*(log_2P_O(x_i))= -P_S(cat)*log_2P_O(cat)-P_S(dog)log_2P_O(dog)= -P_S(cat)*log_2P_O(cat)-P_S(1-P_S(cat))log_2P_O(1-P_S(cat)) H(S,O):=−∑i=cat,dogPS(xi)∗(log2PO(xi))=−PS(cat)∗log2PO(cat)−PS(dog)log2PO(dog)=−PS(cat)∗log2PO(cat)−PS(1−PS(cat))log2PO(1−PS(cat))
即
B i n a r y C r o s s E n t r o p y = − P ∗ l o g P − ( 1 − P ) ∗ l o g ( 1 − P ) BinaryCrossEntropy=-P*logP-(1-P)*log(1-P) BinaryCrossEntropy=−P∗logP−(1−P)∗log(1−P)
5.参考
https://www.bilibili.com/read/cv15258489/?spm_id_from=333.999.0.0
https://www.bilibili.com/video/BV15V411W7VB/?spm_id_from=333.999.0.0&vd_source=20c37d260c9535497db1af49e1fd2cbd