梯度下降法是一种最优化算法,通常也称为最速下降法。该方法基于这样的现象:如果实值函数F(x)在点a处可微且有定义,那么函数F(x)在a点沿着梯度相反的方向下降最快。
因而,如果
考虑到这一点,从函数F局部极小值的初始估计x0出发,考虑如下序列x0,x1,x2,.......使得
且有
如果顺利的话,序列xn可收敛到期望的极小值,当然每次迭代步长可以改变。
右侧的图片示例了这一过程,这里假设 定义在平面上,并且函数图像是一个碗形。蓝色的曲线是等高线(水平集),即函数 为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数 值最小的点。
梯度下降法处理一些复杂的非线性函数会出现问题,例如Rosenbrock函数
其最小值在 处,数值为。但是此函数具有狭窄弯曲的山谷,最小值 就在这些山谷之中,并且谷底很平。优化过程是之字形的向极小值点靠近,速度非常缓慢。
为了对梯度下降法有个清晰的认识,我们通过matlab求解以下实例
举例: 求一元函数f(x) = x^2/2 - 2x 的最小值。这是一个简单的例子,权当练练手!
设初始值为x0 = -4,迭代步长gamma = 0.5 ,收敛精度为epslon = 0.01,第i次的迭代公式为x(i+1) = x(i) - eta*(x(i)-2),下面是梯度下降法的matlab程序
结果如下:
最小值点初始值为-4,通过梯度下降法逐渐逼近最小值点2,当迭代步长大于 1而小于2时呈现振荡现象,当迭代步长大于2时,会出现发散现象。