Bp神经网络详解—matlab实现Bp神经网络
簡介
大家好,我最近剛發完論文可以稍稍放松一段時間,之前就發現越來越多的人在學習神經網絡的知識,而且有些同學對其也是十分推崇。其實也不奇怪,哈哈,結合當今地時代背景,不管是在什么領域,大家都希望我們身邊地東西變得越來越智能,比如手機,電腦等,甚至像像華為公司開發地鴻蒙系統,把日常地電器和手機連接在一起,從而向用戶提供更智能地服務。
(給文章加點圖,要不然都是文字太難看了,侵權刪)
但是如何才能讓我們的生活更加智能呢?答案可能是讓機器可以向人類一樣進行思考,神經網絡作為模仿人類大腦神經元的一種算法恰好可以提供這樣的服務。本文僅對基本的Bp神經網絡進行介紹,主要推導在BP神經網絡反向傳播的過程中參數如何調整,并且用matlab簡單的模擬了一些BP神經網絡的訓練過程。
PS:簡單介紹一下鴻蒙系統,目前手機主流的操作系統有鴻蒙,安卓以及蘋果的系統,鴻蒙系統與他們的本質區別在于鴻蒙系統是面向5g的,有種希望實現萬物互聯的感覺,從5g的角度去看,鴻蒙確實有著跨時代的意義。
BP神經網絡
BP神經網絡的結構和過程其實很簡單,其結構可以大致分為三部分:(1)輸入層,輸入數據;(2)隱藏層,處理數據;(3)輸出層,輸出結果。其過程可以分為正向傳播過程和反向傳播過程,在正向傳播過程中,BP神經網絡通過隱層神經元對數據進行處理,從而輸出相應結果,在反向傳播過程中BP神經網絡通過對比真實結果與預測結果之間的誤差E來不斷調整各層神經元的參數值,從而減小誤差,達到理想的效果。調整的原則是是誤差不斷減小,因此應使權值調整量與誤差梯度下降成正比。
大家可以看一下下面的誤差公式:
其中E代表誤差,d_{k}代表輸出層第k個神經元的真實值,后面的f為神經網絡的激活函數,此公式代表單隱層的BP神經網絡的誤差,w_{jk}和v_{ij}為輸入層和隱層,以及隱層和輸出層之前的權值。
神經網絡的權值調整量的求解如下:
(中間過程實在懶得寫了)
不過大家可以看出來,隨著隱層的不斷增多,需要求的
類似這樣的參數就越多,如何求出這種參數也是自己實現BP神經網絡的關鍵,參考上面的過程,大家可以看出需要牽扯到符合函數求導的過程,單隱層很簡單,單隨著隱層數量不斷增多,復合函數求導過程也就越復雜,對于多層復合函數需通過鏈式法則進行求解,但由于過程還是很抽象,大家可以先求解sin(sin2x)這樣類推。
BP神經網絡流程圖
下面的流程圖參考當時的教材,BP神經網絡其實也分為兩種,其區別在于對誤差的調整,一種是每輸入一個樣本就計算相應誤差對全職進行調整,也叫標準BP神經網絡;二,則是計算所有樣本的總誤差,也稱為屁訓練BP神經網絡,流程圖如下所示:
我實現的是標準BP神經網絡,代碼如下:
input=[1,2,3;4,5,6;7,8,9]; output=[1,2;2,3;3,4]; num=[3,3,3,2]; layer=2; error=0.1; iter_time=100; rate=0.1; %不通過現有的matlab函數包實現BP神經網絡功能 a1=size(input);%輸入向量的維度,input的列的維度等于輸入節點的個數,input行的維度等于輸入數據的數量 a2=size(output);%輸出向量的維度,output的列的維度等于輸出節點的個數,output行的維度等于輸出數據的數量 %初始化權重參數 parameters=cell(1,layer+1); %layer為隱層的數目 for i=1:layer+1if i==1parameters{i}=rand(a1(2),num(i));elseif i==layer+1parameters{i}=rand(num(i-1),a2(2));elseparameters{i}=rand(num(i),num(i));end end %定義神經元的閾值 T=cell(1,layer+2); for i=1:layer+2T{i}=ones(1,num(i));%num隱層節點個數 end i=1; Error=zeros(1,a1(1)); while i<=iter_timeresult=cell(1,layer+1); %正向傳播過程for j=1:a1(1)for k=1:layer+1if k==1result{k}=ones(1,num(k+1))./[1+exp(input(j,:)*parameters{k}-T{k}*parameters{k})];elseresult{k}=ones(1,num(k+1))./[1+exp(result{k-1}*parameters{k}-T{k}*parameters{k})];endend%計算第j個樣本誤差s=0;for t=1:a2(2)s=s+(output(j,t)-result{layer}(t));endError(j)=s^(0.5);%反向傳播過程delta=cell(1,layer+1);%計算反向傳播過程中可能需要的參數for t=1:a2(2)delta{layer+1}(t)=(output(j,t)-result{layer+1}(t))*result{layer+1}(t)*(1-result{layer+1}(t));endfor t=layer:-1:1middle=ones(1,num(t));for r=1:num(t)for l=1:num(t+2)middle(1,r)=middle(1,r)+delta{t+1}(l)*parameters{t}(r,l);enddelta{t}(r)=middle(r)*result{t}(r)*(1-result{t}(r));endend%調節參數for t=1:layer+1for r=1:num(t)for l=1:num(t+1)parameters{t}(r,l)=parameters{t}(r,l)+rate*delta{t}(l)*result{t}(l);endendend%檢查誤差是否符合要求E_MSE=(sum(Error.^(2))/a1(1))^(0.5);if E_MSE<errorbreak;endend R=result{layer+1}; i=i+1; end這個并不能代表完整的BP神經網絡算法過程,僅僅是實現了他模擬調整參數的過程,完整的過程還需要對神經網絡進行訓練,記錄其訓練好的參數,這樣當有了新的輸入才能給出準確的輸出。
結語
BP神經網絡的實現非常簡單,但是利用人家·做好的函數可能并不能真正的理解他的原理和過程,雖然這只是重復他人的工作,但我覺得可以加深自己對神經網絡的理解。就這樣,哈哈哈 有錯誤或者其他問題歡迎交流。
總結
以上是生活随笔為你收集整理的Bp神经网络详解—matlab实现Bp神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程导论复习之需求分析
- 下一篇: 小白白红队初成长(5)win权限维持