經過前面兩節內容的鋪墊,我們可以開始講一講機器學習的動力之源:梯度下降。
梯度下降並不是一個很複雜的數學工具,其歷史已經有200多年了,但是人們可能不曾料到,這樣一個相對簡單的數學工具會成為諸多機器學習演算法的基礎,而且還配合著神經網路點燃了深度學習革命。
對多元函數的各參數求偏導數,然後把所求得的各個參數的偏導數以向量的形式寫出來,就是梯度。
具體來說,兩個自變數的函數f(x1,x2),對應機器學習資料集中的兩個特徵,如果分別對x1,x2求偏導數,那麼求得的梯度向量就是(∂f/∂x1,∂f/∂x2)T,在數學上可以表示成Δf(x1,x2)。那麼計算梯度向量的意義何在呢?其幾何意義,就是函數變化的方向,而且是變化最快的方向。對於函數f(x),在點(x0,y0),梯度向量的方向也就是y值增加最快的方向。也就是說,沿著梯度向量的方向Δf(x0),可以找出函數的最大值。反過來說,沿著梯度向量相反的方向,也就是 -Δf(x0)的方向,梯度減少最快,能找到函數的最小值。如果某點的梯度向量的值為0,那麼也就是來到了導數為0的函數最低點(或局部最低點)了。
在機器學習中用下山來比喻梯度下降是很常見的。想像你們站在一座大山上某個地方,看著遠處的地形,一望無際,只知道遠處的位置比這裡低很多。你們想知道如何下山,但是只能一步一步往下走,那也就是在每走到一個位置的時候,求解當前位置的梯度。然後,沿著梯度的負方向,也就是往最陡峭的地方向下走一步,繼續求解新位置的梯度,並在新位置繼續沿著最陡峭的地方向下走一步。就這樣一步步走,直到山腳,如下圖。
從上面的解釋中,就不難理解為何剛才我們要提到函數的凹凸性了。因為,在非凸函數中,有可能還沒走到山腳,而是到了某一個山谷就停了下來。也就是說,對應非凸函數梯度下降不一定總是能找到全域最優解,有可能得到的只是一個局部最優解。然而,如果函數是凸函數,那麼梯度下降法理論上就能得到全域最優解。
梯度下降在機器學習中非常有用。簡單地說,可以注意以下幾點。
機器學習的本質是找到最優的函數。
如何衡量函數是否最優?其方法是盡量減少預測值和真值間的誤差(在機器學習中也叫損失值)。
可以建立誤差和模型參數之間的函數(最好是凸函數)。
梯度下降能夠引導我們走到凸函數的全域最低點,也就是找到誤差最小時的參數。
以上是一文帶你了解什麼是梯度下降的詳細內容。更多資訊請關注PHP中文網其他相關文章!