深度学习——损失函数与梯度推导

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

1、均方误差(MSE)

1.1 均方误差(MSE)概述

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

1.2 均方误差的梯度

下面假设:
J = M S E = 1 C ∑ i = 1 L ( y r i − y i ) 2 J=MSE=\frac{1}{C}∑_{i=1}^L(y_{ri}-y_i)^2 J=MSE=C1i=1L(yriyi)2
则有:
2 J ∂ y i = ∂ 1 C ∑ i = 1 L ( y r i − y i ) 2 ∂ y i = 2 C ( y r i − y i ) ∗ ( − 1 ) = 2 C ( y i − y r i ) \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)
整理成向量的形式有:
2 J ∂ y = 2 C ∗ y 1 − y r 1 y 2 − y r 2 … … y L − y r L \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的定义为:
y i = e o i ∑ j = 1 L e o j y_i = \frac{e^{o_i}}{∑_{j=1}^Le^{o_j}} yi=j=1Leojeoi
其中, o i o_i oi表示输出单元输出的第i个属性值,一般情况下, y i y_i yi表示属于第i类的概率。
交叉熵的损失函数定义为:
J = − ∑ i = 1 L y r i l n ( y i ) J = - ∑_{i=1}^Ly_{ri}ln(y_i) J=i=1Lyriln(yi)
其中 y r i y_{ri} yri表示真实的第i类的概率值。

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

2.2 梯度计算

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

我们分成两种情况:

  1. 当i=s的时候,有:
    J = − y r s l n ( y s ) J = - y_{rs}ln(y_s) J=yrsln(ys)
    y s = e o s ∑ j = 1 L e o j y_s = \frac{e^{o_s}}{∑_{j=1}^Le^{o_j}} ys=j=1Leojeos
    则有:
    ∂ J ∂ o s = ∂ J ∂ y s ∗ ∂ y s ∂ o s = ∂ ( − y r s l n ( y s ) ) ∂ y s ∗ ∂ e o s ∑ j = 1 L e o j ∂ o s \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 和 y s J和y_s Jys进一步化简有:
    ∂ ( − y r s l n ( y s ) ) ∂ y s = − y r s ∗ 1 y s \frac{∂( - y_{rs}ln(y_s))}{∂y_s}=-y_{rs}*\frac{1}{y_s} ys(yrsln(ys))=yrsys1
    ∂ e o s ∑ j = 1 L e o j ∂ o s = e o s ∗ ( ∑ j = 1 L e o j − e o s ) ( ∑ j = 1 L e o j ) 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 ∂ o s = − y r s ∗ ∑ j = 1 L e o j e o s ∗ e o s ∗ ( ∑ j = 1 L e o j − e o s ) ( ∑ j = 1 L e o j ) 2 = − y r s ∗ ( 1 − y s ) \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 = − y r s l n ( y s ) J = - y_{rs}ln(y_s) J=yrsln(ys)
    y i = e o i ∑ j = 1 L e o j y_i = \frac{e^{o_i}}{∑_{j=1}^Le^{o_j}} yi=j=1Leojeoi
    则有:
    ∂ J ∂ o i = ∂ J ∂ y s ∗ ∂ y s ∂ o i = − y r s ∗ 1 y s ∗ ∂ y s ∂ o i \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
    其中:
    ∂ y s ∂ o i = − e o s ∗ e o i ( ∑ j = 1 L e o j ) 2 \frac{∂y_s}{∂o_i}=\frac{-e^{o_s}*e^{o_i}}{(∑_{j=1}^Le^{o_j})^2} oiys=(j=1Leoj)2eoseoi
    带入到原式子之后:
    ∂ J ∂ o i = − y r s ∗ ∑ j = 1 L e o j e o s ∗ − e o s ∗ e o i ( ∑ j = 1 L e o j ) 2 = y r s ∗ y i \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 oiJ=yrseosj=1Leoj(j=1Leoj)2eoseoi=yrsyi

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

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

由此可以总结出:
∂ J ∂ o i = y i − y r i \frac{∂J}{∂o_i}=y_{i} - y_{ri} oiJ=yiyri

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值