由於單層感知器不能解決線性不可分的問題(在上篇文章對線性可分做了解釋),如異或問題,這時我們引入了新的結構:線性神經網路。
線性神經網路與單層感知器的結構相似,只是它們的啟用函式不同,單層感知器的啟用函式只能輸出兩種可能值(-1 或 1),而線性神經網路的輸出可以是任何取值,其啟用函式是線性函式 y = x。
lms 學習規則與單層感知器的學習規則非常類似,區別就在於單層感知器的啟用函式的輸出是 sign(wt x),而 lms 的啟用函式的輸出就是 wt x 本身。
delta 學習規則是一種利用梯度下降法的一般性的學習規則,該規則也可以稱為連續感知器學習規則。
注:e 的梯度就是 e 的導數,在求導過程中要注意 x 是常量,w 是變數。
因為使用線性神經網路,啟用函式為 y = x,所以 f(x) 的導數是 1,所以式2.23 可化簡為
e_c = -(dj - oj) x
(因為符號不好表示,所以用 e_c 來代替等式左邊的符號)
梯度下降法
#%%
import numpy as np
import matplotlib.pyplot as plt
# 資料格式:[b = 1, x1, x2, x1 * x2, x1 * x1, x2 * x2]
x = np.array([[
1,0,
0,0,
0,0]
,[1,
0,1,
0,0,
1],[
1,1,
0,0,
1,0]
,[1,
1,1,
1,1,
1]])
y = np.array([-
1,1,
1,-1
])#權值w =
(np.random.random(6)
-0.5)*
2#學習率
l_r =
0.12
o =0
print
(w)#更新權值
defupdate()
:global x, y, w, n
n +=
1 o = np.dot(x, w.t)
w_c =
(l_r * np.dot(y - o.t, x)
)/ x.shape[0]
w += w_c
# 畫出曲線 w0 + w1*x1 + w2*x2 + w3*x1*x2 + w4*x1*x1 + w5*x2*x2 = 0
# x1 設定成 x,x2 設定成 y,其中 x 已知,所以該曲線是關於 y 的一元二次函式
defcalculate
(root, x)
: a = w[5]
b = w[2]
+ w[3]
* x
c = w[0]
+ w[1]
* x + w[4]
* x * x
if root ==1:
return
(-b + np.sqrt(b * b -
4* a * c))/
(2* a)
if root ==2:
return
(-b - np.sqrt(b * b -
4* a * c))/
(2* a)
defdraw()
:# 正樣本
x1 =[0
,1] y1 =[1
,0]# 負樣本
x2 =[0
,1] y2 =[0
,1]# 畫圖
x_data = np.linspace(-1
,2)
plt.figure(
) plt.plot(x_data, calculate(
1, x_data)
,'r'
) plt.plot(x_data, calculate(
2, x_data)
,'r'
)
plt.plot(x1, y1,
'bo'
) plt.plot(x2, y2,
'yo'
) plt.show(
)#%%
#分別畫出計算 100 次,1000 次,100000 次的圖
for _ in
range
(100):
update(
)draw(
)print
("計算結果為:"
, np.dot(x, w.t)
)for _ in
range
(1000):
update(
)draw(
)print
("計算結果為:"
, np.dot(x, w.t)
)for _ in
range
(100000):
update(
)draw(
)print
("計算結果為:"
, np.dot(x, w.t)
)
執行結果:
線性神經網路 matlab神經網路
自適應線性元件20世紀50年代末由widrow和hoff提出,主要用於線性逼近乙個函式式而進行模式聯想以及訊號濾波 模型識別和控制等。線性神經網路和感知器的區別是,感知器只能輸出兩種可能的值,而線性神經網路的輸出可以取任意值。線性神經網路採用widrow hoff學習規則,即lms least me...
線性神經網路
線性神經網路 啟用函式為y x import numpy as np import matplotlib.pyplot as plt 輸入資料 x np.array 1,3,3 1,4,3 1,1,1 標籤y np.array 1,1,1 權值初始化,1行3列,取值範圍 1到1 w np.rando...
神經網路 之 線性單元
什麼是線性單元 有什麼用 實現 線性單元和感知器的區別就是在啟用函式 感知器的 f 是階越函式 線性單元的啟用函式是線性的 所以線性模型的公式如下 感知器存在乙個問題,就是遇到線性不可分的資料時,就可能無法收斂,所以要使用乙個可導的線性函式來替代階躍函式,即線性單元,這樣就會收斂到乙個最佳的近似上。...