基于混沌變量的變步長(zhǎng)梯度下降優(yōu)化算法
姚俊峰 楊獻(xiàn)勇 彭小奇 張?zhí)? 鄭順斌
清華大學(xué)熱能工程系 中南大學(xué)熱工設(shè)備仿真與優(yōu)化研究所 福建潯興集團(tuán)公司
摘要:梯度下降法與混沌優(yōu)化法均具有各自的缺點(diǎn)。該文將二者結(jié)合起來(lái),利用混沌運(yùn)動(dòng)的遍歷性,將混沌因子引入到變步長(zhǎng)中,對(duì)梯度下降法進(jìn)行改進(jìn)。首先利用混沌變量來(lái)初始化補(bǔ)償大小,并隨著搜索過(guò)程向最優(yōu)點(diǎn)附近步長(zhǎng)波動(dòng)平穩(wěn),避免了梯度下降法拉鋸現(xiàn)象的產(chǎn)生。通過(guò)3個(gè)典型算例,用該算法和梯度下降法以及其他2種算法進(jìn)行了優(yōu)化計(jì)算對(duì)比,結(jié)果表明,采用該算法的迭代次數(shù)減少了45%以上。
關(guān)鍵詞 :最佳控制,混沌,變步長(zhǎng),梯度下降法,優(yōu)化
內(nèi)容簡(jiǎn)介:
1 傳統(tǒng)優(yōu)化算法的分析
2 基于混沌變量的變尺度梯度下降優(yōu)化算法
3 算例
4 結(jié)論
基于混沌變量的變步長(zhǎng)梯度下降優(yōu)化算法.pdf
展開 基于動(dòng)量的更新:基于動(dòng)量的梯度下降技術(shù)涉及將先前更新的一小部分添加到當(dāng)前更新中。該技術(shù)有助于算法克服局部最小值并加速收斂。
批量歸一化:批量歸一化是一種用于對(duì)神經(jīng)網(wǎng)絡(luò)每一層的輸入進(jìn)行歸一化的技術(shù)。這有助于 Gradient Descent 算法更快地收斂,并避免漸變消失或爆炸。
權(quán)重衰減: 權(quán)重衰減是一種正則化技術(shù),涉及向成本函數(shù)添加與權(quán)重大小成正比的懲罰項(xiàng)。這有助于防止過(guò)度擬合并提高模型的泛化。
自適應(yīng)學(xué)習(xí)率:自適應(yīng)學(xué)習(xí)率技術(shù)涉及在訓(xùn)練過(guò)程中自適應(yīng)地調(diào)整學(xué)習(xí)率。示例包括 Adagrad、RMSprop 和 Adam。這些技術(shù)根據(jù)歷史梯度信息調(diào)整學(xué)習(xí)率,可以提高算法的收斂速度和準(zhǔn)確性。
二階方法:Second-Order Method 使用成本函數(shù)的二階導(dǎo)數(shù)來(lái)更新參數(shù)。示例包括 Newton's Method 和 Quasi-Newton Methods。這些方法可以比 Gradient Descent 更快地收斂,但需要更多的計(jì)算并且可能不太穩(wěn)定。
Gradient Descent 是一種迭代優(yōu)化算法,用于查找函數(shù)的最小值。一般的思路是將參數(shù)初始化為隨機(jī)值,然后在每次迭代時(shí)沿 “slope” 的方向采取小步驟。梯度下降在監(jiān)督學(xué)習(xí)中被廣泛使用,以最小化誤差函數(shù)并找到參數(shù)的最佳值。已經(jīng)為梯度下降算法設(shè)計(jì)了各種擴(kuò)展。下面討論其中一些:
動(dòng)量法:此方法用于通過(guò)考慮梯度的指數(shù)加權(quán)平均值來(lái)加速梯度下降算法。使用平均值使算法以更快的方式收斂到最小值,因?yàn)槌虿怀R姺较虻?em>梯度被抵消。動(dòng)量法的偽代碼如下。
展開 如何求MGDA算法中的梯度信息(gfun1,gfun2)目標(biāo)函數(shù)1與2的梯度。matlab
% Steepest Descent Method
% By Kshitij Deshpande
clc
clear all
warning off
prompt = {'Coeficients if X1=','Coefficients of X2=','Coefficeint of X1X2=','Initial Point='};
def = {'[2 1 0]','[1 -1 0]','2','[0 0]'};
a=inputdlg(prompt,'Data',1,def);
a=char(a);
[m,n]=size(a);
x1 = eval(a(1,1:n));x2=eval(a(2,1:n));x1x2=eval(a(3,1:n));X1=eval(a(4,1:n));
delf1(1) = polyval(polyder(x1),X1(1));
delf1(1) = (delf1(1))+(x1x2*X1(2));
delf1(2) = polyval(polyder(x2),X1(1));
delf1(2) = (delf1(2))+(x1x2*X1(1));
s=-delf1;
%%%%%%%%%%
%report
srep(1,1:2)=s;
%%%%%%%%%%
x1new(1)=s(1)^2;x1new(2)=2*X1(1)*s(1);x1new(3) = X1(1)^2;
x1new=x1new*x1(1);
x1new_(2)=x1(2)*s(1);x1new_(3)=x1(2)*X1(1);
x1new = x1new+x1new_;
x2new(1)=s(2)^2;x2new(2)=2*X1(2)*s(2);x2new(3) = X1(2)^2;
x2new=x2new*x2(1);
x2new_(2)=x2(2)*s(2);x2new_
展開 梯度下降法
算法2:梯度下降法+動(dòng)量
算法在純粹的梯度下降法之上,外加了梯度,從而記錄下了歷史的梯度情況,從而減輕了卡在局部最小值的危險(xiǎn),在梯度=0的地方仍然會(huì)有一定的v剩余,從而在最小值附近搖擺
首先給出學(xué)習(xí)率lr,動(dòng)量參數(shù)m
初始速度v=0,初始x
while True:
v = m * v - lr * df/dx
x += v
下面可以看圖:
梯度下降+動(dòng)量, lr=0.05
梯度下降+動(dòng)量, lr=0.01
梯度下降+動(dòng)量, lr=0.002
從中我們可以看出:
lr越小越穩(wěn)定,太大了很難收斂到最小值上,但是太小的話收斂就太慢了
動(dòng)量參數(shù)不能太小,0.9以上表現(xiàn)比較好,但是又不能太大,太大了無(wú)法停留在最小值處
算法3:AdaGrad算法
AdaGrad算法的思想是累計(jì)歷史上出現(xiàn)過(guò)的梯度(平方),用積累的梯度平方的總和的平方根,去逐元素地縮小現(xiàn)在的梯度。某種意義上是在自行縮小學(xué)習(xí)率,學(xué)習(xí)率的縮小與過(guò)去出現(xiàn)過(guò)的梯度有關(guān)。
缺點(diǎn)是:剛開始參數(shù)的梯度一般很大,但是算法在一開始就強(qiáng)力地縮小了梯度的大小,也稱學(xué)習(xí)率的過(guò)早過(guò)量減少。
展開