梯度下降算法詳解

寫在前面

梯度下降算法是機器學習中最重要的“利劍”之一,可能大家已經對於其思想了熟於心了,心想梯度下降不就是先隨機初始化一組參數w然後計算損失函數對參數的梯度g再按w_new = w - r*g(其中r是學習率)進行計算就行了鴨。但不知道你有沒有想過如下幾個問題:
1.爲什麼要按梯度的反方向進行計算?
2.爲什麼學習率不能設置太大?
如果你有這些困惑的話,相信你讀完這篇文章應該會有所啓發,那就現在開始吧!

梯度下降算法的數學支持

首先我們知道梯度下降算法的目的是爲了找出一組參數能讓損失達到最小,如下所示,我們先隨機初始化一個參數θ0,希望經過下一次的計算後可以minL(θ),這裏的L是指損失函數。
在這裏插入圖片描述
當然我們的高數課本曾經教導過我們,這個世界上任何一個在展開點附近任意階可導函數都可以用泰勒展開式展開:
在這裏插入圖片描述當(x,y)如果無限逼近(x0,y0)時,函數可以簡化爲:
在這裏插入圖片描述
因此對於我們需要解決的損失函數,如果能滿足θ無限逼近(a,b)我們就可以把損失函數寫成如下形式,而θ無限逼近(a,b)也就是要保證學習率儘可能的小,如果學習率很大離初始點非常遠我們就不能保證該簡化是正確的。
在這裏插入圖片描述
對於上式而言s,u,v均可以視爲常數,我們令△θ1 =(θ1 -a),△θ2 =(θ2 -b),現在要做的就是找出一組(△θ1,△θ2)使其能讓L最小,對於常數s而言我們已經無力迴天,那我們只能儘可能讓後面兩項最小,這時候高等數學又告訴我們了,**只有當(△θ1,△θ2)與(-u,-v)方向相反且長度差不多時,才能讓其點乘積最小,**這裏控制其長度的就是我們的學習率。

在這裏插入圖片描述
通過上面的分析可知,只有當(θ1,θ2)=初始點-該點梯度的反方向*學習率時才能使損失函數L達到區域內最小。
在這裏插入圖片描述
最後,對於梯度下降算法在實際使用中爲了能更穩定和快速一般需要從以下幾個方面進行改進:

  1. 設置合適的學習率,據我的實踐經驗來看學習率一般設置爲e-3會比較合適,當然了不同的問題肯定設置的方法也是不同的,一般都需要經過多次嘗試才能找到比較合適的學習率。
  2. 使用隨機梯度下降會更快的找到最優解。
  3. 推薦使用學習率衰減或者Adagrad(針對每一個參數有不同的衰減率)之類的帶有學習率衰減的梯度下降算法。
  4. 特徵歸一化,防止由於特徵規模不同產生的影響
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章