深度学习反向传播公式推导

损失函数

我们在逻辑回归中用到的损失函数是:
L ( y ^ , y ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) {L(\hat{y},y)=-y\log(\hat{y})-(1-y)\log(1-\hat{y})} L(y^,y)=ylog(y^)(1y)log(1y^)
为什么要用这个函数作为逻辑损失函数?当我们使用平方误差作为损失函数的时候,你
会想要让这个误差尽可能地小,对于这个逻辑回归损失函数,我们也想让它尽可能地小,为
了更好地理解这个损失函数怎么起作用,举两个例子:
当y = 1时损失函数 L = − log ⁡ ( y ^ ) {L=-\log(\hat{y})} L=log(y^),如果想要损失函数 L {L} L尽可能得小,那么 y ^ {\hat{y}} y^就要尽可能大,因为 sigmoid 函数取值[0,1],所以 y ^ {\hat{y}} y^会无限接近于 1。
当y = 0时损失函数 L ( y ^ , y ) = − ( 1 − y ) log ⁡ ( 1 − y ^ ) {L(\hat{y},y)=-(1-y)\log(1-\hat{y})} L(y^,y)=(1y)log(1y^),如果想要损失函数 L {L} L尽可能得小,那么 y ^ {\hat{y}} y^就要尽可能小,因为 sigmoid 函数取值[0,1],所以 y ^ {\hat{y}} y^会无限接近于 0

成本函数

损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的代价函数,算法的代价函数是对m个样本的损失函数求和然后除以m:
在这里插入图片描述

逻辑回归中的梯度下降

假设样本只有两个特征 x 1 {x_{1}} x1 x 2 {x_{2}} x2,为了计算z,我们需要输入参数 w 1 {w_{1}} w1 w 2 {w_{2}} w2和b,除此之外还有特征值 x 1 {x_{1}} x1 x 2 {x_{2}} x2。因此z的计算公式为 z = w 1 x 1 + w 2 x 2 z={w_{1}}{x_{1}}+{w_{2}}{x_{2}} z=w1x1+w2x2
回想一下逻辑回归的公式定义如下: y ^ = a = σ ( z ) \hat{y}=a=\sigma(z) y^=a=σ(z))其中 z = w T x + b z=w^Tx +b z=wTx+b σ ( z ) = 1 1 + e − z {\sigma(z)=\frac{1}{1+e^{-z}}} σ(z)=1+ez1
损失函数: L ( y ^ , y ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) {L(\hat{y},y)=-y\log(\hat{y})-(1-y)\log(1-\hat{y})} L(y^,y)=ylog(y^)(1y)log(1y^)
代价函数:
在这里插入图片描述

假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:
L ( a , y ) = − y log ⁡ ( a ) − ( 1 − y ) log ⁡ ( 1 − a ) {L(a,y)=-y\log(a)-(1-y)\log(1-a)} L(a,y)=ylog(a)(1y)log(1a)
其中a是逻辑回归的输出, y是样本的标签值
w {w} w b {b} b的修正量可以表达如下
w = w − a ∂ J ( w , b ) ∂ w {w=w-a\frac{\partial{J(w,b)}}{\partial{w}}} w=wawJ(w,b), b = b − a ∂ J ( w , b ) ∂ b {b=b-a\frac{\partial{J(w,b)}}{\partial{b}}} b=babJ(w,b)
因为我们想要计算出的代价函数 L ( a , y ) {L(a,y)} L(a,y)的导数,首先我们需要反向计算出代价函
L ( a , y ) {L(a,y)} L(a,y)关于 a {a} a的导数,在编写代码时,你只需要用 d a {da} da 来表示 d L ( a , y ) d a {\frac{dL(a,y)}{da}} dadL(a,y)
通过微积分得到: d L ( a , y ) d a = − y a + ( 1 − y ) 1 − a {\frac{dL(a,y)}{da}=-\frac{y}{a}+\frac{(1-y)}{1-a}} dadL(a,y)=ay+1a(1y)
这个结果是通过对代价函数 L ( a , y ) {L(a,y)} L(a,y)求a的偏导得出来的,求偏导时将 y {y} y看成常量, a {a} a看成变量,通过求导公式得到 log ⁡ a {\log{a}} loga的导数为 1 a {\frac{1}{a}} a1,这里的 log ⁡ a {\log{a}} loga 我更倾向于用 ln ⁡ a {\ln{a}} lna来表示,因为 log ⁡ a {\log{a}} loga求导过后会有个常量 ln ⁡ 10 {\ln{10}} ln10,而 ln ⁡ a {\ln{a}} lna 求导过后就是 1 a {\frac{1}{a}} a1,虽然没有资料直接说明此处就是 ln ⁡ {\ln} ln 但是通过对结果的反推,个人感觉应该是 ln ⁡ {\ln} ln函数。同理对 log ⁡ ( 1 − a ) {\log{(1-a)}} log(1a) 求导得到 − 1 1 − a {-\frac{1}{1-a}} 1a1,为什么要加个" − {-} “号,因为这是复合函数,对 log ⁡ {\log} log求完导后还要对 1 − a {1-a} 1a 求导,而 1 − a {1-a} 1a a {a} a求导得到的就是 − 1 {-1} 1 ,因此需要加一个” − {-} "号。

此时,我们已经完成代价函数对 a {a} a 的偏导,接下来需要求代价函数对 z {z} z的偏导。对 z {z} z的求偏导,需要利用微分里的链式法则。即: d L ( a , y ) d z = d L d z = d L d a ⋅ d a d z {\frac{dL(a,y)}{dz} = \frac{dL}{dz}=\frac{dL}{da}\cdot \frac{da}{dz}} dzdL(a,y)=dzdL=dadLdzda这里的 d L d a {\frac{dL}{da}} dadL我们已经求出来过了,也就是 d a {da} da,前面有提到 y ^ = a = σ ( z ) {\hat{y}=a=\sigma{(z)}} y^=a=σ(z),
而sigma函数的表达式又为 1 1 + e − z {\frac{1}{1+e^{-z}}} 1+ez1,即 a = σ ( z ) = 1 1 + e − z {a=\sigma{(z)}=\frac{1}{1+e^{-z}}} a=σ(z)=1+ez1 这时我们就可以求出 a {a} a z {z} z的偏导数了,也就是说求出 d a d z {\frac{da}{dz}} dzda,同样的我们这里还是利用求导公式将 1 + e − z {{1+e^{-z}}} 1+ez看做一个整体,令 t = 1 + e − z {t={1+e^{-z}}} t=1+ez,对 σ ( z ) {\sigma{(z)}} σ(z)进行求导得到** σ ’ ( z ) = − 1 t 2 {\sigma’{(z)} = -\frac{1}{t^2}} σ(z)=t21** ,因为 t {t} t 也是的 z {z} z函数,所以还需要对 t {t} t进行求导,求导方式同样是使用复合函数的求导原则得到 t ′ = − e − z {t'=-e^{-z}} t=ez,因此, σ ′ ( a ) = − 1 ( 1 + e − z ) 2 ⋅ ( − e − z ) = e − z ( 1 + e − z ) 2 = 1 + e − z − 1 ( 1 + e − z ) 2 = a − a 2 {\sigma'{(a)}=-\frac{1}{(1+e^{-z})^2}} \cdot (- e^{-z})=\frac{e^{-z}}{(1+e^{-z})^2}=\frac{1+e^{-z}-1}{(1+e^{-z})^2} =a-a^2 σ(a)=(1+ez)21(ez)=(1+ez)2ez=(1+ez)21+ez1=aa2 ,为什么结果会变成 a − a 2 {a-a^2} aa2,因为我们定义的** a = σ ( z ) = 1 1 + e − z {a=\sigma{(z)}=\frac{1}{1+e^{-z}}} a=σ(z)=1+ez1** ,所以 d a d z {\frac{da}{dz}} dzda最终结果为 a − a 2 {a-a^2} aa2,再利用之前的链式法则,可以得到 d L ( a , y ) d z = d L d a ⋅ d a d z = ( − y a + ( 1 − y ) 1 − a ) ⋅ ( a − a 2 ) = a − y {\frac{dL(a,y)}{dz}=\frac{dL}{da}\cdot\frac{da}{dz}=(-\frac{y}{a}+\frac{(1-y)}{1-a})\cdot(a-a^2)=a-y} dzdL(a,y)=dadLdzda=(ay+1a(1y))(aa2)=ay

接下来需求求解的是就是 d w = d L ( a , y ) d w {dw=\frac{dL(a,y)}{dw}} dw=dwdL(a,y),同样的还是利用链式法则我们可以得到
d w = d L ( a , y ) d w = d L d w = d L d a ⋅ d a d z ⋅ d z d w {dw=\frac{dL(a,y)}{dw}}=\frac{dL}{dw}=\frac{dL}{da}\cdot \frac{da}{dz}\cdot\frac{dz}{dw} dw=dwdL(a,y)=dwdL=dadLdzdadwdz,在前面的过程中我们求出了 d L d a 和 d a d z {\frac{dL}{da}和\frac{da}{dz}} dadLdzda,现在我们需要求的就是 d z d w , 因 此 我 们 需 要 知 道 w 对 z 的 函 数 {\frac{dz}{dw},因此我们需要知道w对z的函数} dwdzwz也就是 z = w x + b {z=wx+b} z=wx+b,这样求 w 对 z {w对z} wz的偏导就很容易了,只需将 x {x} x看成常量即可,得到 d z d w = x {\frac{dz}{dw}=x} dwdz=x,所以 d w = d z ⋅ x {dw=dz\cdot x} dw=dzx,同样的方法可以求出 d z d b = 1 , 也 就 是 说 d b = d z {\frac{dz}{db}=1,也就是说db=dz} dbdz=1db=dz

常见的求导公式

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值