<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析深度神經網絡(DNN)反向傳播算法(BP)

電子工程師 ? 來源:博客園 ? 作者:劉建平Pinard ? 2021-03-22 16:28 ? 次閱讀

在深度神經網絡(DNN)模型與前向傳播算法中,我們對DNN的模型和前向傳播算法做了總結,這里我們更進一步,對DNN的反向傳播算法(Back Propagation,BP)做一個總結。

1. DNN反向傳播算法要解決的問題

在了解DNN的反向傳播算法前,我們先要知道DNN反向傳播算法要解決的問題,也就是說,什么時候我們需要這個反向傳播算法?

回到我們監督學習的一般問題,假設我們有m個訓練樣本:{ ( x1 , y1 ) , ( x2 , y2 ) , ... , ( xm , ym ) },其中 x 為輸入向量,特征維度為 n_in ,而 y 為輸出向量,特征維度為 n_out 。我們需要利用這 m 個樣本訓練出一個模型,當有一個新的測試樣本 ( xtest , ? ) 來到時, 我們可以預測 ytest 向量的輸出。

如果我們采用DNN的模型,即我們使輸入層有 n_in 個神經元,而輸出層有 n_out 個神經元。再加上一些含有若干神經元的隱藏層。此時我們需要找到合適的所有隱藏層和輸出層對應的線性系數矩陣 W ,偏倚向量 b ,讓所有的訓練樣本輸入計算出的輸出盡可能的等于或很接近樣本輸出。怎么找到合適的參數呢?

如果大家對傳統的機器學習的算法優化過程熟悉的話,這里就很容易聯想到我們可以用一個合適的損失函數來度量訓練樣本的輸出損失,接著對這個損失函數進行優化求最小化的極值,對應的一系列線性系數矩陣W,偏倚向量b即為我們的最終結果。在DNN中,損失函數優化極值求解的過程最常見的一般是通過梯度下降法來一步步迭代完成的,當然也可以是其他的迭代方法比如牛頓法與擬牛頓法。如果大家對梯度下降法不熟悉,建議先閱讀我之前寫的梯度下降(Gradient Descent)小結。

對DNN的損失函數用梯度下降法進行迭代優化求極小值的過程即為我們的反向傳播算法。

2. DNN反向傳播算法的基本思路

在進行DNN反向傳播算法前,我們需要選擇一個損失函數,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。你也許會問:訓練樣本計算出的輸出是怎么得來的?這 個輸出是隨機選擇一系列 W ,b,用我們上一節的前向傳播算法計算出來的。即通過一系列的計算:

100042150-65815-2.jpg

計算到輸出層第L層對應的 aL 即為前向傳播算法計算出來的輸出。

回到損失函數,DNN可選擇的損失函數有不少,為了專注算法,這里我們使用最常見的均方差來度量損失。即對于每個樣本,我們期望最小化下式:

100042150-65814-1.jpg

其中,aL 和 y 為特征維度為 n_out 的向量,而 ||S||2 為 S 的L2范數。

損失函數有了,現在我們開始用梯度下降法迭代求解每一層的 W,b。

首先是輸出層第L層。注意到輸出層的 W,b 滿足下式:

100042150-65815-2.jpg

這樣對于輸出層的參數,我們的損失函數變為:

100042150-65816-3.jpg

這樣求解 W,b 的梯度就簡單了:

100042150-65817-4.jpg

注意上式中有一個符號 ⊙,它代表Hadamard積,對于兩個維度相同的向量 A ( a1 , a2 , ... an ) T 和 B ( b1 , b2 , ... bn ) T,則 A⊙B = ( a1b1,a2b2,... anbn ) T。

我們注意到在求解輸出層的 W,b 的時候,有公共的部分

100042150-65818-5.jpg

因此我們可以把公共的部分即對 zL 先算出來,記為:

100042150-65819-6.jpg

現在我們終于把輸出層的梯度算出來了,那么如何計算上一層 L ? 1 層的梯度,上上層 L ? 2 層的梯度呢?這里我們需要一步步的遞推,注意到對于第l層的未激活輸出 zL ,它的梯度可以表示為:

100042150-65820-7.jpg

如果我們可以依次計算出第 l 層的 δl ,則該層的 Wl,bl 很容易計算?為什么呢?注意到根據前向傳播算法,我們有:

100042150-65821-8.jpg

所以根據上式我們可以很方便的計算出第 l 層的 Wl,bl 的梯度如下:

100042150-65822-9.jpg

那么現在問題的關鍵就是要求出 δl 了。這里我們用數學歸納法,第 L 層的 δL上面我們已經求出, 假設第 l + 1 層的 δl+1 已經求出來了,那么我們如何求出第 l 層的 δl 呢?我們注意到:

100042150-65823-10.jpg

可見,用歸納法遞推 δl+1 和 δl 的關鍵在于求解

而 zl+1 和 zl 的關系其實很容易找出:

100042150-65824-11.jpg

這樣很容易求出:

將上式帶入上面 δl+1 和 δl 關系式我們得到:

現在我們得到了δl的遞推關系式,只要求出了某一層的 δl ,求解 Wl,bl 的對應梯度就很簡單的。

(注意,上面的矩陣求導推導部分不太嚴謹,定性理解即可。)

3. DNN反向傳播算法過程

現在我們總結下DNN反向傳播算法的過程。由于梯度下降法有批量(Batch),小批量(mini-Batch),隨機三個變種,為了簡化描述,這里我們以最基本的批量梯度下降法為例來描述反向傳播算法。實際上在業界使用最多的是mini-Batch的梯度下降法。不過區別僅僅在于迭代時訓練樣本的選擇而已。

輸入: 總層數 L ,以及各隱藏層與輸出層的神經元個數,激活函數,損失函數,迭代步長 α,最大迭代次數MAX與停止迭代閾值 ?,輸入的 m 個訓練樣本{ ( x1 , y1 ) , ( x2 , y2 ) , ... , ( xm , ym ) }

輸出:各隱藏層與輸出層的線性關系系數矩陣 W 和偏倚向量 b

1) 初始化各隱藏層與輸出層的線性關系系數矩陣 W 和偏倚向量 b 的值為一個隨機值。

2)for iter to 1 to MAX:

2-1) for i = 1 to m:

a) 將DNN輸入 a1 設置為 xi
b) for l = 2 to L,進行前向傳播算法計算

c) 通過損失函數計算輸出層的 δi,L
d) for l= L-1 to 2, 進行反向傳播算法計算

2-2) for l = 2 to L,更新第 l 層的 Wl,Wl,bl:

2-3) 如果所有 W,b 的變化值都小于停止迭代閾值 ?,則跳出迭代循環到步驟3。

3) 輸出各隱藏層與輸出層的線性關系系數矩陣 W 和偏倚向量 b 。

4. DNN反向傳播算法小結

有了DNN反向傳播算法,我們就可以很方便的用DNN的模型去解決第一節里面提到了各種監督學習的分類回歸問題。當然DNN的參數眾多,矩陣運算量也很大,直接使用會有各種各樣的問題。有哪些問題以及如何嘗試解決這些問題并優化DNN模型與算法,我們在下一篇講。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • BP
    BP
    +關注

    關注

    0

    文章

    26

    瀏覽量

    15179
  • dnn
    dnn
    +關注

    關注

    0

    文章

    56

    瀏覽量

    8975
收藏 人收藏

    評論

    相關推薦

    利用深度循環神經網絡對心電圖降噪

    具體的軟硬件實現點擊 http://mcu-ai.com/ MCU-AI技術網頁_MCU-AI 我們提出了一種利用由長短期記憶 (LSTM) 單元構建的深度循環神經網絡來降 噪心電圖信號 (ECG
    發表于 05-15 14:42

    BP神經網絡算法的基本流程

    訓練經過約50次左右迭代,在訓練集上已經能達到99%的正確率,在測試集上的正確率為90.03%,單純的BP神經網絡能夠提升的空間不大了,但kaggle上已經有人有卷積神經網絡在測試集達到了99.3%的準確率。
    發表于 03-20 09:58 ?928次閱讀
    <b class='flag-5'>BP</b><b class='flag-5'>神經網絡</b><b class='flag-5'>算法</b>的基本流程

    詳解深度學習、神經網絡與卷積神經網絡的應用

    處理技術也可以通過深度學習來獲得更優異的效果,比如去噪、超分辨率和跟蹤算法等。為了跟上時代的步伐,必須對深度學習與神經網絡技術有所學習和研究。本文將介紹
    的頭像 發表于 01-11 10:51 ?982次閱讀
    詳解<b class='flag-5'>深度</b>學習、<b class='flag-5'>神經網絡</b>與卷積<b class='flag-5'>神經網絡</b>的應用

    Kaggle知識點:訓練神經網絡的7個技巧

    科學神經網絡模型使用隨機梯度下降進行訓練,模型權重使用反向傳播算法進行更新。通過訓練神經網絡模型解決的優化問題非常具有挑戰性,盡管這些
    的頭像 發表于 12-30 08:27 ?428次閱讀
    Kaggle知識點:訓練<b class='flag-5'>神經網絡</b>的7個技巧

    淺析深度神經網絡壓縮與加速技術

    深度神經網絡深度學習的一種框架,它是一種具備至少一個隱層的神經網絡。與淺層神經網絡類似
    的頭像 發表于 10-11 09:14 ?461次閱讀
    <b class='flag-5'>淺析</b><b class='flag-5'>深度</b><b class='flag-5'>神經網絡</b>壓縮與加速技術

    人工神經網絡bp神經網絡的區別

    人工神經網絡bp神經網絡的區別? 人工神經網絡(Artificial Neural Network, ANN)是一種模仿人腦神經元網絡結構
    的頭像 發表于 08-22 16:45 ?3601次閱讀

    卷積神經網絡深度神經網絡的優缺點 卷積神經網絡深度神經網絡的區別

    深度神經網絡是一種基于神經網絡的機器學習算法,其主要特點是由多層神經元構成,可以根據數據自動調整神經
    發表于 08-21 17:07 ?2981次閱讀

    卷積神經網絡算法流程 卷積神經網絡模型工作流程

    ,其獨特的卷積結構可以有效地提取圖像和音頻等信息的特征,以用于分類、識別等任務。本文將從卷積神經網絡的基本結構、前向傳播算法、反向傳播
    的頭像 發表于 08-21 16:50 ?2043次閱讀

    卷積神經網絡算法代碼matlab

    卷積神經網絡算法代碼matlab 卷積神經網絡(Convolutional Neural Network,CNN)是一種深度學習網絡模型,其
    的頭像 發表于 08-21 16:50 ?925次閱讀

    卷積神經網絡算法有哪些?

    卷積神經網絡算法有哪些?? 卷積神經網絡(Convolutional Neural Network, CNN) 是一種基于多層感知器(multilayer perceptron, MLP)的
    的頭像 發表于 08-21 16:50 ?1308次閱讀

    卷積神經網絡算法原理

    卷積神經網絡算法原理? 卷積神經網絡(Convolutional Neural Network,CNN)是一種深度學習(Deep Learning)的模型,它能夠自動地從圖片、音頻、文
    的頭像 發表于 08-21 16:49 ?890次閱讀

    卷積神經網絡算法比其他算法好嗎

    卷積神經網絡算法比其他算法好嗎 卷積神經網絡(Convolutional Neural Networks, CNN)是一種用于圖像識別和處理等領域的
    的頭像 發表于 08-21 16:49 ?512次閱讀

    卷積神經網絡算法是機器算法

    卷積神經網絡算法是機器算法嗎? 卷積神經網絡算法是機器算法的一種,它通常被用于圖像、語音、文本等
    的頭像 發表于 08-21 16:49 ?606次閱讀

    卷積神經網絡的介紹 什么是卷積神經網絡算法

    深度學習算法。CNN模型最早被提出是為了處理圖像,其模型結構中包含卷積層、池化層和全連接層等關鍵技術,經過多個卷積層和池化層的處理,CNN可以提取出圖像中的特征信息,從而對圖像進行分類。 一、卷積神經網絡
    的頭像 發表于 08-21 16:49 ?1546次閱讀

    卷積神經網絡原理:卷積神經網絡模型和卷積神經網絡算法

    卷積神經網絡原理:卷積神經網絡模型和卷積神經網絡算法 卷積神經網絡(Convolutional Neural Network,CNN)是一種
    的頭像 發表于 08-17 16:30 ?1065次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>