神經(jīng)網(wǎng)絡中的反向傳播法算法推導及matlab代碼實現(xiàn)2017(共9頁)_第1頁
神經(jīng)網(wǎng)絡中的反向傳播法算法推導及matlab代碼實現(xiàn)2017(共9頁)_第2頁
神經(jīng)網(wǎng)絡中的反向傳播法算法推導及matlab代碼實現(xiàn)2017(共9頁)_第3頁
神經(jīng)網(wǎng)絡中的反向傳播法算法推導及matlab代碼實現(xiàn)2017(共9頁)_第4頁
神經(jīng)網(wǎng)絡中的反向傳播法算法推導及matlab代碼實現(xiàn)2017(共9頁)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上最近在看深度學習的東西,一開始看的吳恩達的UFLDL教程,有中文版就直接看了,后來發(fā)現(xiàn)有些地方總是不是很明確,又去看英文版,然后又找了些資料看,才發(fā)現(xiàn),中文版的譯者在翻譯的時候會對省略的公式推導過程進行補充,但是補充的又是錯的,難怪覺得有問題。反向傳播法其實是神經(jīng)網(wǎng)絡的基礎了,但是很多人在學的時候總是會遇到一些問題,或者看到大篇的公式覺得好像很難就退縮了,其實不難,就是一個鏈式求導法則反復用。如果不想看公式,可以直接把數(shù)值帶進去,實際的計算一下,體會一下這個過程之后再來推導公式,這樣就會覺得很容易了。說到神經(jīng)網(wǎng)絡,大家看到這個圖應該不陌生: 這是典型的三層神

2、經(jīng)網(wǎng)絡的基本構(gòu)成,Layer L1是輸入層,Layer L2是隱含層,Layer L3是隱含層,我們現(xiàn)在手里有一堆數(shù)據(jù)x1,x2,x3,.,xn,輸出也是一堆數(shù)據(jù)y1,y2,y3,.,yn,現(xiàn)在要他們在隱含層做某種變換,讓你把數(shù)據(jù)灌進去后得到你期望的輸出。如果你希望你的輸出和原始輸入一樣,那么就是最常見的自編碼模型(Auto-Encoder)??赡苡腥藭枺瑸槭裁匆斎胼敵龆家粯幽??有什么用???其實應用挺廣的,在圖像識別,文本分類等等都會用到,我會專門再寫一篇Auto-Encoder的文章來說明,包括一些變種之類的。如果你的輸出和原始輸入不一樣,那么就是很常見的人工神經(jīng)網(wǎng)絡了,相當于讓原始數(shù)據(jù)

3、通過一個映射來得到我們想要的輸出數(shù)據(jù),也就是我們今天要講的話題。本文直接舉一個例子,帶入數(shù)值演示反向傳播法的過程,公式的推導等到下次寫Auto-Encoder的時候再寫,其實也很簡單,感興趣的同學可以自己推導下試試:)(注:本文假設你已經(jīng)懂得基本的神經(jīng)網(wǎng)絡構(gòu)成,如果完全不懂,可以參考Poll寫的筆記:)假設,你有這樣一個網(wǎng)絡層:第一層是輸入層,包含兩個神經(jīng)元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經(jīng)元h1,h2和截距項b2,第三層是輸出o1,o2,每條線上標的wi是層與層之間連接的權重,激活函數(shù)我們默認為sigmoid函數(shù)。現(xiàn)在對他們賦上初值,如下圖:其中,輸入數(shù)據(jù)  i

4、1=0.05,i2=0.10;輸出數(shù)據(jù) o1=0.01,o2=0.99;初始權重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;  w5=0.40,w6=0.45,w7=0.50,w8=0.55目標:給出輸入數(shù)據(jù)i1,i2(0.05和0.10),使輸出盡可能與原始輸出o1,o2(0.01和0.99)接近。 Step 1 前向傳播1.輸入層->隱含層:計算神經(jīng)元h1的輸入加權和:神經(jīng)元h1的輸出o1:(此處用到激活函數(shù)為sigmoid函數(shù)): 同理,可計算出神經(jīng)元h2的輸出o2:2.隱含層->輸出層:計算輸出層神經(jīng)元o1和o

5、2的值:這樣前向傳播的過程就結(jié)束了,我們得到輸出值為0. , 0.,與實際值0.01 , 0.99相差還很遠,現(xiàn)在我們對誤差進行反向傳播,更新權值,重新計算輸出。Step 2 反向傳播1.計算總誤差總誤差:(square error)但是有兩個輸出,所以分別計算o1和o2的誤差,總誤差為兩者之和:2.隱含層->輸出層的權值更新:以權重參數(shù)w5為例,如果我們想知道w5對整體誤差產(chǎn)生了多少影響,可以用整體誤差對w5求偏導求出:(鏈式法則)下面的圖可以更直觀的看清楚誤差是怎樣反向傳播的:現(xiàn)在我們來分別計算每個式子的值:計算:計算:(這一步實際上就是對sigmoid函數(shù)求導,比較簡單,可以自己推

6、導一下)計算:最后三者相乘:這樣我們就計算出整體誤差E(total)對w5的偏導值?;剡^頭來再看看上面的公式,我們發(fā)現(xiàn):為了表達方便,用來表示輸出層的誤差:因此,整體誤差E(total)對w5的偏導公式可以寫成:如果輸出層誤差計為負的話,也可以寫成:最后我們來更新w5的值:(其中,是學習速率,這里我們?nèi)?.5)同理,可更新w6,w7,w8:3.隱含層->隱含層的權值更新:方法其實與上面說的差不多,但是有個地方需要變一下,在上文計算總誤差對w5的偏導時,是從out(o1)->net(o1)->w5,但是在隱含層之間的權值更新時,是out(h1)->net(h1)->

7、w1,而out(h1)會接受E(o1)和E(o2)兩個地方傳來的誤差,所以這個地方兩個都要計算。 計算:先計算:同理,計算出:兩者相加得到總值:再計算:再計算:最后,三者相乘: 為了簡化公式,用sigma(h1)表示隱含層單元h1的誤差:最后,更新w1的權值:同理,額可更新w2,w3,w4的權值:這樣誤差反向傳播法就完成了,最后我們再把更新的權值重新計算,不停地迭代,在這個例子中第一次迭代之后,總誤差E(total)由0.下降至0.。迭代10000次后,總誤差為0.,輸出為0.,0.(原輸入為0.01,0.99),證明效果還是不錯的。clear allclcclose al

8、li1=0.05; i2=0.10;o1=0.01; o2=0.99;w1=0.15; w2=0.20; w3=0.25; w4=0.30; b1=0.35;w5=0.40; w6=0.45; w7=0.50; w8=0.55; b2=0.6; % alpha=38.9% epoch=6000;alpha=0.5epoch=10000;for k=1:epoch% forward:hidden layersnet_h1=w1*i1+w2*i2+b1*1;out_h1=1/(1+exp(-net_h1);net_h2=w3*i1+w4*i2+b1*1;out_h2=1/(1+exp(-net_h

9、2); %forward:output layernet_o1=w5*out_h1+w6*out_h2+b2*1;net_o2=w7*out_h1+w8*out_h2+b2*1;out_o1=1/(1+exp(-net_o1);out_o2=1/(1+exp(-net_o2); % cost functionE_total(k)=(out_o1-o1)2+(out_o2-o2)2)/2; % backward: output layerdE_dw5=-(o1-out_o1)*out_o1*(1-out_o1)*out_h1;dE_dw6=-(o1-out_o1)*out_o1*(1-out_o

10、1)*out_h2;dE_dw7=-(o2-out_o2)*out_o2*(1-out_o2)*out_h1;dE_dw8=-(o2-out_o2)*out_o2*(1-out_o2)*out_h2; % backward: hidden layerdE_douto1=-(o1-out_o1);douto1_dneto1=out_o1*(1-out_o1);% dEo1_douth1=-(o1-out_o1)*out_o1*(1-out_o1)dEo1_dneto1=dE_douto1*douto1_dneto1;dEo1_douth1=dEo1_dneto1*w5;dEo1_douth2=d

11、Eo1_dneto1*w6; dE_douto2=-(o2-out_o2);douto2_dneto2=out_o2*(1-out_o2);% dEo1_douth1=-(o1-out_o1)*out_o1*(1-out_o1)dEo2_dneto2=dE_douto2*douto2_dneto2;dEo2_douth1=dEo2_dneto2*w7;dEo2_douth2=dEo2_dneto2*w8; dE_dw1=(dEo1_douth1+dEo2_douth1)*out_h1*(1-out_h1)*i1;dE_dw2=(dEo1_douth1+dEo2_douth1)*out_h1*(1-out_h1)*i2;dE_dw3=(dEo1_douth2+dEo2_douth2)*out_h2*(1-out_h2)*i1;dE_dw4=(dEo1_douth2+dEo2_douth2)*out_h2*(1-out_h2)*i2; w1=w1-alpha*dE_dw

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論