Softmax函数

以第i节点输出为例,Softmax函数的定义为:

Softmax(z_i)=\frac{e^{z_i}}{\begin{matrix} \sum_{c=1}^{C} e^{z_c} \end{matrix}}

上式中,z_i为第i个节点的输出值,C为输出节点的个数(分类的类别数)。通过Softmax可以将多分类的输出值转换为范围在[0,1]和为1的概率分布。

Softmax引入指数形式的优点是指数形式的Softmax函数能够将差距大的数值距离拉的更大。Softmax引入指数形式的缺点是

Softmax函数求导

以三个输出节点的Softmax函数为例,输出值y_1y_1=e^{z_1}/(e^{z_1}+e^{z_2}+e^{z_3})。虽然\frac{\partial y_1}{\partial z_1}\frac{\partial y_1}{\partial z_2}\frac{\partial y_1}{\partial z_3}结果不同,而\frac{\partial y_1}{\partial z_2}\frac{\partial y_1}{\partial z_3}只需换响应的索引号就可以了。因此Softmax函数求导时分为j==ij!=i的两种情况下,y_i关于z_j的导数。

  1. j==i时,如\frac{\partial y_1}{\partial z_1}

\begin{aligned} \frac{\partial}{\partial z_j}(\frac{e^{z_i}}{\begin{matrix} \sum_{c=1}^{C} e^{z_c} \end{matrix}})&=\frac{\left(e^{z_{i}}\right)^{\prime} \sum_{c=1}^{C} e^{z_{C}}-e^{z_{i}}\left(\sum_{c=1}^{C} e^{z_{C}}\right)^{\prime}}{\left(\sum_{c=1}^{C} e^{z_{C}}\right)^{2}}\\ &=\frac{e^{z_{i}} \sum_{c=1}^{C} e^{z_{c}}-e^{z_{i}} e^{z_{j}}}{\left(\sum_{c=1}^{C} e^{z_{c}}\right)^{2}}\\ &=\frac{e^{z_{i}}\left(\sum_{c=1}^{C} e^{z_{c}}-e^{z_{j}}\right)}{\left(\sum_{c=1}^{C} e^{z_{c}}\right)^{2}}\\ &=\frac{e^{z_{i}}}{\sum_{c=1}^{C} e^{z_{c}}} \times \frac{\sum_{c=1}^{C} e^{z_{C}}-e^{z_{j}}}{\sum_{c=1}^{C} e^{z_{C}}} \end{aligned}

Softmax(z_i)记为p_i,上面的结果可以转化为p_i(1-p_j),由于前提条件为i==j,结果又可变为p_i-(p_i)^2

  1. j!=i时,如\frac{\partial y_1}{\partial z_2}

\begin{aligned} \frac{\partial}{\partial z_j}(\frac{e^{z_i}}{\begin{matrix} \sum_{c=1}^{C} e^{z_c} \end{matrix}})&=\frac{\left(e^{z_{i}}\right)^{\prime} \sum_{c=1}^{C} e^{z_{C}}-e^{z_{i}}\left(\sum_{c=1}^{C} e^{z_{C}}\right)^{\prime}}{\left(\sum_{c=1}^{C} e^{z_{C}}\right)^{2}}\\ &=\frac{0-e^{z_{j}} e^{z_{i}}}{\left(\sum_{c=1}^{C} e^{z_{c}}\right)^{2}}\\ &=\frac{-e^{z_{j}}}{\sum_{c=1}^{C} e^{z_{C}}} \times \frac{e^{z_{i}}}{\sum_{c=1}^{C} e^{z_{C}}} \end{aligned}

按照1中所述,上式可以转化为-p_j\cdot p_i

交叉熵损失函数

假设此时第i个输出节点为正确类别对应的输出节点,p_i=Softmax(z_i)是正确类别对应输出结点的概率值。添加\log运算不影响函数的单调性,即\log p_ip_i的值越大越好,如果要使用梯度下降法来迭代求解,只需要为\log p_i加上负号变为损失函数即可:
\begin{aligned} loss_i&=-\log p_i=-log(\frac{e^{z_i}}{\begin{matrix} \sum_{c=1}^{C} e^{z_c} \end{matrix}})\\ &=-(z_i-\log \begin{matrix} \sum_{c=1}^{C} e^{z_c} \end{matrix}) \end{aligned}

但通常说的交叉熵是这种形式:
L=-\begin{matrix} \sum_{c=1}^{C} \end{matrix} y_{c} \log \left(p_{c}\right)
实际上loss_iL的损失函数是一致的,接下来继续以三分类的形式讲解:

由于标签是one-hot的形式,所以L=-0\times\log(p_0)-1\times\log(p_1)-0\times\log(p_2)(假定真实分类为索引1的位置),最终结果为L=-1\times\log(p_1)。再从loss_1来看
loss_1=-\log p_1=L

那么损失函数L对网络输出变量z_i的偏导数为:
\begin{aligned} \frac{\partial L}{\partial z_{i}}&=-\begin{matrix} \sum_{c=1}^{C} \end{matrix} y_{c} \frac{\partial \log \left(p_{c}\right)}{\partial z_{i}}=-\begin{matrix} \sum_{c=1}^{C} \end{matrix} y_{c} \frac{\partial \log \left(p_{c}\right)}{\partial p_{c}} \cdot \frac{\partial p_{c}}{\partial z_{i}}\\ &=-\begin{matrix} \sum_{c=1}^{C} \end{matrix} y_{c} \frac{1}{p_{c}} \cdot \frac{\partial p_{c}}{\partial z_{i}} \end{aligned}
根据Softmax函数求导的结果,上式可继续推导:
\begin{aligned} \frac{\partial L}{\partial z_{i}}&=-y_i(1-p_i)-\begin{matrix}\sum_{c\neq i}\end{matrix}y_c\frac{1}{p_c}(-p_c\cdot p_i)\\ &=-y_i(1-p_i)+\begin{matrix}\sum_{c\neq i}y_c\cdot p_i\end{matrix}\\ &=-y_i+y_ip_i+\begin{matrix}\sum_{c\neq i}y_c\cdot p_i\end{matrix}\\ &=p_i(y_i+\begin{matrix}\sum_{c\neq i} y_c\end{matrix})-y_i \end{aligned}
至此完成了对交叉熵函数的梯度推导。

参考文献:

  1. 一文详解Softmax函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容