感知器和神經網路訓練(公式推導及C 實現)

2021-08-11 18:15:10 字數 3782 閱讀 4255

感知器是乙個二元線性分類器,其目標是找到乙個超平面將訓練樣本進行分隔(分類),其表示為

一般使用的啟用函式不是階躍函式,常用的有sigmoid函式(其導數: σ′

在1個樣本的訓練集上代價函式(最小均方誤差)通常為 c=

12|a

−y|2

訓練過程中步長(學習速率)為α 的

w 和b的新值為 w′

ib′=

wi−α

∇wic

=b−α

∇bc

∂c∂w

i∂c∂

b=∂c

∂z∂z

∂wi=

∂c∂z

∂z∂b

其中 ∂c

∂z∂z

∂wi∂

z∂b=

∂c∂a

∂a∂z

=12∂

∂a|a

−y|2

∂a∂z

=(a−

y)σ(

1−σ)

=∂∂w

i(∑i

=0n−

1wix

i+b)

=xi=

∂∂wi

(∑i=

0n−1

wixi

+b)=

1 最終可得 ∂c

∂wi∂

c∂b=

∂c∂z

∂z∂w

i=∂c

∂a∂a

∂z∂z

∂wi=

(a−y

)σ(z

)(1−

σ(z)

)xi=

∂c∂z

∂z∂b

=∂c∂

a∂a∂

z∂z∂

b=(a

−y)σ

(z)(

1−σ(

z))

最終對有k個訓練樣本的感知機的迭代函式為 w′

ib′=

wi−α

1k∑k

=0k−

1(ak

−yk)

σ(z)

(1−σ

(z))

xi=b

−α1k

∑k=0

k−1(

ak−y

k)σ(

z)(1

−σ(z

))感知器可以看成乙個最簡單的二層神經網路,作為乙個線性分類器它使用的侷限性太大,而多層神經網路可以彌補它的缺點,並且訓練原理與其類似

上圖的三層神經網路多了乙個隱含層,其中隱含層和輸出層均為左下角的神經元,這個神經網路在訓練過程時需要訓練兩層的神經網路,並且隱層的誤差無法直接獲取,而輸出層的誤差則和感知器相同:

同樣在1個樣本的訓練集上代價函式(均方誤差)通常為 c=

12∑i

=0n−

1|aj

i−yj

i|2

也就是輸出層每個神經元的輸出和對應的目標值誤差的平方和。

因為只有輸出層的誤差可以獲取,所以訓練從輸出層開始,對第三層的第乙個來說 ∂c

∂w31

i∂c∂

b31=

∂c∂a

31∂a

31∂z

31∂z

31∂w

31i=

∂c∂a

31∂a

31∂z

31x3

1i=∂

c∂a3

1∂a3

1∂z3

1a21

i=∂c

∂a31

∂a31

∂z31

∂z31

∂b31

=∂c∂

a31∂

a31∂

z31

隱含層的訓練也就是bp神經網路的重點,即誤差的反向傳播過程,因為隱含層的誤差無法直接獲取,所以才從輸出層開始調整引數,然後誤差向出入層開始傳播,一層一層的進行訓練

以訓練隱含層的第乙個神經元為例 ∂c

式子中紅色部分即為輸出層兩個神經元計算過的,藍色部分 z3

1=∑w

31a2

i+b

∂z31

∂a21

=w31

∂z32

∂a21

=w32

weight這些值都是確定的,最後黃色部分也很容易求得。 ∂c

∂w21

i∂c∂

b21=

∂c∂a

31∂a

31∂z

31∂z

31∂a

21∂a

21∂z

21a1

1i+∂

c∂a3

2∂a3

2∂z3

2∂z3

2∂a2

1∂a2

1∂z2

1a11

i=∂c

∂a31

∂a31

∂z31

∂z31

∂a21

∂a21

∂z21

+∂c∂

a32∂

a32∂

z32∂

z32∂

a21∂

a21∂

z21

如果有更多層,則都是在後一層計算完成的基礎上進行更新。

同感知器的k個同理,使用k個樣本的平均誤差進行更新

因為樣本的巨大,所以一次不會使用所有的樣本進行訓練,而是將訓練樣本分為比較小的部分進行分批訓練。

使用三層神經網路識別手寫數字。

語言:c++

資料:mnist

具體實現在我的影象處理庫:zmatrix中的zml中。僅做參

神經網路 感知器訓練演算法

感知器訓練 perceptron rule 物件 單個單元 perceptron unit 用途 處理線性可分的資料集 對下列公式進行有限次的迭代 repeat x,y 目的 設定權值以便獲得與預期相同的資料集 方式 通過不斷地修改權值來實現目的,這裡採用給權值w賦予學習速率的方式,但碰到乙個問題是...

神經網路(單層感知器)

感知器是神經網路中的乙個概念,在1950s由frank rosenblatt第一次引入。單層感知器是最簡單的神經網路。它包含輸入層和輸出層,而輸入層和輸出層是直接相連的。與最早提出的mp模型不同,神經元突觸權值可變,因此可以通過一定規則進行學習。可以快速 可靠地解決線性可分的問題。單層感知器由乙個線...

神經網路 單層感知器

神經網路是非常重要的且用途廣泛,通過模擬人體的處理資訊方式來解決問題,下面就來介紹一下單層感知器。import numpy as np import matplotlib.pyplot as plt 輸入資料 x np.array 1,3,3 1,4,3 1,1,1 1,0,2 標籤y np.arr...