深度学习——误差计算与梯度推导

1、均方误差(MSE)

1.1 均方误差(MSE)概述

均方误差是一种常见的损失函数,一般在回归问题中比较常见,其基本公式为:
MSE=1C∑i=1L(yri−yi)2MSE=\frac{1}{C}∑_{i=1}^L(y_{ri}-y_i)^2MSE=C1i=1L(yriyi)2
其中,C是一个超参数,为了便于求导,一般情况下取C=2。yriy_{ri}yri是真实的标签值的第i个属性值,
yiy_iyi表示预测值的第i个属性值。

1.2 均方误差的梯度

下面假设:
J=MSE=1C∑i=1L(yri−yi)2J=MSE=\frac{1}{C}∑_{i=1}^L(y_{ri}-y_i)^2J=MSE=C1i=1L(yriyi)2
则有:
2J∂yi=∂1C∑i=1L(yri−yi)2∂yi=2C(yri−yi)∗(−1)=2C(yi−yri)\frac{2J}{∂y_i}=\frac{∂\frac{1}{C}∑_{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})yi2J=yiC1i=1L(yriyi)2=C2(yriyi)(1)=C2(yiyri)
整理成向量的形式有:
2J∂y=2C∗y1−yr1y2−yr2……yL−yrL\frac{2J}{∂y}=\frac{2}{C}* \begin{matrix} y_1 - y_{r1} \\ y_2 - y_{r2}\\ ……\\ y_L - y_{rL} \end{matrix} y2J=C2y1yr1y2yr2yLyrL

2 sotfmax + 交叉熵

2.1 简单介绍

sotfmax和交叉熵通常被用于分类任务中,其中,softmax的定义为:
yi=eoi∑j=1Leojy_i = \frac{e^{o_i}}{∑_{j=1}^Le^{o_j}}yi=j=1Leojeoi
其中,oio_ioi表示输出单元输出的第i个属性值,一般情况下,yiy_iyi表示属于第i类的概率。
交叉熵的损失函数定义为:
J=−∑i=1Lyriln(yi)J = - ∑_{i=1}^Ly_{ri}ln(y_i)J=i=1Lyriln(yi)
其中yriy_{ri}yri表示真实的第i类的概率值。

一般情况下,softmax产生的是一个L维的概率分布Y。而真实向量YrY_rYr是一个01向量,1表示对应的分类。0表示不是该分类。

2.2 梯度计算

现在,我们假设在真实的分类向量YrY_rYr中,对应的是第s个分类。则有ys=1,yi≠s=0y_s=1,y_{i≠s}=0ys=1,yi=s=0

我们分成两种情况:

  1. 当i=s的时候,有:
    J=−yrsln(ys)J = - y_{rs}ln(y_s)J=yrsln(ys)
    ys=eos∑j=1Leojy_s = \frac{e^{o_s}}{∑_{j=1}^Le^{o_j}}ys=j=1Leojeos
    则有:
    ∂J∂os=∂J∂ys∗∂ys∂os=∂(−yrsln(ys))∂ys∗∂eos∑j=1Leoj∂os\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}osJ=ysJosys=ys(yrsln(ys))osj=1Leojeos
    根据J和ysJ和y_sJys进一步化简有:
    ∂(−yrsln(ys))∂ys=−yrs∗1ys\frac{∂( - y_{rs}ln(y_s))}{∂y_s}=-y_{rs}*\frac{1}{y_s}ys(yrsln(ys))=yrsys1
    ∂eos∑j=1Leoj∂os=eos∗(∑j=1Leoj−eos)(∑j=1Leoj)2\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}osj=1Leojeos=(j=1Leoj)2eos(j=1Leojeos)
    将上式带入到原始的式子中,有:
    ∂J∂os=−yrs∗∑j=1Leojeos∗eos∗(∑j=1Leoj−eos)(∑j=1Leoj)2=−yrs∗(1−ys)\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)osJ=yrseosj=1Leoj(j=1Leoj)2eos(j=1Leojeos)=yrs(1ys)

  2. 当i≠s的时候,有:
    J=−yrsln(ys)J = - y_{rs}ln(y_s)J=yrsln(ys)
    yi=eoi∑j=1Leojy_i = \frac{e^{o_i}}{∑_{j=1}^Le^{o_j}}yi=j=1Leojeoi
    则有:
    ∂J∂oi=∂J∂ys∗∂ys∂oi=−yrs∗1ys∗∂ys∂oi\frac{∂J}{∂o_i}=\frac{∂J}{∂y_s}*\frac{∂y_s}{∂o_i}=-y_{rs}*\frac{1}{y_s}*\frac{∂y_s}{∂o_i}oiJ=ysJoiys=yrsys1oiys
    其中:
    ∂ys∂oi=−eos∗eoi(∑j=1Leoj)2\frac{∂y_s}{∂o_i}=\frac{-e^{o_s}*e^{o_i}}{(∑_{j=1}^Le^{o_j})^2}oiys=(j=1Leoj)2eoseoi
    带入到原式子之后:
    ∂J∂oi=−yrs∗∑j=1Leojeos∗−eos∗eoi(∑j=1Leoj)2=yrs∗yi\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_ioiJ=yrseosj=1Leoj(j=1Leoj)2eoseoi=yrsyi

  3. 最后,我们能够发现:根据yrs=1y_{rs}=1yrs=1,上面两种情况的计算结果可以化简为:

当i=s的时候,导数为:ys−1=ys−yrsy_s -1=y_s - y_{rs}ys1=ysyrs
当i≠s的时候,导数为: yi−0=yi−yriy_i - 0=y_i-y_{ri}yi0=yiyri

由此可以总结出:
∂J∂oi=yi−yri\frac{∂J}{∂o_i}=y_{i} - y_{ri}oiJ=yiyri

Logo

一站式 AI 云服务平台

更多推荐