最近在复习优化考试,所以在这里做笔记别忘了考完之后马上忘记。 本文讨论了无约束优化问题中的最快下降法。
一、已解决问题的最快梯度下降法解决的问题是无约束优化问题,而无约束优化问题是目标函数的求解,是无约束优化问题。 例如,求出以下最小值。
请参阅。
解决这样的问题大致可以分为两种。 一种是最优条件法和迭代法。
最优条件法是指函数中存在分析形式,通过最优条件可以求得显式最优解。 在无约束最优化问题中,当f(x )在最优点的x*附近很小时,x*为局部极小点的必要条件是常常根据这个必要条件求出可能的极小点,并验证那些点是否真的是极小点。 上式求解时,无约束优化问题基本解决。 实际上,这个方程式往往很难求解。 这引出了第二种方法:迭代法。 今天我们来看看迭代法,最快梯度下降法!
二、最快坡度下降法以下为最快坡度下降法的计算步骤。
从以上的计算顺序可以看出,在最速下降法的反复结束时,可以求出目标函数的停止点的近似点。
其中,确定最佳步骤的方法如下。
三、对最快梯度下降法的直观理解上面给出了最高速度梯度下降法的计算步骤,这里给出了其直观理解。
第一步:
第一步是迭代法的初始点选择。
步骤2 :
这里的步骤2的反复结束条件是什么? 童鞋可能在问。
这是根据以下定理
也就是说,如果我们最终到达局部最佳解,求出的斜率值为0,也就是说该点的斜率为0,这一点是局部最佳解的必要条件。
所以,我们的结束条件是到达某个地方的坡度是0。 如果有些条件不太苛刻,我们可以不用把它严格定为0。 只是接近0就可以了。 这就是步骤2的说明。
第三步:
此步骤选择一个迭代方向,即从当前点开始迭代的方向。 在此选择当前点的坡度的负方向。 为什么选择这个方向,是因为坡度的负方向是局部下降最多的方向。 这里不详细证明,请参考我以前的回答。 为什么梯度的反向是函数值局部下降最快的方向呢?
步骤4 :
步骤4也非常重要。 因为,在步骤3中决定迭代方向,虽然知道该方向是局部函数值下降的方向,但还没有决定行走的步骤。 如果选择的步骤不合适,这是非常不可取的。 下图为示例。 步骤4的作用是在确定迭代方向的基础上,确定在该方向上函数值最小的迭代步骤。
以下是重复步骤既不能太大也不能太小的示例图。
如上图所示,选择合适的步长是最重要的,它直接决定收敛速度。
四.最快坡度下降法实例
因此,找到了近似最佳解。 然后,拿到里面就可以得到要求的最小值。
五、最速下降法的缺点是需要指出的是,某一点的负梯度方向通常只在该点附近具有这种最速下降的性质。
一般情况下,用最速下降法寻找极小点时,其搜索路径呈直角曲折状,在前几步目标函数下降较快; 但是,在接近极小点时,收敛速度被长期忽略了。 特别是当适当目标函数的等价线是比较扁平的椭圆时,收敛会变得更慢。
因此,在实用上可以并用最速下降法和其他方法,前期使用最速下降法,在接近极小值点时可以切换到收敛快的其他方法。
六.最速下降法代码实现importnumpyasnpfromsympyimport * importmathimportmplotlib.pyplotaspltimportmpl _ toolkits.axisartistasasasaxisaxisisison t ) ) def func ) : )函数return2*pow ) x1,2 ) x2,2 )自定义x1*x2-x1defgrad数据=[ data1,data2] f=func (grad ) DATA[0].subs(x2, data[1] ) returngraddefgrad_len ) grad ) : #梯度向量的模式长度vec_len=math.sqrt ) pow ) grad 2) return vec _ lended ) min ) theta ) : f=func (grad _ vevenc ) (grad_vec ),其用于计算t_diff=diff(f ) f ) t _ min=solve (t _ t ) t_diff ) ]的结束条件k=1p=-NP.array(grad_vec )重复x=NP.array ) x0 ) t*pt_func=f.subs ) x1,X[0] ) subs ) x2, X[1] ) t_min=Zhudian(t_func ) x0=NP.array ) x0 ) t_min*pgrad_vec=grad(x0 ) grad _ length=grad