交叉熵損失函數的概念和理解
覺得有用的話,歡迎一起討論相互學習~
公式
\[ loss =\sum_{i}{(y_{i} \cdot log(y\_predicted_{i}) +(1-y_{i}) \cdot log(1-y\_predicted_{i}) )} \]
定義
- 在信息論中,若一個符號字符串中的每個字符的出現概率\(P_{i}\)已知,則可用香農熵估計該字符串中每個符號\(S_{i}\)編碼所需的平均最小位數.
\[H=-\sum_{i}({p_{i} \cdot log_{2}(p_{i})}) \]
- 除了數學表達式相似以外,完全可以將這里的熵和其熱力學概念聯系起來.
- 例如,可計算單次"HELLO"的熵:
\[p("H")=p("E")=p("O")=1/5=0.2\\p("L")=2/5=0.4\\H=-3*0.2*log_{2}(0.2)-0.4*log_{2}(0.4)=1.92193 \]
- 因此,采用最優編碼方案時,"Hello"中的每個符號需要2位計算單詞"Hello"中的每個符號需要2位.
- 在對符號進行編碼時,如果假設了其他的概率\(q_{i}\)而非真實概率\(p_{i}\),則對每個符號所需的編碼的長度就會更大.這正是交叉熵所發揮作用的時候. 他允許用戶以另外一種次優編碼方案計算對同一個字符串進行編碼所需的平均最小位數.
\[H=-\sum_{i}{(p_{i} \cdot log_{2}(q_{i}))} \]
- 例如,ASCII會對每個符號賦予相同的概率值\(q_{i}=1/256\).下面計算采用ASCII編碼時單詞"HELLO"的交叉熵:
\[q("H")=q("E")=q("L")=q("O")=1/256\\H=-3*0.2*log_{2}(1/256)=8 \]
從而采用ASCII編碼時,每個字符需要8個位,這與預期完全吻合.
- 作為一個損失函數假設p為所期望的輸出和概率分布("編碼"),其中實際值 有100%,而其他任何值為0,將q作為由模型計算得到的輸出,請牢記,sigmoid函數的輸出是一個概率值.
- 有這樣一個定理:當p=q時,交叉熵去的最小值.因此可以利用交叉熵比較一個分布與另一個分布的吻合情況.交叉熵越接近與熵,q便是針對p更好的逼近,實際上,模型的輸出與期望輸出越接近,交叉熵也會越小,這正是損失函數所需要的.
- 在對熵進行最小化時,將\(log_{2}\)替換為log完全沒有任何問題,因為兩者只相差一個常系數.
參考資料
面向機器智能的tensorflow實踐