1. 程式人生 > >人工神經網路基本原理

人工神經網路基本原理

轉載請註明出處:http://blog.csdn.net/tyhj_sf/article/details/54134210
宣告:
(1)該博文為個人學習總結,部分內容(包括數學公式)是來自書籍及網上的資料。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻。
(2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應,更有些部分本來就是直接從其他部落格複製過來的。如果某部分不小心侵犯了大家的版權,還望海涵,並聯系本人刪除或修改。

引言

最近谷歌升級版AlphaGo打敗眾多國內外圍棋高手,那狗又火了一把,再次引起大家的關注。作為一個對技術有追求的人,嗯,是時候好好學習當前最火的人工智慧與機器學習的相關技術了。學習一項技術,僅僅瞭解其技術原理是遠遠不夠的,從技術實踐中建立感性認識,才能對技術原理有深入的理解。因此,本文先介紹神經網路基本原理,後面系列文章將詳細介紹神經網路的成熟演算法及網路結構(比如:BP神經網路、RBF、CNN等)並程式設計實現之。

神經元模型

以監督學習為例,假設我們有訓練樣本集 (x(i),y(i)) ,那麼神經網路演算法能夠提供一種複雜且非線性的假設模型 hW,b(x),它具有引數W,b,可以以此引數來擬合我們的資料。
為了描述神經網路,我們先從最簡單的神經網路講起,這個神經網路僅由一個“神經元”構成,以下即是這個“神經元”的圖示
這裡寫圖片描述

後文我們會介紹有多個神經元的神經網路,因此單個神經元模型我們後面會簡化成如下圖:
這裡寫圖片描述

這個“神經元”是一個以 x1,x2,x3 及截距 +1 為輸入值的運算單元,其輸出為 hW,b(x)=f(WTx)=f(3i=1Wixi+b) ,其中函式 f:RR被稱為“啟用函式”。在本教程中,我們選用sigmoid函式作為”啟用函式”

f()

sigmoid函式:

f(z)=11+exp(z).
sigmoid函式影象如下:
這裡寫圖片描述
可以看出,這個單一“神經元”的輸入-輸出對映關係其實就是一個邏輯迴歸(logistic regression)。
雖然本系列教程採用sigmoid函式,但你也可以選擇雙曲正切函式(tanh).
tanh函式:f(z)=tanh(z)=ezezez+ez,
tanh函式的影象如下:
這裡寫圖片描述
tanh(z) 函式是sigmoid函式的一種變體,它的取值範圍為 [1,1] ,而不是sigmoid函式的 [0,1]

注意,這裡我們不再令 x0=1 。取而代之,我們用單獨的引數 b 來表示截距。

最後要說明的是,有一個等式我們以後會經常用到:如果選擇 f(z)=1/(1+exp(z)) ,也就是sigmoid函式,那麼它的導數就是 f(z)=f(z)(1f(z)) (如果選擇tanh函式,那它的導數就是 f(z)=1(f(z))2 ,你可以根據sigmoid(或tanh)函式的定義自行推導這個等式。

神經網路模型

所謂神經網路就是將許多個單一“神經元”聯結在一起,這樣,一個“神經元”的輸出就可以是另一個“神經元”的輸入。例如,下圖就是一個簡單的神經網路:
這裡寫圖片描述
我們使用藍色圓圈來表示神經網路的輸入,標上“+1”的圓圈被稱為”’偏置節點”’,也就是截距項。神經網路最左邊的一層叫做”’輸入層”’,最右的一層叫做”’輸出層”’(本例中,輸出層只有一個節點)。中間所有節點組成的一層叫做”’隱藏層”’,因為我們不能在訓練樣本集中觀測到它們的值。同時可以看到,以上神經網路的例子中有3個”’輸入單元”’(偏置單元不計在內),3個”’隱藏單元”’及一個”’輸出單元”’。

本例約定:
(1)我們用 nl 來表示網路的層數,本例中 nl=3
(2)我們將第 l 層記為 Ll ,於是 L1 是輸入層,輸出層是 Lnl
(3)本例神經網路有引數(W,b)=(W(1),b(1),W(2),b(2)),其中 W(l)ij(下面的式子中用到)是第 l層第 j 單元與第 l+1 層第 i 單元之間的聯接引數(其實就是連線線上的權重,注意標號順序), b(l)i 是第 l+1 層第 i 單元的偏置項。因此在本例中, W(1)R3×3W(2)R1×3注意,沒有其他單元連向偏置單元(即偏置單元沒有輸入),因為它們總是輸出 +1。同時,我們用