日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

感知器原理及线性分类技术实现

發(fā)布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 感知器原理及线性分类技术实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在說起感知器之前,需要先說一下神經(jīng)網(wǎng)絡(luò)的定義:

神經(jīng)網(wǎng)絡(luò)是由具有適應(yīng)性的簡單單元組成的廣泛并行互聯(lián)的網(wǎng)絡(luò),它的組織能夠模擬生物神經(jīng)系統(tǒng)對真實(shí)世界物體所作出的交互反應(yīng)。

感知器(M-P神經(jīng)元模型)

????????感知器(Perceptron)由兩層神經(jīng)元組成,如圖所示,輸入層接收外界輸入信號后傳遞給輸出層,輸出層是M-P神經(jīng)元,亦稱“閾值邏輯單元”。在M-P神經(jīng)元模型中,神經(jīng)元接收到來自n個其他神經(jīng)元傳遞過來的輸入信號,這些輸入信號通過帶權(quán)重的連接進(jìn)行傳遞,神經(jīng)元接收到的總輸入值將與神經(jīng)元的閾值進(jìn)行比較,然后通過“激活函數(shù)”(activation function)處理以產(chǎn)生神經(jīng)元的輸出。

????????理想中的激活函數(shù)是下圖所示的階躍函數(shù),它將輸入值映射為輸出值“0”或“1”,顯然“1”對應(yīng)于神經(jīng)元興奮,“0”對應(yīng)于神經(jīng)元抑制。然而,階躍函數(shù)具有不連續(xù)、不光滑等不太好的性質(zhì),因此實(shí)際常用Sigmoid函數(shù)作為激活函數(shù),如圖所示,它把可能在較大范圍內(nèi)變化的輸入值擠壓到(0,1)輸出范圍內(nèi),因此,有時也稱為“擠壓函數(shù)”。

把許多個這樣的神經(jīng)元按一定的層次結(jié)構(gòu)連接起來,就得到了神經(jīng)網(wǎng)絡(luò)。

感知器能很容易地實(shí)現(xiàn)邏輯與、或、非的運(yùn)算,注意到

????????????

假定函數(shù)f為圖(a)中的階躍函數(shù),且x1,x2的取值為0或1,下面通過有兩個輸入神經(jīng)元的感知器來實(shí)現(xiàn)邏輯與、或、非的運(yùn)算。

  • “與”(x1∧x2):令w1=w2=1,θ=2,則

????????

????????僅在x1=x2=1時,y=1;

  • “或”(x1∨x2):令w1=w2=1,θ=0.5,則

????????、

????????當(dāng)x1=1或x2=1時,y=1;

  • “非”(?x1):令w1=-0.6,w2=0,θ=-0.5,則

????????

????????當(dāng)x1=1時,y=0;當(dāng)x1=0時,y=1;

更一般地,給定訓(xùn)練數(shù)據(jù)集,權(quán)重wi(i=1,2,.... , n)以及閾值θ可通過學(xué)習(xí)得到,閾值θ可看作一個固定輸入為-1.0的啞結(jié)點(diǎn)所對應(yīng)的連接權(quán)重w(n+1),這樣,權(quán)重和閾值的學(xué)習(xí)就可統(tǒng)一為權(quán)重的學(xué)習(xí)。

感知器權(quán)重(w)更新策略

感知器學(xué)習(xí)規(guī)則非常簡單,對訓(xùn)練樣例(x,y),若當(dāng)前感知器的輸出為,則感知器權(quán)重將這樣調(diào)整:

????????其中η∈(0, 1)稱為學(xué)習(xí)率(learning rate),從上式可看出,若感知器對訓(xùn)練樣例(x,y)預(yù)測正確,即,則感知器不發(fā)生變化,否則將根據(jù)錯誤的程度進(jìn)行權(quán)重調(diào)整。

單層感知器的缺陷

????????需要注意的是,單層感知器只有輸出層神經(jīng)元進(jìn)行激活函數(shù)處理,即只擁有一層功能神經(jīng)元(functional neuron),其學(xué)習(xí)能力非常有限,事實(shí)上,上述與、或、非問題都是線性可分的問題,可以證明,若兩類模式是線性可分的,即存在一個線性超平面能將它們分開,感知器的學(xué)習(xí)過程一定會收斂(converge)而求得適當(dāng)?shù)臋?quán)向量w=(w1;w2;.... ;wn;w(n+1));否則感知器學(xué)習(xí)過程將會發(fā)生振蕩,w難以穩(wěn)定下來,不能求得合適的解。即使是非常簡單的非線性可分問題也不能解決,如:異或問題。

多層網(wǎng)絡(luò)

????????要解決非線性可分問題,需要考慮使用多層功能神經(jīng)元。例如圖5.5中這個簡單的兩層感知器就能解決異或問題,在圖中,輸出層與輸入層之間的一層神經(jīng)元,被稱為隱層或隱含層(hidden layer),隱含層和輸入層神經(jīng)元都是擁有激活函數(shù)的功能神經(jīng)元

????????更一般地,常見的神經(jīng)網(wǎng)絡(luò)是形如圖5.6所示的層級結(jié)構(gòu),每層神經(jīng)元與下一層神經(jīng)元全互連,神經(jīng)元之間不存在同層連接,也不存在跨層連接,這樣的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)通常稱為“多層前饋神經(jīng)網(wǎng)絡(luò)”,其中輸入層神經(jīng)元接收外界輸入,隱層與輸入層神經(jīng)元對信號進(jìn)行加工,最終結(jié)果由輸出層神經(jīng)元輸出;換言之,輸入層神經(jīng)元僅是接受輸入,不進(jìn)行函數(shù)處理,隱層與輸出層包含功能神經(jīng)元。因此,圖5.6(a)通常被稱為“兩層網(wǎng)絡(luò)”,即稱為單隱層網(wǎng)絡(luò),只需包含隱層,即可稱為多層網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程,就是根據(jù)訓(xùn)練數(shù)據(jù)來調(diào)整神經(jīng)元之間的“連接權(quán)”以及每個功能神經(jīng)元的閾值;換言之,神經(jīng)網(wǎng)絡(luò)“學(xué)”到的東西,蘊(yùn)含在連接權(quán)閾值中。

利用感知器實(shí)現(xiàn)線性分類

接下來通過單層感知器來實(shí)現(xiàn)對樣本的線性分類,這里選用的激活函數(shù)為符號函數(shù):

為了處理方便,這里將x=0的情況歸為sgn(0)=1,即

????????

# 導(dǎo)入一些需要的包 import random import numpy as np import matplotlib.pyplot as plt # 定義自定義的符號函數(shù) def sign(vec):if vec >= 0:return 1else:return -1 # 訓(xùn)練權(quán)重和閾值 def train(train_num, train_datas, lr): # lr為學(xué)習(xí)率w = [0, 0]b = 0for i in range(train_num):x = random.choice(train_datas) # 從序列中獲取一個隨機(jī)元素x1, x2, y = x # 把隨機(jī)選取的樣本的分量依次賦值給x1,x2,yif(y*sign((w[0]*x1 + w[1]*x2 + b)) <= 0): # 訓(xùn)練算法,如果符號函數(shù)與輸出結(jié)果不一致,則更新權(quán)重和閾值w[0] += lr*y*x1w[1] += lr*y*x2b += lr*yreturn w, b # 最終返回訓(xùn)練完成的權(quán)重和閾值 # 通過畫圖來查看模型對樣本分類的好壞 def plot_points(train_datas, w, b):plt.figure() # 創(chuàng)建圖表x1 = np.linspace(0, 8, 100)x2 = (-b-w[0]*x1)/w[1] # 分類直線滿足的方程plt.plot(x1, x2, color='r', label='y1 data') # 畫出分類直線datas_len = len(train_datas) # 看有幾行,幾個樣本for i in range(datas_len):if(train_datas[i][-1]==1): # 正樣本用圓點(diǎn)標(biāo)記,向量的最后一個分量[-1],也可以用[2]plt.scatter(train_datas[i][0], train_datas[i][1], s=50)else:plt.scatter(train_datas[i][0], train_datas[i][1], marker='x',s=50) # 負(fù)樣本用x標(biāo)記plt.show() # 畫圖

在上段程序中,對于已經(jīng)訓(xùn)練好的權(quán)重和閾值,滿足:

所以有

# 執(zhí)行程序 if __name__=='__main__':train_data1 = [[1, 3, 1], [2, 2, 1], [3, 8, 1], [2, 6, 1]] # 正樣本train_data2 = [[2, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]] # 負(fù)樣本train_datas = train_data1 + train_data2 # 樣本集print(train_datas)w, b = train(train_num=50, train_datas=train_datas, lr=0.01) # 訓(xùn)練50次plot_points(train_datas, w, b) # 畫出樣本點(diǎn)及分類直線

顯示結(jié)果:

在以后的博客中,逐漸涉及多層神經(jīng)網(wǎng)絡(luò)的構(gòu)建與應(yīng)用,深入其中,更能體會到神經(jīng)網(wǎng)絡(luò)的奧妙。

?

參考:

1、機(jī)器學(xué)習(xí)/周志華著.--北京:清華大學(xué)出版社,2016(2017.3重印)

?

?

轉(zhuǎn)載于:https://my.oschina.net/u/3888421/blog/2253176

總結(jié)

以上是生活随笔為你收集整理的感知器原理及线性分类技术实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。