![4289317fe1f945a92a11d5a3e9c59ca4.png](https://i-blog.csdnimg.cn/blog_migrate/138ed8d5aafd4e593de73f333c502dda.jpeg)
神经网络解决多分类问题时,通常在最后使用 softmax layer + cross-entropy 的组合方案,本文将介绍这一部分的前向传播和反向传播过程。
1 前向传播
神经网络进行训练时,从输入层开始,前向传播经过隐藏层运算,最后经过softmax layer得到预测分类概率分布,然后通过cross-entropy计算预测分类概率分布和目标分类概率分布的损失值。
1.1 softmax layer
![c218708c508bc66131236578b1dc2f69.png](https://i-blog.csdnimg.cn/blog_migrate/332c89c92a0795928e08f5921a0a43d1.jpeg)
softmax layer的作用是将网络的输出进行概率化。
softmax公式,输入是一个m维的向量
如上图所示,假设神经网络进行手写数字识别问题,总共有L层。不添加softmax layer时,网络的输出是
那么为什么要添加softmax layer呢?如果不添加softmax layer,我们在原来的
1.2 cross-entropy
cross-entropy公式如下:
它计算的是a分布和y分布之间的距离,C越小,两者分布越接近。多分类问题的优化目标就是最小化C,在这里a就是神经网络经过softmax layer输出的分类概率分布,y就是目标分类向量。
因为y是一个one-hot向量,所以上面的公式可以转化为:
2 反向传播
softmax layer + cross-entropy的反向传播是用来求一个梯度,注意这是一个向量:
然后将这个梯度继续反向向前传播,用来求解损失函数对前面模型参数的偏导数。
这里先把求解的结果写出来,然后后面再来分析:
这个结果是很漂亮的,是网络的预测概率输出与目标概率输出的差,实现上很容易。
下面分析求解过程,依据就是链式法则,
其中
2.1 cross-entropy
转化为:
所以C对a求导时需要讨论a的下标:
- 如果
- 如果
所以,
(注意,按照雅克比矩阵的定义,这里的偏导数应该是行向量)
2.2 softmax layer
softmax的公式:
那么:
其中:
而
- 如果
- 如果
所以:
最终得到:
2.3 合并
3 总结
本文详细介绍了 softmax layer + cross-entropy 层的前向传播和反向传播计算过程,虽然在推导上有一些麻烦,但在实现上确是很简单。
接下来将会写一篇神经网络中前向传播和反向传播的详细过程的文章,并结合分析动手写一个前馈神经网络的框架,用来实现手写数字识别的任务。
参考:
- https://eli.thegreenplace.net/2016/the-softmax-function-and-its-derivative/
- http://neuralnetworksanddeeplearning.com/chap2.html
- 《深度学习入门》