【論文】【優(yōu)化算法】團(tuán)隊(duì)梯度下降算法
引言
? 梯度下降算法常用于在回歸模型中求損失函數(shù)的最小值,梯度的求法是將函數(shù)的所有自變量全部求偏導(dǎo),然后依次帶入要求梯度的位置,再組合成向量。梯度下降的理念是不斷沿著梯度的反方向走,找到最低點(diǎn)。每個(gè)自變量的迭代公式是。表示學(xué)習(xí)率,即下降速度,下文為了方便會(huì)用v代替。
梯度下降有許多優(yōu)化算法了。比如加上了加速度的梯度下降,可以防止只求出了局部最優(yōu)解。還有自適應(yīng)梯度下降,速度不斷減少,還有兩者的結(jié)合??墒羌铀俣忍荻人惴ㄟ€是有可能只求出局部最優(yōu)解,自適應(yīng)梯度下降很容易“半途而廢”,自適應(yīng)加速度梯度下降雖然更準(zhǔn)確了些,但計(jì)算量有些大。而且他們都難以控制自己的精度。
我想到了一種基于梯度下降算法的優(yōu)化算法,能夠更好地解決復(fù)雜的函數(shù)。我本來(lái)是想如何通過(guò)梯度下降算法得到更精確的最低點(diǎn),于是我便想到了本文所使用的這種方法,我將其命名為團(tuán)隊(duì)梯度下降算法(梯隊(duì)下降)
介紹
團(tuán)隊(duì)梯度下降算法,是由許多個(gè)“探險(xiǎn)者”組成的算法,探險(xiǎn)者數(shù)量總為雙數(shù)。每個(gè)探險(xiǎn)者都有自己的起始點(diǎn)與速度,也有不同的“性格”。性格,就是影響他們學(xué)習(xí)率的參數(shù),越這個(gè)值越大,學(xué)習(xí)率也就越大。我們一般先用一個(gè)名為pos的列表存儲(chǔ)所有“探險(xiǎn)者”的數(shù)據(jù),他們的所有數(shù)據(jù)全為隨機(jī)生成。性格的生成決定與他們?cè)诹斜碇械乃饕?,?span id="s0sssss00s" class="font-size-16">。我們通過(guò)不斷遍歷pos,遍歷到探險(xiǎn)者時(shí)先判斷其在pos中的位置,若不是已知最低點(diǎn),則根據(jù)其性格改變其學(xué)習(xí)率。我們?nèi)匀皇褂?/p>
abs(nps - ip)<0.0001
(源代碼片段,表示為||<ε? ε(精度)暫定為0.0001)
決定其是否為最終輸出結(jié)果。
Github開(kāi)原地址:https://github.com/wdnmmd-250/Gradient-descent-algorithm-innovation.git???
?
?
???? 實(shí)驗(yàn)數(shù)據(jù)
?????? 用于實(shí)驗(yàn)的函數(shù):y=x^2 - 5cos(πx),最低點(diǎn):x=0
?????? 語(yǔ)言:python3
?????? 編譯器:測(cè)試傳統(tǒng)算法:emacs 測(cè)試團(tuán)隊(duì)梯度下降算法:海龜編輯器
?????? 硬件:測(cè)試傳統(tǒng)算法:MacBook Air(版本忘了) 測(cè)試團(tuán)隊(duì)梯度下降算法:DELL+Win10
?????? 1.傳統(tǒng)梯度算法
????????????? 起始位置:x=5
?????? ?????? 學(xué)習(xí)率:0.001
????????????? 結(jié)果:最低點(diǎn):x=3.837505426858092
????????????? 耗時(shí)0.0003170967102050781秒(第一次)0.0004761219024658203(第二次)
????????????? 起始位置:x=3.5
????????????? 學(xué)習(xí)率:0.01
????????????? 結(jié)果:最低點(diǎn):x=3.837505426858087(誤差是因?yàn)閷W(xué)習(xí)率增加和位置變化)
????????????? 耗時(shí)2.8848648071289062e-05秒(第一次)4.410743713378906e-05(第二次)
?????? 2.團(tuán)隊(duì)梯度算法
????????????? 到時(shí)候把代碼發(fā)上來(lái)吧,位置學(xué)習(xí)率太隨機(jī)了。直接貼數(shù)據(jù)
????????????? 前面是耗時(shí)/秒,后面是結(jié)論,小數(shù)因?yàn)檎Z(yǔ)言原因沒(méi)有化簡(jiǎn)
????????????? (以下為三次運(yùn)行結(jié)果)
????????????? 1.0.0006120204925537109 0
?
2.0.0003609657287597656 0
?
3.0.0006542205810546875 0.0
????????????? 可見(jiàn)此算法的準(zhǔn)確性。
(下面為直觀數(shù)據(jù))
算法類型
數(shù)據(jù)
耗時(shí)/s
X結(jié)果(誤差)
傳統(tǒng)
X=5, ? η=0.001
0.0003170967102050781
3.837505426858092
?
?
0.0004761219024658203
?
?
X=3.5, η=0.01
2.8848648071289062e-0
3.837505426858087
?
?
4.410743713378906e-05
?
團(tuán)隊(duì)
6個(gè)點(diǎn)
0.0009980201721191406
0
?
?
0.002001047134399414
0.0
?
?
0.0009982585906982422
0.0
?
?
?
????????????? 討論&結(jié)論
我這個(gè)團(tuán)隊(duì)梯度下降算法還可以改進(jìn)。其實(shí)團(tuán)隊(duì)梯度下降算法探險(xiǎn)者的還可以再增加,這次是6,下次就8、10、16、204,越多肯定越準(zhǔn)確,內(nèi)存也會(huì)越大。同時(shí),我的代碼也太丑陋了,是可以優(yōu)化的。團(tuán)隊(duì)梯度下降算法更可以是一種理念,可以往里面填充很多東西。比如我想在生成結(jié)果之前加一層與其他的探險(xiǎn)者數(shù)據(jù)的相似度判斷,可是還沒(méi)有這個(gè)能力。
這個(gè)算法的缺點(diǎn)是,它需要的算力與運(yùn)行時(shí)間不夠迅速。優(yōu)點(diǎn)是,只要探險(xiǎn)者足夠多,硬件足夠“硬”,我們就可以獲得全局視野,能夠如同俯視圖像一樣輕易找到最低點(diǎn)。此算法相較于傳統(tǒng)的準(zhǔn)確性更高,真是一片前途似錦啊!
?
?????????????