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

损失函数


我们在逻辑回归中用到的损失函数是:

L ( y ^ , y ) = y log ( y ^ ) ( 1 y ) log ( 1 y ^ )

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

成本函数


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

逻辑回归中的梯度下降


假设样本只有两个特征 x 1 x 2 ,为了计算z,我们需要输入参数 w 1 w 2 和b,除此之外还有特征值 x 1 x 2 。因此z的计算公式为 z = w 1 x 1 + w 2 x 2
回想一下逻辑回归的公式定义如下: y ^ = a = σ ( z ) )其中 z = w T x + b σ ( z ) = 1 1 + e z
损失函数:

L ( y ^ , y ) = y log ( y ^ ) ( 1 y ) log ( 1 y ^ )

代价函数:
这里写图片描述
假设现在只考虑单个样本的情况,单个样本的代价函数定义如下:
L ( a , y ) = y log ( a ) ( 1 y ) log ( 1 a )

其中a是逻辑回归的输出, y是样本的标签值
w b 的修正量可以表达如下
w = w a J ( w , b ) w
,
b = b a J ( w , b ) b



因为我们想要计算出的代价函数 L ( a , y ) 的导数,首先我们需要反向计算出代价函
L ( a , y ) 关于 a 的导数,在编写代码时,你只需要用 d a 来表示 d L ( a , y ) d a
通过微积分得到:
d L ( a , y ) d a = y a + ( 1 y ) 1 a

这个结果是通过对代价函数 L ( a , y ) 求a的偏导得出来的,求偏导时将 y 看成常量, a 看成变量,通过求导公式得到 log a 的导数为 1 a ,这里的 log a 我更倾向于用 ln a 来表示,因为 log a 求导过后会有个常量 ln 10 ,而 ln a 求导过后就是 1 a ,虽然没有资料直接说明此处就是 ln 但是通过对结果的反推,个人感觉应该是 ln 函数。同理对 log ( 1 a ) 求导得到 1 1 a ,为什么要加个” ”号,因为这是复合函数,对 log 求完导后还要对 1 a 求导,而 1 a a 求导得到的就是 1 ,因此需要加一个” “号。


此时,我们已经完成代价函数对 a 的偏导,接下来需要求代价函数对 z 的偏导。对 z 的求偏导,需要利用微分里的链式法则。即:
d L ( a , y ) d z = d L d z = d L d a d a d z
这里的 d L d a 我们已经求出来过了,也就是 d a ,前面有提到 y ^ = a = σ ( z ) ,
而sigma函数的表达式又为 1 1 + e z ,即 a = σ ( z ) = 1 1 + e z 这时我们就可以求出 a z 的偏导数了,也就是说求出 d a d z ,同样的我们这里还是利用求导公式将 1 + e z 看做一个整体,令 t = 1 + e z ,对 σ ( z ) 进行求导得到 σ ( z ) = 1 t 2 ,因为 t 也是的 z 函数,所以还需要对 t 进行求导,求导方式同样是使用复合函数的求导原则得到 t = e z ,因此,
σ ( 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
,为什么结果会变成 a a 2 ,因为我们定义的 a = σ ( z ) = 1 1 + e z ,所以 d a d z 最终结果为 a a 2 ,再利用之前的链式法则,可以得到
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


接下来需求求解的是就是 d w = d L ( a , y ) d w ,同样的还是利用链式法则我们可以得到
d w = d L ( a , y ) d w = d L d w = d L d a d a d z d z d w
,在前面的过程中我们求出了 d L d a d a d z ,现在我们需要求的就是 d z d w w z 也就是 z = w x + b ,这样求 w z 的偏导就很容易了,只需将 x 看成常量即可,得到 d z d w = x ,所以 d w = d z x ,同样的方法可以求出 d z d b = 1 d b = d z

常见的求导公式

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u010859650/article/details/81351829
今日推荐