1. 程式人生 > >梯度下降法Gradient Descent

梯度下降法Gradient Descent

暑假在浙大接觸了太多次梯度下降法,共軛梯度下降法,至今都沒有做過總結,甚至自己不知道怎麼把梯度下降法最好最直觀的說出來,今天就來根據自己的思路來介紹一下。

最優化問題在機器學習中有非常重要的地位,很多機器學習演算法最後都歸結為求解最優化問題。在各種最優化演算法中,梯度下降法是最簡單、最常見的一種,在深度學習的訓練中被廣為使用。在本文中,將為大家系統的講述梯度下降法的原理和實現細節問題。

            

最優化問題是求解函式極值的問題,包括極大值和極小值。

相信所有的讀者對這個問題都不陌生,在初中時我們就學會了求解二次函式的極值(拋物線的頂點),高中時學習了冪函式,指數函式,對數函式,三角函式,反三角函式等各種型別的函式,求函式極值的題更是頻頻出現。這些方法都採用了各種各樣的技巧,沒有一個統一的方案。

真正的飛躍發生在大學時,微積分為我們求函式的極值提供了一個統一的思路:找函式的導數等於0的點,因為在極值點處,導數必定為0。這樣,只要函式的可導的,我們就可以用這個萬能的方法解決問題,幸運的是,在實際應用中我們遇到的函式基本上都是可導的。

在機器學習之類的實際應用中,我們一般將最優化問題統一表述為求解函式的極小值問題,即:

其中x稱為優化變數,f稱為目標函式。極大值問題可以轉換成極小值問題來求解,只需要將目標函式加上負號即可:

有些時候會對優化變數x有約束,包括等式約束和不等式約束,它們定義了優化變數的可行域,即滿足約束條件的點構成的集合。在這裡我們先不考慮帶約束條件的問題。

一個優化問題的全域性極小值是指對於可行域裡所有的x

,有:

即全域性極小值點處的函式值不大於任意一點處的函式值。區域性極小值定義為存在一個鄰域,對於在鄰域內:

並且在可行域內的所有x,有:

即區域性極小值點處的函式值比一個區域性返回內所有點的函式值都小。在這裡,我們的目標是找到全域性極小值。不幸的是,有些函式可能有多個區域性極小值點,因此即使找到了導數等於0的所有點,還需要比較這些點處的函式值。

導數與梯度

由於實際應用中一般都是多元函式,因此我們跳過一元函式,直接介紹多元函式的情況。梯度是導數對多元函式的推廣,它是多元函式對各個自變數偏導數形成的向量。多元函式的梯度定義為:

其中稱為梯度運算元,它作用於一個多元函式,得到一個向量。

下面是計算函式梯度的一個例子:

(嗯......今年暑假太多次接觸梯度運算元,學習了不少新知識,對於一個普通人,任何知識都要往深了鑽~)

可導函式在某一點處取得極值的必要條件是梯度為0,梯度為0的點稱為函式的駐點,這是疑似極值點。需要注意的是,梯度為0只是函式取極值的必要條件而不是充分條件,即梯度為0的點可能不是極值點。

至於是極大值還是極小值,要看二階導數/Hessian矩陣,Hessian矩陣我們將在後面的文章中介紹,這是由函式的二階偏導數構成的矩陣。這分為下面幾種情況:

  • 如果Hessian矩陣正定,函式有極小值
  • 如果Hessian矩陣負定,函式有極大值
  • 如果Hessian矩陣不定,則需要進一步討論

這和一元函式的結果類似,Hessian矩陣可以看做是一元函式的二階導數對多元函式的推廣。一元函式的極值判別法為,假設在某點處導數等於0,則:

  • 如果二階導數大於0,函式有極小值
  • 如果二階導數小於0,函式有極大值
  • 如果二階導數等於0,情況不定

在這裡我們可能會問:直接求函式的導數/梯度,然後令導數/梯度為0,解方程,問題不就解決了嗎?事實上沒這麼簡單,因為這個方程可能很難解。比如下面的函式:

我們分別對x和y求偏導數,並令它們為0,得到下面的方程組:

這個方程非常難以求解,對於有指數函式,對數函式,三角函式的方程,我們稱為超越方程,求解的難度並不比求極值本身小。

精確的求解不太可能,因此只能求近似解,這稱為數值計算。工程上實現時通常採用的是迭代法,它從一個初始點開始,反覆使用某種規則從移動到下一個點,構造這樣一個數列,直到收斂到梯度為0的點處。即有下面的極限成立:

這些規則一般會利用一階導數資訊即梯度;或者二階導數資訊即Hessian矩陣。這樣迭代法的核心是得到這樣的由上一個點確定下一個點的迭代公式:這個過程就像我們處於山上的某一位置,要到山底找水喝,因此我們必須到達最低點處:  

此時我們沒有全域性資訊,根本就不知道哪裡是地勢最低的點,只能想辦法往山下走,走 一步看一步。剛開始我們在山上的某一點處,每一步,我們都往地勢更低的點走,以期望能走到山底。