什么是神經(jīng)網(wǎng)絡(luò)—終于把梯度下降搞明白了!
什么是梯度下降?
梯度下降是一種用于優(yōu)化目標(biāo)函數(shù)的迭代算法。
什么是目標(biāo)函數(shù)?
就是損失函數(shù),損失函數(shù)(Loss Function)是在機器學(xué)習(xí)和深度學(xué)習(xí)中廣泛使用的一個概念。它主要用于衡量模型的預(yù)測結(jié)果與實際結(jié)果之間的差異程度。簡單來說,損失函數(shù)的值越小,說明模型的預(yù)測越準(zhǔn)確。
例如,在一個回歸問題(比如預(yù)測房價)中,常用的損失函數(shù)是均方誤差(MSE)。假設(shè)真實房價是y ,模型預(yù)測的房價是y^,均方誤差損失函數(shù)可以表示為:
這里n是樣本數(shù)量。該函數(shù)通過計算每個樣本預(yù)測值和真實值差的平方的平均值,來衡量整體的誤差。我們的目標(biāo)就是使得誤差降到最低,使預(yù)測值無限接近真實值,所以我們使用梯度下降來做到這一步。
梯度下降如何優(yōu)化損失函數(shù)?
舉個例子來說明這一步,假設(shè)我們需要擬合一條直線,這條直線的橫坐標(biāo)是體重,縱坐標(biāo)是身高,如下所示(綠色的點是數(shù)據(jù)點,綠色的線是我們要擬合的線):
這條直線的方程是y=w*x+b,三個數(shù)據(jù)坐標(biāo)點的分別是(0.5,0.8),(2.5,2),(3,3)。我們先求出損失函數(shù),這個損失函數(shù)才是我們要優(yōu)化的參數(shù)。我們使用MSE作為損失函數(shù)。
得到損失函數(shù)Loss=((0.8-w*0.5-b)平方+(2-w*2.5-b)平方+(3-w*3-b)平方)/3。
我們可以看到損失函數(shù)Loss就是關(guān)于w和b兩個參數(shù)的函數(shù)。我們將Loss函數(shù)的圖像畫出來如下圖所示:
上面的圖片中x軸是w,y軸是b,z軸是Loss。我們要找的就是Loss處于最低點處的w和b的值。
那我們怎么找呢?
就要使用梯度下降。梯度就是導(dǎo)數(shù),就是參數(shù)在某一點的變化率,在曲線上可以反映為某一點的切線。對于多元函數(shù)來說,梯度就是一個向量,它包含了函數(shù)對各個向量的偏導(dǎo)數(shù),這個梯度的向量指向函數(shù)值增長最快的方向。我們知道導(dǎo)數(shù)為0時,函數(shù)處于極值點。所以我們沿著梯度下降就可以最快的到達(dá)損失函數(shù)極小值點。
梯度下降的做法就是損失函數(shù)分別對參數(shù)求導(dǎo),比如說當(dāng)w為固定值時,損失函數(shù)Loss對b的函數(shù)圖像如下所示,圖片中的斜率時Loss對b的導(dǎo)數(shù),也就是b的梯度:
當(dāng)b=0時,Loss很大,梯度(斜率)很大。
當(dāng)b=0.8時,Loss趨近最小值,梯度(斜率)很小。
由此我們可以看到,當(dāng)斜率也就是梯度很大的時候,b可以增大一點步長,以便于快速到達(dá)極值點;當(dāng)斜率也就是梯度很小的時候說明很快逼近最小值,b可以減小一點步長;所以b可以這樣更新:
b=b-(Loss對b的梯度)*學(xué)習(xí)率
梯度大的時候b就可以邁大一步,梯度小的時候b就可以邁小一步,這里學(xué)習(xí)率一般設(shè)置比較小,避免邁的步子太大直接跳過極小值點。
所以梯度下降的步驟一般如下所示:
1. 對損失函數(shù)中每個參數(shù)求導(dǎo),也就是求梯度
2. 對參數(shù)隨機賦值
3. 將參數(shù)值帶入梯度
4. 計算步長
5. 更新參數(shù)
6. 回到步驟3重新計算,直到步長((Loss對b的梯度)*學(xué)習(xí)率)小于設(shè)置閾值。
怎么樣?看上去很晦澀的東西是不是也沒那么難懂?是不是對梯度下降非常了解了?!
本文轉(zhuǎn)載自 ??人工智能訓(xùn)練營??,作者: 小A學(xué)習(xí)
