1. 神經網路——BP演算法
對於初學者來說,了解了一個演算法的重要意義,往往會引起他對演算法本身的重視。BP(Back Propagation,後向傳播)演算法,具有非凡的歷史意義和重大的現實意義。
1969年,作為人工神經網路創始人的明斯基(Marrin M insky)和佩珀特(Seymour Papert)合作出版了《感知器》一書,論證了簡單的線性感知器功能有限,不能解決如「異或」(XOR )這樣的基本問題,而且對多層網路也持悲觀態度。這些論點給神經網路研究以沉重的打擊,很多科學家紛紛離開這一領域,神經網路的研究走向長達10年的低潮時期。[1]
1974年哈佛大學的Paul Werbos發明BP演算法時,正值神經外網路低潮期,並未受到應有的重視。[2]
1983年,加州理工學院的物理學家John Hopfield利用神經網路,在旅行商這個NP完全問題的求解上獲得當時最好成績,引起了轟動[2]。然而,Hopfield的研究成果仍未能指出明斯基等人論點的錯誤所在,要推動神經網路研究的全面開展必須直接解除對感知器——多層網路演算法的疑慮。[1]
真正打破明斯基冰封魔咒的是,David Rumelhart等學者出版的《平行分布處理:認知的微觀結構探索》一書。書中完整地提出了BP演算法,系統地解決了多層網路中隱單元連接權的學習問題,並在數學上給出了完整的推導。這是神經網路發展史上的里程碑,BP演算法迅速走紅,掀起了神經網路的第二次高潮。[1,2]
因此,BP演算法的歷史意義:明確地否定了明斯基等人的錯誤觀點,對神經網路第二次高潮具有決定性意義。
這一點是說BP演算法在神經網路領域中的地位和意義。
BP演算法是迄今最成功的神經網路學習演算法,現實任務中使用神經網路時,大多是在使用BP演算法進行訓練[2],包括最近炙手可熱的深度學習概念下的卷積神經網路(CNNs)。
BP神經網路是這樣一種神經網路模型,它是由一個輸入層、一個輸出層和一個或多個隱層構成,它的激活函數採用sigmoid函數,採用BP演算法訓練的多層前饋神經網路。
BP演算法全稱叫作誤差反向傳播(error Back Propagation,或者也叫作誤差逆傳播)演算法。其演算法基本思想為:在2.1所述的前饋網路中,輸入信號經輸入層輸入,通過隱層計算由輸出層輸出,輸出值與標記值比較,若有誤差,將誤差反向由輸出層向輸入層傳播,在這個過程中,利用梯度下降演算法對神經元權值進行調整。
BP演算法中核心的數學工具就是微積分的 鏈式求導法則 。
BP演算法的缺點,首當其沖就是局部極小值問題。
BP演算法本質上是梯度下降,而它所要優化的目標函數又非常復雜,這使得BP演算法效率低下。
[1]、《BP演算法的哲學思考》,成素梅、郝中華著
[2]、《機器學習》,周志華著
[3]、 Deep Learning論文筆記之(四)CNN卷積神經網路推導和實現
2016-05-13 第一次發布
2016-06-04 較大幅度修改,完善推導過程,修改文章名
2016-07-23 修改了公式推導中的一個錯誤,修改了一個表述錯誤
2. 神經網路演算法
20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發明了感知機(Perceptrons)。
⼀個感知器接受⼏個⼆進制輸⼊, ,並產⽣⼀個⼆進制輸出:
如上圖所示的感知機有三個輸⼊: 。通常可以有更多或更少輸⼊。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重後的總和 ⼩於等於或者⼤於閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數,⼀個神經元的參數。⽤更精確的代數形式如下:
給三個因素設置權重來作出決定:
可以把這三個因素對應地⽤⼆進制變數 來表⽰。例如,如果天⽓好,我們把
,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。
這三個對於可能對你來說,「電影好不好看」對你來說最重要,而天氣顯得不是那麼的重要。所以你會這樣分配權值: ,然後定義閾值threshold=5。
現在,你可以使⽤感知器來給這種決策建⽴數學模型。
例如:
隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。
現在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那麼感知器的規則可以重寫為:
引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們後⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。
感知機是首個可以學習的人工神經網路,它的出現引起的神經網路的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經網路的發展是具有重要意義的。
通過上面的感知機的觀察我們發現一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉。也就是說,感知機的輸出是一個階躍函數。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調整好久參數也不會發生輸出的變化。
這樣階躍的跳變並不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調整後,輸出也相應的發生微小的改變芹則禪。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數。由此我們引入了S型神經元。
S型神經元使用 S 型函數,也叫Sigmoid function函數,我們用它作為激活函數。其表達式如下:
圖像如下圖所示:
利⽤實際的 σ 函數,我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數的平滑特性,正是關鍵因素,⽽不是其細部形式盯明。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經元產⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們
∆output 可以很好地近似表⽰為:
上面的式子是⼀個反映權重、偏置變化嫌塵和輸出變化的線性函數。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經元和感知器本質上是相同的,但S型神經元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。
有了對S型神經元的了解,我們就可以介紹神經網路的基本結構了。具體如下:
在⽹絡中最左邊的稱為輸⼊層,其中的神經元稱為輸⼊神經元。最右邊的,即輸出層包含有輸出神經元,在圖中,輸出層只有⼀個神經元。中間層,既然這層中的神經元既不是輸⼊也不是輸出,則被稱為隱藏層。
這就是神經網路的基本結構,隨著後面的發展神經網路的層數也隨之不斷增加和復雜。
我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折盪漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。
從單層神經網路(感知機)開始,到包含一個隱藏層的兩層神經網路,再到多層的深度神經網路,一共有三次興起過程。詳見下圖。
我們希望有⼀個演算法,能讓我們找到權重和偏置,以⾄於⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們如何實現這個⽬標,我們定義⼀個代價函數:
這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數據的個數,
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數;有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數 C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對於所有的訓練輸⼊ x, y(x) 接近於輸出 a 時。因
此如果我們的學習演算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎麼好了,那意味著對於⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練演算法的⽬的,是最⼩化權重和偏置的代價函數 C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的演算法來達到這個⽬的。
下面我們將代價函數簡化為C(v)。它可以是任意的多元實值函數, 。
注意我們⽤ v 代替了 w 和 b 以強調它可能是任意的函數,我們現在先不局限於神經⽹絡的環境。
為了使問題更加簡單我們先考慮兩個變數的情況,想像 C 是⼀個只有兩個變數 和 的函數,我們的目的是找到 和 使得C最小。
如上圖所示,我們的目的就是找到局部最小值。對於這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數來求解C的極值點。但是對於神經網路來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數不只是兩維,有可能是億萬維的。對於一個高維的函數C(v)求導數幾乎是不可能的。
在這種情況下,有人提出了一個有趣的演算法。想像一下一個小球從山頂滾下山谷的過程, 我們的⽇常經驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發我們的想像⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節,不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那麼我們將會採取什麼樣的運動學定律來讓球體能夠總是滾落到⾕底呢?
為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發⽣什麼情況。微積分告訴我們 C 將會有如下變化:
也可以用向量表示為
現在我們的問題就轉換為不斷尋找一個小於0的∆C,使得C+∆C不斷變小。
假設我們選取:
這⾥的 η 是個很⼩的正數(稱為學習速率),於是
由於 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規則去改變 v,那麼 C
會⼀直減⼩,不會增加。
所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。
總結⼀下,梯度下降演算法⼯作的⽅式就是重復計算梯度 ∇C,然後沿著相反的⽅向移動,沿著⼭⾕「滾落」。我們可以想像它像這樣:
為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。
知道了兩個變數的函數 C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變數 的多元函數。 ∆C 將會變為:
其中, ∇C為
∆v為:
更新規則為:
在回到神經網路中,w和b的更新規則為:
前面提到神經⽹絡如何使⽤梯度下降演算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們並沒有討論如何計算代價函數的梯度。這里就需要用到一個非常重要的演算法:反向傳播演算法(backpropagation)。
反向傳播演算法的啟示是數學中的鏈式法則。
四個方程:
輸出層誤差方程:
當前層誤差方程:
誤差方程關於偏置的關系:
誤差方程關於權值的關系
演算法描述:
檢視這個演算法,你可以看到為何它被稱作反向傳播。我們從最後⼀層開始向後計算誤差向量δ。這看起來有點奇怪,為何要從後⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數是⽹絡輸出的函數的結果。為了理解代價隨前⾯層的權重和偏置變化的規律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。
參考鏈接: http://neuralnetworksanddeeplearning.com/
3. 如何用代碼編寫一個神經網路異或運算器
配置環境、安裝合適的庫、下載數據集……有時候學習深度學習的前期工作很讓人沮喪,如果只是為了試試現在人人都談的深度學習,做這些麻煩事似乎很不值當。但好在我們也有一些更簡單的方法可以體驗深度學習。近日,編程學習平台 Scrimba 聯合創始人 Per Harald Borgen 在 Medium 上發文介紹了一種僅用30行 JavaScript 代碼就創建出了一個神經網路的教程,而且使用的工具也只有 Node.js、Synaptic.js 和瀏覽器而已。另外,作者還做了一個互動式 Scrimba 教程,也許能幫你理解其中的復雜概念。
Synaptic.js:http://synaptic.juancazala.com
Node.js:http://nodejs.org
Scrimba 教程:http://scrimba.com/casts/cast-1980
Synaptic.js 讓你可以使用 Node.js 和瀏覽器做深度學習。在這篇文章中,我將介紹如何使用 Synaptic.js 創建和訓練神經網路。
//創建網路const { Layer, Network }= window.synaptic;var inputLayer = new Layer(2);var hiddenLayer = new Layer(3);var outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);var myNetwork = new Network({
input: inputLayer,
hidden:[hiddenLayer],
output: outputLayer
});//訓練網路——學習異或運算var learningRate =.3;for (var i =0; i <20000; i++)
{//0,0=>0
myNetwork.activate([0,0]);
myNetwork.propagate(learningRate,[0]);//0,1=>1
myNetwork.activate([0,1]);
myNetwork.propagate(learningRate,[1]);//1,0=>1
myNetwork.activate([1,0]);
myNetwork.propagate(learningRate,[1]);//1,1=>0
myNetwork.activate([1,1]);
myNetwork.propagate(learningRate,[0]);
}//測試網路console.log(myNetwork.activate([0,0]));//[0.0]console.log(myNetwork.activate([0,1]));//[0.]console.log(myNetwork.activate([1,0]));//[0.]console.log(myNetwork.activate([1,1]));//[0.0]
我們將創建一個最簡單的神經網路:一個可以執行異或運算的網路。上面就是這個網路的全部代碼,但在我們深入解讀這些代碼之前,首先我們先了解一下神經網路的基礎知識。
神經元和突觸
神經網路的基本構造模塊是神經元。神經元就像是一個函數,有幾個輸入,然後可以得到一個輸出。神經元的種類有很多。我們的網路將使用 sigmoid 神經元,它可以輸入任何數字並將其壓縮到0 到1 之間。下圖就是一個 sigmoid 神經元。它的輸入是5,輸出是1。箭頭被稱為突觸,可以將該神經元與網路中的其它層連接到一起。
現在訓練這個網路:
// train the network - learn XORvar learningRate =.3;for (var i =0; i <20000; i++){ //0,0=>0
myNetwork.activate([0,0]);
myNetwork.propagate(learningRate,[0]);//0,1=>1
myNetwork.activate([0,1]);
myNetwork.propagate(learningRate,[1]);//1,0=>1
myNetwork.activate([1,0]);
myNetwork.propagate(learningRate,[1]);//1,1=>0
myNetwork.activate([1,1]);
myNetwork.propagate(learningRate,[0]);
}
這里我們運行該網路20000次。每一次我們都前向和反向傳播4 次,為該網路輸入4 組可能的輸入:[0,0][0,1][1,0][1,1]。
首先我們執行 myNetwork.activate([0,0]),其中[0,0]是我們發送給該網路的數據點。這是前向傳播,也稱為激活這個網路。在每次前向傳播之後,我們需要執行反向傳播,這時候網路會更新自己的權重和偏置。
反向傳播是通過這行代碼完成的:myNetwork.propagate(learningRate,[0]),其中 learningRate 是一個常數,給出了網路每次應該調整的權重的量。第二個參數0 是給定輸入[0,0]對應的正確輸出。
然後,該網路將自己的預測與正確的標簽進行比較,從而了解自己的正確程度有多少。
然後網路使用這個比較為基礎來校正自己的權重和偏置值,這樣讓自己的下一次猜測更加正確一點。
這個過程如此反復20000次之後,我們可以使用所有四種可能的輸入來檢查網路的學習情況:
->[0.0]console.log(myNetwork.activate([0,1]));
->[0.]console.log(myNetwork.activate([1,0]));
->[0.]console.log(myNetwork.activate([1,1]));
->[0.0]
如果我們將這些值四捨五入到最近的整數,我們就得到了正確的異或運算結果。
這樣就完成了。盡管這僅僅只碰到了神經網路的表皮,但也足以幫助你進一步探索 Synaptic 和繼續學習了。http://github.com/cazala/synaptic/wiki 這里還包含了更多好教程。
4. 人工神經網路綜述
文章主要分為:
一、人工神經網路的概念;
二、人工神經網路的發展歷史;
三、人工神經網路的特點;
四、人工神經網路的結構。
。。
人工神經網路(Artificial Neural Network,ANN)簡稱神經網路(NN),是基於生物學中神經網路的基本原理,在理解和抽象了人腦結構和外界刺激響應機制後,以網路拓撲知識為理論基礎,模擬人腦的神經系統對復雜信息的處理機制的一種數學模型。該模型以並行分布的處理能力、高容錯性、智能化和自學習等能力為特徵,將信息的加工和存儲結合在一起,以其獨特的知識表示方式和智能化的自適應學習能力,引起各學科領域的關注。它實際上是一個有大量簡單元件相互連接而成的復雜網路,具有高度的非線性,能夠進行復雜的邏輯操作和非線性關系實現的系統。
神經網路是一種運算模型,由大量的節點(或稱神經元)之間相互聯接構成。每個節點代表一種特定的輸出函數,稱為激活函數(activation function)。每兩個節點間的連接都代表一個對於通過該連接信號的加權值,稱之為權重(weight),神經網路就是通過這種方式來模擬人類的記憶。網路的輸出則取決於網路的結構、網路的連接方式、權重和激活函數。而網路自身通常都是對自然界某種演算法或者函數的逼近,也可能是對一種邏輯策略的表達。神經網路的構築理念是受到生物的神經網路運作啟發而產生的。人工神經網路則是把對生物神經網路的認識與數學統計模型相結合,藉助數學統計工具來實現。另一方面在人工智慧學的人工感知領域,我們通過數學統計學的方法,使神經網路能夠具備類似於人的決定能力和簡單的判斷能力,這種方法是對傳統邏輯學演算的進一步延伸。
人工神經網路中,神經元處理單元可表示不同的對象,例如特徵、字母、概念,或者一些有意義的抽象模式。網路中處理單元的類型分為三類:輸入單元、輸出單元和隱單元。輸入單元接受外部世界的信號與數據;輸出單元實現系統處理結果的輸出;隱單元是處在輸入和輸出單元之間,不能由系統外部觀察的單元。神經元間的連接權值反映了單元間的連接強度,信息的表示和處理體現在網路處理單元的連接關系中。人工神經網路是一種非程序化、適應性、大腦風格的信息處理,其本質是通過網路的變換和動力學行為得到一種並行分布式的信息處理功能,並在不同程度和層次上模仿人腦神經系統的信息處理功能。
神經網路,是一種應用類似於大腦神經突觸連接結構進行信息處理的數學模型,它是在人類對自身大腦組織結合和思維機制的認識理解基礎之上模擬出來的,它是根植於神經科學、數學、思維科學、人工智慧、統計學、物理學、計算機科學以及工程科學的一門技術。
在介紹神經網路的發展歷史之前,首先介紹一下神經網路的概念。神經網路主要是指一種仿造人腦設計的簡化的計算模型,這種模型中包含了大量的用於計算的神經元,這些神經元之間會通過一些帶有權重的連邊以一種層次化的方式組織在一起。每一層的神經元之間可以進行大規模的並行計算,層與層之間進行消息的傳遞。
下圖展示了整個神經網路的發展歷程:
神經網路的發展有悠久的歷史。其發展過程大致可以概括為如下4個階段。
(1)、M-P神經網路模型:20世紀40年代,人們就開始了對神經網路的研究。1943 年,美國心理學家麥克洛奇(Mcculloch)和數學家皮茲(Pitts)提出了M-P模型,此模型比較簡單,但是意義重大。在模型中,通過把神經元看作個功能邏輯器件來實現演算法,從此開創了神經網路模型的理論研究。
(2)、Hebb規則:1949 年,心理學家赫布(Hebb)出版了《The Organization of Behavior》(行為組織學),他在書中提出了突觸連接強度可變的假設。這個假設認為學習過程最終發生在神經元之間的突觸部位,突觸的連接強度隨之突觸前後神經元的活動而變化。這一假設發展成為後來神經網路中非常著名的Hebb規則。這一法則告訴人們,神經元之間突觸的聯系強度是可變的,這種可變性是學習和記憶的基礎。Hebb法則為構造有學習功能的神經網路模型奠定了基礎。
(3)、感知器模型:1957 年,羅森勃拉特(Rosenblatt)以M-P 模型為基礎,提出了感知器(Perceptron)模型。感知器模型具有現代神經網路的基本原則,並且它的結構非常符合神經生理學。這是一個具有連續可調權值矢量的MP神經網路模型,經過訓練可以達到對一定的輸入矢量模式進行分類和識別的目的,它雖然比較簡單,卻是第一個真正意義上的神經網路。Rosenblatt 證明了兩層感知器能夠對輸入進行分類,他還提出了帶隱層處理元件的三層感知器這一重要的研究方向。Rosenblatt 的神經網路模型包含了一些現代神經計算機的基本原理,從而形成神經網路方法和技術的重大突破。
(4)、ADALINE網路模型: 1959年,美國著名工程師威德羅(B.Widrow)和霍夫(M.Hoff)等人提出了自適應線性元件(Adaptive linear element,簡稱Adaline)和Widrow-Hoff學習規則(又稱最小均方差演算法或稱δ規則)的神經網路訓練方法,並將其應用於實際工程,成為第一個用於解決實際問題的人工神經網路,促進了神經網路的研究應用和發展。ADALINE網路模型是一種連續取值的自適應線性神經元網路模型,可以用於自適應系統。
人工智慧的創始人之一Minsky和Papert對以感知器為代表的網路系統的功能及局限性從數學上做了深入研究,於1969年發表了轟動一時《Perceptrons》一書,指出簡單的線性感知器的功能是有限的,它無法解決線性不可分的兩類樣本的分類問題,如簡單的線性感知器不可能實現「異或」的邏輯關系等。這一論斷給當時人工神經元網路的研究帶來沉重的打擊。開始了神經網路發展史上長達10年的低潮期。
(1)、自組織神經網路SOM模型:1972年,芬蘭的KohonenT.教授,提出了自組織神經網路SOM(Self-Organizing feature map)。後來的神經網路主要是根據KohonenT.的工作來實現的。SOM網路是一類無導師學習網路,主要用於模式識別﹑語音識別及分類問題。它採用一種「勝者為王」的競爭學習演算法,與先前提出的感知器有很大的不同,同時它的學習訓練方式是無指導訓練,是一種自組織網路。這種學習訓練方式往往是在不知道有哪些分類類型存在時,用作提取分類信息的一種訓練。
(2)、自適應共振理論ART:1976年,美國Grossberg教授提出了著名的自適應共振理論ART(Adaptive Resonance Theory),其學習過程具有自組織和自穩定的特徵。
(1)、Hopfield模型:1982年,美國物理學家霍普菲爾德(Hopfield)提出了一種離散神經網路,即離散Hopfield網路,從而有力地推動了神經網路的研究。在網路中,它首次將李雅普諾夫(Lyapunov)函數引入其中,後來的研究學者也將Lyapunov函數稱為能量函數。證明了網路的穩定性。1984年,Hopfield 又提出了一種連續神經網路,將網路中神經元的激活函數由離散型改為連續型。1985 年,Hopfield和Tank利用Hopfield神經網路解決了著名的旅行推銷商問題(Travelling Salesman Problem)。Hopfield神經網路是一組非線性微分方程。Hopfield的模型不僅對人工神經網路信息存儲和提取功能進行了非線性數學概括,提出了動力方程和學習方程,還對網路演算法提供了重要公式和參數,使人工神經網路的構造和學習有了理論指導,在Hopfield模型的影響下,大量學者又激發起研究神經網路的熱情,積極投身於這一學術領域中。因為Hopfield 神經網路在眾多方面具有巨大潛力,所以人們對神經網路的研究十分地重視,更多的人開始了研究神經網路,極大地推動了神經網路的發展。
(2)、Boltzmann機模型:1983年,Kirkpatrick等人認識到模擬退火演算法可用於NP完全組合優化問題的求解,這種模擬高溫物體退火過程來找尋全局最優解的方法最早由Metropli等人1953年提出的。1984年,Hinton與年輕學者Sejnowski等合作提出了大規模並行網路學習機,並明確提出隱單元的概念,這種學習機後來被稱為Boltzmann機。
Hinton和Sejnowsky利用統計物理學的感念和方法,首次提出的多層網路的學習演算法,稱為Boltzmann 機模型。
(3)、BP神經網路模型:1986年,儒默哈特(D.E.Ru melhart)等人在多層神經網路模型的基礎上,提出了多層神經網路權值修正的反向傳播學習演算法----BP演算法(Error Back-Propagation),解決了多層前向神經網路的學習問題,證明了多層神經網路具有很強的學習能力,它可以完成許多學習任務,解決許多實際問題。
(4)、並行分布處理理論:1986年,由Rumelhart和McCkekkand主編的《Parallel Distributed Processing:Exploration in the Microstructures of Cognition》,該書中,他們建立了並行分布處理理論,主要致力於認知的微觀研究,同時對具有非線性連續轉移函數的多層前饋網路的誤差反向傳播演算法即BP演算法進行了詳盡的分析,解決了長期以來沒有權值調整有效演算法的難題。可以求解感知機所不能解決的問題,回答了《Perceptrons》一書中關於神經網路局限性的問題,從實踐上證實了人工神經網路有很強的運算能力。
(5)、細胞神經網路模型:1988年,Chua和Yang提出了細胞神經網路(CNN)模型,它是一個細胞自動機特性的大規模非線性計算機模擬系統。Kosko建立了雙向聯想存儲模型(BAM),它具有非監督學習能力。
(6)、Darwinism模型:Edelman提出的Darwinism模型在90年代初產生了很大的影響,他建立了一種神經網路系統理論。
(7)、1988年,Linsker對感知機網路提出了新的自組織理論,並在Shanon資訊理論的基礎上形成了最大互信息理論,從而點燃了基於NN的信息應用理論的光芒。
(8)、1988年,Broomhead和Lowe用徑向基函數(Radialbasis function, RBF)提出分層網路的設計方法,從而將NN的設計與數值分析和線性適應濾波相掛鉤。
(9)、1991年,Haken把協同引入神經網路,在他的理論框架中,他認為,認知過程是自發的,並斷言模式識別過程即是模式形成過程。
(10)、1994年,廖曉昕關於細胞神經網路的數學理論與基礎的提出,帶來了這個領域新的進展。通過拓廣神經網路的激活函數類,給出了更一般的時滯細胞神經網路(DCNN)、Hopfield神經網路(HNN)、雙向聯想記憶網路(BAM)模型。
(11)、90年代初,Vapnik等提出了支持向量機(Supportvector machines, SVM)和VC(Vapnik-Chervonenkis)維數的概念。
經過多年的發展,已有上百種的神經網路模型被提出。
深度學習(Deep Learning,DL)由Hinton等人於2006年提出,是機器學習的一個新領域。深度學習本質上是構建含有多隱層的機器學習架構模型,通過大規模數據進行訓練,得到大量更具代表性的特徵信息。深度學習演算法打破了傳統神經網路對層數的限制,可根據設計者需要選擇網路層數。
突觸是神經元之間相互連接的介面部分,即一個神經元的神經末梢與另一個神經元的樹突相接觸的交界面,位於神經元的神經末梢尾端。突觸是軸突的終端。
大腦可視作為1000多億神經元組成的神經網路。神經元的信息傳遞和處理是一種電化學活動.樹突由於電化學作用接受外界的刺激,通過胞體內的活動體現為軸突電位,當軸突電位達到一定的值則形成神經脈沖或動作電位;再通過軸突末梢傳遞給其它的神經元.從控制論的觀點來看;這一過程可以看作一個多輸入單輸出非線性系統的動態過程。
神經元的功能特性:(1)時空整合功能;(2)神經元的動態極化性;(3)興奮與抑制狀態;(4)結構的可塑性;(5)脈沖與電位信號的轉換;(6)突觸延期和不應期;(7)學習、遺忘和疲勞。
神經網路從兩個方面模擬大腦:
(1)、神經網路獲取的知識是從外界環境中學習得來的。
(2)、內部神經元的連接強度,即突觸權值,用於儲存獲取的知識。
神經網路系統由能夠處理人類大腦不同部分之間信息傳遞的由大量神經元連接形成的拓撲結構組成,依賴於這些龐大的神經元數目和它們之間的聯系,人類的大腦能夠收到輸入的信息的刺激由分布式並行處理的神經元相互連接進行非線性映射處理,從而實現復雜的信息處理和推理任務。
對於某個處理單元(神經元)來說,假設來自其他處理單元(神經元)i的信息為Xi,它們與本處理單元的互相作用強度即連接權值為Wi, i=0,1,…,n-1,處理單元的內部閾值為θ。那麼本處理單元(神經元)的輸入為:
,而處理單元的輸出為:
式中,xi為第i個元素的輸入,wi為第i個處理單元與本處理單元的互聯權重即神經元連接權值。f稱為激活函數或作用函數,它決定節點(神經元)的輸出。θ表示隱含層神經節點的閾值。
神經網路的主要工作是建立模型和確定權值,一般有前向型和反饋型兩種網路結構。通常神經網路的學習和訓練需要一組輸入數據和輸出數據對,選擇網路模型和傳遞、訓練函數後,神經網路計算得到輸出結果,根據實際輸出和期望輸出之間的誤差進行權值的修正,在網路進行判斷的時候就只有輸入數據而沒有預期的輸出結果。神經網路一個相當重要的能力是其網路能通過它的神經元權值和閾值的不斷調整從環境中進行學習,直到網路的輸出誤差達到預期的結果,就認為網路訓練結束。
對於這樣一種多輸入、單輸出的基本單元可以進一步從生物化學、電生物學、數學等方面給出描述其功能的模型。利用大量神經元相互連接組成的人工神經網路,將顯示出人腦的若干特徵,人工神經網路也具有初步的自適應與自組織能力。在學習或訓練過程中改變突觸權重wij值,以適應周圍環境的要求。同一網路因學習方式及內容不同可具有不同的功能。人工神經網路是一個具有學習能力的系統,可以發展知識,以至超過設計者原有的知識水平。通常,它的學習(或訓練)方式可分為兩種,一種是有監督(supervised)或稱有導師的學習,這時利用給定的樣本標准進行分類或模仿;另一種是無監督(unsupervised)學習或稱無導師學習,這時,只規定學習方式或某些規則,而具體的學習內容隨系統所處環境(即輸入信號情況)而異,系統可以自動發現環境特徵和規律性,具有更近似於人腦的功能。
在人工神經網路設計及應用研究中,通常需要考慮三個方面的內容,即神經元激活函數、神經元之間的連接形式和網路的學習(訓練)。
5. 神經網路的發展趨勢如何
神經網路的雲集成模式還不是很成熟,應該有發展潛力,但神經網路有自己的硬傷,不知道能夠達到怎樣的效果,所以決策支持系統中並不是很熱門,但是神經網路無視過程的優點也是無可替代的,雲網路如果能夠對神經網路提供一個互補的輔助決策以控制誤差的話,也許就能使神經網路成熟起來
1 人工神經網路產生的背景
自古以來,關於人類智能本源的奧秘,一直吸引著無數哲學家和自然科學家的研究熱情。生物學家、神經學家經過長期不懈的努力,通過對人腦的觀察和認識,認為人腦的智能活動離不開腦的物質基礎,包括它的實體結構和其中所發生的各種生物、化學、電學作用,並因此建立了神經元網路理論和神經系統結構理論,而神經元理論又是此後虛帆神經傳導理論和大腦功能學說的基礎。在這些理論基礎之上,科學家們認為,可以從仿製人腦神經系統的結構和功能出發,研究人類智能活動和認識現象。另一方面,19世紀之前,無論是以歐氏幾何和微積分為代表的經典數學,還是以牛頓力學為代表的經典物理學,從總體上說,這些經典科學都是線性科學。然而,客觀世界是如此的紛繁復雜,非線性情況隨處可見,人腦神經系統更是如此。復雜性和非線性是連接在一起的,因此,對非線性科學的研究也是我們認識復雜系統的關鍵。為了更好地認識客觀世界,我們必須對非線性科學進行研究。人工神經網路作為一種非線性的、與大腦智能相似的網路模型,就這樣應運而生了。所以,人工神經網路的創立不是偶然的,而是20世紀初科學技術充分發展的產物。
2 人工神經網路的發展
人工神經網路的研究始於40年代初。半個世紀以來,經歷了興起、高潮與蕭條、高潮及穩步發展的遠為曲折的道路。
1943年,心理學家W.S.Mcculloch和數理邏輯學家W.Pitts 提出了M—P模型,這是第一個用數理語言描述腦的信息處理過程的模型, 雖然神經元的功能比較弱,但它為以後的研究工作提供了依據。1949年,心理學家D.O.Hebb提出突觸聯系可變的假設,根據這一假設提出的學習規律為神經網路的學習演算法奠定了基礎。 1957 年, 計算機科學家Rosenblatt提出了著名的感知機模型,它的模型包含了現代計算機的一些原理,是第一個完整的人工神經網路,第一次把神經網路研究付諸工程實現。由於可應用於模式識別,聯想記憶等方面,當時有上百家實驗室投入此項研究,美國軍方甚至認為神經網路工程應當比「原子彈工程」更重要而給予巨額資助,並在聲納信號識別等領域取得一定成績。1960年,B.Windrow和E.Hoff提出了自適應線性單元, 它可用於自適應濾波、預測和模式識別。至此,人工神經網路的研究工作進入了第一個高潮。
1969年,美國著名人工智慧學者M.Minsky和S.Papert編寫了影響很大的Perceptron一書,從理論上證明單層感知機的能力有限,諸如不能解決異或問題,而且他們推測多層網路的感知機能力也不過如此,他們的分析恰似一瓢冷水,很多學者感到前途渺茫而紛紛改行,原先參與研究的實驗室紛紛退出,在這之後近10年,神經網路研究進入了一個緩慢發展的蕭條期。這期間,芬蘭學者T.Kohonen 提出了自組織映射理論,反映了大腦神經細胞的自組織特性、記憶方式以及神經細胞興奮刺激的規律;美國學者S.A.Grossberg的自適應共振理論(ART );日本學者K.Fukushima提判租出了認知機模型;ShunIchimari則致力於神經網路有關數學理論的研究等,這些研究成果對以後的神經網路的發展產生了重要影響。
美國生物物理學家J.J.Hopfield於1982年、1984年在美國科學院院刊發表的兩篇文章,有力地推動了神經網路的研究,引起了研究神經網路的又一次熱潮。 1982 年, 他提出了一個新的神經網路模型——hopfield網路模型。他在這種網路模型的研究中,首次引入了網路能量函數的概念,並給出了網路穩定性的判定依據。1984年,他又提出了網路模型實現的電子電路,為神經網路的工程實現指明了方向,他的研究成果開拓了神經網路用於聯想記憶的優化計算的新途徑,並為差沖雹神經計算機研究奠定了基礎。1984年Hinton等人將模擬退火演算法引入到神經網路中,提出了Boltzmann機網路模型,BM 網路演算法為神經網路優化計算提供了一個有效的方法。1986年,D.E.Rumelhart和J.LMcclelland提出了誤差反向傳播演算法,成為至今為止影響很大的一種網路學習方法。1987年美國神經計算機專家R.Hecht—Nielsen提出了對向傳播神經網路,該網路具有分類靈活,演算法簡練的優點,可用於模式分類、函數逼近、統計分析和數據壓縮等領域。1988年L.Ochua 等人提出了細胞神經網路模型,它在視覺初級加工上得到了廣泛應用。
為適應人工神經網路的發展,1987年成立了國際神經網路學會,並決定定期召開國際神經網路學術會議。1988年1月Neural Network 創刊。1990年3月IEEE Transaction on Neural Network問世。 我國於1990年12月在北京召開了首屆神經網路學術大會,並決定以後每年召開一次。1991 年在南京成立了中國神經網路學會。 IEEE 與INNS 聯合召開的IJCNN92已在北京召開。 這些為神經網路的研究和發展起了推波助瀾的作用,人工神經網路步入了穩步發展的時期。
90年代初,諾貝爾獎獲得者Edelman提出了Darwinism模型,建立了神經網路系統理論。同年,Aihara等在前人推導和實驗的基礎上,給出了一個混沌神經元模型,該模型已成為一種經典的混沌神經網路模型,該模型可用於聯想記憶。 Wunsch 在90OSA 年會上提出了一種AnnualMeeting,用光電執行ART,學習過程有自適應濾波和推理功能,具有快速和穩定的學習特點。1991年,Hertz探討了神經計算理論, 對神經網路的計算復雜性分析具有重要意義;Inoue 等提出用耦合的混沌振盪子作為某個神經元,構造混沌神經網路模型,為它的廣泛應用前景指明了道路。1992年,Holland用模擬生物進化的方式提出了遺傳演算法, 用來求解復雜優化問題。1993年方建安等採用遺傳演算法學習,研究神經網路控制器獲得了一些結果。1994年Angeline等在前人進化策略理論的基礎上,提出一種進化演算法來建立反饋神經網路,成功地應用到模式識別,自動控制等方面;廖曉昕對細胞神經網路建立了新的數學理論和方法,得到了一系列結果。HayashlY根據動物大腦中出現的振盪現象,提出了振盪神經網路。1995年Mitra把人工神經網路與模糊邏輯理論、 生物細胞學說以及概率論相結合提出了模糊神經網路,使得神經網路的研究取得了突破性進展。Jenkins等人研究光學神經網路, 建立了光學二維並行互連與電子學混合的光學神經網路,它能避免網路陷入局部最小值,並最後可達到或接近最理想的解;SoleRV等提出流體神經網路,用來研究昆蟲社會,機器人集體免疫系統,啟發人們用混沌理論分析社會大系統。1996年,ShuaiJW』等模擬人腦的自發展行為, 在討論混沌神經網路的基礎上提出了自發展神經網路。1997、1998年董聰等創立和完善了廣義遺傳演算法,解決了多層前向網路的最簡拓樸構造問題和全局最優逼近問題。
隨著理論工作的發展,神經網路的應用研究也取得了突破性進展,涉及面非常廣泛,就應用的技術領域而言有計算機視覺,語言的識別、理解與合成,優化計算,智能控制及復雜系統分析,模式識別,神經計算機研製,知識推理專家系統與人工智慧。涉及的學科有神經生理學、認識科學、數理科學、心理學、信息科學、計算機科學、微電子學、光學、動力學、生物電子學等。美國、日本等國在神經網路計算機軟硬體實現的開發方面也取得了顯著的成績,並逐步形成產品。在美國,神經計算機產業已獲得軍方的強有力支持,國防部高級研究計劃局認為「神經網路是解決機器智能的唯一希望」,僅一項8 年神經計算機計劃就投資4億美元。在歐洲共同體的ESPRIT計劃中, 就有一項特別項目:「神經網路在歐洲工業中的應用」,單是生產神經網路專用晶元這一項就投資2200萬美元。據美國資料聲稱,日本在神經網路研究上的投資大約是美國的4倍。我國也不甘落後,自從1990 年批准了南開大學的光學神經計算機等3項課題以來, 國家自然科學基金與國防預研基金也都為神經網路的研究提供資助。另外,許多國際著名公司也紛紛捲入對神經網路的研究,如Intel、IBM、Siemens、HNC。神經計算機產品開始走向商用階段,被國防、企業和科研部門選用。在舉世矚目的海灣戰爭中,美國空軍採用了神經網路來進行決策與控制。在這種刺激和需求下,人工神經網路定會取得新的突破,迎來又一個高潮。自1958年第一個神經網路誕生以來,其理論與應用成果不勝枚舉。人工神經網路是一個快速發展著的一門新興學科,新的模型、新的理論、新的應用成果正在層出不窮地涌現出來。
3 人工神經網路的發展前景
針對神經網路存在的問題和社會需求,今後發展的主要方向可分為理論研究和應用研究兩個方面。
(1)利用神經生理與認識科學研究大腦思維及智能的機理、 計算理論,帶著問題研究理論。
人工神經網路提供了一種揭示智能和了解人腦工作方式的合理途徑,但是由於人類起初對神經系統了解非常有限,對於自身腦結構及其活動機理的認識還十分膚淺,並且帶有某種「先驗」。例如, Boltzmann機引入隨機擾動來避免局部極小,有其卓越之處,然而缺乏必要的腦生理學基礎,毫無疑問,人工神經網路的完善與發展要結合神經科學的研究。而且,神經科學,心理學和認識科學等方面提出的一些重大問題,是向神經網路理論研究提出的新挑戰,這些問題的解決有助於完善和發展神經網路理論。因此利用神經生理和認識科學研究大腦思維及智能的機理,如有新的突破,將會改變智能和機器關系的認識。
利用神經科學基礎理論的研究成果,用數理方法探索智能水平更高的人工神經網路模型,深入研究網路的演算法和性能,如神經計算、進化計算、穩定性、收斂性、計算復雜性、容錯性、魯棒性等,開發新的網路數理理論。由於神經網路的非線性,因此非線性問題的研究是神經網路理論發展的一個最大動力。特別是人們發現,腦中存在著混沌現象以來,用混沌動力學啟發神經網路的研究或用神經網路產生混沌成為擺在人們面前的一個新課題,因為從生理本質角度出發是研究神經網路的根本手段。
(2)神經網路軟體模擬, 硬體實現的研究以及神經網路在各個科學技術領域應用的研究。
由於人工神經網路可以用傳統計算機模擬,也可以用集成電路晶元組成神經計算機,甚至還可以用光學的、生物晶元的方式實現,因此研製純軟體模擬,虛擬模擬和全硬體實現的電子神經網路計算機潛力巨大。如何使神經網路計算機與傳統的計算機和人工智慧技術相結合也是前沿課題;如何使神經網路計算機的功能向智能化發展,研製與人腦功能相似的智能計算機,如光學神經計算機,分子神經計算機,將具有十分誘人的前景。
4 哲理
(1)人工神經網路打開了認識論的新領域
認識與腦的問題,長期以來一直受到人們的關注,因為它不僅是有關人的心理、意識的心理學問題,也是有關人的思維活動機制的腦科學與思維科學問題,而且直接關繫到對物質與意識的哲學基本問題的回答。人工神經網路的發展使我們能夠更進一步地既唯物又辯證地理解認識與腦的關系,打開認識論的新領域。人腦是一個復雜的並行系統,它具有「認知、意識、情感」等高級腦功能,用人工進行模擬,有利於加深對思維及智能的認識,已對認知和智力的本質的研究產生了極大的推動作用。在研究大腦的整體功能和復雜性方面,人工神經網路給人們帶來了新的啟迪。由於人腦中存在混沌現象,混沌可用來理解腦中某些不規則的活動,從而混沌動力學模型能用作人對外部世界建模的工具,可用來描述人腦的信息處理過程。混沌和智能是有關的,神經網路中引入混沌學思想有助於提示人類形象思維等方面的奧秘。人工神經網路之所以再度興起,關鍵在於它反映了事物的非線性,抓住了客觀世界的本質,而且它在一定程度上正面回答了智能系統如何從環境中自主學習這一最關鍵的問題,從認知的角度講,所謂學習,就是對未知現象或規律的發現和歸納。由於神經網路具有高度的並行性,高度的非線性全局作用,良好的容錯性與聯想記憶功能以及十分強的自適應、自學習功能,而使得它成為揭示智能和了解人腦工作方式的合理途徑。但是,由於認知問題的復雜性,目前,我們對於腦神經網的運行和神經細胞的內部處理機制,如信息在人腦是如何傳輸、存貯、加工的?記憶、聯想、判斷是如何形成的?大腦是否存在一個操作系統?還沒有太多的認識,因此要製造人工神經網路來模仿人腦各方面的功能,還有待於人們對大腦信息處理機理認識的深化。
(2)人工神經網路發展的推動力來源於實踐、 理論和問題的相互作用
隨著人們社會實踐范圍的不斷擴大,社會實踐層次的不斷深入,人們所接觸到的自然現象也越來越豐富多彩、紛繁復雜,這就促使人們用不同的原因加以解釋不同種類的自然現象,當不同種類的自然現象可以用同樣的原因加以解釋,這樣就出現了不同學科的相互交叉、綜合,人工神經網路就這樣產生了。在開始階段,由於這些理論化的網路模型比較簡單,還存在許多問題,而且這些模型幾乎沒有得到實踐的檢驗,因而神經網路的發展比較緩慢。隨著理論研究的深入,問題逐漸地解決特別是工程上得到實現以後,如聲納識別成功,才迎來了神經網路的第一個發展高潮。可Minisky認為感知器不能解決異或問題, 多層感知器也不過如此,神經網路的研究進入了低谷,這主要是因為非線性問題沒得到解決。隨著理論的不斷豐富,實踐的不斷深入, 現在已證明Minisky的悲觀論調是錯誤的。今天,高度發達的科學技術逐漸揭示了非線性問題是客觀世界的本質。問題、理論、實踐的相互作用又迎來了人工神經網路的第二次高潮。目前人工神經網路的問題是智能水平不高,還有其它理論和實現方面的問題,這就迫使人們不斷地進行理論研究,不斷實踐,促使神經網路不斷向前發展。總之,先前的原因遇到了解釋不同的新現象,促使人們提出更加普遍和精確的原因來解釋。理論是基礎,實踐是動力,但單純的理論和實踐的作用還不能推動人工神經網路的發展,還必須有問題提出,才能吸引科學家進入研究的特定范圍,引導科學家從事相關研究,從而逼近科學發現,而後實踐又提出新問題,新問題又引發新的思考,促使科學家不斷思考,不斷完善理論。人工神經網路的發展無不體現著問題、理論和實踐的辯證統一關系。
(3 )人工神經網路發展的另一推動力來源於相關學科的貢獻及不同學科專家的競爭與協同
人工神經網路本身就是一門邊緣學科,它的發展有更廣闊的科學背景,亦即是眾多科研成果的綜合產物,控制論創始人Wiener在其巨著《控制論》中就進行了人腦神經元的研究;計算機科學家Turing就提出過B網路的設想;Prigogine提出非平衡系統的自組織理論,獲得諾貝爾獎;Haken研究大量元件聯合行動而產生宏觀效果, 非線性系統「混沌」態的提出及其研究等,都是研究如何通過元件間的相互作用建立復雜系統,類似於生物系統的自組織行為。腦科學與神經科學的進展迅速反映到人工神經網路的研究中,例如生物神經網路理論,視覺中發現的側抑制原理,感受野概念等,為神經網路的發展起了重要的推動作用。從已提出的上百種人工神經網路模型中,涉及學科之多,令人目不暇接,其應用領域之廣,令人嘆為觀止。不同學科專家為了在這一領域取得領先水平,存在著不同程度的競爭,所有這些有力地推動了人工神經網路的發展。人腦是一個功能十分強大、結構異常復雜的信息系統,隨著資訊理論、控制論、生命科學,計算機科學的發展,人們越來越驚異於大腦的奇妙,至少到目前為止,人類大腦信號處理機制對人類自身來說,仍是一個黑盒子,要揭示人腦的奧秘需要神經學家、心理學家、計算機科學家、微電子學家、數學家等專家的共同努力,對人類智能行為不斷深入研究,為人工神經網路發展提供豐富的理論源泉。另外,還要有哲學家的參與,通過哲學思想和自然科學多種學科的深層結合,逐步孕育出探索人類思維本質和規律的新方法,使思維科學從朦朧走向理性。而且,不同領域專家的競爭與協調同有利於問題清晰化和尋求最好的解決途徑。縱觀神經網路的發展歷史,沒有相關學科的貢獻,不同學科專家的競爭與協同,神經網路就不會有今天。當然,人工神經網路在各個學科領域應用的研究反過來又推動其它學科的發展,推動自身的完善和發展。
6. 神經網路能實現異或運功能嗎
NOT是很容易的。XOR加隱層就能實現。理論上已證明,對於只有一個隱層的感知器網路,只要隱層中的神經元個數足夠多,就可以實現對任意函數的逼近。
7. 神經網路的歷史是什麼
沃倫·麥卡洛克和沃爾特·皮茨(1943)基於數學和一種稱為閾值邏輯的演算法創造了一種神經網路的計算模型。這種模型使得神經網路的研究分裂為兩種不同研究思路。一種主要關注大腦中的生物學過程,另一種主要關注神經網路在人工智慧里的應用。
一、赫布型學習
二十世紀40年代後期,心理學家唐納德·赫布根據神經可塑性的機制創造了一種對學習的假說,現在稱作赫布型學習。赫布型學習被認為是一種典型的非監督式學習規則,它後來的變種是長期增強作用的早期模型。從1948年開始,研究人員將這種計算模型的思想應用到B型圖靈機上。
法利和韋斯利·A·克拉克(1954)首次使用計算機,當時稱作計算器,在MIT模擬了一個赫布網路。納撒尼爾·羅切斯特(1956)等人模擬了一台 IBM 704計算機上的抽象神經網路的行為。
弗蘭克·羅森布拉特創造了感知機。這是一種模式識別演算法,用簡單的加減法實現了兩層的計算機學習網路。羅森布拉特也用數學符號描述了基本感知機里沒有的迴路,例如異或迴路。這種迴路一直無法被神經網路處理,直到保羅·韋伯斯(1975)創造了反向傳播演算法。
在馬文·明斯基和西摩爾·派普特(1969)發表了一項關於機器學習的研究以後,神經網路的研究停滯不前。他們發現了神經網路的兩個關鍵問題。
第一是基本感知機無法處理異或迴路。第二個重要的問題是電腦沒有足夠的能力來處理大型神經網路所需要的很長的計算時間。直到計算機具有更強的計算能力之前,神經網路的研究進展緩慢。
二、反向傳播演算法與復興
後來出現的一個關鍵的進展是保羅·韋伯斯發明的反向傳播演算法(Werbos 1975)。這個演算法有效地解決了異或的問題,還有更普遍的訓練多層神經網路的問題。
在二十世紀80年代中期,分布式並行處理(當時稱作聯結主義)流行起來。戴維·魯姆哈特和詹姆斯·麥克里蘭德的教材對於聯結主義在計算機模擬神經活動中的應用提供了全面的論述。
神經網路傳統上被認為是大腦中的神經活動的簡化模型,雖然這個模型和大腦的生理結構之間的關聯存在爭議。人們不清楚人工神經網路能多大程度地反映大腦的功能。
支持向量機和其他更簡單的方法(例如線性分類器)在機器學習領域的流行度逐漸超過了神經網路,但是在2000年代後期出現的深度學習重新激發了人們對神經網路的興趣。
三、2006年之後的進展
人們用CMOS創造了用於生物物理模擬和神經形態計算的計算設備。最新的研究顯示了用於大型主成分分析和卷積神經網路的納米設備具有良好的前景。
如果成功的話,這會創造出一種新的神經計算設備,因為它依賴於學習而不是編程,並且它從根本上就是模擬的而不是數字化的,雖然它的第一個實例可能是數字化的CMOS設備。
在2009到2012年之間,Jürgen Schmidhuber在Swiss AI Lab IDSIA的研究小組研發的循環神經網路和深前饋神經網路贏得了8項關於模式識別和機器學習的國際比賽。
例如,Alex Graves et al.的雙向、多維的LSTM贏得了2009年ICDAR的3項關於連筆字識別的比賽,而且之前並不知道關於將要學習的3種語言的信息。
IDSIA的Dan Ciresan和同事根據這個方法編寫的基於GPU的實現贏得了多項模式識別的比賽,包括IJCNN 2011交通標志識別比賽等等。
他們的神經網路也是第一個在重要的基準測試中(例如IJCNN 2012交通標志識別和NYU的揚·勒丘恩(Yann LeCun)的MNIST手寫數字問題)能達到或超過人類水平的人工模式識別器。
類似1980年Kunihiko Fukushima發明的neocognitron和視覺標准結構(由David H. Hubel和Torsten Wiesel在初級視皮層中發現的那些簡單而又復雜的細胞啟發)那樣有深度的、高度非線性的神經結構可以被多倫多大學傑弗里·辛頓實驗室的非監督式學習方法所訓練。
2012年,神經網路出現了快速的發展,主要原因在於計算技術的提高,使得很多復雜的運算變得成本低廉。以AlexNet為標志,大量的深度網路開始出現。
2014年出現了殘差神經網路,該網路極大解放了神經網路的深度限制,出現了深度學習的概念。
構成
典型的人工神經網路具有以下三個部分:
1、結構(Architecture)結構指定了網路中的變數和它們的拓撲關系。例如,神經網路中的變數可以是神經元連接的權重(weights)和神經元的激勵值(activities of the neurons)。
2、激勵函數(Activation Rule)大部分神經網路模型具有一個短時間尺度的動力學規則,來定義神經元如何根據其他神經元的活動來改變自己的激勵值。一般激勵函數依賴於網路中的權重(即該網路的參數)。
3、學習規則(Learning Rule)學習規則指定了網路中的權重如何隨著時間推進而調整。這一般被看做是一種長時間尺度的動力學規則。一般情況下,學習規則依賴於神經元的激勵值。它也可能依賴於監督者提供的目標值和當前權重的值。
例如,用於手寫識別的一個神經網路,有一組輸入神經元。輸入神經元會被輸入圖像的數據所激發。在激勵值被加權並通過一個函數(由網路的設計者確定)後,這些神經元的激勵值被傳遞到其他神經元。
這個過程不斷重復,直到輸出神經元被激發。最後,輸出神經元的激勵值決定了識別出來的是哪個字母。
8. 神經網路淺談
人工智慧技術是當前炙手可熱的話題,而基於神經網路的深度學習技術更是熱點中的熱點。去年穀歌的Alpha Go 以4:1大比分的優勢戰勝韓國的李世石九段,展現了深度學習的強大威力,後續強化版的Alpha Master和無師自通的Alpha Zero更是在表現上完全碾壓前者。不論你怎麼看,以深度學習為代表的人工智慧技術正在塑造未來。
下圖為英偉達(NVIDIA)公司近年來的股價情況, 該公司的主要產品是「圖形處理器」(GPU),而GPU被證明能大大加快神經網路的訓練速度,是深度學習必不可少的計算組件。英偉達公司近年來股價的飛漲足以證明當前深度學習的井噴之勢。
好,話不多說,下面簡要介紹神經網路的基本原理、發展脈絡和優勢。
神經網路是一種人類由於受到生物神經細胞結構啟發而研究出的一種演算法體系,是機器學習演算法大類中的一種。首先讓我們來看人腦神經元細胞:
一個神經元通常具有多個樹突 ,主要用來接受傳入信息,而軸突只有一條,軸突尾端有許多軸突末梢,可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號。
下圖是一個經典的神經網路(Artificial Neural Network,ANN):
乍一看跟傳統互聯網的拓撲圖有點類似,這也是稱其為網路的原因,不同的是節點之間通過有向線段連接,並且節點被分成三層。我們稱圖中的圓圈為神經元,左邊三個神經元組成的一列為輸入層,中間神經元列為隱藏層,右邊神經元列為輸出層,神經元之間的箭頭為權重。
神經元是計算單元,相當於神經元細胞的細胞核,利用輸入的數據進行計算,然後輸出,一般由一個線性計算部分和一個非線性計算部分組成;輸入層和輸出層實現數據的輸入輸出,相當於細胞的樹突和軸突末梢;隱藏層指既不是輸入也不是輸出的神經元層,一個神經網路可以有很多個隱藏層。
神經網路的關鍵不是圓圈代表的神經元,而是每條連接線對應的權重。每條連接線對應一個權重,也就是一個參數。權重具體的值需要通過神經網路的訓練才能獲得。我們實際生活中的學習體現在大腦中就是一系列神經網路迴路的建立與強化,多次重復的學習能讓迴路變得更加粗壯,使得信號的傳遞速度加快,最後對外表現為「深刻」的記憶。人工神經網路的訓練也借鑒於此,如果某種映射關系出現很多次,那麼在訓練過程中就相應調高其權重。
1943年,心理學家McCulloch和數學家Pitts參考了生物神經元的結構,發表了抽象的神經元模型MP:
符號化後的模型如下:
Sum函數計算各權重與輸入乘積的線性組合,是神經元中的線性計算部分,而sgn是取符號函數,當輸入大於0時,輸出1,反之輸出0,是神經元中的非線性部分。向量化後的公式為z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。
但是,MP模型中,權重的值都是預先設置的,因此不能學習。該模型雖然簡單,並且作用有限,但已經建立了神經網路大廈的地基
1958年,計算科學家Rosenblatt提出了由兩層神經元組成(一個輸入層,一個輸出層)的神經網路。他給它起了一個名字–「感知器」(Perceptron)
感知器是當時首個可以學習的人工神經網路。Rosenblatt現場演示了其學習識別簡單圖像的過程,在當時引起了轟動,掀起了第一波神經網路的研究熱潮。
但感知器只能做簡單的線性分類任務。1969年,人工智慧領域的巨擘Minsky指出這點,並同時指出感知器對XOR(異或,即兩個輸入相同時輸出0,不同時輸出1)這樣的簡單邏輯都無法解決。所以,明斯基認為神經網路是沒有價值的。
隨後,神經網路的研究進入低谷,又稱 AI Winter 。
Minsky說過單層神經網路無法解決異或問題,但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。
下圖為兩層神經網路(輸入層一般不算在內):
上圖中,輸出層的輸入是上一層的輸出。
向量化後的公式為:
注意:
每個神經元節點默認都有偏置變數b,加上偏置變數後的計算公式為:
同時,兩層神經網路不再使用sgn函數作為激勵函數,而採用平滑的sigmoid函數:
σ(z)=1/(1+e^(-z) )
其圖像如下:
理論證明: 兩層及以上的神經網路可以無限逼近真實的對應函數,從而模擬數據之間的真實關系 ,這是神經網路強大預測能力的根本。但兩層神經網路的計算量太大,當時的計算機的計算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的復雜計算量問題,帶動了業界使用兩層神經網路研究的熱潮。
但好景不長,演算法的改進僅使得神經網路風光了幾年,然而計算能力不夠,局部最優解,調參等一系列問題一直困擾研究人員。90年代中期,由Vapnik等人發明的SVM(Support Vector Machines,支持向量機)演算法誕生,很快就在若干個方面體現出了對比神經網路的優勢:無需調參;高效;全局最優解。
由於以上原因,SVM迅速打敗了神經網路演算法成為主流。神經網路的研究再一次進入低谷, AI Winter again 。
多層神經網路一般指兩層或兩層以上的神經網路(不包括輸入層),更多情況下指兩層以上的神經網路。
2006年,Hinton提出使用 預訓練 」(pre-training)和「微調」(fine-tuning)技術能優化神經網路訓練,大幅度減少訓練多層神經網路的時間
並且,他給多層神經網路相關的學習方法賦予了一個新名詞–「 深度學習 」,以此為起點,「深度學習」紀元開始了:)
「深度學習」一方面指神經網路的比較「深」,也就是層數較多;另一方面也可以指神經網路能學到很多深層次的東西。研究發現,在權重參數不變的情況下,增加神經網路的層數,能增強神經網路的表達能力。
但深度學習究竟有多強大呢?沒人知道。2012年,Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點,充分證明了多層神經網路識別效果的優越性。
同時,科研人員發現GPU的大規模並行矩陣運算模式完美地契合神經網路訓練的需要,在同等情況下,GPU的速度要比CPU快50-200倍,這使得神經網路的訓練時間大大減少,最終再一次掀起了神經網路研究的熱潮,並且一直持續到現在。
2016年基於深度學習的Alpha Go在圍棋比賽中以4:1的大比分優勢戰勝了李世石,深度學習的威力再一次震驚了世界。
神經網路的發展歷史曲折盪漾,既有被捧上神壇的高潮,也有無人問津的低谷,中間經歷了數次大起大落,我們姑且稱之為「三起三落」吧,其背後則是演算法的改進和計算能力的持續發展。
下圖展示了神經網路自發明以來的發展情況及一些重大時間節點。
當然,對於神經網路我們也要保持清醒的頭腦。由上圖,每次神經網路研究的興盛期持續10年左右,從最近2012年算起,或許10年後的2022年,神經網路的發展將再次遇到瓶頸。
神經網路作為機器學習的一種,其模型訓練的目的,就是使得參數盡可能的與真實的模型逼近。理論證明,兩層及以上的神經網路可以無限逼近真實的映射函數。因此,給定足夠的訓練數據和訓練時間,總能通過神經網路找到無限逼近真實關系的模型。
具體做法:首先給所有權重參數賦上隨機值,然後使用這些隨機生成的參數值,來預測訓練數據中的樣本。假設樣本的預測目標為yp ,真實目標為y,定義值loss,計算公式如下:
loss = (yp -y) ^2
這個值稱之為 損失 (loss),我們的目標就是使對所有訓練數據的損失和盡可能的小,這就轉化為求loss函數極值的問題。
一個常用方法是高等數學中的求導,但由於參數不止一個,求導後計算導數等於0的運算量很大,所以常用梯度下降演算法來解決這樣的優化問題。梯度是一個向量,由函數的各自變數的偏導數組成。
比如對二元函數 f =(x,y),則梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函數值上升最快的方向。梯度下降演算法每次計算參數在當前的梯度,然後讓參數向著梯度的反方向前進一段距離,不斷重復,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。下圖為梯度下降的大致運行過程:
在神經網路模型中,由於結構復雜,每次計算梯度的代價很大。因此還需要使用 反向傳播 (Back Propagation)演算法。反向傳播演算法利用了神經網路的結構進行計算,不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接著是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個參數矩陣的梯度就都有了。當然,梯度下降只是其中一個優化演算法,其他的還有牛頓法、RMSprop等。
確定loss函數的最小值後,我們就確定了整個神經網路的權重,完成神經網路的訓練。
在神經網路中一樣的參數數量,可以用更深的層次去表達。
由上圖,不算上偏置參數的話,共有三層神經元,33個權重參數。
由下圖,保持權重參數不變,但增加了兩層神經元。
在多層神經網路中,每一層的輸入是前一層的輸出,相當於在前一層的基礎上學習,更深層次的神經網路意味著更深入的表示特徵,以及更強的函數模擬能力。更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。
如上圖,第一個隱藏層學習到「邊緣」的特徵,第二個隱藏層學習到「邊緣」組成的「形狀」的特徵,第三個隱藏層學習到由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到由「圖案」組成的「目標」的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。
前面提到, 明斯基認為Rosenblatt提出的感知器模型不能處理最簡單的「異或」(XOR)非線性問題,所以神經網路的研究沒有前途,但當增加一層神經元後,異或問題得到了很好地解決,原因何在?原來從輸入層到隱藏層,數據發生了空間變換,坐標系發生了改變,因為矩陣運算本質上就是一種空間變換。
如下圖,紅色和藍色的分界線是最終的分類結果,可以看到,該分界線是一條非常平滑的曲線。
但是,改變坐標系後,分界線卻表現為直線,如下圖:
同時,非線性激勵函數的引入使得神經網路對非線性問題的表達能力大大加強。
對於傳統的樸素貝葉斯、決策樹、支持向量機SVM等分類器,提取特徵是一個非常重要的前置工作。在正式訓練之前,需要花費大量的時間在數據的清洗上,這樣分類器才能清楚地知道數據的維度,要不然基於概率和空間距離的線性分類器是沒辦法進行工作的。然而在神經網路中,由於巨量的線性分類器的堆疊(並行和串列)以及卷積神經網路的使用,它對雜訊的忍耐能力、對多通道數據上投射出來的不同特徵偏向的敏感程度會自動重視或忽略,這樣我們在處理的時候,就不需要使用太多的技巧用於數據的清洗了。有趣的是,業內大佬常感嘆,「你可能知道SVM等機器學習的所有細節,但是效果並不好,而神經網路更像是一個黑盒,很難知道它究竟在做什麼,但工作效果卻很好」。
人類對機器學習的環節干預越少,就意味著距離人工智慧的方向越近。神經網路的這個特性非常有吸引力。
1) 谷歌的TensorFlow開發了一個非常有意思的神經網路 入門教程 ,用戶可以非常方便地在網頁上更改神經網路的參數,並且能看到實時的學習效率和結果,非常適合初學者掌握神經網路的基本概念及神經網路的原理。網頁截圖如下:
2) 深度學習領域大佬吳恩達不久前發布的《 神經網路和深度學習 》MOOC,現在可以在網易雲課堂上免費觀看了,並且還有中文字幕。
3) 《神經網路於深度學習》(Michael Nielsen著)、《白話深度學習與TensorFlow》也是不錯的入門書籍。
9. 為什麼多層神經網路可以解決異或問題
BP神經網路,指的是用了「BP演算法」進行訓練的「多層感知器模型」。 多層感知器(MLP,Multilayer Perceptron)是一版種前饋人工神經網路模型,權其將輸入的多個數據集映射到單一的輸出的數據集上,可以解決任何線性不可分問題。 不要把演算法和網路搞混了。