AI數學 函式擬合之手寫梯度反傳的簡單實驗

2021-10-25 06:24:16 字數 3264 閱讀 4117

首先,定義實驗的目標函式(我們不知道它的公式,它揭示著自然規律,你只能輸入然後看到輸出結果,收集有限的樣本對)。我們需要用梯度方向傳播的方法來擬合這個目標函式。擬合的方法就是通過樣本對來斧正咱們的原始函式。大概定義如下:

目標函式: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

final curve is: y = 4.999999999999991 * x + 3.0000000000000453

我們發現,結果已經擬合得非常好了,離目標函式y=5x+3已經幾乎相同。

這就是梯度下降反向傳播演算法的最簡單的例項了。神經網路的訓練亦是如此,擴充套件到多層和存在啟用函式等情況都可以用鏈式法則來解決。

本文只給出了計算步驟和操作方法,但沒給出為何梯度下降能擬合函式的數學解釋,不過我會在後面的文章以比較通俗的**來做出這一解釋。

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...