-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
近幾年比較新的優(yōu)化算法(近幾年比較新的優(yōu)化算法有哪些)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于近幾年比較新的優(yōu)化算法的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端
創(chuàng)意嶺作為行業(yè)內優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、優(yōu)化算法總結
本文介紹一下機器學習和深度學習中常用的優(yōu)化算法和優(yōu)化器以及一些其他我知道的優(yōu)化算法,部分算法我也沒有搞懂,就先記錄下來以后慢慢研究吧.*_*.
1.梯度下降算法(Gradient Descent)
梯度下降法可以參考我另一篇文章 機器學習-線性回歸 里的講解,這里就不在重復敘述.這里需要強調一下,深度學習里常用的SGD,翻譯過來是隨機梯度下降,但是實質是mini-batch梯度下降(mini-batch-gd),或者說是兩者的結合更準確一些.
SGD的優(yōu)點是,算法簡單,計算量小,在函數為凸函數時可以找到全局最優(yōu)解.所以是最常用的優(yōu)化算法.缺點是如果函數不是凸函數的話,很容易進入到局部最優(yōu)解而無法跳出來.同時SGD在選擇學習率上也是比較困難的.
2.牛頓法
牛頓法和擬牛頓法都是求解無約束最優(yōu)化問題的常用方法,其中牛頓法是迭代算法,每一步需要求解目標函數的海森矩陣的逆矩陣,計算比較復雜.
牛頓法在求解方程根的思想:在二維情況下,迭代的尋找某一點x,尋找方法是隨機一個初始點x_0,目標函數在該點x_0的切線與x坐標軸的交點就是下一個x點,也就是x_1.不斷迭代尋找x.其中切線的斜率為目標函數在點x_0的導數(梯度),切必過點(x_0,f(x_0)).所以迭代的方程式如圖1,為了求該方程的極值點,還需要令其導數等于0,也就是又求了一次導數,所以需要用到f(x)的二階導數.
在最優(yōu)化的問題中,牛頓法提供了一種求解的辦法. 假設任務是優(yōu)化一個目標函數f, 求函數ff的極大極小問題, 可以轉化為求解函數f導數等于0的問題, 這樣求可以把優(yōu)化問題看成方程求解問題(f的導數等于0). 剩下的問題就和牛頓法求解方程根的思想很相似了.
目標函數的泰勒展開式:
化簡后:
這樣就得到了與圖1相似的公式,這里是二維的,在多維空間上,求二階導數就是求海森矩陣,因為是分母,所以還需要求海森矩陣的逆矩陣.
牛頓法和SGD的區(qū)別:
牛頓法是二階求導,SGD是一階求導,所以牛頓法要收斂的更快一些.SGD只考慮當前情況下梯度下降最快的方向,而牛頓法不僅考慮當前梯度下降最快,還有考慮下一步下降最快的方向.
牛頓法的優(yōu)點是二階求導下降速度快,但是因為是迭代算法,每一步都需要求解海森矩陣的逆矩陣,所以計算復雜.
3.擬牛頓法(沒搞懂,待定)
考慮到牛頓法計算海森矩陣比較麻煩,所以它使用正定矩陣來代替海森矩陣的逆矩陣,從而簡化了計算過程.
常用的擬牛頓法有DFP算法和BFGS算法.
4.共軛梯度法(Conjugate Gradient)
共軛梯度法是介于最速下降法與牛頓法之間的一個方法,它僅需利用一階導數信息,但克服了最速下降法收斂慢的缺點,又避免了牛頓法計算海森矩陣并求逆的缺點.共軛梯度法不僅是解決大型線性方程組最有用的方法之一,也是解大型非線性最優(yōu)化最有效的算法之一.
5.拉格朗日法
參考SVM里的講解 機器學習-SVM
6.動量優(yōu)化法(Momentum)
動量優(yōu)化法主要是在SGD的基礎上,加入了歷史的梯度更新信息或者說是加入了速度更新.SGD雖然是很流行的優(yōu)化算法,但是其學習過程很慢,因為總是以同樣的步長沿著梯度下降的方向.所以動量是為了加速學習的方法.
其中第一行的減號部分是計算當前的梯度,第一行是根據梯度更新速度v,而α是新引進的參數,在實踐中,α的一般取值為 0.5,0.9 和 0.99.和學習率 一樣,α 也會隨著時間不斷調整.一般初始值是一個較小的值,隨后會慢慢變大.
7.Nesterov加速梯度(NAG, Nesterov accelerated gradient)
NAG是在動量優(yōu)化算法的基礎上又進行了改進.根據下圖可以看出,Nesterov 動量和標準動量之間的區(qū)別體現在梯度計算上, Nesterov 動量中,梯度計算在施加當前速度之后.因此,Nesterov 動量可以解釋為往標準動量方法中添加了一個校正因子
8.AdaGrad算法
AdaGrad算法,自適應優(yōu)化算法的一種,獨立地適應所有模型參數的學習率,縮放每個參數反比于其所有梯度歷史平均值總和的平方根.具有代價函數最大梯度的參數相應地有個快速下降的學習率,而具有小梯度的參數在學習率上有相對較小的下降.通俗一點的講,就是根據實際情況更改學習率,比如模型快要收斂的時候,學習率步長就會小一點,防止跳出最優(yōu)解.
其中g是梯度,第一行的分母是計算累計梯度的平方根, 是為了防止分母為0加上的極小常數項,α是學習率.
Adagrad的主要優(yōu)點是不需要人為的調節(jié)學習率,它可以自動調節(jié).但是依然需要設置一個初始的全局學習率.缺點是隨著迭代次數增多,學習率會越來越小,最終會趨近于0.
9.RMSProp算法
RMSProp修改 AdaGrad 以在非凸設定下效果更好,改變梯度積累為指數加權的移動平均.AdaGrad旨在應用于凸問題時快速收斂.
10.AdaDelta算法
11.Adam算法
Adam是Momentum和RMSprop的結合體,也就是帶動量的自適應優(yōu)化算法.
12.Nadam算法
13.模擬退火算法
14.蟻群算法
15.遺傳算法
動量是為了加快學習速度,而自適應是為了加快收斂速度,注意學習速度快不一定收斂速度就快,比如步長大學習速度快,但是很容易跳出極值點,在極值點附近波動,很難達到收斂.
未完待定....
參考:
《統(tǒng)計學習方法》 李航 著
《深度學習》 花書
二、相對于遺傳算法,蟻群算法等新的優(yōu)化方法,傳統(tǒng)的優(yōu)化算法有哪些?
梯度法,共軛梯度法,牛頓法,變尺度法;
坐標輪換法,隨即搜索法,共軛方向法,單純形法,復合形法;
懲罰函數法等。
三、當前流行的可用于參數優(yōu)化的有哪些算法
對稱密碼體系的代表是 DES AES
非對稱或者叫公鑰密碼體系的代表是 RSA ECC
HASH算法的代表是 MD5 SHA-1 SHA-256 SHA-384 。。。
數字簽名的代表是 DSS
流密碼的代表是 RC4
over
這些是最主要的一些算法 密碼學教科書上必講的 其實現在密碼加密算法成百上千種 太多了
關鍵是要掌握它們的思想 很多算法基本思想都是一樣的
四、常用優(yōu)化器算法歸納介紹
優(yōu)化器是神經網絡訓練過程中,進行梯度下降以尋找最優(yōu)解的優(yōu)化方法。不同方法通過不同方式(如附加動量項,學習率自適應變化等)側重于解決不同的問題,但最終大都是為了加快訓練速度。
這里就介紹幾種常見的優(yōu)化器,包括其原理、數學公式、核心思想及其性能;
核心思想: 即針對每次輸入的訓練數據,計算輸出預測與真值的Loss的梯度;
從表達式來看,網絡中參數的更新,是不斷向著最小化Loss函數的方向移動的:
優(yōu)點:
簡單易懂,即對于相應的最優(yōu)解(這里認為是Loss的最小函數),每次變量更新都是沿著局部梯度下降最快的方向,從而最小化損失函數。
缺點:
不同于標準梯度下降法(Gradient Descent)一次計算所有數據樣本的Loss并計算相應的梯度,批量梯度下降法(BGD, Batch Gradient Descent)每次只取一個小批次的數據及其真實標簽進行訓練,稱這個批次為mini-batch;
優(yōu)點:
缺點:
隨機梯度下降法的 batch size 選擇不當可能導致模型難以收斂;由于這種方法是在一次更新中,就對整個數據集計算梯度,所以計算起來非常慢,遇到很大量的數據集也會非常棘手,而且不能投入新數據實時更新模型。
我們會事先定義一個迭代次數 epoch,首先計算梯度向量 params_grad,然后沿著梯度的方向更新參數 params,learning rate 決定了我們每一步邁多大。
Batch gradient descent 對于凸函數可以收斂到全局極小值,對于非凸函數可以收斂到局部極小值。
和 BGD 的一次用所有數據計算梯度相比,SGD 每次更新時對每個樣本進行梯度更新,對于很大的數據集來說,可能會有相似的樣本,這樣 BGD 在計算梯度時會出現冗余,而 SGD 一次只進行一次更新,就沒有冗余,而且比較快,并且可以新增樣本。
即訓練時,每次只從一批訓練樣本中隨機選取一個樣本進行梯度下降;對隨機梯度下降來說,只需要一次關注一個訓練樣本,一點點把參數朝著全局最小值的方向進行修改了。
整體數據集是個循環(huán),其中對每個樣本進行一次參數更新
缺點:
梯度下降速度比較慢,而且每次梯度更新時往往只專注與局部最優(yōu)點,而不會恰好指向全局最優(yōu)點;
單樣本梯度更新時會引入許多噪聲(跟訓練目標無關的特征也會被歸為該樣本分類的特征);
SGD 因為更新比較頻繁,會造成 cost function 有嚴重的震蕩。
BGD 可以收斂到局部極小值,當然 SGD 的震蕩可能會跳到更好的局部極小值處。
當我們稍微減小 learning rate,SGD 和 BGD 的收斂性是一樣的。
優(yōu)點:
當處理大量數據時,比如SSD或者faster-rcnn等目標檢測模型,每個樣本都有大量候選框參與訓練,這時使用隨機梯度下降法能夠加快梯度的計算。
隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況,那么可能只用其中部分的樣本,就已經將 迭代到最優(yōu)解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優(yōu),如果迭代10次的話就需要遍歷訓練樣本10次。缺點是SGD的噪音較BGD要多,使得SGD并不是每次迭代都向著整體最優(yōu)化方向。所以雖然訓練速度快,但是準確度下降,并不是全局最優(yōu)。雖然包含一定的隨機性,但是從期望上來看,它是等于正確的導數的。
梯度更新規(guī)則:
MBGD 每一次利用一小批樣本,即 n 個樣本進行計算,這樣它可以降低參數更新時的方差,收斂更穩(wěn)定,另一方面可以充分地利用深度學習庫中高度優(yōu)化的矩陣操作來進行更有效的梯度計算。
和 SGD 的區(qū)別是每一次循環(huán)不是作用于每個樣本,而是具有 n 個樣本的批次。
超參數設定值: n 一般取值在 50~256
缺點:(兩大缺點)
鞍點就是:一個光滑函數的鞍點鄰域的曲線,曲面,或超曲面,都位于這點的切線的不同邊。例如這個二維圖形,像個馬鞍:在x-軸方向往上曲,在y-軸方向往下曲,鞍點就是(0,0)。
為了應對上面的兩點挑戰(zhàn)就有了下面這些算法
核心思想:
不使用動量優(yōu)化時,每次訓練的梯度下降方向,都是按照當前批次訓練數據計算的,可能并不能代表整個數據集,并且會有許多噪聲,下降曲線波動較大:
添加動量項之后,能夠有效減小波動,從而加快訓練速度:
當我們將一個小球從山上滾下來時,沒有阻力的話,它的動量會越來越大,但是如果遇到了阻力,速度就會變小。
加入的這一項,可以使得梯度方向不變的維度上速度變快,梯度方向有所改變的維度上的更新速度變慢,這樣就可以加快收斂并減小震蕩。
優(yōu)點:
通過動量更新,參數向量會在有持續(xù)梯度的方向上增加速度;
使梯度下降時的折返情況減輕,從而加快訓練速度;
缺點:
如果數據集分類復雜,會導致 和 時刻梯度 向量方向相差較大;在進行向量求和時,得到的 會非常小,反而使訓練速度大大下降甚至模型難以收斂。
這種情況相當于小球從山上滾下來時是在盲目地沿著坡滾,如果它能具備一些先知,例如快要上坡時,就知道需要減速了的話,適應性會更好。
目前為止,我們可以做到,在更新梯度時順應 loss function 的梯度來調整速度,并且對 SGD 進行加速。
核心思想:
自適應學習率優(yōu)化算法針對于機器學習模型的學習率,采用不同的策略來調整訓練過程中的學習率,從而大大提高訓練速度。
這個算法就可以對低頻的參數做較大的更新,對高頻的做較小的更新,也因此,對于稀疏的數據它的表現很好,很好地提高了 SGD 的魯棒性,例如識別 Youtube 視頻里面的貓,訓練 GloVe word embeddings,因為它們都是需要在低頻的特征上有更大的更新。
Adagrad 的優(yōu)點是減少了學習率的手動調節(jié)
式中, 表示第 個分類, 表示第 迭代同時也表示分類 累計出現的次數。 表示初始的學習率取值(一般為0.01)
AdaGrad的核心思想: 縮放每個參數反比于其所有梯度歷史平均值總和的平方根。具有代價函數最大梯度的參數相應地有較大的學習率,而具有小梯度的參數又較小的學習率。
缺點:
它的缺點是分母會不斷積累,這樣學習率就會收縮并最終會變得非常小。
這個算法是對 Adagrad 的改進,
和 Adagrad 相比,就是分母的 換成了過去的梯度平方的衰減平均值,指數衰減平均值
這個分母相當于梯度的均方根 root mean squared (RMS),在數據統(tǒng)計分析中,將所有值平方求和,求其均值,再開平方,就得到均方根值 ,所以可以用 RMS 簡寫:
其中 的計算公式如下, 時刻的依賴于前一時刻的平均和當前的梯度:
梯度更新規(guī)則:
此外,還將學習率 換成了 RMS[Δθ],這樣的話,我們甚至都不需要提前設定學習率了:
超參數設定值: 一般設定為 0.9
RMSprop 是 Geoff Hinton 提出的一種自適應學習率方法。
RMSprop 和 Adadelta 都是為了解決 Adagrad 學習率急劇下降問題的,
梯度更新規(guī)則:
RMSprop 與 Adadelta 的第一種形式相同:(使用的是指數加權平均,旨在消除梯度下降中的擺動,與Momentum的效果一樣,某一維度的導數比較大,則指數加權平均就大,某一維度的導數比較小,則其指數加權平均就小,這樣就保證了各維度導數都在一個量級,進而減少了擺動。允許使用一個更大的學習率η)
超參數設定值:
Hinton 建議設定 為 0.9, 學習率 為 0.001。
這個算法是另一種計算每個參數的自適應學習率的方法。相當于 RMSprop + Momentum
除了像 Adadelta 和 RMSprop 一樣存儲了過去梯度的平方 vt 的指數衰減平均值 ,也像 momentum 一樣保持了過去梯度 mt 的指數衰減平均值:
如果 和 被初始化為 0 向量,那它們就會向 0 偏置,所以做了偏差校正,通過計算偏差校正后的 和 來抵消這些偏差:
梯度更新規(guī)則:
超參數設定值:
建議
示例一
示例二
示例三
上面情況都可以看出,Adagrad, Adadelta, RMSprop 幾乎很快就找到了正確的方向并前進,收斂速度也相當快,而其它方法要么很慢,要么走了很多彎路才找到。
由圖可知自適應學習率方法即 Adagrad, Adadelta, RMSprop, Adam 在這種情景下會更合適而且收斂性更好。
如果數據是稀疏的,就用自適用方法,即 Adagrad, Adadelta, RMSprop, Adam。
RMSprop, Adadelta, Adam 在很多情況下的效果是相似的。
Adam 就是在 RMSprop 的基礎上加了 bias-correction 和 momentum,
隨著梯度變的稀疏,Adam 比 RMSprop 效果會好。
整體來講,Adam 是最好的選擇。
很多論文里都會用 SGD,沒有 momentum 等。SGD 雖然能達到極小值,但是比其它算法用的時間長,而且可能會被困在鞍點。
如果需要更快的收斂,或者是訓練更深更復雜的神經網絡,需要用一種自適應的算法。
各種優(yōu)化器Optimizer原理:從SGD到AdamOptimizer
深度學習——優(yōu)化器算法Optimizer詳解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
以上就是關于近幾年比較新的優(yōu)化算法相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀:
近幾年什么行業(yè)前景好(近幾年什么行業(yè)最賺錢)