天天看點

<神經網絡入門>連載2

3 數字版的神經網絡 (The Digital Version)

上面我們看到了生物的大腦是由許多神經細胞組成,同樣,模拟大腦的人工神經網絡ANN是由許多叫做人工神經細胞(Artificial neuron,也稱人工神經原,或人工神經元)的細小結構子產品組成。人工神經細胞就像真實神經細胞的一個簡化版,但采用了電子方式來模拟實作。一個人工神經網絡中需要使用多少個數的人工神經細胞,差别可以非常大。有的神經網絡隻需要使用10個以内的人工神經細胞,而有的神經網絡可能需要使用幾千個人工神經細胞。這完全取決于這些人工神經網絡準備實際用來做什麼。

有趣的事實 

有一個叫 Hugo de Garis的同行,曾在一個雄心勃勃的工程中建立并訓練了一個包含1000,000,000個人工神經細胞的網絡。這個人工神經網絡被他非常巧妙地建立起來了,它采用蜂房式自動機結構,目的就是為一機器客戶定制一個叫做CAM BrainMachine(“CAM大腦機器”) 的機器(CAM就是Cellular Automata Machine的縮寫)。此人曾自誇地宣稱這一人工網絡機器将會有一隻貓的智能。許多神經網絡研究人員認為他是在“登星”了,但不幸的是,雇用他的公司在他的夢想尚未實作之前就破産了。此人現在猶他州,是猶他州大腦工程(Utah Brain Project)的上司。時間将會告訴我們他的思想最終是否能變成實際有意義的東西。[譯注]

我想你現在可能很想知道,一個人工神經細胞究竟是一個什麼樣的東西?但是,它實際上什麼東西也不像; 它隻是一種抽象。還是讓我們來察看一下圖2吧,這是表示一個人工神經細胞的一種形式。

[譯注]Hugo de Garis現在為猶他州立大學教授,有關他和他的CAM機器,可在該校網站的一個網頁上看到報道,其上有真實的照片, 見 http://www.cs.usu.edu/~degaris

<神經網絡入門>連載2

圖2 一個人工神經細胞

圖中,左邊幾個灰底圓中所标字母w代表浮點數,稱為權重(weight,或權值,權數)。進入人工神經細胞的每一個input(輸入)都與一個權重w相聯系,正是這些權重将決定神經網絡的整體活躍性。你現在暫時可以設想所有這些權重都被設定到了-1和1之間的一個随機小數。因為權重可正可負,故能對與它關聯的輸入施加不同的影響,如果權重為正,就會有激發(excitory)作用,權重為負,則會有抑制(inhibitory)作用。當輸入信号進入神經細胞時,它們的值将與它們對應的權重相乘,作為圖中大圓的輸入。大圓的‘核'是一個函數,叫激勵函數(activation function),它把所有這些新的、經過權重調整後的輸入全部加起來,形成單個的激勵值(activation value)。激勵值也是一浮點數,且同樣可正可負。然後,再根據激勵值來産生函數的輸出也即神經細胞的輸出:如果激勵值超過某個閥值(作為例子我們假設閥值為1.0),就會産生一個值為1的信号輸出;如果激勵值小于閥值1.0,則輸出一個0。這是人工神經細胞激勵函數的一種最簡單的類型。在這裡,從激勵值産生輸出值是一個階躍函數[譯注]。看一看圖3後你就能猜到為什麼有這樣的名稱。

<神經網絡入門>連載2

圖3 階躍激勵函數

[譯注] 由圖可知階躍函數是一進制的,而激勵函數既然能把多個輸入相加應為多元,故需加以差別。 

如果到目前為止你對這些還沒有獲得很多感覺,那也不必擔心。竅門就是: 不要企圖去感覺它,暫時就随波逐流地跟我一起向前走吧。在經曆本章的若幹處後,你最終就會開始弄清楚它們的意義。而現在,就放松一點繼續讀下去吧。

3.1 現在需要一些數學了

今後讨論中,我将盡量把數學降低到絕對少量,但學習一些數學記号對下面還是很有用的。我将把數學一點一點地喂給你,在到達有關章節時向你介紹一些新概念。我希望采用這樣的方式能使你的頭腦能更舒适地吸收所有的概念,并使你在開發神經網絡的每個階段都能看到怎樣把數學應用到工作中。現在首先讓我們來看一看,怎樣把我在此之前告訴你的所有知識用數學方式表達出來。

一個人工神經細胞(從現在開始,我将把“人工神經細胞”簡稱它為“神經細胞”) 可以有任意n個輸入,n代表總數。可以用下面的數學表達式來代表所有n個輸入:

x1, x2, x3, x4, x5, ..., xn

同樣 n 個權重可表達為:

w1, w2, w3, w4, w5 ..., wn

請記住,激勵值就是所有輸入與它們對應權重的之乘積之總和,是以,現在就可以寫為:

a = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 +...+ wnxn

以這種方式寫下的求和式,我在第5章“建立一個更好的遺傳算法”中已提到,可以用希臘字母Σ來簡化:

<神經網絡入門>連載2

注: 

神經網絡的各個輸入,以及為各個神經細胞的權重設定,都可以看作一個n維的向量。你在許多技術文獻中常常可以看到是以這樣的方式來引用的。

下面我們來考察在程式中應該怎樣實作?假設輸入數組和權重數組均已初始化為x[n]和w[n],則求和的代碼如下:

double activation = 0; 

for(int i=0; i<n; ++i) 

activation += x[i] * w[i]; 

}

圖4以圖形的方式表示了此方程。請别忘記,如果激勵值超過了閥值,神經細胞就輸出1; 如果激活小于閥值,則神經細胞的輸出為0。這和一個生物神經細胞的興奮和抑制是等價的。我們假設一個神經細胞有5個輸入,他們的權重w都初始化成正負1之間的随機值(-1 < w < 1) 。 表2說明了激勵值的求和計算過程。

&lt;神經網絡入門&gt;連載2

圖4 神經細胞的激勵函數

如果我們假定激活所需閥值=1,則因激勵值1.1 > 激活閥值1,是以這個神經細胞将輸出1。 

在進一步讀下去之前,請你一定要确切弄懂激勵函數怎樣計算。

表2 神經細胞激勵值的計算

輸入 權 重 輸入*權重的乘積 運作後總和
1 0.5 0.5 0.5
-0.2 0.5
1 -0.3 -0.3 0.2
1 0.9 0.9 1.1
0.1> 1.1

3.2. 行了,我知道什麼是神經細胞了,但用它來幹什麼呢? 

大腦裡的生物神經細胞和其他的神經細胞是互相連接配接在一起的。為了建立一個人工神經網絡,人工神經細胞也要以同樣方式互相連接配接在一起。為此可以有許多不同的連接配接方式,其中最容易了解并且也是最廣泛地使用的,就是如圖5所示那樣,把神經細胞一層一層地連結在一起。這一種類型的神經網絡就叫前饋網絡(feedforword network)。這一名稱的由來,就是因為網絡的每一層神經細胞的輸出都向前饋送(feed)到了它們的下一層(在圖中是畫在它的上面的那一層),直到獲得整個網絡的輸出為止。

&lt;神經網絡入門&gt;連載2

圖5 一個前饋網絡

由圖可知,網絡共有三層(譯注:輸入層不是神經細胞,神經細胞隻有兩層)。輸入層中的每個輸入都饋送到了隐藏層,作為該層每一個神經細胞的輸入;然後,從隐藏層的每個神經細胞的輸出都連到了它下一層(即輸出層)的每一個神經細胞。圖中僅僅畫了一個隐藏層,作為前饋網絡,一般地可以有任意多個隐藏層。但在對付你将處理的大多數問題時一層通常是足夠的。事實上,有一些問題甚至根本不需要任何隐藏單元,你隻要把那些輸入直接連結到輸出神經細胞就行了。另外,我為圖5選擇的神經細胞的個數也是完全任意的。每一層實際都可以有任何數目的神經細胞,這完全取決于要解決的問題的複雜性。但神經細胞數目愈多,網絡的工作速度也就愈低,由于這一緣故,以及為了其他的幾種原因(我将在第9章作出解釋),網絡的規模總是要求保持盡可能的小。 

到此我能想象你或許已對所有這些資訊感到有些茫然了。我認為,在這種情況下,我能做的最好的事情,就是向你介紹一個神經網絡在現實世界中的實際應用例子,它有望使你自己的大腦神經細胞得到興奮!不錯吧?好的,下面就來了... 

你可能已聽到或讀到過神經網絡常常用來作模式識别。這是因為它們善于把一種輸入狀态(它所企圖識别的模式)映射到一種輸出狀态(它曾被訓練用來識别的模式)。 

下面我們來看它是怎麼完成的。我們以字元識别作為例子。設想有一個由8x8個格子組成的一塊面闆。每一個格子裡放了一個小燈,每個小燈都可獨立地被打開(格子變亮)或關閉(格子變黑),這樣面闆就可以用來顯示十個數字元号。圖6顯示了數字“4”。

&lt;神經網絡入門&gt;連載2

圖6 用于字元顯示的矩陣格點

要解決這一問題,我們必需設計一個神經網絡,它接收面闆的狀态作為輸入,然後輸出一個1或0;輸出1代表ANN确認已顯示了數字“4”,而輸出0表示沒有顯示“4”。是以,神經網絡需要有64個輸入(每一個輸入代表面闆的一個具體格點) 和由許多神經細胞組成的一個隐藏層,還有僅有一個神經細胞的輸出層,隐藏層的所有輸出都饋送到它。我真希望你能在你的頭腦中畫出這個圖來,因為要我為你把所有這些小圓和連線統統畫出來确實不是一樁愉快的事<一笑>。 

一旦神經網絡體系建立成功後,它必須接受訓練來認出數字“4”。為此可用這樣一種方法來完成:先把神經網的所有權重初始化為任意值。然後給它一系列的輸入,在本例中,就是代表面闆不同配置的輸入。對每一種輸入配置,我們檢查它的輸出是什麼,并調整相應的權重。如果我們送給網絡的輸入模式不是“4”, 則我們知道網絡應該輸出一個0。是以每個非“4”字元時的網絡權重應進行調節,使得它的輸出趨向于0。當代表“4”的模式輸送給網絡時,則應把權重調整到使輸出趨向于1。 

如果你考慮一下這個網絡,你就會知道要把輸出增加到10是很容易的。然後通過訓練,就可以使網絡能識别0到9 的所有數字。但為什麼我們到此停止呢?我們還可以進一步增加輸出,使網絡能識别字母表中的全部字元。這本質上就是手寫體識别的工作原理。對每個字元,網絡都需要接受許多訓練,使它認識此文字的各種不同的版本。到最後,網絡不單能認識已經訓練的筆迹,還顯示了它有顯著的歸納和推廣能力。也就是說,如果所寫文字換了一種筆迹,它和訓練集中所有字迹都略有不同,網絡仍然有很大幾率來認出它。正是這種歸納推廣能力,使得神經網絡已經成為能夠用于無數應用的一種無價的工具,從人臉識别、醫學診斷,直到跑馬賽的預測,另外還有電腦遊戲中的bot(作為遊戲角色的機器人)的導航,或者硬體的robot(真正的機器人)的導航。 

這種類型的訓練稱作有監督的學習(supervised learnig),用來訓練的資料稱為訓練集(training set)。調整權重可以采用許多不同的方法。對本類問題最常用的方法就是反向傳播(backpropagation,簡稱backprop或BP)方法。有關反向傳播問題,我将會在本書的後面,當你已能訓練神經網絡來識别滑鼠走勢時,再來進行讨論。在本章剩餘部分我将集中注意力來考察另外的一種訓練方式,即根本不需要任何導師來監督的訓練,或稱無監督學習(unsupervised learnig)。 

這樣我已向你介紹了一些基本的知識,現在讓我們來考察一些有趣的東西,并向你介紹第一個代碼工程。

版權聲明:本文為CSDN部落客「weixin_34345753」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34345753/article/details/91707664

繼續閱讀