從零開始深度學習 T2. Gradient Descent
上一篇文章中介紹了迴歸分析,其中提到了求解最優引數的梯度下降法(Gradient Descent),這篇文章中,我們將針對Gradient Descent進行展開說明。
如圖,Gradient Descent是沿著Loss function的等高線的法線方向更新引數的
Gradient Descent的原理十分簡單,但是在實際操作過程中可能會遇到一些問題,對此有一些針對性的tips。關於梯度下降優化更詳細的內容,請參照這篇 譯文
Tip 1: Tuning your learning rates
回顧Gradient Descent的引數更新過程:
步長調整方式有以下幾種:
Vanilla Gradient descent
從Vanilla Gradient descent的公式中,我們可以看出,隨著引數的更新,步長
Adagrad
Adagrad可以表示為如下公式:
Adagrad與Vanilla Gradient descent的不同點在於,Adagrad多考慮了一種情況:當某時刻某方向的梯度
Tip 2: Stochastic Gradient Descent
之前提到的Gradient Descent在每一次引數更新時,都要計算全體資料集在新的引數下的Loss,當資料集很大的時候,這會造成巨大的計算開銷。Stochastic Gradient Descent是解決該問題的一種技術手段,在Stochastic Gradient Descent的每一次迭代中,會隨機取樣
Tip 3: Feature Scaling
不同的feature可能有不同的大小範圍,如果沒有對feature進行任何預處理,某些波動範圍很大的feature在引數更新過程中就可能佔據主導作用,從而使引數更新過程走很多彎路。如下圖所示,當feature
feature scaling處理起來非常簡便,只需對輸入引數進行如下處理即可:
其中
Warning Limitation of Gradient Descent
Gradient Descent進行引數更新的依據是每個引數的偏微分,因此當引數的偏微分很小的時候,引數更新會很慢,甚至停止。下圖中出現的情況需要引起我們的注意:
至於怎麼解決這些問題呢?我們會在以後的部落格中進行介紹。