今天我們就來介紹用來優化代價函數的梯度下降演算法(gradient descent algorithm)。

1 原理


那梯度下降究竟為何方神聖?我來用最通俗的語言來介紹下:

假設你站在華山之巔,你現在想以最快速度下山,那你肯定是找一條最陡峭的路走。你環顧四周,找到了一條路線,恩,這個方向是最陡的。於是你就出發了,走了一會發現,這個方向不是最陡的路了。你就停下來,換了個最陡的方向,繼續往下走。重複這個步驟,你最終到達了山腳下。

那麼,你從山頂到山腳的整個下山的過程,就是梯度下降。

為了在線性回歸中應用梯度下降,我們先來回顧下線性回歸模型的代價函數,它長這個樣子:

其中,f(x)為

注意,我們變數的上標是指樣本數量,從1到m;下標指特徵數量,從0到n。

我們的目標是

即在J(w)取最小值時,所對應的w值。這時,梯度下降法就上場了,用公式表示為:

其中,「:=」為賦值的含義;α為學習速率,又叫步長,可以理解為我們下山時每走一步的距離;α右邊的是J(w)對w求的偏導(偏導就是對w向量中的每個元素分別求導)。

這個公式的含義就是,先初始確定一個w的值,然後用(1)式計算新的w值,反覆迭代。我們不斷更新參數w的值,直到J(w)取得最小值時,停止迭代。

我們先把(1)式中J(w)對w的偏導求出來,會容易理解些:

將(2)式代入(1)式,可得

這就是線性回歸中的梯度下降演算法。最後,我手畫一張圖來把梯度下降的原理大概表示下:

如上圖,我們先確定一個w,然後按步長α一步一步減小w的值。最後當w取某一值時,J(w)取得最小值,任務就完成了。

說到這裡,可能大家就有疑問了,梯度下降的公式(1)到底是怎麼來的呢?別急,我們馬上就來推導。

2 推導


首先,我們需要泰勒近似定理的一階展開式:

上邊那個倒三角符號表示梯度,就是對w求偏導的意思。從上式不難看出:

也就是說:

上式說明了什麼呢?注意到w和▽J(w)均為向量,也就是說,參數w變化的方向與梯度方向之間的夾角大於90°。我們希望J(w)每次迭代的變化量越大越好,那什麼時候達到最大呢,就是參數w的變化量與梯度方向正好相反的時候,也就是二者的夾角達到180°的時候。我們用公式來說明下:

也就是說,兩個向量的點積等於它們的模相乘,再乘以兩個向量的夾角α。不難看出,當cosα=-1時,也就是α為180°時,兩個向量的點積取到負值最大。

因為兩個向量方向相反,故我們可推出:

其中α右邊的為單位向量,可將梯度的模與阿爾法合併,簡化為:

移項,可得:

這就是我們的梯度下降公式(1),大功告成。最後我們放一張動圖來看下梯度下降的效果(圖片來自於網路):

下篇我會介紹有關模型擬合數據時產生的不利情況,以及如何避免這種情況發生,敬請期待。


更多乾貨內容,歡迎關注今日頭條賬號「人人都會機器學習」;你也可以搜索知識星球「自學機器學習」,裡面也有精彩內容;還可以關注公眾號:「數據實幹家」,為你獻上數據大餐。


推薦閱讀:
相关文章