李宏毅機器學習筆記-3 梯度下降(Gradient Descent)

3 Gradient Descent - 梯度下降


1 爲什麼要用 Gradient Descent

  • 首先讓我們回顧一下機器學習的三部曲,

    1526779514205

    在 step 2 中,我們要定義一個 Loss Function,用來判斷我們找出的函數的好壞。

    在 step 3 中,我們要挑出一個可以使得 Loss 函數值最小的一個函數,當做最好的函數。

  • 想一想我們以前是怎麼求一個函數的最小值的,或許看一下就出來了,或者簡單求個導。但是在神經網絡中,我們面臨的是一個參數可能上萬個,百萬個甚至更多的函數,顯然我們需要更好的方法。

  • 而這個方法就是 Gradient Descent

2 Gradient Descent 怎麼做

  • 首先我們要知道 梯度(Grad) 這個概念,梯度就是 一個函數增長最快的方向。而 Gradient Descent 就是沿着梯度的反方向,也就是下降得最快的方向前進,直至找到一個最小值(理論上來說可能只能找到極小值,但是經過一些變種,好像可以增大找到最小值的概率)。

  • 舉個例子:

    1526780913875

    稍微解釋一下就是:

    1. 先隨機(或者其他更有效的方法)設置一個初始值 θ0
    2. 算出 θ0 上的梯度值 L(θ) ;
    3. θ1=θ0ηL(θ) 。其中 η 叫做 learning rate ,決定步長。
    4. 算出 θ1 上的梯度值 L(θ) ………..循環 2, 3 兩個步驟,直至達到目標。
  • 直觀的解釋如下圖:

    1526781804661

  • 以上就是 Gradient Descent 最通用的操作了。觀察一下上面的公式,我們能調的參數也就 η ,如果 η 的值沒有取好的話,η 越大,學習速度越快,但是可能沒辦法收斂;η 越小,學習速度越慢,但是不容易跳過最小值。可能根本就無法得到想要的結果。以下是 η 的大小對 Loss 的影響:

    1526782350164

  • 接下去會介紹一些改進版的梯度算法,主要區別就是在算法過程中如何動態改變 η 的值。

3 梯度下降算法plus

  • 基本原則:learning rate 的設置一般都是隨着學習的深入逐漸變小的。
    • 前期離目標比較遠,所以讓 learning rate 大一點,使學習速度更快。
    • 後期離目標比較近,所以讓 learning rate 小一點,使算法可以收斂。

3.1 Adagrad

  • 將每個參數的 learning rate 除以之前算過的所有導數的 均方根(N 個項的和除以 N 再開平方)

    1526783344356

  • 舉個例子,

    1526783431543

  • 由於 ηtσt 都有一個 t+1 ,所以實際計算時可以抵消掉,如下圖:

    1526784450795

  • 上圖的式子中,i=0t(gi)2 想做的其實是算二次微分,但是爲什麼這麼做以及爲什麼可以這麼做就不詳細說明了。

3.2 Stochastic Gradient Descent

  • 在前面的 Gradient Descent 中,我們每一次更新參數都要算出 Total Loss,也就是每次都要遍歷所有的訓練樣本才能更新一次參數。這種做法的好處是可以算出下降得最快的路徑,缺點是每次的計算量比較大,耗費的時間比較長。

    1526786638790

  • 而 Stochastic Gradient Descent 的思想是,我們每算出一個訓練樣本的微分就更新一次參數。這樣做的好處就是一個字:。雖然走的不是最優路線,但是學習起來非常快。

    1526786686564

3.3 Feature Scaling

  • 假設 y=b+w1x1+w2x2 ,如果 x1,x2 的分佈很不一樣,那就應該對其中某一個變量做 Scaling(縮放),使得兩個變量的分佈一樣。

    1526799141361

  • 爲什麼要做縮放呢?以上面的公式 y=b+w1x1+w2x2 爲例,下面是兩個其對應的神經元,但是不同的是,左邊的 x2 輸入是比較大的如100,200... 之類的,但是右邊的 x2 輸入比較小。

    1526799507992

    上圖下方兩幅圖表示的是 w1,w2 的變化對 Loss 的影響,

    • 左邊的等高線是橢圓形,因爲 Gradient Descent 並不是朝着最低點走,而是沿着等高線走,其路線就是圖上箭頭方向,這樣子的方向要更新參數是比較困難的;
    • 右邊就是正圓形,不管在哪裏初始化參數,都可以筆直朝着圓心方向走,更新參數就變得比較容易。
  • 怎麼做縮放?方法有很多,這裏提供一種比較常用的方法。

    1526800177440

4 Gradient Descent 的數學原理

  • 這部分沒聽懂,現在先放着,以後有空再補坑。

5 Gradient Descent 的侷限性

  1. 會陷入局部最優(Local Minimum);

  2. 有一些微分是 0 的點甚至連局部最優都不是,這種點我們叫做 saddle point

  3. 我們實際在做的時候,並不會真的更新到微分值等於 0 的點,可能只是小於一個比較小的值(比如 106 )就不更新參數了,而我們無從得知這個點是不是一個比較優的值,可能只是處於一個平坦的高原地區。

    1526801808827

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章