1. 程式人生 > >深度神經網路(DNN)反向傳播演算法(BP)

深度神經網路(DNN)反向傳播演算法(BP)

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

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

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

    回到我們監督學習的一般問題,假設我們有m個訓練樣本:$\{(x_1,y_1), (x_2,y_2), ..., (x_m,y_m)\}$,其中$x$為輸入向量,特徵維度為$n\_in$,而$y$為輸出向量,特徵維度為$n\_out$。我們需要利用這m個樣本訓練出一個模型,當有一個新的測試樣本$(x_{test},?)$來到時, 我們可以預測$y_{test}$向量的輸出。 

    如果我們採用DNN的模型,即我們使輸入層有$n\_in$個神經元,而輸出層有$n\_out$個神經元。再加上一些含有若干神經元的隱藏層。此時我們需要找到合適的所有隱藏層和輸出層對應的線性係數矩陣$W$,偏倚向量$b$,讓所有的訓練樣本輸入計算出的輸出儘可能的等於或很接近樣本輸出。怎麼找到合適的引數呢?

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

梯度下降(Gradient Descent)小結

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

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

    在進行DNN反向傳播演算法前,我們需要選擇一個損失函式,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。你也許會問:訓練樣本計算出的輸出是怎麼得來的?這 個輸出是隨機選擇一系列$W,b$,用我們上一節的前向傳播演算法計算出來的。即通過一系列的計算:$a^l = \sigma(z^l) = \sigma(W^la^{l-1} + b^l)$。計算到輸出層第$L$層對應的$a^L$即為前向傳播演算法計算出來的輸出。

    回到損失函式,DNN可選擇的損失函式有不少,為了專注演算法,這裡我們使用最常見的均方差來度量損失。即對於每個樣本,我們期望最小化下式:$$J(W,b,x,y) = \frac{1}{2}||a^L-y||_2^2$$

    其中,$a^L$和$y$為特徵維度為$n\_out$的向量,而$||S||_2$為S的L2範數。

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

    首先是輸出層第$L$層。注意到輸出層的$W,b$滿足下式:$$a^L = \sigma(z^L) = \sigma(W^La^{L-1} + b^L)$$

    這樣對於輸出層的引數,我們的損失函式變為:$$J(W,b,x,y) = \frac{1}{2}||a^L-y||_2^2 =  \frac{1}{2}|| \sigma(W^La^{L-1} + b^L)-y||_2^2$$

    這樣求解$W,b$的梯度就簡單了:$$\frac{\partial J(W,b,x,y)}{\partial W^L} = \frac{\partial J(W,b,x,y)}{\partial z^L}\frac{\partial z^L}{\partial W^L} =(a^L-y) \odot \sigma^{'}(z^L)(a^{L-1})^T$$$$\frac{\partial J(W,b,x,y)}{\partial b^L} = \frac{\partial J(W,b,x,y)}{\partial z^L}\frac{\partial z^L}{\partial b^L} =(a^L-y)\odot \sigma^{'}(z^L)$$

    注意上式中有一個符號$\odot$,它代表Hadamard積,對於兩個維度相同的向量$A(a_1,a_2,...a_n)^T$和$B(b_1,b_2,...b_n)^T$,則$A \odot B = (a_1b_1, a_2b_2,...a_nb_n)^T$。

    我們注意到在求解輸出層的$W,b$的時候,有公共的部分$\frac{\partial J(W,b,x,y)}{\partial z^L}$,因此我們可以把公共的部分即對$z^L$先算出來,記為:$$\delta^L = \frac{\partial J(W,b,x,y)}{\partial z^L} = (a^L-y)\odot \sigma^{'}(z^L)$$

    現在我們終於把輸出層的梯度算出來了,那麼如何計算上一層$L-1$層的梯度,上上層$L-2$層的梯度呢?這裡我們需要一步步的遞推,注意到對於第$l$層的未啟用輸出$z^l$,它的梯度可以表示為:$$\delta^l =\frac{\partial J(W,b,x,y)}{\partial z^l} = \frac{\partial J(W,b,x,y)}{\partial z^L}\frac{\partial z^L}{\partial z^{L-1}}\frac{\partial z^{L-1}}{\partial z^{L-2}}...\frac{\partial z^{l+1}}{\partial z^{l}}$$

    如果我們可以依次計算出第$l$層的$\delta^l$,則該層的$W^l,b^l$很容易計算?為什麼呢?注意到根據前向傳播演算法,我們有:$$z^l= W^la^{l-1} + b^l$$

    所以根據上式我們可以很方便的計算出第l層的$W^l,b^l$的梯度如下:$$\frac{\partial J(W,b,x,y)}{\partial W^l} = \frac{\partial J(W,b,x,y)}{\partial z^l} \frac{\partial z^l}{\partial W^l} = \delta^{l}(a^{l-1})^T$$$$\frac{\partial J(W,b,x,y)}{\partial b^l} = \frac{\partial J(W,b,x,y)}{\partial z^l} \frac{\partial z^l}{\partial b^l} = \delta^{l}$$

    那麼現在問題的關鍵就是要求出$ \delta^{l}$了。這裡我們用數學歸納法,第$L$層的$\delta^{L}$上面我們已經求出, 假設第$l+1$層的$\delta^{l+1}$已經求出來了,那麼我們如何求出第$l$層的$\delta^{l}$呢?我們注意到:$$\delta^{l} = \frac{\partial J(W,b,x,y)}{\partial z^l} = \frac{\partial J(W,b,x,y)}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial z^{l}} = \delta^{l+1}\frac{\partial z^{l+1}}{\partial z^{l}}$$

    可見,用歸納法遞推$\delta^{l+1}$和$\delta^{l}$的關鍵在於求解$\frac{\partial z^{l+1}}{\partial z^{l}}$。

    而$z^{l+1}$和$z^{l}$的關係其實很容易找出:$$z^{l+1}= W^{l+1}a^{l} + b^{l+1} = W^{l+1}\sigma(z^l) + b^{l+1} $$

    這樣很容易求出:$$\frac{\partial z^{l+1}}{\partial z^{l}} = (W^{l+1})^T\odot \underbrace{(\sigma^{'}(z^l),..,\sigma^{'}(z^l))}_{n_{l+1}}$$

    將上式帶入上面$\delta^{l+1}$和$\delta^{l}$關係式我們得到:$$\delta^{l} = \delta^{l+1}\frac{\partial z^{l+1}}{\partial z^{l}} = (W^{l+1})^T\delta^{l+1}\odot \sigma^{'}(z^l)$$

    現在我們得到了$\delta^{l}$的遞推關係式,只要求出了某一層的$\delta^{l}$,求解$W^l,b^l$的對應梯度就很簡單的。

3. DNN反向傳播演算法過程

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

    輸入: 總層數L,以及各隱藏層與輸出層的神經元個數,啟用函式,損失函式,迭代步長$\alpha$,最大迭代次數MAX與停止迭代閾值$\epsilon$,輸入的m個訓練樣本$\{(x_1,y_1), (x_2,y_2), ..., (x_m,y_m)\}$

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

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

      2)for iter to 1 to MAX:

    2-1) for i =1 to m:

      a) 將DNN輸入$a^1$設定為$x_i$

      b) for $l$=2 to L,進行前向傳播演算法計算$a^{i,l} = \sigma(z^{i,l}) = \sigma(W^la^{i,l-1} + b^l)$

      c) 通過損失函式計算輸出層的$\delta^{i,L}$

      d) for $l$= L-1 to 2, 進行反向傳播演算法計算$\delta^{i,l} =  (W^{l+1})^T\delta^{i,l+1}\odot \sigma^{'}(z^{i,l})$

    2-2) for $l$ = 2 to L,更新第$l$層的$W^l,b^l$:$$W^l = W^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}(a^{i, l-1})^T $$$$b^l = b^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}$$

    2-3) 如果所有$W,b$的變化值都小於停止迭代閾值$\epsilon$,則跳出迭代迴圈到步驟3。

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

4. DNN反向傳播演算法小結

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

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]) 

參考資料:

2) Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville

相關推薦

深度神經網路DNN反向傳播演算法(BP)

    在深度神經網路(DNN)模型與前向傳播演算法中,我們對DNN的模型和前向傳播演算法做了總結,這裡我們更進一步,對DNN的反向傳播演算法(Back Propagation,BP)做一個總結。 1. DNN反向傳播演算法要解決的問題     在瞭解DNN的反向傳播演算法前,我們先要知道DNN反向傳播演算法

深度神經網路DNN模型與前向傳播演算法

    深度神經網路(Deep Neural Networks, 以下簡稱DNN)是深度學習的基礎,而要理解DNN,首先我們要理解DNN模型,下面我們就對DNN的模型與前向傳播演算法做一個總結。 1. 從感知機到神經網路     在感知機原理小結中,我們介紹過感知機的模型,它是一個有若干輸入和一個輸出的模型,

神經網路 反向傳播直觀理解

oid 得到 文本分類 默認 img 自己 src 模型 com 這是典型的三層神經網絡的基本構成,Layer L1是輸入層,Layer L2是隱含層,Layer L3是隱含層,我們現在手裏有一堆數據{x1,x2,x3,...,xn},輸出也是一堆數據{y1,y2,y3,.

使用NetworkX模組繪製深度神經網路DNN結構圖

  本文將展示如何利用Python中的NetworkX模組來繪製深度神經網路(DNN)結構圖。   在文章Keras入門(一)搭建深度神經網路(DNN)解決多分類問題中,我們建立的DNN結構圖如下: 該DNN模型由輸入層、隱藏層、輸出層和softmax層組成,

DNN網路反向傳播演算法

本文摘自: https://www.cnblogs.com/pinard/p/6422831.html http://www.cnblogs.com/charlotte77/p/5629865.html     一、DNN求解引數的方法 在監督學習中,優化引數的方法 首

深度神經網路DNN是否模擬了人類大腦皮層結構?

原文地址:https://www.zhihu.com/question/59800121/answer/184888043   神經元   在深度學習領域,神經元是最底層的單元,如果用感知機的模型, wx + b, 加上一個啟用函式構成了全部,輸入和輸出都是數字,研究的比較清楚。別

TensorFlow 深度學習框架 2-- 反向傳播優化神經網路

訓練神經網路的過程就是設定神經網路引數的過程,只有經過有效訓練的神經網路模型才可以真正的解決分類問題或迴歸問題。使用監督學習的方式設定神經網路引數需要有一個標註好的訓練資料集。監督學習的最重要的思想是,在已知答案的標註資料集上,模型給出的預測結果要儘可能接近真實的答案。在神經

深度學習--反向傳播演算法

本文從李飛飛的課件cs231n的得到啟發,將關於反向傳播演算法的內容做下總結。 下圖是對深度學習的直觀解釋: 該圖右側表示影象空間,通過幾個分介面將影象空間分成幾個不同的區域,每個區域的影象具有相似的特徵。 左側為卷積神經網路的簡單版,將輸入影

神經網路深度學習—— 反向傳播工作原理

本文轉自:https://blog.csdn.net/qq_31192383/article/details/77198870 反向傳播演算法工作原理 在上一篇文章,我們看到了神經網路如何通過梯度下降演算法學習,從而改變權重和偏差。但是,前面我們並沒有討論如何計算代價函

乾貨 | 深度學習之卷積神經網路CNN的前向傳播演算法詳解

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在(乾貨 | 深度學習之卷積神經網路(CNN)的模型結構)中,我們對CNN的模型結構做了總結,這裡我們就在CNN的模型基礎上,看看CNN的前向傳播演算法是什麼樣

深度學習之DNN深度神經網路

(DNN)深度神經網路 簡介 DNN是指深度神經網路。與RNN迴圈神經網路、CNN卷積神經網路的區別就是DNN特指全連線的神經元結構,並不包含卷積單元或是時間上的關聯。 神經網路簡史 神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層

吳恩達深度學習筆記deeplearning.ai之卷積神經網路CNN

1. Padding 在卷積操作中,過濾器(又稱核)的大小通常為奇數,如3x3,5x5。這樣的好處有兩點: 在特徵圖(二維卷積)中就會存在一箇中心畫素點。有一箇中心畫素點會十分方便,便於指出過濾器的位置。 在沒有padding的情況下,經過卷積操作,輸出的資

tf.estimator API技術手冊8——DNNClassifier深度神經網路分類器

(一)簡 介 繼承自Estimator,定義在tensorflow/python/estimator/canned/dnn.py中,用來建立深度神經網路模型。示例如下: categorical_fe

DNN網絡反向傳播算法

通過 圖片 center 微分方程 log ext 部分 算法 輸入 本文摘自: https://www.cnblogs.com/pinard/p/6422831.html http://www.cnblogs.com/charlotte77/p/5629865.html

吳恩達深度學習系列課程筆記:卷積神經網路

本系列文章將對吳恩達在網易公開課“深度學習工程師”微專業內容進行筆記總結,這一部分介紹的是“卷積神經網路”部分。 1、計算機視覺 計算機視覺在我們還是生活中有非常廣泛的應用,以下幾個是最常見的例子: 影象分類: 可以對影象中的物體種類進行判斷,如確定影象中

深度學習基礎—— 從多層感知機MLP到卷積神經網路CNN

經典的多層感知機(Multi-Layer Perceptron)形式上是全連線(fully-connected)的鄰接網路(adjacent network)。 That is, every neuron in the network is connec

深度學習tensorflow實戰筆記1全連線神經網路FCN訓練自己的資料從txt檔案中讀取

      寫在前面的話:離上一次寫部落格已經有些日子了,以前的工程都是在caffe平臺下做的,caffe平臺雖然挺好用的,但是caffe主要用於做CNN,對於其它的網路模型用起來不太方便,所以博主轉戰tensorflow,Google對待tensorflow就想當年對待An

Deep Learning模型之:CNN卷積神經網路深度解析CNN

http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了網上幾位大牛的部落格,詳細地講解了CNN的基礎結構與核心思想,歡迎交流。 1. 概述    卷積神經網路是一種特殊的深層的神經網路模型,它的特殊性體現在兩個方面,一方面它的神經元

深度學習】卷積神經網路CNN

卷積神經網路(Convolutional Neural NetWork,CNN): 自然語言處理、醫藥發現、災難氣候發現、人工智慧程式。 輸入層: 整個神經網路的輸入 卷積層: 卷積神經網路中最重要的部分,卷積層中每一個節點的輸入只是上一層神經網路的一小塊,一般為3

深度學習筆記基礎——全卷積神經網路FCN

    通常CNN在卷積層之後會接上若干個全連線層,將卷積層產生的特徵圖(Feature Map)對映成一個固定長度的特徵向量進行分類。以AlexNet為代表的經典CNN結構適合於影象級的分類和迴歸任務,因為它們最後都期望得到整個輸入影象的一個數值描述,如AlexN