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)\),在加快运算速度的同时,保证数据的稳定性。