神經網路模型學習筆記(ANN,BPNN)
人工神經網路(Artificial Neural Network,即ANN ),是20世紀80 年代以來人工智慧領域興起的研究熱點。它也是目前各種神經網路模型的基礎。本文主要對BPNN模型進行學習。
什麼是神經網路?
神經網路是一種運算模型,由大量的節點(或稱神經元)之間相互聯接構成。每個節點代表一種特定的輸出函式,稱為激勵函式(activation function)。每兩個節點間的連線都代表一個對於通過該連線訊號的加權值,稱之為權重,這相當於人工神經網路的記憶。網路的輸出則依網路的連線方式,權重值和激勵函式的不同而不同。而網路自身通常都是對自然界某種演算法或者函式的逼近,也可能是對一種邏輯策略的表達。
目前已有的數十種神經網路模型,目前主要有以下幾種型別:前向型、反饋型、隨機型和競爭型。
神經網路可分類以下四種類型:
前向型
前饋神經網路是指神經元分層排列,由輸入層,隱藏層和輸出層構成,其中隱藏層可能會有多層。這種神經網路的每一層的神經元只接受前一層神經元的輸入,後面的層對於前面的層沒有訊號反饋。每一層對於輸入資料進行一定的轉換,然後將輸出結果作為下一層的輸入,直到最後輸出結果。
其中,目前廣泛應用的BPNN(Back Propagation Neural Network, 後向傳播神經網路)就屬於這種網路型別。
反饋型
反饋網路又稱迴歸網路,輸入訊號決定反饋系統的初始狀態,系統經過一系列狀態轉移後逐漸收斂於平衡狀態,因此,穩定性是反饋網路最重要的指標之一,比較典型的是Hopfield神經網路。
Hopfield神經網路用於非線性動力學問題分析,已在聯想記憶和優化計算中得到成功的應用.
隨機型
具有隨機性質的模擬退火(SA)演算法解決了優化計算過程陷於區域性極小的問題,並已在神經網路的學習及優化計算中得到成功的應用.
競爭型
自組織神經網路是無教師學習網路,它模擬人腦行為,根據過去經驗自動適應無法預測的環境變化,由於無監督,這類網路通常採用競爭原則進行網路學習,自動聚類。目前廣泛用於自動控制、故障診斷等各類模式識別中.
這裡學習的BPNN就是前向型神經網路的一種。
神經元
為了描述神經網路,我們先從最簡單的神經網路講起,這個神經網路僅由一個“神經元”構成,以下即是這個“神經元”的圖示:
這個神經元是由x1,x2,x3和一個偏置b = +1 作為輸入,w1,w2,w3是他們的權重,輸入節點後,經過啟用函式F,得到輸出。其中函式 被稱為“啟用函式”。
這裡,我們以sigmoid函式作為啟用函式f(x):
它的函式影象如下所示:
它的取值範圍為 [0, 1]。所以,對於一個神經元來說,整個過程就是,向神經元輸入資料,然後經過啟用函式,對資料做某種轉換,最終得到一個輸出結果。
神經網路
所謂神經網路就是將許多個單一“神經元”聯結在一起,這樣,一個“神經元”的輸出就可以是另一個“神經元”的輸入。例如,下圖就是一個簡單的神經網路:
最左邊一層是輸入層,中間是隱藏層,右側是輸出層。輸入層以及隱藏層均有3個節點,每個節點代表一個神經元。輸入層有3個輸入節點,x1, x2, x3, 以及一個偏置節點(標有+ 1的圓圈)。每一層和下一層之間對應的也有一個權重矩陣w。
對於這樣一個簡單的神經網路來說,我們的整個過程就是,將輸入x與權重矩陣w結合,以wx + b的形式輸入隱藏層(Layer L2),經過啟用函式f(x)的處理,得到輸出結果a1, a2, a3, 然後與對應的權重,偏置結合,作為輸出層(Layer L3)的輸入,經過啟用函式,得到最終輸出結果。
好了,在瞭解完一些基礎的神經網路的網路結構以及計算流程之後。我們來介紹一下本文學習的BPNN模型。
那什麼是BPNN呢?
BPNN演算法理解及原理
BPNN全稱Back Propagation Neural Network,後向傳播神經網路。前文有介紹,他也屬於前饋型神經網路的一種。BP神經網路就是在前饋型網路的結構上增加了後向傳播演算法(Back Propagation)。那它和前饋型神經網路又有什麼區別呢?
我們知道,前饋型神經網路,就像流水一樣,從水的源頭一路流到盡頭,沒有倒流。前饋就是訊號向前傳遞的意思。BP網路的前饋表現為輸入訊號從輸入層(輸入層不參加計算)開始,每一層的神經元計算出該層各神經元的輸出並向下一層傳遞直到輸出層計算出網路的輸出結果,前饋只是用於計算出網路的輸出,不對網路的引數進行調整。
而後向傳播是用於訓練時網路權值和閾值的調整,該過程是需要監督學習的。在你的網路沒有訓練好的時候,輸出肯定和你想象的不一樣,那麼我們會得到一個偏差,並且把偏差一級一級向前傳遞,逐層得到
反饋是用來求偏導數的,偏導數是用來作梯度下降的,梯度下降是為了求得代價函式的極小值,使得期望和輸出之間的誤差儘可能的減小。
BPNN的演算法流程
下面我們來介紹一下演算法流程。如下圖所示:
大致可以分為五個步驟:
1.初始化網路權重以及偏置。我們知道不同神經元之間的連線權重(網路權重)是不一樣的。這是在訓練之後得到的結果。所以在初始化階段,我們給予每個網路連線權重一個很小的隨機數(一般而言為-1.0~1.0或者-0.5~0.5),同時,每個神經元有一個偏置(偏置可看做是每個神經元的自身權重),也會被初始化為一個隨機數。
2.進行前向傳播。輸入一個訓練樣本,然後通過計算得到每個神經元的輸出。每個神經元的計算方法相同,都是由其輸入的線性組合得到。我們以文中神經網路部分中的圖1為例:
我們用
我們用
我們用
我們
那我們可以得到如下公式: