梯度降低(Gradient Descent GD)簡單來講就是一種尋找目標函數最小化的方法,它利用梯度信息,經過不斷迭代調整參數來尋找合適的目標值。 本文將介紹它的原理和實現。html
關於梯度的引入,能夠分爲四個概念:導數 -》偏導數 -》方向導數 -》 梯度。算法
導數:當函數定義域和取值都在實數域中的時候,導數能夠表示函數曲線上的切線斜率。機器學習
偏導數:偏導其實就是多元函數一個多變量的函數的偏導數是它關於其中一個變量的導數,而保持其餘變量恆定。由於曲面上的每一點都有無窮多條切線,描述這種函數的導數至關困難。偏導數就是選擇其中一條切線,並求出它的斜率 。幾何意義是表示固定面上一點的切線斜率。函數
多元函數降維時候的變化,好比二元函數固定y,只讓x單獨變化,從而當作是關於x的一元函數的變化來研究。學習
指的是函數在y方向不變,函數值沿着x軸方向的變化率優化
指的是函數在x方向不變,函數值沿着y軸方向的變化率spa
可是偏導數有一個缺點,就是隻能表示多元函數沿座標軸方向的變化率,可是不少時候要考慮多元函數沿任意方向的變化率,因而就有了方向導數。htm
方向導數:某個方向的導數,本質就是函數在A點上無數個切線的斜率的定義,每一個切線都表明一個方向,每一個方向都是有方向導數的。blog
梯度:梯度是一個矢量,在其方向上的方向導數最大,也就是函數在該點處沿着梯度的方向變化最快,變化率最大。ip
那麼在機器學習中逐步逼近、迭代求解最優化時,常常會使用到梯度,沿着梯度向量的方向是函數增長的最快,更容易找到函數的最大值,反過來,沿着梯度向量相反的地方,梯度減小的最快,更容易找到最小值。
舉個常見的例子:你站在山上某處,想要儘快下山,因而決定走一步算一步,也就是每走到一個位置時,求解當前位置的梯度,沿着梯度的負方向,也就是當前最陡峭的位置向下走,這樣一直走下去,極可能走不到山腳,而是某個局部的山峯最低處。以下圖所示:
以上,咱們能夠總結一下:梯度降低法就是沿着梯度降低的方向求解極小值,沿着梯度上升的方向能夠求得最大值,這種方法叫梯度上升。
從上圖能夠看到:受到起始點和目標函數特性的影響,梯度降低不必定找到的是全局最優解,可能只是局部最優解,那麼何時能找到全局最優解呢?這個與損失函數有關,當損失函數是凸函數的話,能夠找到全局最優。
根據上述梯度降低的求解原理,咱們須要瞭解以下幾個梯度降低相關的重要概念:
步長(Learning rate):每一步梯度降低時向目標方向前行的長度,用上面下山的例子,步長就是在當前這一步所在位置沿着最陡峭最易下山的位置走的那一步的長度。
假設函數(hypothesis function) :在監督學習中,爲了擬合輸入樣本,而使用的假設函數,經常使用h()表示,對於線性迴歸模型,假設函數就是函數
\[ Y = W_0 + W_1X1 + W_2X2 + ... + W_nX_n \]
損失函數(loss function): 經常使用J()表示,爲了評估模型的好壞,一般用損失函數來度量擬合的程度。損失函數最小化,意味着擬合程度最好,對應的模型參數即爲最優參數。每一個機器學習模型都有一個損失函數,學習的目的就是將損失函數最小化,
梯度降低的具體算法實現過程是:
梯度降低會遇到全部最優化問題中常見的兩個問題:局部最小值和鞍點。
這是梯度降低法最常遇到的一個問題,當一個函數存在多個局部最小值,極可能梯度降低法只是找到其中的一個局部最小值而中止。
怎麼避免呢?
下山的例子中,咱們看到初始值不一樣,得到的最小值可能不一樣,因此規避局部最小值最簡單的方法能夠屢次用不一樣的初始值執行算法,選擇損失函數最小的初始值。
鞍點是最優化問題中常遇到的一個現象,鞍點的數學含義是:目標函數在此點的梯度爲0,但從該點出發的一個方向存在函數極大值點,而另外一個方向是函數的極小值點。典型的鞍點函數是典型的鞍點是函數 f(x)=x^3 中的(0,0),函數 z=x^2-y^2 的 多個鞍點 (0,0,0),(1,1,0),(2,2,0)) 。
在高度非凸空間中,存在大量的鞍點,這使得梯度降低法有時會失靈,雖然不是極小值,可是看起來確是收斂的。
從算法的執行步驟來看,須要調優的地方包括:
上面所介紹的算法其實就是批量梯度降低。須要首先計算全部數據上的損失值,而後再進行梯度降低,具體的操做步驟是:遍歷所有數據集算一次損失函數,而後算函數對各個參數的梯度,更新梯度。這種方法每更新一次參數,都要把數據集裏的全部樣本計算一遍,計算量大,計算速度慢,不支持在線學習。
不使用全量的樣原本計算梯度,而使用單同樣原本近似估計梯度,能夠極大地減小計算量,提升計算效率。具體的操做步驟是:每次從訓練集中隨機選擇一個樣本,計算其對應的損失和梯度,進行參數更新,反覆迭代。
這種方式在數據規模比較大時能夠減小計算複雜度,從機率意義上來講的單個樣本的梯度是對整個數據集合梯度的無偏估計,可是它存在着必定的不肯定性,所以收斂速率比批梯度降低得更慢。
爲了克服上面兩種方法的缺點,採用的一種折中手段:將數據分爲若干批次,按批次更新參數,每一批次中的一組數據共同決定了本次梯度的方向,降低起來就不容易跑偏,減小了隨機性,另外一方面,由於批的樣本數比整個數據集少了不少,計算量也不是很大。
每次使用多個樣原本估計梯度,這樣能夠減小不肯定性,提升收斂速率,其中每次迭代選取的樣本數量稱爲批大小(batch size)。
參考: