梯度下降是神经网络中最常用的求极值点(鞍点)的方法,本文以BP神经网络为例,介绍梯度下降的数学原理及推广。
代价函数
为了量化我们神经网络的拟合效果,我们定义一个代价函数:
C(w,b)=12n∑x||y(x)−a||2 C ( w , b ) = 1 2 n ∑ x | | y ( x ) − a | | 2
我们训练算法的目的,就是最小化权值和偏置的代价函数 C(w,b) C ( w , b ) 。
针对代价函数,我们试着回答以下两个问题:
为什么不直接采用分类(识别)正确的数量作为评价指标呢?
这是因为在神经网络中,被正确分类的图像数量所关于权值和偏置的函数并不是一个平滑的函数。
大多数情况下,对权值和偏置的微小变动完全不会影响被正确分类的图像数量,这让我们很难去解决如何改变权重和偏置来取得进改进的性能。
为什么要用二次函数呢?
代价函数并不是唯一的,不同的代价函数的评价指标也是不同的。但二次函数是使用得最广泛的,并且具有特殊的语义–均方误差(MSE)。我们接下来还会看到更多的代价函数,在计算时就会知道二次函数的优越性了。
为什么要梯度下降?
我们现在的目标是想要找到 C C 的全局最小值。当然,对于简单的二次型函数,我们很快就能找到最小值。但回想一下我们是怎么做的呢?
一种方法就是直接用偏导去找极值点。但如果变量很多,比如神经网络至少有上千个变量和偏置,计算非常复杂。
另外一种方法是使用梯度下降。考虑我们目前有两个变量 ,当我们在 v1和v2 v 1 和 v 2 方向分别移动一个很小的量(沿着梯度方向),这时候会发生如下变化:
ΔC≈∂C∂v1Δv1+∂C∂v2Δv2 Δ C ≈ ∂ C ∂ v 1 Δ v 1 + ∂ C ∂ v 2 Δ v 2
我们需要使用一种方法选择