Rosonblatt线性感知器
前敘
讀前簡介
機(jī)器學(xué)習(xí)的流派很多,現(xiàn)在比較流行的便是聯(lián)結(jié)學(xué)派,其計算的重點在于權(quán)重更新,而其它學(xué)派比如貝葉斯學(xué)派,基于統(tǒng)計學(xué),進(jìn)化學(xué)派則注重結(jié)構(gòu)學(xué)習(xí).
本篇博客以線性感知器為基礎(chǔ),將會對神經(jīng)網(wǎng)絡(luò)與一些機(jī)器學(xué)習(xí)算法進(jìn)行介紹,如果你只想簡單的了解,那么可以瀏覽一遍即可,當(dāng)然你也可以花費(fèi)些時間讀這篇文章,那么你也可以受益許多.
神經(jīng)網(wǎng)絡(luò)與聯(lián)結(jié)學(xué)派
神經(jīng)網(wǎng)絡(luò)就是聯(lián)結(jié)學(xué)派的”作品”,從最基本的線性感知器到現(xiàn)在的深度學(xué)習(xí)都隸屬于聯(lián)結(jié)學(xué)派,其實現(xiàn)人工智能的思想在于利用計算機(jī)模擬生物神經(jīng)網(wǎng)絡(luò),而計算過程最后則轉(zhuǎn)化為求最優(yōu)解問題,計算過程的核心則在于迭代與權(quán)值更新,主要陷阱為局部最優(yōu)解陷阱等等.
而聯(lián)結(jié)學(xué)派的核心觀點即為:智能的本質(zhì)是連接機(jī)制,神經(jīng)網(wǎng)絡(luò)是一個由大量簡單的處理單元組成的高度復(fù)雜的大規(guī)模非線性自適應(yīng)系統(tǒng).聯(lián)結(jié)主義模擬人腦智能行為四個層面為:?
a.物理結(jié)構(gòu);?
b.計算模擬?
c.存儲與操作?
d.訓(xùn)練
神經(jīng)網(wǎng)絡(luò)圖解:
Rosonblatt感知器圖解
基本計算過程與權(quán)值修正
基本計算過程:
最后求出的超平面:?
權(quán)值更新(圖片來自他處):
代碼
# 單樣本感知器算法 import numpy as np b = 1 # 偏置 # 該數(shù)據(jù)量下 初始權(quán)值為 0 時 Rosebblatt感知器 訓(xùn)練失敗 a = 0.3 # 學(xué)習(xí)率 x = np.array([[1,1,3],[1,2,5],[1,1,8],[1,2,15],[1,3,7],[1,4,29]]) d = np.array([1,1,-1,-1,1,-1]) w = np.array([b,0,0]) def sgn(v):if v> 0:return 1else:return -1 def comy(myw,myx):return sgn(np.dot(myw.T,myx)) def neww(oldw,myd,myx,a):print("comy:",comy(oldw,myx))return oldw+a*(myd - comy(oldw,myx))*myx i = 0 for xn in x:print("wn:",xn)w =neww(w,d[i],xn,a)i+=1print("w:",w) for xn in x:print("%d or %d => %d"%(xn[1],xn[2],comy(w,xn))) test = np.array([b,9,19]) print("%d or %d => %d"%(test[1],test[2],comy(w,test))) test = np.array([b,9,64]) print("%d or %d => %d"%(test[1],test[2],comy(w,test)))梯度下降與批量修正算法
公式如下(圖片來自書籍):
具體算法過程如下:?
1) 初始化權(quán)值.學(xué)習(xí)率,以及期望誤差率?
2) 讀取所有樣本數(shù)據(jù)?
3) 依次對樣本進(jìn)行訓(xùn)練.更新權(quán)值,其更新策略如(8-1)所示?
4) 檢查誤差率是否小于指定誤差率,或者訓(xùn)練次數(shù)已達(dá)到,否則轉(zhuǎn)到第二步執(zhí)行
code
import numpy as np b = 1 # 偏置 # 該數(shù)據(jù)量下 初始權(quán)值為 0 時 Rosebblatt感知器 訓(xùn)練失敗 a = 0.5 # 學(xué)習(xí)率 x = np.array([[1,1,3],[1,2,5],[1,1,8],[1,2,15]]) d = np.array([1,1,-1,-1]) w = np.array([b,0,0]) wucha = 0 ddcount = 50 def sgn(v):if v> 0:return 1else:return -1 def comy(myw,myx):return sgn(np.dot(myw.T,myx)) # 權(quán)值更新策略 def tiduxz(myw,myx,mya):i = 0sum_x =np.array([0,0,0])for xn in myx:if comy(myw,xn)!=d[i]:sum_x+=d[i]*xni+=1return mya*sum_x i = 0 while True:tdxz = tiduxz(w,x,a)print('tdxz:',tdxz)w = w+tdxzprint("w:",w)i = i+1if abs(tdxz.sum())<=wucha or i >= ddcount:break test = np.array([1,9,19]) print("%d or %d => %d"%(test[1],test[2],comy(w,test))) test = np.array([1,3,22]) print("%d or %d => %d"%(test[1],test[2],comy(w,test))) print()Rosonblatt感知器 優(yōu)化
LMS(最小均方算法:Least-Mean-Square)
均方誤差MSE:參數(shù)估計中均方誤差是指參數(shù)估計值與參數(shù)真值之差平方的期望值,即樣本預(yù)測輸出值與實際輸出值之差平方的期望值.
而MSE的策略則是使MSE最小,?
代價函數(shù):?
?
在之前的例子中繼續(xù)使用批量修正算法,并在其誤差信號基礎(chǔ)上計算梯度向量:?
?
權(quán)值生成方案:?
LMS退火算法
LMS算法的一個限制在于學(xué)習(xí)率的設(shè)定:?
當(dāng)學(xué)習(xí)率較大時,收斂速度較快?
當(dāng)學(xué)習(xí)率較小時才能保證權(quán)值的修正是再讓代價函數(shù)一步比一步小?
因而比較科學(xué)的方法應(yīng)該是學(xué)習(xí)率隨著權(quán)值的不斷修改而不斷減小,于是便有了LMS退火算法,其公式如下:?
退火算法原理源于固體退火原理,其為基于蒙特卡羅迭代求解法的一種啟發(fā)式隨機(jī)搜索過程
修改之前的例子:
a0 = 0.1 a = 0.0 def neww(oldw,myd,myx,a):mye = get_e(oldw,myx,myd)a=a0/(1+float(mycount)/r)return (oldw+a*mye*myx,mye)Rosonblatt感知機(jī)的局限
Rosonblatt感知機(jī)的局限在于其本質(zhì)為一個線性感知機(jī),因此當(dāng)樣本線性不可分時則使用delta法則進(jìn)行感知機(jī)的訓(xùn)練,而delta的關(guān)鍵思想在于使用梯度下降來搜索可能的權(quán)向量的假設(shè)空間,已找到最佳擬合訓(xùn)練樣本的權(quán)向量.
通過這種方式可以一定程度上對非線性數(shù)據(jù)進(jìn)行分類,但想要解決Rosonblatt感知器無法處理非線性關(guān)系(無法學(xué)習(xí)”異或”邏輯運(yùn)算)的問題,需要的是雙層感知機(jī),或者多層感知機(jī)(也就是神經(jīng)網(wǎng)絡(luò)),實際上在歷史上正是因為Rosonblatt無法學(xué)習(xí)線性關(guān)系才導(dǎo)致了神經(jīng)網(wǎng)絡(luò)十幾年的低潮,也正是雙層感知機(jī)找到了異或的學(xué)習(xí)方法以及傳統(tǒng)馮諾依曼計算機(jī)模擬智能遇到了不可逾越的瓶頸才再一次掀起了神經(jīng)網(wǎng)絡(luò)的熱潮.
參考資料
- [1] 麥好 <機(jī)器學(xué)習(xí)實踐指南 案例應(yīng)用解析 第二版> 機(jī)械工業(yè)出版社 2017.7
總結(jié)
以上是生活随笔為你收集整理的Rosonblatt线性感知器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中斐波那契数列的四种写法
- 下一篇: Google提出的新型激活函数:Swis