最清晰的講解各種梯度下降法原理與Dropout

2020-11-29 AI火箭營

一、梯度法思想

梯度法思想的三要素:出發點、下降方向、下降步長。

機器學習中常用的權重更新表達式為

:,這裡的λ就是學習率,本文從這個式子出發來把機器學習中的各種「梯度」下降法闡釋清楚。

機器學習目標函數,一般都是凸函數,什麼叫凸函數?限於篇幅,我們不做很深的展開,在這兒我們做一個形象的比喻,凸函數求解問題,可以把目標損失函數想像成一口鍋,來找到這個鍋的鍋底。非常直觀的想法就是,我們沿著初始某個點的函數的梯度方向往下走(即梯度下降)。在這兒,我們再作個形象的類比,如果把這個走法類比為力,那麼完整的三要素就是步長(走多少)、方向、出發點,這樣形象的比喻,讓我們對梯度問題的解決豁然開朗,出發點很重要,是初始化時重點要考慮的,而方向、步長就是關鍵。事實上不同梯度的不同就在於這兩點的不同!

梯度方向是

,步長設為常數Δ,這時就會發現,如果用在梯度較大的時候,離最優解比較遠,W的更新比較快;然而到了梯度較小的時候,也就是較靠近最優解的時候,W的更新竟然也保持著跟原來一樣的速率,這樣會導致W很容易更新過度反而遠離了最優解,進而出現在最優解附近來回震蕩。所以,既然在遠離最優解的時候梯度大,在靠近最優解的時候梯度小,我們讓步長隨著這個律動,於是我我們就用λ|W|來代替Δ,最後得到了我們熟悉的式子:

所以說這時的λ是隨著坡度的陡緩而變化的,別看它是個常數。

二、全量梯度下降法(Batch gradient descent)

全量梯度下降法每次學習都使用整個訓練集,因此每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點,凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點,缺陷就是學習時間太長,消耗大量內存。

第二、隨機梯度下降法(Stochastic Gradient Descent)

SGD一輪迭代只用一條隨機選取的數據,儘管SGD的迭代次數比BGD大很多,但一次學習時間非常快。

SGD的缺點在於每次更新可能並不會按照正確的方向進行,參數更新具有高方差,從而導致損失函數劇烈波動。不過,如果目標函數有盆地區域,SGD會使優化的方向從當前的局部極小值點跳到另一個更好的局部極小值點,這樣對於非凸函數,可能最終收斂於一個較好的局部極值點,甚至全局極值點。

缺點是,出現損失函數波動,如下圖所示,並且無法判斷是否收斂。

第三、小批量梯度下降法(Mini-Batch Gradient Descent)

SGD相比BGD收斂速度快,然而,它也的缺點,那就是收斂時浮動,不穩定,在最優解附近波動,難以判斷是否已經收斂。這時折中的算法小批量梯度下降法,MBGD就產生了,道理很簡單,SGD太極端,一次一條,為何不多幾條?MBGD就是用一次迭代多條數據的方法。

並且如果Batch Size選擇合理,不僅收斂速度比SGD更快、更穩定,而且在最優解附近的跳動也不會很大,甚至得到比Batch Gradient Descent 更好的解。這樣就綜合了SGD和Batch Gradient Descent 的優點,同時弱化了缺點。總之,Mini-Batch比SGD和Batch Gradient Descent都好。

第四、Momentum梯度下降法

SGD、BSGD兩種改進方法都存在不同程度的震蕩,如何避免震蕩?或者說震蕩是怎麼產生的?震蕩,從可視圖表現來看,就是頻繁更改方向,所以,如果能夠把之前下降的方向考量進來,那麼將會減少振蕩。

上邊第二個圖是帶動量的梯度下降法。

下面推導動量下降法。

在普通的梯度下降法W -= V中,每次W的更新量V為V = dW * λ;

當使用衝量時,V考慮為本次的梯度下降量與部分上次更新量的矢量和,即-dW*λ與上次x的更新量V乘以一個介於[0, 1]的係數momemtum的和,即:

V = dW * λ+ V*momemtum。

當本次梯度下降方向與上次更新量的方向相同時,上次的更新量能夠對本次的搜索起到一個正向加速的作用。當本次梯度下降方向與上次更新量的方向相反時,上次的更新量能夠對本次的搜索起到一個減速的作用。下面兩個圖,第一圖是沒有動量的梯度下降法,第二圖是有動量的梯度下降法,很明顯減少了震蕩。

既減少震蕩,又大方向不變(本次梯度下降方向),從而保證了效率和正確的收斂。

第五、NAG梯度下降法

NAG(Nesterov Accelerated Gradient)不僅僅把SGD梯度下降以前的方向考慮,還將Momentum梯度變化的幅度也考慮了進來。

上圖是Momentum的優化軌跡,下圖是NAG的優化軌跡:

在給出公式之前,先看一個向量圖:

這個圖來源於 G. Hinton’s的文章,網上對這個圖的解釋大都來源於《An overview of gradient descent optimizationalgorithms》中文翻譯,其實並沒有真正講解清楚。本文嚴格按照願意解釋一下:

Momentum梯度法首先計算的是當前的梯度(圖中的小藍色向量)然後沿著更新的累積梯度的方向來一個大的跳躍(圖中大藍色向量),而NAG梯度法首先沿著先前的累積梯度方向(棕色向量)實現一個大的跳躍,然後加上一個小的按照動量梯度法計算的當前梯度(上圖紅色向量)進行修正得到上圖綠色的向量。此處我拋出一個問題,上圖為什麼畫了兩個三角形?如果能理解第二個矢量三解形的意義,才能正在理解NAG。注意第二個矢量三角形的棕色向量與前一個的綠色向量方向一致,因為上一個矢量三角形的結果是綠色向量,而棕色代表的是先前的累積梯度,方向就應該和綠色的一樣。然後,再加上當前按照動量梯度法計算出的梯度,就得到第二個三角形的綠色向量。

給出公式表達:

我們先給出類似生活體驗的通俗的解釋:我們要讓算法要前瞻性,提前看到前方的地形梯度,如果前面的梯度比當前位置的梯度大,那我就可以把步子邁得比原來大一些,如果前面的梯度比現在的梯度小,那我就可以把步子邁得小一些。這個大一些、小一些,都是相對於原來不看前方梯度、只看當前位置梯度的情況來說的。

NAG的另一個等效形式為(下文會詳細推導):

這個NAG的等效形式與Momentum的區別在於,本次更新方向多加了一個,注意到沒有,這項其實就是目標函數的二階導數!所以NAG本質上是多考慮了目標函數的二階導信息,讀過《一篇中矣:徹底理解XGBoost!》一文的讀者,是不是覺得很面熟,二階導數再次發揮作用!其實所謂「往前看」的說法,在牛頓法這樣的二階方法中經常提到,形象說「往前看」,數學思維則是利用了目標函數的二階導信息。

現在我們由NAG原始形式來推導NAG的等效形式:

為了出現二階形式,將原始形式按照遞推展開:

我們觀察這個等式,並對應原始公式

觀察對比這個長等式:

等式相當於參數在更新量更新基礎上的更新,所以為了看上去更有意義,對應的形式,我們作如下記號:

我們在猜想一個形式:

則可作記號:

也就是有:

為了變換形式,我們作如下展開:

繼續推導:

到此為止NAG證明就結束,邏輯、意義非常完美!這就是數學之美!

限於篇幅其他非常重要的梯度法AdaGrad、AdaDelta、RMSProp、Adam等在後續文章在詳加闡述。

Dropout的正則化原理

1、dropout 如何工作

典型的神經網絡其訓練流程是將輸入通過網絡進行正向傳導,然後將誤差進行反向傳播。Dropout就是針對這一過程之中,隨機地刪除隱藏層的部分單元,進行上述過程。步驟如下:

隨機刪除網絡中的一些隱藏神經元,保持輸入輸出神經元不變將輸入通過修改後的網絡進行前向傳播,然後將誤差通過修改後的網絡進行反向傳播對於另外一批的訓練樣本,重複上述操作 訓練階段使用Dropout,測試階段把Dropout屏蔽。

所以,在訓練的時候為每個存活下來的神經元做同採樣比例的放大,或者,另外一種選擇就是把測試結果根據採樣比例縮小。

Dropout之所以具有正則化能力的兩個解釋:

強迫網絡擁有冗餘的表示;Dropout在訓練一個大規模的網絡組合(ensemble)強迫網絡擁有冗餘的表示:在每輪迭代中,總是隨機屏蔽一定比例的神經元,因此輸出並不知道它正在組合哪些特徵,比起沒有Dropout時過於專注於某些特徵(比如拿識別貓來說,過於專注於貓的眼睛),現在模型把專注力分散到每個特徵,使得這些特徵也能具備比較好的預測能力。由於原本具有很高權重的那些特徵現在被壓縮,達到了正則化的效果。 Dropout相當於模型平均、模型組合:看作是模型平均的一種,平均一個大量不同的網絡。不同的網絡在不同的情況下過擬合,但是共用一個損失函數,相當於同時進行了優化,取了平均;相比之前使用所有的數據在一個模型裡面訓練,Dropout相當於在訓練階段每次針對一批數據就生成一個獨特的小模型,然後再將這些模型組合起來的一種方法。我們在《透徹理解集成算法及其思想》一文中對於集成模型的優勢有很好的闡述。

減少複雜依賴性:由於每次用輸入網絡的樣本進行權值更新時,隱含節點都是以一定概率隨機出現,因此不能保證某兩個隱含節點每次都同時出現,這樣就減少了神經元之間的依賴性,即每個神經元不能依賴於某幾個其他的神經元(指層與層之間相連接的神經元),阻止了某些特徵僅在有其他特徵存在才有效的情況,減少神經元之間複雜的依賴性。

相關焦點

  • 筆記(乾貨):dropout原理總結
    因此,在dropout之前,神經網絡的規模和準確性變得有限。嗯,這就是為什麼還需要Dropout了,它面對L1,L2問題時,避開了共同適應問題,提出了自適應,因而我們可以搭建更深的神經網絡。額,如果你只需了解Dropout的故事,看到這裡就可以了,如果你想更深入了解一下Dropout,以及背後的數學原理,那麼請耐心的繼續往下閱讀吧。
  • 一分鐘看完梯度下降法
    今天,我想講一下梯度下降法(Gradient Descent),基於線性回歸損失函數的梯度下降法。
  • 隨機梯度下降法介紹及其參數講解
    算法介紹簡單來說,梯度下降就是從山頂找一條最短的路走到山腳最低的地方。
  • 梯度下降—Python實現
    梯度下降是數據科學的基礎,無論是深度學習還是機器學習。深入了解梯度下降原理一定會對你今後的工作有所幫助。你將真正了解這些超參數的作用以及處理使用此算法可能遇到的問題。然而,梯度下降並不局限於一種算法。另外兩種流行的梯度下降(隨機和小批量梯度下降)建立在主要算法的基礎上,你可能會看到比普通批量梯度下降更多的算法。
  • 技術| 深度解讀最流行的優化算法:梯度下降
    > 梯度下降法,是當今最流行的優化(optimization)算法,亦是至今最常用的優化神經網絡的方法。本文旨在讓你對不同的優化梯度下降法的算法有一個直觀認識,以幫助你使用這些算法。我們首先會考察梯度下降法的各種變體,然後會簡要地總結在訓練(神經網絡或是機器學習算法)的過程中可能遇到的挑戰。
  • 梯度下降背後的數學原理幾何?
    雷鋒網 AI 科技評論按:對於諸位「機器學習兒」而言,梯度下降這個概念一定不陌生,然而從直觀上來看,梯度下降的複雜性無疑也會讓人「敬而遠之」。本文作者 Suraj Bansal 通過對梯度下降背後的數學原理進行拆解,並配之以簡單的現實案例,以輕鬆而有趣的口吻帶大家深入了解梯度下降這一在機器學習領域至關重要的方法。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    這也是為什麼我們應該用各種優化策略和算法,來更新和計算影響模型訓練和模型輸出的網絡參數,使其逼近或達到最優值。 優化算法分為兩大類: 1. 一階優化算法 這種算法使用各參數的梯度值來最小化或最大化損失函數E(x)。最常用的一階優化算法是梯度下降。
  • 吳恩達深度學習筆記(12)-計算圖計算梯度下降
    邏輯回歸中的梯度下降(Logistic Regression Gradient Descent)本節我們討論怎樣通過計算偏導數來實現邏輯回歸的梯度下降算法。它的關鍵點是幾個重要公式,其作用是用來實現邏輯回歸中梯度下降算法。但是在本節中,將使用計算圖對梯度下降算法進行計算。
  • 線性回歸和梯度下降的初學者教程
    這就是為什麼我們需要使用梯度下降。梯度下降是一種找到最佳擬合線的工具。在深入研究梯度下降之前,先看看另一種計算最佳擬合線的方法。最佳擬合線的統計計算方法:直線可以用公式表示:y=mx+b。回歸線斜率m的公式為:m = r * (SD of y / SD of x)。
  • 今日面試題分享:牛頓法和梯度下降法有什麼不同?
    已經證明,如果f'是連續的,並且待求的零點x是孤立的,那麼在零點x周圍存在一個區域,只要初始值x0位於這個鄰近區域內,那麼牛頓法必定收斂。 並且,如果f'(x)不為0, 那麼牛頓法將具有平方收斂的性能.
  • 10個梯度下降優化算法+備忘單
    ∂L/∂w3、或二者兼有且看如下方程1:方程1:隨機梯度下降中的各種量隨機梯度下降(Stochastic Gradient Descend)最原始的隨機梯度下降算法主要依據當前梯度∂L/∂w乘上一個係數學習率α來更新模型權重w的。
  • 機器學習:隨機梯度下降和批量梯度下降算法介紹
    機器學習:隨機梯度下降和批量梯度下降算法介紹 佚名 發表於 2017-11-28 04:00:28 隨機梯度下降(Stochastic gradient descent)
  • 梯度向量的意義與運用
    梯度向量是數學或自然科學中常用的一個數學工具,它的推導和講解前面的文章已經提到過很多次了,本篇主要介紹下梯度向量的運用和主要意義向量微積分在向量演算中,一個主要的課題是引入向量和三維空間,這通常作為在笛卡爾坐標系中研究的二維空間的擴展。
  • 梯度下降算法詳解
    原創 | CDA數據分析研究院,轉載需授權介紹如果說在機器學習領域有哪個優化算法最廣為認知,用途最廣,非梯度下降算法莫屬。但是換一種思路,比如用梯度下降算法去優化線性回歸的損失函數,完全就可以不用考慮多重共線性帶來的問題。其實不僅是線性回歸,邏輯回歸同樣是可以用梯度下降進行優化,因為這兩個算法的損失函數都是嚴格意義上的凸函數,即存在全局唯一極小值,較小的學習率和足夠的迭代次數,一定可以達到最小值附近,滿足精度要求是完全沒有問題的。
  • 詳解梯度下降算法 正確訓練模型利刃!
    介紹  在訓練機器學習模型時使用梯度下降。它是一種基於凸函數的優化算法,它迭代地調整參數以使給定函數最小化。  它只是用來儘可能地找到使成本函數最小化的函數參數(係數)的值。  首先定義初始參數值,然後在漸變下降中使用微積分迭代調整值,以使它們最小化給定的成本函數。
  • 入門| Tensorflow實戰講解神經網絡搭建詳細過程
    >  程序6:  #調用神經網絡  result = neural_network(x)  #預測類別  prediction = tf.nn.softmax(result)  #平方差損失函數  loss = tf.reduce_mean(tf.square(y-prediction))  #梯度下降法
  • Batch、Mini-batch和隨機梯度下降的區別和Python示例
    梯度下降梯度下降是幫助神經網絡獲得正確的權重值和偏差值的最常見算法之一。梯度下降法(GD)是在每一步中最小化成本函數J(W,b)的一種算法。它迭代地更新權重和偏差,以嘗試在成本函數中達到全局最小值。有了這個誤差,我們現在可以反向傳播它,更新每個權重和偏差,並嘗試最小化這個誤差。正如你所預料的,這部分被稱為反向傳播。反向傳播步驟是使用導數計算得出的,並返回「梯度」,這個值告訴我們應遵循哪個方向以最小化成本函數。現在我們準備更新權重矩陣W和偏差向量b了。梯度下降規則如下:換句話說,新的權重/偏差值將是最後一個權重/偏差值減去梯度的值,使其接近成本函數的全局最小值。
  • 機器學習 101:一文帶你讀懂梯度下降
    但是對於梯度下降,我們不想讓f函數儘快地最大化,我們想讓它最小化。  我們將對它們迭代執行一些細小的改變,這樣它就可以沿著誤差曲面上最陡的下降方向走。在每次迭代之後,這些權重變化將改善我們的模型,使得它能夠表示數據集的趨勢。  在繼續往下看之前,請記住我們要取梯度的反方向來進行梯度下降。 你可以把梯度下降想像成一個球滾下山谷。
  • 從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法
    下面,本文將描述在神經網絡中最重要的學習算法。梯度下降梯度下降,又稱為最速下降法是一種非常簡單和直觀的訓練算法。該算法從梯度向量中獲取優化信息,因此其為一階算法(通過一階偏導求最優權重)。因此,梯度下降法就是如下方程式進行迭代。其中參數 η 是學習速率。該學習速率的值可以設定為一個常量也可以沿著訓練方向使用單變量優化法求得。通常學習速率的最優值可以在連續迭代步(successive step)上通過線最小化(line minimization)獲得。然而,現在還是有很多機器學習模型僅僅只使用固定的學習速率。下面是一張使用梯度下降算法進行學習的流程圖。
  • 吳恩達機器學習筆記 - 線性回歸、代價函數與梯度下降
    當函數參數確定好了,我們給定一個輸入,那麼輸出就是在直線上部或者下部的一個離散的點,表示該輸入數據是最可能是哪一種類型,對於多個特徵的分類問題,原理是一樣的。回歸問題:預測連續的輸出(擬合函數曲線),比如用最小二乘回歸一個連續的輸出曲線:擬合的曲線可能有多條,通過不斷的優化函數模型和參數,可以看出藍色的曲線比紫色的直線擬合(回歸)效果好。