梯度下降極簡入門

梯度下降及其變體被用作訓練過程的關鍵部分在機器學習中廣泛使用。梯度下降中的“梯度”是指單變量導數的推廣形式,即多元變量求導。

梯度下降法是解決“優化問題”的迭代方法,其中優化問題是指圍繞尋找函數的全局最小值或最大值而展開的數學問題。我們將很快看到,對於簡單的優化問題可以不用梯度下降。當事情變得複雜時,我們則需要用諸如梯度下降之類的迭代法,當然和神經網絡相關的優化問題確實足夠複雜。

重新回顧優化問題

假設你已經購買了200米的鐵絲網。您想使用此圍欄爲羊羣創建一個矩形牧場。如何確定使牧場內部面積最大化時,牧場對應的長度和寬度?

使用標準的分析方法來解決這個問題,我們首先要寫一個方程式來表示我們的問題。首先,我們知道兩件事:

area(面積)=length(長度)*width(寬度)

(2 * length)+(2 * width)= 200

但是我們想用一個變量而不是兩個變量來表示面積,所以我們可以求解這兩個方程中的第二個變量的寬度:

2 * width = 200–2 * length

width = [200-2 * length] / 2

width = 100 - length

現在我們可以用100- length代替width,則:

area= length * [100–length]

area = f(length)=100 * length- length²

取面積的導數,則:

area’=100-2*lengthàlength=50

現在,我們找到了函數的“臨界點”,即一階導數等於零時對應的長度,當然函數在該點處的斜率也爲零。我們關心這種值,因爲它們是唯一能對應函數最小值或函數最大值的數。在臨界點處,該點兩側的值可能都小於或都大於臨界點處的值。因爲函數中該點外的斜率都不爲零,這意味着臨界點上一邊的點對應的面積將小於該臨界點對應的面積,而另一邊的點對應的面積將大於該臨界點對應的面積。也就是說,該函數在非臨界點處正在增加或減少,因此不能爲最大值或最小值。

area’=100-2*length-->length=50。

這表明如果存在全局最大值或最小值,則必須在長度= 50時發生。也就是說,如果矩形的長度存在最佳選擇,則爲50米。可能存在臨界點既不是最小值也不是最大值,所以應該測試發現的臨界點確實是最值。在微積分課程中,有相關的檢驗方法(比如二階導數檢驗),現在用更簡單的方法(類似梯度下降法)來解決該問題,比如在臨界點長度= 50的左右兩側測試2個點。

f(49)= 4900–2401 = 2499

f(50)= 5000–2500 = 2500

f(51)= 5100–2601 = 2499

這並不能否認在49和50以及在50和51之間,或者某些時候有比50更好的點,不過這種近似的方法最終將應用於訓練模型。對於這個簡單的問題,通過繪製函數了解該方法和實際的誤差:

梯度下降迭代式猜測

那麼這與梯度下降方法有什麼關係呢?梯度下降方法比較粗糙,就像剛纔所做的那些不精確的猜測一樣。這不是一個優雅的公式,看上去它是比隨機猜測稍強一點的顯得雜亂的體系,不過它將最終成爲我們解決圍欄問題的方法:

  1. 猜測圍欄的最佳長度
  2. 計算此時的梯度值
  3. 根據梯度的值,調整猜測
  4. 重複猜測直到滿足條件則終止

假設我們隨機選取57當作長度的第一個猜測值,在57處,面積函數的導數爲:

f'(57)= 100–2 *(57)

f'(57)= -14

length = 57處的斜率不爲0,因此不是臨界點。此外斜率爲-14表示如果將長度增加 1,則面積將減小 14(假設函數的斜率不變)。梯度下降使用此值作爲進行下一個猜測的指導。比如要增加面積的值,因爲斜率是負數,所以應該57基礎上減小長度,以此增加面積的值。

然而即使知道當前應該減少length的值,也沒有先驗的方法可以確切地知道“合適”的數來調整我們的當前的猜測(length=57)。在像TensorFlow這樣的軟件包中,我們用來調整當前length的快慢將由一個稱爲“學習率”的超參數控制,可以在訓練時設置該參數。提高學習率將導致梯度下降對當前當前length調整很快;減小學習率會導致梯度下降對當前當前length調整較慢。現在假設將當前length減少3,雖然有點武斷,但實際上效果可以接受。

57–3 = 54

f(54)= 5400–(54²)-->f(54)= 5400–2916  -->f(54)= 2484

2484大於2451,說明找到的面積比上次大。再次使用導數來檢查是否處於臨界點,如果不是,則調整猜測值:

f'(54)= 100–2 * 54 = 100–108 = -8

我們的當前猜測值(54)仍然很大,斜率8低於14,應該適當減緩對當前猜測值的更改幅度,比如在54基礎上減少2,則:

f(52)= 5200–52²  --> f(52)= 5200–2704  -->f(52)= 2496

我們將重複此過程,直到找到一個臨界點。或者直到f'(length)的值非常接近零,才能認爲length已足夠接近臨界點。手工完成此過程是重複且繁瑣的,但是計算機善於解決重複繁瑣的任務。通俗點說,將像在爬山和滾球,一直沿着拋物線上升,直到無法進一步上升爲止。

請注意導數(藍色),它在最大值的右邊是負數,在最大值的左邊是正數。在這種情況下,很容易找到最大值。

由於試圖找到面積的最大值,上面的示例稱之爲“梯度上升”更好。在梯度下降中,每次計算梯度值時都將其相反數。

馬上將提到的梯度下降和在神經網絡裏面用到的梯度下降有兩個不一樣的地方。首先,神經網絡對應的函數比f(length)更復雜。我們的神經網絡具有成千上萬的可調參數,而其中f(length)只有一個。我們使用諸如梯度下降之類的迭代方法主要是因爲神經網絡模型非常複雜,而不是選用之前查找臨界點時的分析過程。計算當前如此龐大規模的神經網絡所表示的一般性的函數導數根本不可行。第二個區別是,在此示例中,有一個充當標準結果的實函數,並且發現了該函數的最佳值。在神經網絡中,沒有顯式的函數;取而代之的是,我們嘗試創建一個不存在標準結果的函數。

用於函數查找的梯度下降

在前面的示例中,使用梯度下降方法沿該曲線可以找到最佳值。在機器學習中,對於訓練集中的數據,我們希望創建一條曲線來更好地擬合這些數據。回顧一下剛剛研究的圍欄問題,將它轉化爲我們更傾向於用機器學習解決的問題。

我們從圍欄數據庫中收集了很多數據樣本。我們數據集中的每個數據點的背景都是來自用100米圍欄材料來建造矩形牧場。每個數據點有2個參數:圍欄一側的長度和圍欄的面積。在這個問題中,不是嘗試找到圍欄的最佳長度,而是試圖找到一個函數,該函數可以根據給定的邊長來預測矩形圍欄的面積。我們的輸入數據如下所示:

看起來數據中有一個模式,我們可以使用機器學習來定義模式嗎?

機器學習解決此問題的方法是認爲:“看起來有點像某種數學函數,想知道到底是哪個函數?”,更進一步,我們猜測該函數是某種拋物線函數,則該函數的一般表達式是:

F(x)=ax²+ bx

在數據集中已知x值和y值,現在我們將使用梯度下降法來找到a和b的最佳值。爲此,我們引入了另一個函數--損失函數,並運行梯度下降以最小化損失函數。將F(x)當作“正在進行訓練的函數”,其中x仍然是圍欄一側的長度,y是圍欄的真實面積。單次預測的絕對誤差爲:

L(x)= | F(x)- y |

我們需要給誤差加上絕對值。如果不這樣做且連續做兩次預測,假設一次錯了1000,另一次錯了-1000,則兩次錯誤剛好抵消,實際上這樣一共錯了兩次。

最終我們會用這樣的一個損失函數:平均絕對誤差,它是數據集中所有的點對應L(x)的平均值。使用諸如均方誤差之類的指標更爲常見,但是不同的損失函數對不同的數據集。

假設我們隨機選擇權重的起始值:a = -2和b = 30。在對應的F(x)變爲:

L(x)= | -2x²+ 30x-y |

接下來的內容略帶技巧性。我們想要調整a和b的值以最小化損失函數。因此我們需要計算損失函數對a和b的梯度(偏導數)。以前的函數中,x的值可以不斷變化。但是這個問題裏面,情況並非如此。x的值始終只是我們數據集中的某個固定值。因此單個數據點對應的損失函數爲:L(a, b) = ax² + bx – y,其中x、y是常數。

使用平均絕對誤差的損失函數爲:

 L(a,b)= 1 / m * SUM(| F(a,b)— yi |)

L(a,b)=(1 / m)* SUM(|axi²+ bxi — yi |)

其中xi和yi代表我們數據集中的單個數據點,而m是我們數據集中點的總數。這裏有兩個細節上的問題:一個是我們必須使用鏈式規則來計算涉及絕對值的梯度;另一個是絕對值函數在預測值恰好等於真實值的點上是不可求導的,並且。

如果平均絕對誤差爲0,可以通過停止計算梯度來解決不可導的問題。這是有實際意義的。如果我們在這個數據點上的預測值與實際值都符,那麼就不需要用改善絕對誤差的方式來調整模型:

d | x |/ dx  = 1,如果x爲正

d | x |/ dx  = -1,如果x爲負

則損失函數對a、b求偏導數可以寫成:

L(a, b) = (1/m) * SUM( | axi² + bxi — yi | )

L’_a(a, b) = (1 / m) * SUM( 1 * xi² ); F(xi) > yi

L’_a(a, b) = (1 / m) * SUM( -1 * xi² ); F(xi) < yi

L’_b(a, b) = (1 / m) * SUM( 1 * x ); F(xi) > y

L’_b(a, b) = (1 / m) * SUM( -1 * x );F(xi) < yi

這些公式實際上爲我們提供了一個非常簡單的更新規則:如果我們的預測太小,則將a和b都增大。如果我們的預測太大,則將a和b都減小。

深刻地理解梯度下降以及優化損失函數的思路可以更好地理解過擬合之類的問題,同時它還可以幫助我門更好地瞭解神經網絡訓練的過程。

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