2023-09-16 01 梯度

2023-09-15  本文已影响0人  麒麟楚庄王

来源:深度学习——损失函数与梯度推导_ftmax 损失函数以及梯度推导计算_隔壁的NLP小哥的博客-CSDN博客

1. 均方误差的梯度

均方误差是一种常见的损失函数,一般在回归问题中比较常见,其基本公式为:

J =MSE=\frac{1}{C} \sum_{i=1}^L (y_{ri}-y_i)^2

其中,C是一个超参数,为了便于求导,一般情况下取C=2。 y_{ri}是真实的标签值的第i个属性值,y_i表示预测值的第i个属性值。

则有:

\frac{∂J }{∂y_{i}}  = \frac{∂\frac{1}{C}\sum_{i=1}^L (y_{ri}-y_i)^2}{∂y_{i}} =\frac{2}{C}(y_{ri}-y_i)*(-1) = \frac{2}{C}(y_i-y_{ri})

整理成向量的形式有:

\frac{∂J}{∂y}=\frac{2}{C}*\begin{matrix}y_1-y_{r1}\\y_2-y_{r2}\\......\\y_L-y_{rL}\\\end{matrix}

2. sotfmax + 交叉熵

sotfmax和交叉熵通常被用于分类任务中,其中,softmax的定义为:

其中,softmax的定义为:y_i = \frac{e^{o_i}}{∑_{j=1}^Le^{o_j}}

其中,o_i表示输出单元输出的第i个属性值,一般情况下,y_i表示属于第i类的概率。

交叉熵的损失函数定义为:

J = - ∑_{i=1}^Ly_{ri}ln(y_i)

其中y_{ri}表示真实的第i类的概率值。

一般情况下,softmax产生的是一个L维的概率分布Y。

而真实向量Y_r是一个0,1向量,1表示对应的分类。0表示不是该分类。

3. 梯度计算

现在,我们假设在真实的分类向量Y_r中,对应的是第s个分类。

y_s = 1, 则有y_{i≠s}=0

我们分成两种情况:

1)  当i=s的时候,有:

J = - y_{rs}ln(y_s)

y_s = \frac{e^{o_s}}{∑_{j=1}^Le^{o_j}}

则有:\frac{∂J}{∂o_s}=\frac{∂J}{∂y_s}*\frac{∂y_s}{∂o_s}=\frac{∂( - y_{rs}ln(y_s))}{∂y_s}*\frac{∂\frac{e^{o_s}}{∑_{j=1}^Le^{o_j}}}{∂o_s}

根据 J和 y_s 和进一步化简有:\frac{∂( - y_{rs}ln(y_s))}{∂y_s}=-y_{rs}*\frac{1}{y_s}

有:\frac{∂\frac{e^{o_s}}{∑_{j=1}^Le^{o_j}}}{∂o_s}=\frac{e^{o_s}*(∑_{j=1}^Le^{o_j}-e^{o_s})}{(∑_{j=1}^Le^{o_j})^2}

将上式带入到原始的式子中,有:

\frac{∂J}{∂o_s}=-y_{rs}*\frac{∑_{j=1}^Le^{o_j}}{e^{o_s}}*\frac{e^{o_s}*(∑_{j=1}^Le^{o_j}-e^{o_s})}{(∑_{j=1}^Le^{o_j})^2}=-y_{rs}*(1-y_s)

2) 当i≠s的时候,有:

J = - y_{rs}ln(y_s)

y_s = \frac{e^{o_s}}{∑_{j=1}^Le^{o_j}}

\frac{∂J}{∂o_i}=\frac{∂J}{∂y_s}*\frac{∂y_s}{∂o_i}=-y_{rs}*\frac{1}{y_s}*\frac{∂y_s}{∂o_i}

其中:\frac{∂y_s}{∂o_i}=\frac{-e^{o_s}*e^{o_i}}{(∑_{j=1}^Le^{o_j})^2}

带入到原式子之后:\frac{∂J}{∂o_i}=-y_{rs}*\frac{∑_{j=1}^Le^{o_j}}{e^{o_s}}*\frac{-e^{o_s}*e^{o_i}}{(∑_{j=1}^Le^{o_j})^2}=y_{rs}*y_i

3) 最后,根据y_{rs}=1y_{ri}=0

我们能够发现,上面两种情况的计算结果可以化简为:

当i=s的时候,导数为y_s - y_{rs}

当i≠s的时候,导数为y_i-y_{ri}

由此可以总结出:\frac{∂J}{∂o_i}=y_{i} - y_{ri}

上一篇 下一篇

猜你喜欢

热点阅读