现在的位置: 首页 > 综合 > 正文

matlab实现梯度下降

2014年04月05日 ⁄ 综合 ⁄ 共 659字 ⁄ 字号 评论关闭

梯度下降法是一种最优化算法,通常也称为最速下降法。该方法基于这样的现象:如果实值函数F(x)在点a处可微且有定义,那么函数F(x)在a点沿着梯度相反的方向下降最快。

因而,如果

对于为一个够小数值时成立,那么

考虑到这一点,从函数F局部极小值的初始估计x0出发,考虑如下序列x0,x1,x2,.......使得

且有

如果顺利的话,序列xn可收敛到期望的极小值,当然每次迭代步长可以改变。

右侧的图片示例了这一过程,这里假设 F 定义在平面上,并且函数图像是一个形。蓝色的曲线是等高线(水平集),即函数F
为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数F
值最小的点。

梯度下降法处理一些复杂的非线性函数会出现问题,例如Rosenbrock函数

f(x, y) = (1-x)^2 + 100(y-x^2)^2 .\quad

其最小值在 (x, y)=(1, 1) 处,数值为f(x, y)=0。但是此函数具有狭窄弯曲的山谷,最小值(x, y)=(1, 1)
就在这些山谷之中,并且谷底很平。优化过程是之字形的向极小值点靠近,速度非常缓慢。

Banana-SteepDesc.gif

为了对梯度下降法有个清晰的认识,我们通过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时,会出现发散现象。

抱歉!评论已关闭.