A. BP神經網路中,如何設定神經元的初始連接權重以及閥值
初始連接權重關繫到網路訓練速度的快慢以及收斂速率,在基本的神經網路中,這個權重是隨機設定的。在網路訓練的過程中沿著誤差減小的方向不斷進行調整。針對這個權重的隨機性不確定的缺點,有人提出了用遺傳演算法初始化BP的初始權重和閾值的想法,提出了遺傳神經網路模型,並且有人預言下一代的神經網路將會是遺傳神經網路。希望對你有所幫助。你可以查看這方面的文獻
B. 深入淺出BP神經網路演算法的原理
深入淺出BP神經網路演算法的原理
相信每位剛接觸神經網路的時候都會先碰到BP演算法的問題,如何形象快速地理解BP神經網路就是我們學習的高級樂趣了(畫外音:樂趣?你在跟我談樂趣?)
本篇博文就是要簡單粗暴地幫助各位童鞋快速入門採取BP演算法的神經網路。
BP神經網路是怎樣的一種定義?看這句話:一種按「誤差逆傳播演算法訓練」的多層前饋網路。
BP的思想就是:利用輸出後的誤差來估計輸出層前一層的誤差,再用這層誤差來估計更前一層誤差,如此獲取所有各層誤差估計。這里的誤差估計可以理解為某種偏導數,我們就是根據這種偏導數來調整各層的連接權值,再用調整後的連接權值重新計算輸出誤差。直到輸出的誤差達到符合的要求或者迭代次數溢出設定值。
說來說去,「誤差」這個詞說的很多嘛,說明這個演算法是不是跟誤差有很大的關系?
沒錯,BP的傳播對象就是「誤差」,傳播目的就是得到所有層的估計誤差。
它的學習規則是:使用最速下降法,通過反向傳播(就是一層一層往前傳)不斷調整網路的權值和閾值,最後使全局誤差系數最小。
它的學習本質就是:對各連接權值的動態調整。
拓撲結構如上圖:輸入層(input),隱藏層(hide layer),輸出層(output)
BP網路的優勢就是能學習和儲存大量的輸入輸出的關系,而不用事先指出這種數學關系。那麼它是如何學習的?
BP利用處處可導的激活函數來描述該層輸入與該層輸出的關系,常用S型函數δ來當作激活函數。
我們現在開始有監督的BP神經網路學習演算法:
1、正向傳播得到輸出層誤差e
=>輸入層輸入樣本=>各隱藏層=>輸出層
2、判斷是否反向傳播
=>若輸出層誤差與期望不符=>反向傳播
3、誤差反向傳播
=>誤差在各層顯示=>修正各層單元的權值,直到誤差減少到可接受程度。
演算法闡述起來比較簡單,接下來通過數學公式來認識BP的真實面目。
假設我們的網路結構是一個含有N個神經元的輸入層,含有P個神經元的隱層,含有Q個神經元的輸出層。
這些變數分別如下:
認識好以上變數後,開始計算:
一、用(-1,1)內的隨機數初始化誤差函數,並設定精度ε,最多迭代次數M
二、隨機選取第k個輸入樣本及對應的期望輸出
重復以下步驟至誤差達到要求:
三、計算隱含層各神經元的輸入和輸出
四、計算誤差函數e對輸出層各神經元的偏導數,根據輸出層期望輸出和實際輸出以及輸出層輸入等參數計算。
五、計算誤差函數對隱藏層各神經元的偏導數,根據後一層(這里即輸出層)的靈敏度(稍後介紹靈敏度)δo(k),後一層連接權值w,以及該層的輸入值等參數計算
六、利用第四步中的偏導數來修正輸出層連接權值
七、利用第五步中的偏導數來修正隱藏層連接權值
八、計算全局誤差(m個樣本,q個類別)
比較具體的計算方法介紹好了,接下來用比較簡潔的數學公式來大致地概括這個過程,相信看完上述的詳細步驟都會有些了解和領悟。
假設我們的神經網路是這樣的,此時有兩個隱藏層。
我們先來理解靈敏度是什麼?
看下面一個公式:
這個公式是誤差對b的一個偏導數,這個b是怎麼?它是一個基,靈敏度δ就是誤差對基的變化率,也就是導數。
因為?u/?b=1,所以?E/?b=?E/?u=δ,也就是說bias基的靈敏度?E/?b=δ等於誤差E對一個節點全部輸入u的導數?E/?u。
也可以認為這里的靈敏度等於誤差E對該層輸入的導數,注意了,這里的輸入是上圖U級別的輸入,即已經完成層與層權值計算後的輸入。
每一個隱藏層第l層的靈敏度為:
這里的「?」表示每個元素相乘,不懂的可與上面詳細公式對比理解
而輸出層的靈敏度計算方法不同,為:
而最後的修正權值為靈敏度乘以該層的輸入值,注意了,這里的輸入可是未曾乘以權值的輸入,即上圖的Xi級別。
對於每一個權值(W)ij都有一個特定的學習率ηIj,由演算法學習完成。
C. BP神經網路中為什麼設置閾值
你這是不是用遺傳演算法優化權值和閥值啊?
我不知道你x的哪裡來的?所以也不知道你是如何確定初始權值和閥值。
不過我們平常寫程序時這些值都是隨機賦予的。
D. BP神經網路的梳理
BP神經網路被稱為「深度學習之旅的開端」,是神經網路的入門演算法。
各種高大上的神經網路都是基於BP網路出發的,最基礎的原理都是由BP網路而來 [1] ,另外由於BP神經網路結構簡單,演算法經典, 是神經網路中應用最廣泛的一種。
BP神經網路(back propagation neural network)全稱是反向傳播神經網路。
神經網路發展部分背景如下 [2] :
為解決非線性問題,BP神經網路應運而生。
那麼什麼是BP神經網路?稍微專業點的解釋要怎麼說呢?
很喜歡 最簡單的神經網路--Bp神經網路 一文對演算法原理的解釋,語言活潑,案例簡單,由淺入深。
文中提到所謂的 AI 技術,本質上是一種數據處理處理技術,它的強大來自於兩方面:1.互聯網的發展帶來的海量數據信息;2.計算機深度學習演算法的快速發展。AI 其實並沒有什麼神秘,只是在演算法上更為復雜 [3] 。
我們從上面的定義出發來解釋BP神經網路的原理。
BP神經網路整個網路結構包含了:一層輸入層,一到多層隱藏層,一層輸出層。
一般說L層神經網路,指的是有L個隱層,輸入層和輸出層都不計算在內的 [6] 。
BP神經網路模型訓練的學習過程由信號的 正向傳播 和誤差的 反向傳播 兩個過程組成。
什麼是信號的正向傳播?顧名思義,就是結構圖從左到右的運算過程。
我們來看看結構圖中每個小圓圈是怎麼運作的。我們把小圈圈叫做神經元,是組成神經網路的基本單元。
正向傳播就是輸入數據經過一層一層的神經元運算、輸出的過程,最後一層輸出值作為演算法預測值y'。
前面正向傳播的時候我們提到權重w、偏置b,但我們並不知道權重w、偏置b的值應該是什麼。關於最優參數的求解,我們在 線性回歸 、 邏輯回歸 兩章中有了詳細說明。大致來講就是:
BP神經網路全稱 back propagation neural network,back propagation反向傳播是什麼?
反向傳播的建設本質上就是尋找最優的參數組合,和上面的流程差不多,根據演算法預測值和實際值之間的損失函數L(y',y),來反方向地計算每一層的z、a、w、b的偏導數,從而更新參數。
對反向傳播而言,輸入的內容是預測值和實際值的誤差,輸出的內容是對參數的更新,方向是從右往左,一層一層的更新每一層的參數。
BP神經網路通過先正向傳播,構建參數和輸入值的關系,通過預測值和實際值的誤差,反向傳播修復權重;讀入新數據再正向傳播預測,再反向傳播修正,...,通過多次循環達到最小損失值,此時構造的模型擁有最優的參數組合。
以一個簡單的BP神經網路為例,由3個輸入層,2層隱藏層,每層2個神經元,1個輸出層組成。
【輸入層】傳入
【第一層隱藏層】
對於 神經元而言,傳入 ,加權求和加偏置激活函數處理後,輸出 ;
對於 神經元而言,傳入 ,加權求和加偏置函數處理後,輸出 ;
輸出:
【第二層隱藏層】
對於 神經元而言,傳入 ,加權求和加偏置激活函數處理後,輸出 ;
對於 神經元而言,傳入 ,加權求和加偏置激活函數處理後,輸出 ;
輸出:
【輸出層】
對於輸出層神經元而言,輸入 ,加權求和加偏置激活函數處理後,輸出 ,輸出的是一個值
第一次運行正向傳播這個流程時隨用隨機參數就好,通過反向傳播不斷優化。因此需要在一開始對 設置一個隨機的初始值。
首先計算正向傳播輸出值 與實際值的損失 ,是一個數值。所謂反向是從右到左一步步來的,先回到 ,修正參數 。
以此類推,通過對損失函數求偏導跟新參數 ,再跟新參數 。這時又回到了起點,新的數據傳入又可以開始正向傳播了。
keras可以快速搭建神經網路,例如以下為輸入層包含7129個結點,一層隱藏層,包含128個結點,一個輸出層,是二分類模型。
神經網路反向傳播的優化目標為loss,可以觀察到loss的值在不斷的優化。
可以通過model.get_layer().get_weights()獲得每一層訓練後的參數結果。通過model.predict()預測新數據。
至此,BP神經網路的整個運算流程已經過了一遍。之前提到BP神經網路是為解決非線性問題應運而生的,那麼為什麼BP神經網路可以解決非線性問題呢?
還記得神經元里有一個激活函數的操作嗎?神經網路通過激活函數的使用加入非線性因素。
通過使用非線性的激活函數可以使神經網路隨意逼近復雜函數,從而使BP神經網路既可以處理線性問題,也可以處理非線性問題。
為什麼激活函數的使用可以加入非線性因素 [7] ?
其實邏輯回歸演算法可以看作只有一個神經元的單層神經網路,只對線性可分的數據進行分類。
輸入參數,加權求和,sigmoid作為激活函數計算後輸出結果,模型預測值和實際值計算損失Loss,反向傳播梯度下降求編導,獲得最優參數。
BP神經網路是比 Logistic Regression 復雜得多的模型,它的擬合能力很強,可以處理很多 Logistic Regression處理不了的數據,但是也更容易過擬合。
具體用什麼演算法還是要看訓練數據的情況,沒有一種演算法是使用所有情況的。
常見的前饋神經網路有BP網路,RBF網路等。
BP神經網路的一個主要問題是:結構不好設計。
網路隱含層的層數和單元數的選擇尚無理論上的指導,一般是根據經驗或者通過反復實驗確定。
但是BP神經網路簡單、易行、計算量小、並行性強,目前仍是多層前向網路的首選演算法。
[1] 深度學習開端---BP神經網路: https://blog.csdn.net/Chile_Wang/article/details/100557010
[2] BP神經網路發展歷史: https://zhuanlan.hu.com/p/47998728
[3] 最簡單的神經網路--Bp神經網路: https://blog.csdn.net/weixin_40432828/article/details/82192709
[4] 神經網路的基本概念: https://blog.csdn.net/jinyuan7708/article/details/82466653
[5] 神經網路中的 「隱藏層」 理解: https://blog.csdn.net/nanhuaibeian/article/details/100183000
[6] AI學習筆記:神經元與神經網路: https://www.jianshu.com/p/65eb2fce0e9e
[7] 線性模型和非線性模型的區別: https://www.cnblogs.com/toone/p/8574294.html
[8] BP神經網路是否優於logistic回歸: https://www.hu.com/question/27823925/answer/38460833
E. BP神經網路的模型已經訓練好,想用多一些數據繼續訓練,怎麼在原來的基礎上訓練呢
保存權重,下次賦值給新定義的網路。
F. BP神經網路在權重優化中的應用
不好意思!
走錯房間了!
這里是數學!
美邦建議您
去別的地方看看!
G. 神經網路權值怎麼確定
神經網路的權值是通過對網路的訓練得到的。如果使用MATLAB的話不要自己設定,newff之後會自動賦值。也可以手動:net.IW{}= ; net.bias{}=。一般來說輸入歸一化,那麼w和b取0-1的隨機數就行。神經網路的權值確定的目的是為了讓神經網路在訓練過程中學習到有用的信息,這意味著參數梯度不應該為0。
參數初始化要滿足兩個必要條件:
1、各個激活層不會出現飽和現象,比如對於sigmoid激活函數,初始化值不能太大或太小,導致陷入其飽和區。
2、各個激活值不為0,如果激活層輸出為零,也就是下一層卷積層的輸入為零,所以這個卷積層對權值求偏導為零,從而導致梯度為0。
(7)bp神經網路是如何更改權重的擴展閱讀:
神經網路和權值的關系。
在訓練智能體執行任務時,會選擇一個典型的神經網路框架,並相信它有潛力為這個任務編碼特定的策略。注意這里只是有潛力,還要學習權重參數,才能將這種潛力變化為能力。
受到自然界早成行為及先天能力的啟發,在這項工作中,研究者構建了一個能自然執行給定任務的神經網路。也就是說,找到一個先天的神經網路架構,然後只需要隨機初始化的權值就能執行任務。研究者表示,這種不用學習參數的神經網路架構在強化學習與監督學習都有很好的表現。
其實如果想像神經網路架構提供的就是一個圈,那麼常規學習權值就是找到一個最優點(或最優參數解)。但是對於不用學習權重的神經網路,它就相當於引入了一個非常強的歸納偏置,以至於,整個架構偏置到能直接解決某個問題。
但是對於不用學習權重的神經網路,它相當於不停地特化架構,或者說降低模型方差。這樣,當架構越來越小而只包含最優解時,隨機化的權值也就能解決實際問題了。如研究者那樣從小架構到大架構搜索也是可行的,只要架構能正好將最優解包圍住就行了。
H. matlab中BP神經網路如何設置初始權重
因為初始值(初始權值和閥值)都在x這個向量中,x(n,1)的長度n為:n=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum
其中inputnum*hiddennum是輸入層到隱含層的權值數量,hiddennum是隱含層神經元個數(即隱含層閥值個數),hiddennum*outputnum是隱含層到輸出層權值個數,outputnum是輸出層神經元個數(即輸出層閥值個數);
I. BP神經網路中初始權值和閾值的設定
首先需要了解BP神經網路是一種多層前饋網路。以看一下在matlab中BP神經網路的訓練函數,有梯度下降法traingd,彈性梯度下降法trainrp,自適應lr梯度下降法traingda等。
因為初始值(初始權值和閥值)都在x這個向量中,x(n,1)的長度n為:n=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum
其中inputnum*hiddennum是輸入層到隱含層的權值數量,hiddennum是隱含層神經元個數(即隱含層閥值個數),hiddennum*outputnum是隱含層到輸出層權值個數,outputnum是輸出層神經元個數(即輸出層閥值個數)。
結構
BP網路是在輸入層與輸出層之間增加若干層(一層或多層)神經元,這些神經元稱為隱單元,它們與外界沒有直接的聯系,但其狀態的改變,則能影響輸入與輸出之間的關系,每一層可以有若干個節點。
BP神經網路的計算過程由正向計算過程和反向計算過程組成。正向傳播過程,輸入模式從輸入層經隱單元層逐層處理,並轉向輸出層,每~層神經元的狀態隻影響下一層神經元的狀態。如果在輸出層不能得到期望的輸出,則轉入反向傳播,將誤差信號沿原來的連接通路返回,通過修改各神經元的權值,使得誤差信號最小。
以上內容參考:網路-BP神經網路