深度学习——损失函数与梯度推导
深度学习——误差计算与梯度推导1、均方误差(MSE)1.1 均方误差(MSE)概述均方误差是一种常见的损失函数,一般在回归问题中比较常见,其基本公式为:MSE=1C∑i=1L(yri−yi)2MSE=\frac{1}{C}∑_{i=1}^L(y_{ri}-y_i)^2MSE=C1i=1∑L(yri−yi)2其中,C是一个超参数,为了便于求导,一般情况下取C=2。yriy_{ri}...
深度学习——误差计算与梯度推导
1、均方误差(MSE)
1.1 均方误差(MSE)概述
均方误差是一种常见的损失函数,一般在回归问题中比较常见,其基本公式为:
MSE=1C∑i=1L(yri−yi)2MSE=\frac{1}{C}∑_{i=1}^L(y_{ri}-y_i)^2MSE=C1i=1∑L(yri−yi)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=1∑L(yri−yi)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=∂yi∂C1∑i=1L(yri−yi)2=C2(yri−yi)∗(−1)=C2(yi−yri)
整理成向量的形式有:
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=C2∗y1−yr1y2−yr2……yL−yrL
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=1∑Lyriln(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。
我们分成两种情况:
-
当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}∂os∂J=∂ys∂J∗∂os∂ys=∂ys∂(−yrsln(ys))∗∂os∂∑j=1Leojeos
根据J和ysJ和y_sJ和ys进一步化简有:
∂(−yrsln(ys))∂ys=−yrs∗1ys\frac{∂( - y_{rs}ln(y_s))}{∂y_s}=-y_{rs}*\frac{1}{y_s}∂ys∂(−yrsln(ys))=−yrs∗ys1
∂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}∂os∂∑j=1Leojeos=(∑j=1Leoj)2eos∗(∑j=1Leoj−eos)
将上式带入到原始的式子中,有:
∂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)∂os∂J=−yrs∗eos∑j=1Leoj∗(∑j=1Leoj)2eos∗(∑j=1Leoj−eos)=−yrs∗(1−ys) -
当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}∂oi∂J=∂ys∂J∗∂oi∂ys=−yrs∗ys1∗∂oi∂ys
其中:
∂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}∂oi∂ys=(∑j=1Leoj)2−eos∗eoi
带入到原式子之后:
∂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_i∂oi∂J=−yrs∗eos∑j=1Leoj∗(∑j=1Leoj)2−eos∗eoi=yrs∗yi -
最后,我们能够发现:根据yrs=1y_{rs}=1yrs=1,上面两种情况的计算结果可以化简为:
当i=s的时候,导数为:ys−1=ys−yrsy_s -1=y_s - y_{rs}ys−1=ys−yrs
当i≠s的时候,导数为: yi−0=yi−yriy_i - 0=y_i-y_{ri}yi−0=yi−yri
由此可以总结出:
∂J∂oi=yi−yri\frac{∂J}{∂o_i}=y_{i} - y_{ri}∂oi∂J=yi−yri
更多推荐




所有评论(0)