15 分钟搞定 Softmax Loss 求导

date
Jun 28, 2021
Last edited time
Mar 28, 2023 08:04 AM
status
Published
slug
15分钟搞定Softmax_Loss求导
tags
DL
summary
type
Post
Field
Plat
求 softmax loss 过程如下图所示:
notion image
符号定义如下:
  1. 输入为 向量,,维度为
  1. 经过 softmax 函数,
    1. 可得输出 向量,维度为
  1. Softmax Loss 损失函数定义为 是一个标量,维度为
    1. 其中 向量为模型的 Label,维度也是,为已知量,一般为 onehot 形式。
      我们假设第 j 个类别是正确的,则 ,只有 ,其余 那么
 
我们的目标是求 标量 对向量 的导数
由链式法则, ,其中 均为维度为的向量。
为标量,它对向量 求导。标量对向量求导,见 CS224N Lecture 3 的一页 ppt:
notion image
可知,标量对向量求导,维度不变,也即 维度都应为
而向量 对向量 求导,可得 Jacobian 矩阵,也见 CS224N Lecture 3 的一页 ppt:
notion image
 
其中 对应的就是 softmax 函数, 对应的为 。可知向量 对向量 求导是一个 Jacobian 矩阵,维度为
维度为 维度为。由矩阵乘法,, 维度
,可知最终的 Loss 只跟 有关。
是一个向量, 也是一个向量,则 是一个 Jacobian 矩阵,类似这样:
可以发现其实 Jacobian 矩阵的每一行对应着 。由于 只有第 行不为 0,由矩阵乘法,其实我们只要求 的第 j 列,也即 ,其中
(1)当
(2)当
所以,
Softmax Cross Entropy Loss 的求导结果非常优雅,就等于预测值与 Label 的差。
下面这段话挺好:
使用交叉熵误差作为 softmax 函数的损失函数后,反向传播得到这样 “漂亮” 的结果。实际上,这样 “漂亮” 的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。回归问题中输出层使用 “恒等函数”,损失函数使用“平方和误差”,也是出于同样的理由(3.5 节)。也就是说,使用“平方和误差” 作为 “恒等函数” 的损失函数,反向传播才能得到这样 “漂亮” 的结果。

© Lazurite 2021 - 2024