人體的視覺(jué)系統(tǒng)是一個(gè)相當(dāng)神奇的存在,對(duì)于下面的一串手寫圖像,可以毫不費(fèi)力的識(shí)別出他們是504192,輕松到讓人都忘記了其實(shí)這是一個(gè)復(fù)雜的工作。
實(shí)際上在我們的大腦的左腦和右腦的皮層都有一個(gè)第一視覺(jué)區(qū)域,叫做V1,里面有14億視覺(jué)神經(jīng)元。而且,在我們識(shí)別上面的圖像的時(shí)候,工作的不止有V1,還有V2、V3、V4、V5,所以這么一看,我們確實(shí)威武。
但是讓計(jì)算機(jī)進(jìn)行模式識(shí)別,就比較復(fù)雜了,主要困難在于我們?nèi)绾谓o計(jì)算機(jī)描述一個(gè)數(shù)字9在圖像上應(yīng)該是怎樣的,比如我們跟計(jì)算機(jī)說(shuō),9的上面是一個(gè)圈,下右邊是1豎。然而有的人寫9會(huì)帶勾,有的人還會(huì)在圈周圍多出點(diǎn)什么,總的來(lái)說(shuō),這種描述法太容易出現(xiàn)其他狀況。況且,我們這里討論的還只是數(shù)字,涉及到字母、漢字、符號(hào)就回更復(fù)雜。
于是人們就有了另外一種途徑,那就是我們不用告訴計(jì)算機(jī)什么是9,我們可以把他當(dāng)作一個(gè)小孩子,讓他見(jiàn)很多9的圖片,對(duì)他說(shuō),這是9,記得哈。慢慢的他就形成了自己的評(píng)判標(biāo)準(zhǔn),等他長(zhǎng)大了,自然就知道以后遇到的圖片是不是9了。讓我們?nèi)藢W(xué)習(xí)的方式是見(jiàn)聞,讓計(jì)算機(jī)學(xué)習(xí)的就是給他數(shù)據(jù),這個(gè)數(shù)據(jù)通常被叫做訓(xùn)練樣本(如圖),而這套學(xué)習(xí)的方法,就是神經(jīng)網(wǎng)絡(luò)了。
感知機(jī)(Perceptrons)
在說(shuō)人工神經(jīng)網(wǎng)絡(luò)之前,我們先說(shuō)另外一個(gè)人工神經(jīng)元系統(tǒng),叫感知機(jī)(Perceptrons)。感知機(jī)模型是這樣的:
其中x1,x2,x3是二進(jìn)制的輸入值,output是二進(jìn)制的輸出值。在每個(gè)輸入端,還會(huì)有一個(gè)權(quán)重,w1,w2,w3。output取決于x1*w1+x2*w2+x3*w3,如果他小于等于一個(gè)臨界值的時(shí)候,output就輸出0,大于等于那個(gè)臨界值的時(shí)候,output就輸出1。當(dāng)然輸入值可以是任意多個(gè),用公式表示就是:
output={01if ∑jwjxj≤ thresholdif ∑jwjxj> threshold
感知機(jī)模型就這么簡(jiǎn)單,他是一個(gè)相當(dāng)好的決策系統(tǒng),用來(lái)解決是或者不是,去或者不去,熟悉我的朋友可能知道我從古代儒家修身的功過(guò)格受啟發(fā),自己制定的一套決策系統(tǒng),也是用因素*權(quán)重然后匯總,看得到的正面因素占優(yōu)還是負(fù)面的因素占優(yōu),最后做決策,真是相當(dāng)好用,只不過(guò)那時(shí)候還不知道感知機(jī)模型。
我們把Σwjxj用w?x表示,把臨界值提到等號(hào)右邊,用-b表示,那么上面的等式就如下所示:
b一般稱作偏差。
既然有一層的感知機(jī)模型,多層的就很好理解了,如圖:
這個(gè)多層(從左到右)的感知機(jī)里面,第一層的感知機(jī)比較簡(jiǎn)單,只根據(jù)輸入的值和權(quán)重就可以得出結(jié)果,第二層的結(jié)果就得根據(jù)第一層的結(jié)果和相應(yīng)的的權(quán)重了,與復(fù)雜度相對(duì)應(yīng),他也就可以用來(lái)做更加復(fù)雜和抽象的決定,第三層就更復(fù)雜了。
這種上世紀(jì)五十年代就出來(lái)的神經(jīng)元系統(tǒng)功能強(qiáng)大,但是對(duì)于機(jī)器學(xué)習(xí)有一個(gè)重大的缺陷。我們教小孩子的時(shí)候,小孩子進(jìn)步一點(diǎn)點(diǎn),我們就鼓勵(lì)他一下,小孩子退步一點(diǎn)點(diǎn),我們就批評(píng)一下,他從我們的批評(píng)和鼓勵(lì)中自動(dòng)的去調(diào)整自己的認(rèn)知,慢慢的成長(zhǎng)。但是這個(gè)感知機(jī)就不同了,他的輸入值只有0和1,他的成長(zhǎng)沒(méi)有一點(diǎn)點(diǎn)的說(shuō)法,所以壓根就不知道怎么調(diào)整,可能內(nèi)部參數(shù)調(diào)整的亂七八糟,輸出的結(jié)果還是不變的。要實(shí)現(xiàn)學(xué)習(xí)和進(jìn)步,就得有這么一點(diǎn)點(diǎn)一點(diǎn)點(diǎn)進(jìn)步的概念,也就是說(shuō),w或者b變了一點(diǎn)點(diǎn),那么輸出值就得變一點(diǎn)點(diǎn),總的來(lái)說(shuō),就是要實(shí)現(xiàn)下圖所示的效果:
于是新一代的神經(jīng)元系統(tǒng)就出世了,他叫S曲線神經(jīng)元系統(tǒng)(Sigmoid neurons)。
S曲線神經(jīng)元系統(tǒng)(Sigmoid neurons)
簡(jiǎn)單來(lái)說(shuō),S曲線神經(jīng)元系統(tǒng)和感知機(jī)系統(tǒng)的區(qū)別在于我們的輸入值x1,x2,x3和輸出值output都不是0和1了,改為從0到1之間的任何實(shí)數(shù)。而且規(guī)定,對(duì)我輸出值output,由于是與w?x和b相關(guān)的,我們可以用σ(w?x,b)表示,他滿足函數(shù):
把w?x和b帶進(jìn)去,就是:
試著看下,如果當(dāng)w?x + b→+∞的時(shí)候,e^-(w?x+b)→0,σ(w?x,b)→1。相反,當(dāng)w?x + b→-∞的時(shí)候,σ(w?x,b)→0,所以,感知機(jī)系統(tǒng)也是一個(gè)特殊的S曲線神經(jīng)元系統(tǒng)。
至于為什么σ(w?x,b)必須滿足上述的函數(shù)呢。請(qǐng)看σ(z)的圖形:
他的定義域是(-∞,+∞),值域是(0,1),也就是說(shuō),不管w?x和b怎么折騰,總能保證輸出值在0到1之間。特別的,當(dāng)我們對(duì)一個(gè)事情做決定時(shí),比如我們讓計(jì)算機(jī)決定看到的一個(gè)圖形是不是9,0到1之間的一個(gè)數(shù),可以在物理意義上對(duì)應(yīng)他是9的概率。(我后來(lái)才意識(shí)道,這個(gè)說(shuō)法是錯(cuò)誤的)
我們說(shuō),我們拋棄感知器,采用S曲線神經(jīng)元系統(tǒng),是為了讓輸出結(jié)果的變動(dòng)和我們采取權(quán)重w和偏離b的變動(dòng)對(duì)應(yīng)起來(lái)。那么對(duì)于方程output = σ(w?x,b),由于輸入值x是已知的常數(shù),根據(jù)全微分的定義,有:
輸出值的變動(dòng)和我們選用的參數(shù)變動(dòng)就對(duì)應(yīng)起來(lái)了。
構(gòu)造我們的神經(jīng)網(wǎng)絡(luò)
在我們構(gòu)建神經(jīng)網(wǎng)絡(luò)的過(guò)程中,一般也會(huì)把輸入的數(shù)據(jù)當(dāng)作神經(jīng)元,輸入的那層叫做輸入層,中間可能有多層,通常被叫做隱藏層,輸出的那一層就叫做輸出層。如圖:
在設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)時(shí),一般會(huì)采取簡(jiǎn)單粗暴的方式,比如我們要讓計(jì)算機(jī)識(shí)別手寫稿的掃描件圖像,其中的一個(gè)字的圖像像素個(gè)數(shù)是64*64=4096個(gè),那么我們?cè)O(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的時(shí)候,輸入層神經(jīng)元個(gè)數(shù)就是4096個(gè),其中每個(gè)神經(jīng)元的輸入數(shù)據(jù)就是該像素的灰度值(參照文章的第一幅圖)歸一化成0到1之間的數(shù)值。而我們要識(shí)別出的結(jié)果,可能包括數(shù)字0-9加26個(gè)大大小寫字母再加六千常用漢字,那我們?cè)O(shè)計(jì)的輸出層神經(jīng)元個(gè)數(shù)就用過(guò)是10+26*2+6000=6062個(gè),其中每個(gè)神經(jīng)元對(duì)應(yīng)一個(gè)我們要識(shí)別的結(jié)果。
具體到本實(shí)例中,訓(xùn)練樣本和識(shí)別測(cè)試數(shù)據(jù)是28*28像素的,輸出結(jié)果只有10個(gè)數(shù)字,那么輸入層就應(yīng)該是786個(gè)神經(jīng)元,輸出層是10個(gè)神經(jīng)元。至于中間隱藏層的神經(jīng)元,作者選了15個(gè),說(shuō)是經(jīng)過(guò)了多次實(shí)驗(yàn),15個(gè)的效果比較好。就我的理解,應(yīng)該是越多約好的(不一定正確),不過(guò)越多也意味著運(yùn)算量越大,所以作者最后選了15個(gè)。最終設(shè)計(jì)的結(jié)果如圖:
最后還有一個(gè)問(wèn)題,如果是連續(xù)的書寫手稿,怎么把他分割成一個(gè)個(gè)的。作者說(shuō)實(shí)際上這個(gè)問(wèn)題可以在我們完成通過(guò)神經(jīng)網(wǎng)絡(luò)進(jìn)行識(shí)別之后再說(shuō),因?yàn)樽R(shí)別出來(lái)誰(shuí)都不像的,就說(shuō)明應(yīng)該要分割了,那我們也就跟著作者的思路,暫時(shí)先不管。
總結(jié)
以上就是本文關(guān)于Python與人工神經(jīng)網(wǎng)絡(luò):使用神經(jīng)網(wǎng)絡(luò)識(shí)別手寫圖像介紹的全部?jī)?nèi)容嗎,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
神經(jīng)網(wǎng)絡(luò)理論基礎(chǔ)及Python實(shí)現(xiàn)詳解
神經(jīng)網(wǎng)絡(luò)python源碼分享
70行Java代碼實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)算法分享
如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
