自适应的两点步长梯度法
本文是我在博客园中写的一篇随笔:自适应的两点步长梯度法 - 来者可追2019 - 博客园 (cnblogs.com)
该算法来自于戴彧虹研究员的一篇论文,该文章将两点步长梯度法与非单调搜索结合,并且对非单调搜索的法则进行了改进。
问题引入:
考虑无约束优化问题:两点步长的迭代法则是:
其中
一般的非单调搜索是寻找满足下面条件的:
其中
,在实际运算中,数值效果很大程度上取决于
的选择。
改进思路如下:
令:,
,而
是取到目前最小值的第一个下标。
又令:
一种改进方法是设置参考值代替一般非单调搜索中
的位置,具体地:当
时,取
。但是有时会出现
太大的情况,这时戴老师的处理方法是取
,即:
其中为一个大于1的常数。这个修改我们称为(1).
另外一种情况是,非单调搜索算法在之前很多的迭代次数内都直接接受初始步长作为迭代步长,令
为之前连续接收的次数,即
都被接受,而
不被接受。如果
太大了,这很可能是因为
一直不改变所引起的。此时,戴老师的改进方法是:当
(正整数、常数),令:
其中为一个大于1的常数。这个修改我们称为(2).
综上,改进的非单调搜索方法如下:
Step1(修改参考值):
如果,按(1)的方式更新
,同时令
;
如果 ,按(2)的方式更新
,同时令
;
Step2(测试原始步长):
如果则令
和
,并转到Step4;否则,令
;
Step3(调整步长满足条件):
令
;
取
如果
则令
,并转向Step4;否则,令
,并重复
;
Step4(更新一些数值):
令
;
如果
,设
且
;否则,令
;
如果
,令
;
计算
,并令
.
结合两点步长梯度法与上述自适应非单调线性搜索法则,就得到了一个新的无约束算法的梯度算法,即自适应两点步长梯度法.
Step0(参数初始化):
给定
,
,
,令
;
给定正整数
和常数
,
取
令
.
Step1(是否满足停机条件):如果,则停止.
Step2:按照自适应非单调搜索的方式计算并更新
和
.
Step3:
Step4:
如果
否则
.
Step5:返回Step1.
在这里,文章给出的参数设置建议是:
参考论文:Y.H. Dai and H.C. Zhang, Adaptive two-point stepsize gradient algorithm, Numer. Algorithms 27 (2001), pp. 377–385.