1. Softmax
Softmax是指數標准化函數,又稱為歸一化指數函數,將多個神經元的輸出,映射到 (0,1) 范圍內,並且歸一化保證和為1,從而使得多分類的概率之和也剛好為1。其公式如下:
\[S_{i}=\frac{e^{z_i}}{\sum_{j}^{K}{e^{z^j}}} \]
通俗理解,softmax函數的結果代表了類別分布,也就是說K個不同可能結果的概率分布。所以softmax經常用於深度學習和機器學習的分類任務中。
但是Softmax會存在上溢出和下溢出的情況,這是因為Softmax會進行指數操作,當上一層的輸出,也就是Softmax的輸入比較大的時候,可能會產生上溢出,超出float的能表示范圍;同理,當輸入為負值且絕對值比較大的時候,分子分母會極小,接近0,從而導致下溢出。這時候log_Softmax能夠很好的解決溢出問題,且可以加快運算速度,提升數據穩定性。
2. log_Softmax
log_Softmax其實就是對Softmax取對數,數學表達式如下所示:
\[L_{i}=log\frac{e^{z_i}}{\sum_{j}^{K}{e^{z^j}}} \]
盡管,數學上log_Softmax是對Softmax取對數,但是,實際操作中是通過下面的式子來實現的:
\[L_{i}=log\frac{e^{z_i}}{\sum_{j}^{K}{e^{z^j}}}=log\frac{e^{z_i}/e^{M}}{\sum_{j}^{K}{e^{z^j/e^{M}}}}=log\frac{e^{(z_i-M)}}{\sum_{j}^{K}{e^{(z^j-M)}}}=(z_i-M)-log(\sum_{j}^{K}{e^{(z^j-M)}}) \]
其中,\(M=max(z_i),i=(1,...,K)\),在加快運算速度的同時,保證數據的穩定性。