首先,定義實驗的目標函式(我們不知道它的公式,它揭示著自然規律,你只能輸入然後看到輸出結果,收集有限的樣本對)。我們需要用梯度方向傳播的方法來擬合這個目標函式。擬合的方法就是通過樣本對來斧正咱們的原始函式。大概定義如下:
目標函式:yˉ=
5x+3
\bar = 5x+3
yˉ=5x
+3(random)初始化函式:y=8
x+
8y=8x+8
y=8x+8
損失函式:l=(
y−yˉ
)2
l=(y-\bar)^2
l=(y−y
ˉ)2
現有樣本對:(0,
3),(
1,8)
,(2,
13),(
3,18)
(0,3), (1,8), (2, 13), (3, 18)
(0,3),
(1,8
),(2
,13)
,(3,
18)
首先是數學部分,其次是**部分。
我們要優化的引數只有2個:w和b。所以我們需要用數學公式推導出每一輪訓練之後,可訓練引數w和b的更新公式。梯度反傳的引數更新公式的核心就是:求偏導。將偏導乘以學習率再乘以-1就可以得到要更新的量,這就是梯度下降演算法。
對初始函式為y=w
x+
by=wx+b
y=wx+b
而言,開始訓練:
求w
ww梯度:
∂ l∂
w=∂l
∂y∗∂
y∂w=
2(y−
yˉ)∂
y∂w=
2(y−
yˉ)x
\over \partial}=\over \partial}*\over \partial}=2(y-\bar) \over \partial}=2(y-\bar)x
∂w∂l=
∂y∂l
∗∂w
∂y=
2(y−
yˉ)
∂w∂y
=2(
y−yˉ
)xδw=
−η∂l
∂w=−
2η(y
−yˉ)
x\delta=-\eta \over \partial}=-2\eta(y-\bar)x
δw=−η∂
w∂l
=−2η
(y−y
ˉ)x
更新w ww:
w =w
+δw=
w−2η
(y−y
ˉ)
xw=w+\delta=w-2\eta(y-\bar)x
w=w+δw
=w−2
η(y−
yˉ)
x同理,獲得b
bb的梯度:
∂ l∂
b=2(
y−yˉ
)∂y∂
b=2(
y−yˉ
)\over \partial}=2(y-\bar) \over \partial}=2(y-\bar)
∂b∂l=
2(y−
yˉ)
∂b∂y
=2(
y−yˉ
)δ b=
−η∂l
∂b=−
2η(y
−yˉ)
\delta=-\eta \over \partial}=-2\eta(y-\bar)
δb=−η∂
b∂l
=−2η
(y−y
ˉ)更新bbb:
b =b
+δb=
b−2η
(y−y
ˉ)
b=b+\delta=b-2\eta(y-\bar)
b=b+δb
=b−2
η(y−
yˉ)
根據上面公式,咱們得到了w和b的更新公式,跟著編寫**就可以了:
# goal: y = 5*x + 3
# training data:
samples =[[
0,3]
,[1,
8],[
2,13]
,[3,
18]]# config
lr =
.1epochs =
100# initialize: y = wx + b
w =8
b =8
# training
for i in
range
(epochs)
:for s in samples:
x, y_ = s
y = w * x + b
loss =
pow(y - y_,2)
if i %
50==0:
print
(loss, end=
' ')
w = w -
2* lr *
(y - y_)
* x b = b -
2* lr *
(y - y_)
print()
print
('final curve is: y = '
+str
(w)+
' * x + '+''
+str
(b))
檢視輸出:
25 49.0 33.639999999999965 0.5183999999999932 9.590102211677487e-14 3.6648456030054036e-14 4.1086839514625225e-16 1.0547451191423865e-14我們發現,結果已經擬合得非常好了,離目標函式y=5x+3已經幾乎相同。final curve is: y = 4.999999999999991 * x + 3.0000000000000453
這就是梯度下降反向傳播演算法的最簡單的例項了。神經網路的訓練亦是如此,擴充套件到多層和存在啟用函式等情況都可以用鏈式法則來解決。
本文只給出了計算步驟和操作方法,但沒給出為何梯度下降能擬合函式的數學解釋,不過我會在後面的文章以比較通俗的**來做出這一解釋。
AI數學原理 函式求導 精髓篇
用梯度下降演算法訓練神經網路的時候,求導過程是其中的關鍵計算之一。使用tensorflow的使用者會發現,神經網路的反向傳播計算是使用者不用考慮的,在給足便捷性的同時也抑制了使用者對反向傳播的探索心態 博主深受其害 tensorflow同時也激起了乙個思考 一定存在某種求導的通用方法。這篇文章主要探...
IOS之數學函式
include double floor double x float floorf floatx long double floorl long doublex double floor double x double ceil double x 使用floor函式。floor x 返回的是小於或...
as入門之數學函式
惡補數學了,要補的快來 as入門之數學函式 首先,要真誠感謝的是 來自閃客天堂 的 浪子嘯天老師 真是個時刻想著育人好教師,t t 敬重 在flash中,math類是乙個非常常用的類,通過數學計算,可以實現很多非常美妙的效果,我們在這裡從最基礎的學起,補一補數學知識.我們先來看看flash中提供的m...