标量 向量 标量求导链式法则_15分钟搞定Softmax Loss求导

2280cda90cb2f2125bf9b94c0d3817bc.png

求softmax loss过程如下图所示:

60e382368c4677cb107cd45e9e9bdb2b.png
Softmax Loss 计算过程

符号定义如下:

1. 输入为z向量,

,维度为(1,n)

2. 经过softmax函数,

可得输出a向量,

,维度为(1,n)

3. Softmax Loss损失函数定义为L,

,L是一个标量,维度为(1,1)

其中y向量为模型的Label,维度也是(1,n),为已知量,一般为onehot形式。

我们假设第 j 个类别是正确的,则

,只有
,其余

那么

我们的目标是求 标量

对向量
的导数

由链式法则,

,其中a和z均为维度为(1,n)的向量。

L为标量,它对向量a求导。标量对向量求导,见CS224N Lecture 3的一页ppt:

bc846cf62bf33e880d5ea5150232ced9.png

可知,标量对向量求导,维度不变,也即

维度都应为(1,n)。

而向量a对向量z求导,可得Jacobian矩阵,也见CS224N Lecture 3的一页ppt:

881e6e1ac13a4e6ab3255a173703dc40.png

其中f对应的就是softmax函数,x对应的为z。可知向量a对向量z求导是一个Jacobian矩阵,维度为(n,n)。

维度为(1,n),
维度为(n,n),
。由矩阵乘法,维度(1,n)*(n, n) = (1,n)。
的维度为(1,n),这个是合理的。

1. 求

,可知最终的Loss只跟
有关。

2. 求

是一个向量,
也是一个向量,则
是一个Jacobian矩阵,类似这样:

c1565c927de89b8f7fa5eb3e41457793.png

可以发现其实Jacobian矩阵的每一行对应着

由于

只有第j列不为0,由矩阵乘法,其实我们只要求
的第j行,也即
,其中

(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反向传播过程。

引用:

  1. Stanford CS224N http://web.stanford.edu/class/cs224n/
  2. 深度学习入门:基于Python的理论与实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值