日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

神经网络优化算法总结【SGD】---【Adam】

發(fā)布時(shí)間:2025/3/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 神经网络优化算法总结【SGD】---【Adam】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在調(diào)整模型更新權(quán)重和偏差參數(shù)的方式時(shí),你是否考慮過哪種優(yōu)化算法能使模型產(chǎn)生更好且更快的效果?應(yīng)該用梯度下降,隨機(jī)梯度下降,還是Adam方法? 這篇文章介紹了不同優(yōu)化算法之間的主要區(qū)別,以及如何選擇最佳的優(yōu)化方法。

什么是優(yōu)化算法?

優(yōu)化算法的功能,是通過改善訓(xùn)練方式,來最小化(或最大化)損失函數(shù)E(x)。 模型內(nèi)部有些參數(shù),是用來計(jì)算測試集中目標(biāo)值Y的真實(shí)值和預(yù)測值的偏差程度的,基于這些參數(shù),就形成了損失函數(shù)E(x)。 比如說,權(quán)重(W)和偏差(b)就是這樣的內(nèi)部參數(shù),一般用于計(jì)算輸出值,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型時(shí)起到主要作用。 在有效地訓(xùn)練模型并產(chǎn)生準(zhǔn)確結(jié)果時(shí),模型的內(nèi)部參數(shù)起到了非常重要的作用。這也是為什么我們應(yīng)該用各種優(yōu)化策略和算法,來更新和計(jì)算影響模型訓(xùn)練和模型輸出的網(wǎng)絡(luò)參數(shù),使其逼近或達(dá)到最優(yōu)值。 優(yōu)化算法分為兩大類: 1. 一階優(yōu)化算法 這種算法使用各參數(shù)的梯度值來最小化或最大化損失函數(shù)E(x)。最常用的一階優(yōu)化算法是梯度下降。 函數(shù)梯度:導(dǎo)數(shù)dy/dx的多變量表達(dá)式,用來表示y相對于x的瞬時(shí)變化率。往往為了計(jì)算多變量函數(shù)的導(dǎo)數(shù)時(shí),會用梯度取代導(dǎo)數(shù),并使用偏導(dǎo)數(shù)來計(jì)算梯度。梯度和導(dǎo)數(shù)之間的一個(gè)主要區(qū)別是函數(shù)的梯度形成了一個(gè)向量場。 因此,對單變量函數(shù),使用導(dǎo)數(shù)來分析;而梯度是基于多變量函數(shù)而產(chǎn)生的。更多理論細(xì)節(jié)在這里不再進(jìn)行詳細(xì)解釋。 2. 二階優(yōu)化算法 二階優(yōu)化算法使用了二階導(dǎo)數(shù)(也叫做Hessian方法)來最小化或最大化損失函數(shù)。由于二階導(dǎo)數(shù)的計(jì)算成本很高,所以這種方法并沒有廣泛使用。

詳解各種神經(jīng)網(wǎng)絡(luò)優(yōu)化算法

梯度下降 在訓(xùn)練和優(yōu)化智能系統(tǒng)時(shí),梯度下降是一種最重要的技術(shù)和基礎(chǔ)。梯度下降的功能是: 通過尋找最小值,控制方差,更新模型參數(shù),最終使模型收斂。 網(wǎng)絡(luò)更新參數(shù)的公式為:θ=θ?η×?(θ).J(θ)?,其中η是學(xué)習(xí)率,?(θ).J(θ)是損失函數(shù)J(θ)的梯度。 這是在神經(jīng)網(wǎng)絡(luò)中最常用的優(yōu)化算法。 如今,梯度下降主要用于在神經(jīng)網(wǎng)絡(luò)模型中進(jìn)行權(quán)重更新,即在一個(gè)方向上更新和調(diào)整模型的參數(shù),來最小化損失函數(shù)。 2006年引入的反向傳播技術(shù),使得訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)成為可能。反向傳播技術(shù)是先在前向傳播中計(jì)算輸入信號的乘積及其對應(yīng)的權(quán)重,然后將激活函數(shù)作用于這些乘積的總和。這種將輸入信號轉(zhuǎn)換為輸出信號的方式,是一種對復(fù)雜非線性函數(shù)進(jìn)行建模的重要手段,并引入了非線性激活函數(shù),使得模型能夠?qū)W習(xí)到幾乎任意形式的函數(shù)映射。然后,在網(wǎng)絡(luò)的反向傳播過程中回傳相關(guān)誤差,使用梯度下降更新權(quán)重值,通過計(jì)算誤差函數(shù)E相對于權(quán)重參數(shù)W的梯度,在損失函數(shù)梯度的相反方向上更新權(quán)重參數(shù)。
圖1:權(quán)重更新方向與梯度方向相反 圖1顯示了權(quán)重更新過程與梯度矢量誤差的方向相反,其中U形曲線為梯度。要注意到,當(dāng)權(quán)重值W太小或太大時(shí),會存在較大的誤差,需要更新和優(yōu)化權(quán)重,使其轉(zhuǎn)化為合適值,所以我們試圖在與梯度相反的方向找到一個(gè)局部最優(yōu)值。 梯度下降的變體 傳統(tǒng)的批量梯度下降將計(jì)算整個(gè)數(shù)據(jù)集梯度,但只會進(jìn)行一次更新,因此在處理大型數(shù)據(jù)集時(shí)速度很慢且難以控制,甚至導(dǎo)致內(nèi)存溢出。 權(quán)重更新的快慢是由學(xué)習(xí)率η決定的,并且可以在凸面誤差曲面中收斂到全局最優(yōu)值,在非凸曲面中可能趨于局部最優(yōu)值。 使用標(biāo)準(zhǔn)形式的批量梯度下降還有一個(gè)問題,就是在訓(xùn)練大型數(shù)據(jù)集時(shí)存在冗余的權(quán)重更新。 標(biāo)準(zhǔn)梯度下降的上述問題在隨機(jī)梯度下降方法中得到了解決。 1. 隨機(jī)梯度下降(SGD) 隨機(jī)梯度下降(Stochastic gradient descent,SGD)對每個(gè)訓(xùn)練樣本進(jìn)行參數(shù)更新,每次執(zhí)行都進(jìn)行一次更新,且執(zhí)行速度更快。 θ=θ?η??(θ) × J(θ;x(i);y(i)),其中x(i)和y(i)為訓(xùn)練樣本。 頻繁的更新使得參數(shù)間具有高方差,損失函數(shù)會以不同的強(qiáng)度波動。這實(shí)際上是一件好事,因?yàn)樗兄谖覀儼l(fā)現(xiàn)新的和可能更優(yōu)的局部最小值,而標(biāo)準(zhǔn)梯度下降將只會收斂到某個(gè)局部最優(yōu)值。 但SGD的問題是,由于頻繁的更新和波動,最終將收斂到最小限度,并會因波動頻繁存在超調(diào)量。 雖然已經(jīng)表明,當(dāng)緩慢降低學(xué)習(xí)率η時(shí),標(biāo)準(zhǔn)梯度下降的收斂模式與SGD的模式相同。
圖2:每個(gè)訓(xùn)練樣本中高方差的參數(shù)更新會導(dǎo)致?lián)p失函數(shù)大幅波動,因此我們可能無法獲得給出損失函數(shù)的最小值。 另一種稱為“小批量梯度下降”的變體,則可以解決高方差的參數(shù)更新和不穩(wěn)定收斂的問題。 2. 小批量梯度下降 為了避免SGD和標(biāo)準(zhǔn)梯度下降中存在的問題,一個(gè)改進(jìn)方法為小批量梯度下降(Mini Batch Gradient Descent),因?yàn)閷γ總€(gè)批次中的n個(gè)訓(xùn)練樣本,這種方法只執(zhí)行一次更新。 使用小批量梯度下降的優(yōu)點(diǎn)是: 1) 可以減少參數(shù)更新的波動,最終得到效果更好和更穩(wěn)定的收斂。 2) 還可以使用最新的深層學(xué)習(xí)庫中通用的矩陣優(yōu)化方法,使計(jì)算小批量數(shù)據(jù)的梯度更加高效。 3) 通常來說,小批量樣本的大小范圍是從50到256,可以根據(jù)實(shí)際問題而有所不同。 4) 在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),通常都會選擇小批量梯度下降算法。 這種方法有時(shí)候還是被成為SGD。 使用梯度下降及其變體時(shí)面臨的挑戰(zhàn) 1. 很難選擇出合適的學(xué)習(xí)率。太小的學(xué)習(xí)率會導(dǎo)致網(wǎng)絡(luò)收斂過于緩慢,而學(xué)習(xí)率太大可能會影響收斂,并導(dǎo)致?lián)p失函數(shù)在最小值上波動,甚至出現(xiàn)梯度發(fā)散。 2. 此外,相同的學(xué)習(xí)率并不適用于所有的參數(shù)更新。如果訓(xùn)練集數(shù)據(jù)很稀疏,且特征頻率非常不同,則不應(yīng)該將其全部更新到相同的程度,但是對于很少出現(xiàn)的特征,應(yīng)使用更大的更新率。 3. 在神經(jīng)網(wǎng)絡(luò)中,最小化非凸誤差函數(shù)的另一個(gè)關(guān)鍵挑戰(zhàn)是避免陷于多個(gè)其他局部最小值中。實(shí)際上,問題并非源于局部極小值,而是來自鞍點(diǎn),即一個(gè)維度向上傾斜且另一維度向下傾斜的點(diǎn)。這些鞍點(diǎn)通常被相同誤差值的平面所包圍,這使得SGD算法很難脫離出來,因?yàn)樘荻仍谒芯S度上接近于零。 進(jìn)一步優(yōu)化梯度下降 現(xiàn)在我們要討論用于進(jìn)一步優(yōu)化梯度下降的各種算法。 1. 動量 SGD方法中的高方差振蕩使得網(wǎng)絡(luò)很難穩(wěn)定收斂,所以有研究者提出了一種稱為動量(Momentum)的技術(shù),通過優(yōu)化相關(guān)方向的訓(xùn)練和弱化無關(guān)方向的振蕩,來加速SGD訓(xùn)練。換句話說,這種新方法將上個(gè)步驟中更新向量的分量’γ’添加到當(dāng)前更新向量。 V(t)=γV(t?1)+η?(θ).J(θ) 最后通過θ=θ?V(t)來更新參數(shù)。 動量項(xiàng)γ通常設(shè)定為0.9,或相近的某個(gè)值。 這里的動量與經(jīng)典物理學(xué)中的動量是一致的,就像從山上投出一個(gè)球,在下落過程中收集動量,小球的速度不斷增加。 在參數(shù)更新過程中,其原理類似: 1) 使網(wǎng)絡(luò)能更優(yōu)和更穩(wěn)定的收斂; 2) 減少振蕩過程。 當(dāng)其梯度指向?qū)嶋H移動方向時(shí),動量項(xiàng)γ增大;當(dāng)梯度與實(shí)際移動方向相反時(shí),γ減小。這種方式意味著動量項(xiàng)只對相關(guān)樣本進(jìn)行參數(shù)更新,減少了不必要的參數(shù)更新,從而得到更快且穩(wěn)定的收斂,也減少了振蕩過程。 2. Nesterov梯度加速法 一位名叫Yurii Nesterov研究員,認(rèn)為動量方法存在一個(gè)問題: 如果一個(gè)滾下山坡的球,盲目沿著斜坡下滑,這是非常不合適的。一個(gè)更聰明的球應(yīng)該要注意到它將要去哪,因此在上坡再次向上傾斜時(shí)小球應(yīng)該進(jìn)行減速。 實(shí)際上,當(dāng)小球達(dá)到曲線上的最低點(diǎn)時(shí),動量相當(dāng)高。由于高動量可能會導(dǎo)致其完全地錯(cuò)過最小值,因此小球不知道何時(shí)進(jìn)行減速,故繼續(xù)向上移動。 Yurii Nesterov在1983年發(fā)表了一篇關(guān)于解決動量問題的論文,因此,我們把這種方法叫做Nestrov梯度加速法。 在該方法中,他提出先根據(jù)之前的動量進(jìn)行大步跳躍,然后計(jì)算梯度進(jìn)行校正,從而實(shí)現(xiàn)參數(shù)更新。這種預(yù)更新方法能防止大幅振蕩,不會錯(cuò)過最小值,并對參數(shù)更新更加敏感。 Nesterov梯度加速法(NAG)是一種賦予了動量項(xiàng)預(yù)知能力的方法,通過使用動量項(xiàng)γV(t?1)來更改參數(shù)θ。通過計(jì)算θ?γV(t?1),得到下一位置的參數(shù)近似值,這里的參數(shù)是一個(gè)粗略的概念。因此,我們不是通過計(jì)算當(dāng)前參數(shù)θ的梯度值,而是通過相關(guān)參數(shù)的大致未來位置,來有效地預(yù)知未來: V(t)=γV(t?1)+η?(θ)J( θ?γV(t?1) ),然后使用θ=θ?V(t)來更新參數(shù)。 現(xiàn)在,我們通過使網(wǎng)絡(luò)更新與誤差函數(shù)的斜率相適應(yīng),并依次加速SGD,也可根據(jù)每個(gè)參數(shù)的重要性來調(diào)整和更新對應(yīng)參數(shù),以執(zhí)行更大或更小的更新幅度。 3. Adagrad方法 Adagrad方法是通過參數(shù)來調(diào)整合適的學(xué)習(xí)率η,對稀疏參數(shù)進(jìn)行大幅更新和對頻繁參數(shù)進(jìn)行小幅更新。因此,Adagrad方法非常適合處理稀疏數(shù)據(jù)。 在時(shí)間步長中,Adagrad方法基于每個(gè)參數(shù)計(jì)算的過往梯度,為不同參數(shù)θ設(shè)置不同的學(xué)習(xí)率。 先前,每個(gè)參數(shù)θ(i)使用相同的學(xué)習(xí)率,每次會對所有參數(shù)θ進(jìn)行更新。在每個(gè)時(shí)間步t中,Adagrad方法為每個(gè)參數(shù)θ選取不同的學(xué)習(xí)率,更新對應(yīng)參數(shù),然后進(jìn)行向量化。為了簡單起見,我們把在t時(shí)刻參數(shù)θ(i)的損失函數(shù)梯度設(shè)為g(t,i)。
圖3:參數(shù)更新公式 Adagrad方法是在每個(gè)時(shí)間步中,根據(jù)過往已計(jì)算的參數(shù)梯度,來為每個(gè)參數(shù)θ(i)修改對應(yīng)的學(xué)習(xí)率η。 Adagrad方法的主要好處是,不需要手工來調(diào)整學(xué)習(xí)率。大多數(shù)參數(shù)使用了默認(rèn)值0.01,且保持不變。 Adagrad方法的主要缺點(diǎn)是,學(xué)習(xí)率η總是在降低和衰減。 因?yàn)槊總€(gè)附加項(xiàng)都是正的,在分母中累積了多個(gè)平方梯度值,故累積的總和在訓(xùn)練期間保持增長。這反過來又導(dǎo)致學(xué)習(xí)率下降,變?yōu)楹苄?shù)量級的數(shù)字,該模型完全停止學(xué)習(xí),停止獲取新的額外知識。 因?yàn)殡S著學(xué)習(xí)速度的越來越小,模型的學(xué)習(xí)能力迅速降低,而且收斂速度非常慢,需要很長的訓(xùn)練和學(xué)習(xí),即學(xué)習(xí)速度降低。 另一個(gè)叫做Adadelta的算法改善了這個(gè)學(xué)習(xí)率不斷衰減的問題。 4. AdaDelta方法 這是一個(gè)AdaGrad的延伸方法,它傾向于解決其學(xué)習(xí)率衰減的問題。Adadelta不是累積所有之前的平方梯度,而是將累積之前梯度的窗口限制到某個(gè)固定大小w。 與之前無效地存儲w先前的平方梯度不同,梯度的和被遞歸地定義為所有先前平方梯度的衰減平均值。作為與動量項(xiàng)相似的分?jǐn)?shù)γ,在t時(shí)刻的滑動平均值Eg2僅僅取決于先前的平均值和當(dāng)前梯度值。 Eg2=γ.Eg2+(1?γ).g2(t),其中γ設(shè)置為與動量項(xiàng)相近的值,約為0.9。 Δθ(t)=?η?g(t,i). θ(t+1)=θ(t)+Δθ(t)
圖4:參數(shù)更新的最終公式 AdaDelta方法的另一個(gè)優(yōu)點(diǎn)是,已經(jīng)不需要設(shè)置一個(gè)默認(rèn)的學(xué)習(xí)率。 目前已完成的改進(jìn) 1) 為每個(gè)參數(shù)計(jì)算出不同學(xué)習(xí)率; 2) 也計(jì)算了動量項(xiàng)momentum; 3) 防止學(xué)習(xí)率衰減或梯度消失等問題的出現(xiàn)。 還可以做什么改進(jìn)? 在之前的方法中計(jì)算了每個(gè)參數(shù)的對應(yīng)學(xué)習(xí)率,但是為什么不計(jì)算每個(gè)參數(shù)的對應(yīng)動量變化并獨(dú)立存儲呢?這就是Adam算法提出的改良點(diǎn)。 Adam算法 Adam算法即自適應(yīng)時(shí)刻估計(jì)方法(Adaptive Moment Estimation),能計(jì)算每個(gè)參數(shù)的自適應(yīng)學(xué)習(xí)率。這個(gè)方法不僅存儲了AdaDelta先前平方梯度的指數(shù)衰減平均值,而且保持了先前梯度M(t)的指數(shù)衰減平均值,這一點(diǎn)與動量類似: M(t)為梯度的第一時(shí)刻平均值,V(t)為梯度的第二時(shí)刻非中心方差值。
圖5:兩個(gè)公式分別為梯度的第一個(gè)時(shí)刻平均值和第二個(gè)時(shí)刻方差 則參數(shù)更新的最終公式為:
圖6:參數(shù)更新的最終公式 其中,β1設(shè)為0.9,β2設(shè)為0.9999,?設(shè)為10-8。 在實(shí)際應(yīng)用中,Adam方法效果良好。與其他自適應(yīng)學(xué)習(xí)率算法相比,其收斂速度更快,學(xué)習(xí)效果更為有效,而且可以糾正其他優(yōu)化技術(shù)中存在的問題,如學(xué)習(xí)率消失、收斂過慢或是高方差的參數(shù)更新導(dǎo)致?lián)p失函數(shù)波動較大等問題。

結(jié)論

我們應(yīng)該使用哪種優(yōu)化器? 在構(gòu)建神經(jīng)網(wǎng)絡(luò)模型時(shí),選擇出最佳的優(yōu)化器,以便快速收斂并正確學(xué)習(xí),同時(shí)調(diào)整內(nèi)部參數(shù),最大程度地最小化損失函數(shù)。 Adam在實(shí)際應(yīng)用中效果良好,超過了其他的自適應(yīng)技術(shù)。 如果輸入數(shù)據(jù)集比較稀疏,SGD、NAG和動量項(xiàng)等方法可能效果不好。因此對于稀疏數(shù)據(jù)集,應(yīng)該使用某種自適應(yīng)學(xué)習(xí)率的方法,且另一好處為不需要人為調(diào)整學(xué)習(xí)率,使用默認(rèn)參數(shù)就可能獲得最優(yōu)值。 如果想使訓(xùn)練深層網(wǎng)絡(luò)模型快速收斂或所構(gòu)建的神經(jīng)網(wǎng)絡(luò)較為復(fù)雜,則應(yīng)該使用Adam或其他自適應(yīng)學(xué)習(xí)速率的方法,因?yàn)檫@些方法的實(shí)際效果更優(yōu)。 相關(guān)鏈接: 二階優(yōu)化算法: https://web.stanford.edu/class/msande311/lecture13.pdf... Nesterov梯度加速法:CS231n Convolutional Neural Networks for Visual Recognition

總結(jié)

以上是生活随笔為你收集整理的神经网络优化算法总结【SGD】---【Adam】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。