![2280cda90cb2f2125bf9b94c0d3817bc.png](https://i-blog.csdnimg.cn/blog_migrate/0a3b55b26aa64e21875f1941d9e0261c.jpeg)
求softmax loss过程如下图所示:
![60e382368c4677cb107cd45e9e9bdb2b.png](https://i-blog.csdnimg.cn/blog_migrate/5edfeefb0d33c217cc58a9f6bd60cbc0.jpeg)
符号定义如下:
1. 输入为z向量,
2. 经过softmax函数,
可得输出a向量,
3. Softmax Loss损失函数定义为L,
其中y向量为模型的Label,维度也是(1,n),为已知量,一般为onehot形式。
我们假设第 j 个类别是正确的,则
那么
我们的目标是求 标量
由链式法则,
L为标量,它对向量a求导。标量对向量求导,见CS224N Lecture 3的一页ppt:
![bc846cf62bf33e880d5ea5150232ced9.png](https://i-blog.csdnimg.cn/blog_migrate/fa624218d18de617f14ef9a773eeb41c.jpeg)
可知,标量对向量求导,维度不变,也即
而向量a对向量z求导,可得Jacobian矩阵,也见CS224N Lecture 3的一页ppt:
![881e6e1ac13a4e6ab3255a173703dc40.png](https://i-blog.csdnimg.cn/blog_migrate/ef8a2a7897f89317bdb9931dcf86f6f0.jpeg)
其中f对应的就是softmax函数,x对应的为z。可知向量a对向量z求导是一个Jacobian矩阵,维度为(n,n)。
1. 求
由
2. 求
![c1565c927de89b8f7fa5eb3e41457793.png](https://i-blog.csdnimg.cn/blog_migrate/1b426acf607d95654494f9899fdebff2.jpeg)
可以发现其实Jacobian矩阵的每一行对应着
由于
(1)当
(2)当
所以,
Softmax Cross Entropy Loss的求导结果非常优雅,就等于预测值与Label的差。
下面这段话挺好:
使用交叉熵误差作为softmax 函数的损失函数后,反向传播得到(y1 − t1, y2 − t2, y3 − t3)这样“ 漂亮”的结果。实际上,这样“漂亮”的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。回归问题中输出层使用“恒等函数”,损失函数使用“平方和误差”,也是出于同样的理由(3.5 节)。也就是说,使用“平方和误差”作为“恒等函数”的损失函数,反向传播才能得到(y1 −t1, y2 − t2, y3 − t3)这样“漂亮”的结果。
摘自《深度学习入门:基于Python的理论与实现》第5章5.6节。强推这本书,豆瓣9分以上,并且附录中有详细的基于计算图的Softmax-With-Loss反向传播过程。
引用:
- Stanford CS224N http://web.stanford.edu/class/cs224n/
- 深度学习入门:基于Python的理论与实现