1. 程式人生 > >Gradient Descent (二)

Gradient Descent (二)

我們做Gradient Descent 需要注意什麼呢?

  • Tuning your learning rates

η的大小控制不好,會造成很多問題:

如果η太小,我們w的移動速度太慢,而且會對資料量有一定要求

而如果太大了呢,w會一直在未走到最低點之前震盪,而無法走到最低點

甚至是這樣:

我們可以把引數的update和Loss值做一個曲線:

那有什麼辦法可以自動調節learning rate呢?

    最基本的思路:learning rate隨著引數的update越來越小。

                             因為通常在開始的時候,我們設定的引數往往距離最低點比較遠,隨著update,距離最低點會越來越

                             近,也就更加“謹慎”一些

用一個簡單的式子可以表達成這樣:

也就是說,每個點都有一個不同的learning rate。

對求learning rate的方法中,一個比較簡單的就是Adagrad

什麼是Adagrad呢?

即learning rate等於它除以之前所有微分值的均方根

在我們之前的Gradient descent中,

而在Adagrad中:,其中   

然後約分一下:

但是,如果仔細觀察這個式子,就會發現一些問題,在我們最開始的式子中,我們可以理解的:當斜率g越大時,w走一步跨的步子越大,但在我們剛剛得出的式子中,分子和分母中都存在g,是不是互相矛盾呢?

一種解釋是說Adagrad強調的是本次資料相對於其他資料的反差

  • Stochastic Gradient Descent

在原來的Gradient Descent中,我們是計算完所有的資料loss之後,update一次引數

而在Stochastic Gradient Descent中,我們計算每個資料的loss,每個都update一次引數

  • Feature Scaling

, 如果x2比x1大很多,那就把x2的值縮小,讓x1和x2對y的影響相似

y

那具體怎麼做呢?

至於Gradient Descent的數學理論基礎,可以看一下泰勒公式......這個我們以後有空再說

PS:部落格中用到的圖片來著李老師的ppt