神经网络中的反向传播

一、损失函数

预测值: 首先我们根据给定的Xi,对于一个样本,我们可以得到一个预测
y ^ \widehat{y}

为了衡量我们的预测值与真实值之间的差距,我们引入了一个损失函数,这里
就仅列出交叉熵函数作为举例,而且为什么要用交叉熵,这里最重要的原因是因为采用交叉熵可以避免局部最小值。

交叉熵函数:
L ( y , y ^ ) = ( y l o g y ^ + ( 1 y ) l o g ( 1 y ^ ) ) L(y,\widehat{y}) = -(ylog\widehat{y}+(1-y)log(1-\widehat{y}))

所以我们可以直观看一下该函数的作用:

  • 如果y=1,那么公式中只剩下 l o g y ^ -log\widehat{y} ,如果 y ^ = 0 \widehat{y}=0 ,那么此时L趋于无穷大,如果 y ^ = 1 \widehat{y}=1 ,那么此时L=0
  • 同理y=0,也是一样。
  • 所以通过上述两种情况,我们的目的是为了使误差尽可能地小,从而使我们的预测接近真实值。

二、成本函数

由于损失函数是对于一个样本的,那么在训练一组训练集时,将各个样本的误差相加求和再取平均数,即为成本函数。

三、梯度下降法

通过梯度下降,不断地更新w、b参数,从而使预测值更加接近真实值。我们可以直观地看一下,我们的成本函数究竟是什么样子的:
在这里插入图片描述
因此我们的目的就是找到那个最低点,即我们要的w、b。这样也可以避免局部最优解。

我们来看一下梯度下降究竟干了些什么:

  • 初始化一个w、b,此时我们位于该图中随意的一个点上。
  • 从此时开始,这个点沿着梯度一直往下走,直到走到最低端,或者在周围震荡。

那么为什么可以走到最低点,我们来看一下w、b究竟是如何变化的。首先给出w的更新公式:
w = w α d J ( w ) d w w = w - \alpha\frac{dJ(w)}{dw}

以该图为例,我们进行分析:
在这里插入图片描述

  • 我们知道,导数其实就是一个斜率,那么我们可以分类讨论。
  • 如果导数大于0,我们知道此时我们位于该图像的右半部分,那么我们此时的w应该向左移动,也就是上述的公式。
  • 如果导数小于0,那么此时处于左半部分,减去一个负值,相当于w变大
  • 通过上述公式,我们发现我们正在一步步地往最低点移动。

通过上述讲解,我们应该也注意以下问题:

  • 激活函数必须可导,要不然无法反向传播。(当然Relu是个例外)
  • 损失函数的选择决定了你的收敛
  • 梯度下降的方法决定了你的收敛
  • 学习率在一定程度上也会决定你的收敛