損失函數:交叉熵
交叉熵用於比較兩個不同概率模型之間的距離。即先把模型轉換成熵這個數值,然后通過數值去定量的比較兩個模型之間的差異。
信息量
信息量用來衡量事件的不確定性,即該事件從不確定轉為確定時的難度有多大。
定義信息量的函數為:
\[f(x):=\text{信息量} \]
假設對於某8只球隊進行比賽,對於其中任意一直球隊,假設奪冠的概率為\(\frac{1}{8}\)。對於一條消息“A球隊奪冠了”其信息量應該等於“A球隊進入決賽”加上“A球隊贏了決賽”之和。即:
\[\begin{align} f(\text{A球隊奪冠了})&=f(\text{A球隊進入決賽})+f(\text{A球隊贏了決賽})\\ f(\frac{1}{8})&=f(\frac{1}{4})+f(\frac{1}{2}) \end{align} \]
而:
\[\begin{align} P(\text{A球隊奪冠了})&=P(\text{A球隊進入決賽})\cdot P(\text{A球隊贏了決賽})\\ \end{align} \]
因此可以推出(其中\(p_i\)表示事件\(i\)在系統\(p\)中發生的概率,下同):
\[f(p_1\cdot p_2) = f(p_1)+f(px_2) \]
因此可以定義信息量函數(負號是因為事件發生的概率越小,所包含的信息量越大):
\[f(p) = -log_2(p) \]
熵
熵用來衡量一個系統所包含的信息量有多少。它衡量一個系統的不確定程度,或者混亂程度。
對於一個系統\(P\)來說,要求整個系統的信息量,也就是求系統中每個事件\(i\),從不確定轉為確定性所包含的信息量的平均值,也就是期望。即:
\[\begin{align} H(P):&=E(f_P)\\ &=\sum_{i=1}^mp_i\cdot f(p_i)\\ &=\sum_{i=1}^m p_i\cdot\big(-log_2(p_i)\big)\\ &=-\sum_{i=1}^m p_i\cdot log_2(p_i) \end{align} \]
相對熵與交叉熵
相對熵表示使用理論分布擬合真實分布時產生的信息損耗。
對於兩個系統\(P,Q\),通過相對熵可以衡量\(Q\)相對於\(P\)有多大的差距,即系統\(Q\)想要和系統\(P\)達到一樣的分布的話,它們之間相差多少信息量:
\[\begin{align} D_{KL}(P||Q)&=\sum_{i=1}^m p_i\cdot \big(f_Q(q_i)-f_P(p_i)\big)\\ &=\sum_{i=1}^m p_i \cdot \bigg( \big(-log_2(q_i)\big)-\big(-log_2(p_i) \big)\bigg)\\ &=\color{blue}{\sum_{i=1}^m p_i\cdot \big(-log_2(q_i) \big)} - \color{red}{\sum_{i=1}^m p_i \cdot\big(-log_2(p_i) \big)} \end{align} \]
可以發現上述公式中紅色部分為系統\(P\)的熵,當系統P沒有變化時,這部分是一個恆值。而藍色部分也就是交叉熵,定義為\(H(P,Q)\)。
又根據吉布斯不等式:
\[\text{若}\sum_{i=1}^np_i=\sum_{i=1}^nq_i=1,\text{且}p_i,q_i\in[0,1]\text{,則有:}\\ -\sum_{i=1}^np_i\cdot log(p_i)\le -\sum_{i=1}^np_i\cdot log(q_i) \]
可知相對熵恆大於\(0\)。因此當系統P沒有變化時,若想要\(Q\)系統的概率模型與\(P\)系統的概率模型盡可能相似,只要最小化交叉熵即可。
深度學習中的交叉熵
神經網絡的目標:
\[\begin{align} min\;H(P,Q) &= -\sum_{i=1}^m p_i\cdot log_2(q_i) \end{align} \]
在深度學習中,系統\(P\)可以用數據集所表示。系統\(Q\)可以用神經網絡模型表示。同樣只考慮判斷輸入是真是假的神經網絡,對於\(n\)個數據中的第\(i\)個數據,它在系統\(P\)里發生的概率,也就是為真的概率為\(y_1\),為假的概率為\(1-y_i\),同時他在系統\(Q\)里為真的概率,也就是經過神經網絡后的輸出為\(\hat y_i\),為假的概率為\(1-\hat y_i\)。因此交叉熵又可表示為:
\[\begin{align} H(P,Q)&=-\sum_{i=1}^n p_i\cdot log_2(q_i)\\ &=-\sum_{i=1}^ny_i\cdot log_2(\hat y_i)+(1-y_i)\cdot log_2(1-\hat y_i) \end{align} \]
是不是跟極大似然估計法的形式一模一樣?
到這里可以把\(p_i,q_i\)的意義具體化,其實\(p_i\)應該理解為數據\(i\)在系統\(P\)中的概率分布。同理\(q_i\)應該理解為數據\(i\)在系統\(Q\)中的概率分布。對於判斷輸入是真是假的神經網絡相當於數據\(i\)的輸出只有兩種可能,為真或者為假,對於多分類\(m\)神經網絡,數據\(i\)的輸出有\(m\)種可能,交叉熵又可表示為:
\[\begin{align} H(P,Q)&=-\sum_{i=1}^np_i\cdot log_2(q_i)\\ &=-\sum_{i=1}^n\sum_{j=1}^mp_{ij}\cdot log_2(q_{ij}) \end{align} \]
是不是跟極大似然估計法的形式一模一樣?
推薦詳細講解視頻:https://www.bilibili.com/video/BV15V411W7VB