❶ BP神經網路方法
人工神經網路是近幾年來發展起來的新興學科,它是一種大規模並行分布處理的非線性系統,適用解決難以用數學模型描述的系統,逼近任何非線性的特性,具有很強的自適應、自學習、聯想記憶、高度容錯和並行處理能力,使得神經網路理論的應用已經滲透到了各個領域。近年來,人工神經網路在水質分析和評價中的應用越來越廣泛,並取得良好效果。在這些應用中,縱觀應用於模式識別的神經網路,BP網路是最有效、最活躍的方法之一。
BP網路是多層前向網路的權值學習採用誤差逆傳播學習的一種演算法(Error Back Propagation,簡稱BP)。在具體應用該網路時分為網路訓練及網路工作兩個階段。在網路訓練階段,根據給定的訓練模式,按照「模式的順傳播」→「誤差逆傳播」→「記憶訓練」→「學習收斂」4個過程進行網路權值的訓練。在網路的工作階段,根據訓練好的網路權值及給定的輸入向量,按照「模式順傳播」方式求得與輸入向量相對應的輸出向量的解答(閻平凡,2000)。
BP演算法是一種比較成熟的有指導的訓練方法,是一個單向傳播的多層前饋網路。它包含輸入層、隱含層、輸出層,如圖4-4所示。
圖4-4 地下水質量評價的BP神經網路模型
圖4-4給出了4層地下水水質評價的BP神經網路模型。同層節點之間不連接。輸入信號從輸入層節點,依次傳過各隱含層節點,然後傳到輸出層節點,如果在輸出層得不到期望輸出,則轉入反向傳播,將誤差信號沿原來通路返回,通過學習來修改各層神經元的權值,使誤差信號最小。每一層節點的輸出隻影響下一層節點的輸入。每個節點都對應著一個作用函數(f)和閾值(a),BP網路的基本處理單元量為非線性輸入-輸出的關系,輸入層節點閾值為0,且f(x)=x;而隱含層和輸出層的作用函數為非線性的Sigmoid型(它是連續可微的)函數,其表達式為
f(x)=1/(1+e-x) (4-55)
設有L個學習樣本(Xk,Ok)(k=1,2,…,l),其中Xk為輸入,Ok為期望輸出,Xk經網路傳播後得到的實際輸出為Yk,則Yk與要求的期望輸出Ok之間的均方誤差為
區域地下水功能可持續性評價理論與方法研究
式中:M為輸出層單元數;Yk,p為第k樣本對第p特性分量的實際輸出;Ok,p為第k樣本對第p特性分量的期望輸出。
樣本的總誤差為
區域地下水功能可持續性評價理論與方法研究
由梯度下降法修改網路的權值,使得E取得最小值,學習樣本對Wij的修正為
區域地下水功能可持續性評價理論與方法研究
式中:η為學習速率,可取0到1間的數值。
所有學習樣本對權值Wij的修正為
區域地下水功能可持續性評價理論與方法研究
通常為增加學習過程的穩定性,用下式對Wij再進行修正:
區域地下水功能可持續性評價理論與方法研究
式中:β為充量常量;Wij(t)為BP網路第t次迭代循環訓練後的連接權值;Wij(t-1)為BP網路第t-1次迭代循環訓練後的連接權值。
在BP網路學習的過程中,先調整輸出層與隱含層之間的連接權值,然後調整中間隱含層間的連接權值,最後調整隱含層與輸入層之間的連接權值。實現BP網路訓練學習程序流程,如圖4-5所示(倪深海等,2000)。
圖4-5 BP神經網路模型程序框圖
若將水質評價中的評價標准作為樣本輸入,評價級別作為網路輸出,BP網路通過不斷學習,歸納出評價標准與評價級別間復雜的內在對應關系,即可進行水質綜合評價。
BP網路對地下水質量綜合評價,其評價方法不需要過多的數理統計知識,也不需要對水質量監測數據進行復雜的預處理,操作簡便易行,評價結果切合實際。由於人工神經網路方法具有高度民主的非線性函數映射功能,使得地下水水質評價結果較准確(袁曾任,1999)。
BP網路可以任意逼近任何連續函數,但是它主要存在如下缺點:①從數學上看,它可歸結為一非線性的梯度優化問題,因此不可避免地存在局部極小問題;②學習演算法的收斂速度慢,通常需要上千次或更多。
神經網路具有學習、聯想和容錯功能,是地下水水質評價工作方法的改進,如何在現行的神經網路中進一步吸取模糊和灰色理論的某些優點,建立更適合水質評價的神經網路模型,使該模型既具有方法的先進性又具有現實的可行性,將是我們今後研究和探討的問題。
❷ 神經網路的優化
上節回顧:
介紹了神經元、神經網路
介紹了激活函數
提到了前向傳播概念
留下問題:用到的參數w和b是怎麼來的,是自己隨便設定的嗎
本節介紹:
神經網路、反向傳播的例子
損失函數和梯度下降法、學習率介紹
最重要的用途是分類
這種能自動對輸入的東西進行分類的機器,就叫做 分類器 。分類器的輸入是一個數值向量,叫做特徵(向量)。
第一個例子里,分類器的輸入是一堆0、1值,表示字典里的每一個詞是否在郵件中出現,比如向量(1,1,0,0,0......)就表示這封郵件里只出現了兩個詞abandon和abnormal;
第二個例子里,分類器的輸入是照片,假如每一張照片都是320x240像素的紅綠藍三通道彩色照片,那麼分類器的輸入就是一個長度為320x240x3=230400的向量。
分類器的輸出也是數值。
第一個例子中,輸出1表示郵件是垃圾郵件,輸出0則說明郵件是正常郵件;
第二個例子中,輸出0表示圖片中是狗,輸出1表示是貓。
分類器的目標就是讓正確分類的比例盡可能高。一般我們需要首先收集一些樣本, 人為標記上正確分類結果 ,然後用這些標記好的數據 訓練分類器 ,訓練好的分類器就可以 在新來的特徵向量上工作 了。
這就是BP神經網路(back propagation)。
旨在得到最優的全局參數矩陣,進而將多層神經網路應用到分類或者回歸任務中去。
前向傳播 輸入信號直至 輸出產生誤差 , 反向傳播 誤差信息 更新權重 矩陣。
這個地方提到的誤差這個概念,其實就是對應了損失函數,損失函數說白了就是計算誤差的函數。
舉例:線性回歸:尋找一條擬合圖中數據點最好的直線
把每條小豎線的長度加起來就等於我們現在通過這條直線預測出的值與實際值之間的差距
缺點:採用梯度下降法學習時,模型一開始訓練學習速率非常慢
對一個多元函數求偏導,會得到多個偏導函數.這些導函數組成的向量,就是梯度;一元函數的梯度是什麼?它的梯度可以理解為就是它的導數。
求解多元函數和一元函數的道理是一樣的,只不過函數是一元的時候,梯度中只有一個導函數,函數是多元的時候,梯度中有多個導函數.
當我們把梯度中的所有偏導函數都變為0的時候,就可以找到每個未知數的對應解。
梯度下降中求偏導數的未知數不是x和y,而是x的參數W。
梯度下降的方向:把這一點帶入到梯度函數中,結果為正,那我們就把這一點的值變小一些,同時就是讓梯度變小些;當這一點帶入梯度函數中的結果為負的時候,就給這一點的值增大一些。
在這個下降的過程中.因為我們並不知道哪一個點才是最低點,也沒有辦法來預測下降多少次才能到最低點.這里梯度下降給出的辦法是:
先隨便蒙一個點出來,然後根據這個點每次下降以丟丟.什麼時候下降得到的值(點帶入偏導函數得到的)和上一次的值基本一樣,也就是相差特別特別小的時候,我們認為就到了最低點。
讓點沿著梯度方向下降慢慢求得最優解的過程我們叫做 學習 ,學習率就是用來限制他每次學習別太過"用功"的。下左圖是我們所期望的,一個點按照梯度方向下降,慢慢逼近最低點,右圖中展示的這個梯度值過大的時候,點下降的step就過大了,一次性邁過了最低點,導致函數無法找到最優解。學習率就是用來限制這種情況的。
更新權重的演算法:每一個權重值都要減去它對應的導數和學習率的乘積
Lr 代表的是學習率
簡單舉例
❸ BP神經網路
神經網路能很好地解決不同的機器學習問題。神經網路模型是許多邏輯單元按照不同層級組織起來的網路,每一層的輸出變數都是下一層的輸入變數。
上圖顯示了人工神經網路是一個分層模型,邏輯上可以分為三層:
輸入層 :輸入層接收特徵向量 x
輸出層 :輸出層產出最終的預測 h
隱含層 :隱含層介於輸入層與輸出層之間,之所以稱之為隱含層,是因為當中產生的值並不像輸入層使用的樣本矩陣 X或者輸出層用到的標簽矩陣 y 那樣直接可見。
下面引入一些標記法來幫助描述模型:
!$ a^{(j)}_{i} $ 代表第j層的第i個激活單元。 !$ heta^{(j)} $ 代表從第 j 層映射到第 j+1 層時的權重的矩陣,例如 !$ heta^{(1)} $ 代表從第一層映射到第二層的權重的矩陣。其尺寸為:以第 j+1層的激活單元數量為行數,以第 j 層的激活單元數加一為列數的矩陣。例如:上圖所示的神經網路中 !$ heta^{(1)} $ 的尺寸為 3*4。
對於上圖所示的模型,激活單元和輸出分別表達為:
!$ a^{(2)}_{1} = g( heta^{(1)}_{10}x_0 + heta^{(1)}_{11}x_1 + heta^{(1)}_{12}x_2 + heta^{(1)}_{13}x_3 ) $
!$a^{(2)}_{2} = g( heta^{(1)}_{20}x_0 + heta^{(1)}_{21}x_1 + heta^{(1)}_{22}x_2 + heta^{(1)}_{23}x_3 ) $
!$a^{(2)}_{3} = g( heta^{(1)}_{30}x_0 + heta^{(1)}_{31}x_1 + heta^{(1)}_{32}x_2 + heta^{(1)}_{33}x_3 ) $
!$h_{ heta}{(x)} = g( heta^{(2)}_{10}a^{2}_{0} + heta^{(2)}_{11}a^{2}_{1} + heta^{(2)}_{12}a^{2}_{2} + heta^{(2)}_{13}a^{2}_{3} ) $
下面用向量化的方法以上面的神經網路為例,試著計算第二層的值:
對於多類分類問題來說:
我們可將神經網路的分類定義為兩種情況:二類分類和多類分類。
二類分類: !$ S_{L} = 0,y = 0,y = 1$
多類分類: !$ S_{L} = k, y_{i} = 1表示分到第i類;(k>2)$
在神經網路中,我們可以有很多輸出變數,我們的 !$h_{ heta}{(x)} $ 是一個維度為K的向量,並且我們訓練集中的因變數也是同樣維度的一個向量,因此我們的代價函數會比邏輯回歸更加復雜一些,為: !$ h_{ heta}{(x)} in R^{K}(h_{ heta}{(x)})_{i} = i^{th} output$
我們希望通過代價函數來觀察演算法預測的結果與真實情況的誤差有多大,唯一不同的是,對於每一行特徵,我們都會給出K個預測,基本上我們可以利用循環,對每一行特徵都預測K個不同結果,然後在利用循環在K個預測中選擇可能性最高的一個,將其與y中的實際數據進行比較。
正則化的那一項只是排除了每一層 !$ heta_0$ 後,每一層的 矩陣的和。最里層的循環j循環所有的行(由 +1 層的激活單元數決定),循環i則循環所有的列,由該層( !$ s_l$ 層)的激活單元數所決定。即: !$h_{ heta}{(x)}$ 與真實值之間的距離為每個樣本-每個類輸出的加和,對參數進行 regularization 的 bias 項處理所有參數的平方和。
由於神經網路允許多個隱含層,即各層的神經元都會產出預測,因此,就不能直接利用傳統回歸問題的梯度下降法來最小化 !$J( heta)$ ,而需要逐層考慮預測誤差,並且逐層優化。為此,在多層神經網路中,使用反向傳播演算法(Backpropagation Algorithm)來優化預測,首先定義各層的預測誤差為向量 !$ δ^{(l)} $
訓練過程:
當我們對一個較為復雜的模型(例如神經網路)使用梯度下降演算法時,可能會存在一些不容易察覺的錯誤,意味著,雖然代價看上去在不斷減小,但最終的結果可能並不是最優解。
為了避免這樣的問題,我們採取一種叫做梯度的數值檢驗( Numerical Gradient Checking )方法。這種方法的思想是通過估計梯度值來檢驗我們計算的導數值是否真的是我們要求的。
對梯度的估計採用的方法是在代價函數上沿著切線的方向選擇離兩個非常近的點然後計算兩個點的平均值用以估計梯度。即對於某個特定的 ,我們計算出在 !$ heta - epsilon$ 處和 !$ heta + epsilon$ 的代價值(是一個非常小的值,通常選取 0.001),然後求兩個代價的平均,用以估計在 !$ heta$ 處的代價值。
當 !$ heta$ 是一個向量時,我們則需要對偏導數進行檢驗。因為代價函數的偏導數檢驗只針對一個參數的改變進行檢驗,下面是一個只針對 !$ heta_1$ 進行檢驗的示例:
如果上式成立,則證明網路中BP演算法有效,此時關閉梯度校驗演算法(因為梯度的近似計算效率很慢),繼續網路的訓練過程。
❹ matlab的遺傳演算法優化BP神經網路
對y=x1^2+x2^2非線性系統進行建模,用1500組數據對網路進行構建網路,500組數據測試網路。由於BP神經網路初始神經元之間的權值和閾值一般隨機選擇,因此容易陷入局部最小值。本方法使用遺傳演算法優化初始神經元之間的權值和閾值,並對比使用遺傳演算法前後的效果。
步驟:
未經遺傳演算法優化的BP神經網路建模
1、
隨機生成2000組兩維隨機數(x1,x2),並計算對應的輸出y=x1^2+x2^2,前1500組數據作為訓練數據input_train,後500組數據作為測試數據input_test。並將數據存儲在data中待遺傳演算法中使用相同的數據。
2、
數據預處理:歸一化處理。
3、
構建BP神經網路的隱層數,次數,步長,目標。
4、
使用訓練數據input_train訓練BP神經網路net。