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](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F551d0275-6779-4a62-85c1-60dd57b0ad1d%2F7622c7d2-8bba-4438-a2cf-2527bb3f8e2a.jpeg?table=block&id=2b1a16cb-a14f-4e9c-b2c4-db3cbc5ecd40&cache=v2)
符号定义如下:
- 输入为 向量,,维度为
- 经过 softmax 函数,
可得输出 向量,维度为
- Softmax Loss 损失函数定义为 , , 是一个标量,维度为
其中 向量为模型的 Label,维度也是,为已知量,一般为 onehot 形式。
我们假设第 j 个类别是正确的,则 ,只有 ,其余 那么
我们的目标是求 标量 对向量 的导数 。
由链式法则, ,其中 和 均为维度为的向量。
为标量,它对向量 求导。标量对向量求导,见 CS224N Lecture 3 的一页 ppt:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F9f3b3e35-1566-4843-a0f4-fd29339b9703%2FUntitled.png?table=block&id=a3d0a98b-7c30-441d-a9b9-964788aed3ff&cache=v2)
可知,标量对向量求导,维度不变,也即 和 维度都应为。
而向量 对向量 求导,可得 Jacobian 矩阵,也见 CS224N Lecture 3 的一页 ppt:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4cd00ef1-e359-41ae-9361-cfe078b34987%2FUntitled.png?table=block&id=65572cbc-3132-40b2-8b70-e835499d6692&cache=v2)
其中 对应的就是 softmax 函数, 对应的为 。可知向量 对向量 求导是一个 Jacobian 矩阵,维度为。
维度为, 维度为。由矩阵乘法,, 维度 。
- 求
由 ,可知最终的 Loss 只跟 有关。
- 求
是一个向量, 也是一个向量,则 是一个 Jacobian 矩阵,类似这样:
可以发现其实 Jacobian 矩阵的每一行对应着 。由于 只有第 行不为 0,由矩阵乘法,其实我们只要求 的第 j 列,也即 ,,其中 。
(1)当
(2)当
所以, 。
Softmax Cross Entropy Loss 的求导结果非常优雅,就等于预测值与 Label 的差。
下面这段话挺好:
使用交叉熵误差作为 softmax 函数的损失函数后,反向传播得到这样 “漂亮” 的结果。实际上,这样 “漂亮” 的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。回归问题中输出层使用 “恒等函数”,损失函数使用“平方和误差”,也是出于同样的理由(3.5 节)。也就是说,使用“平方和误差” 作为 “恒等函数” 的损失函数,反向传播才能得到这样 “漂亮” 的结果。