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