1. 程式人生 > >卷積神經網路之前向反向傳播演算法

卷積神經網路之前向反向傳播演算法

前面我們已經介紹了深度神經網路卷積神經網路,這些演算法都是前向反饋,模型的輸出和模型本身沒有關聯關係。今天我們學習輸出和模型間有反饋的神經網路,迴圈神經網路(Recurrent Neual Networks),其廣泛應用於自然語言處理中的語音識別,書寫識別和機器翻譯等領域。

1.RNN簡介

前面介紹的DNN和CNN之中,訓練樣本的輸入和輸出都是確定的。但對於訓練樣本輸入是連續的序列,訓練樣本長度不同的樣本,比如一段連續的語音和手寫文字,DNN和CNN是比較難處理的。而對於上述問題,RNN則是比較擅長,那麼RNN是怎麼做到的呢?

RNN假設輸入樣本是基於序列的,比如是從序列索引1到序列索引τ,對於其中的任意序列索引號t,輸入是對應樣本序列的x

(t)x^{(t)}。而模型在序列索引號t位置的隱藏狀態h(t)h^{(t)},則由x(t)x^{(t)}和t-1時刻的隱藏狀態h(t1)h^{(t-1)}共同決定。在任意序列索引號t,也有相對應的模型預測輸出oto^{t}。通過預測輸出o(t)o^{(t)}和訓練序列的真實輸出y(t)y^{(t)},以及損失函式L(t)L^{(t)},我們就可以用和DNN類似的方法來訓練模型,接著用來預測測試樣本的輸出,下面我們來看看迴圈神經網路的模型。

2.RNN模型

迴圈神經網路之前向反向傳播演算法圖片01

迴圈神經網路有多種模型結構,這裡我們介紹最主流的模型結構。上圖中左邊是沒有按時間序列展開的圖,右邊是按照時間序列展開的結構,我們重點看右邊的模型結構。這裡描述了在序列索引號t附近的RNN模型,下面針對一些引數做具體說明。

  • x(t)x^{(t)}代表在序列索引號t時訓練樣本的輸入,同樣x(t1)x^{(t-1)}x(t+1)x^{(t+1)}分別代表t-1時刻和t+1時刻訓練樣本的輸入。
  • h(t)h^{(t)}代表在序列索引號t時模型的隱藏狀態,h(t)h^{(t)}x(t)x^{(t)}h(t1)h^{(t-1)}共同決定。
  • o(t)o^{(t)}代表在序列索引號t時模型的輸出,o(t)o^{(t)}由模型當前的隱藏狀態h(t)h^{(t)}決定。
  • L(t)L^{(t)}代表在序列索引號t時模型的損失函式。
  • y(t)y^{(t)}代表在序列索引號t時訓練樣本序列的真實輸出。
  • U,W,VU,W,V矩陣是模型的線形關係引數,在整個RNN網路間是共享的,這點和DNN不同。正是因為引數的共享,體現了RNN模型迴圈反饋的思想。

3.RNN前向傳播演算法

根據上面介紹的模型,我們來看一下RNN前向傳播演算法,對於任意時刻序列索引號t,能夠得到當前的隱藏狀態。其中σ為RNN的啟用函式,一般是tanh,b為偏倚係數。 h(t)=σ(z(t))=σ(Ux(t)+Wh(t1)+b) h^{(t)} = \sigma(z^{(t)}) = \sigma (Ux^{(t)} + Wh^{(t-1)} + b) 序列索引號t時模型的輸出o(t)o^{(t)}o(t)=Vh(t)+c o^{(t)} = Vh^{(t)} + c 最終能夠得到模型的預測輸出,由於RNN是識別類的分類模型,所以下式啟用函式一般是softmax函式。 y^(t)=σ(o(t)) \hat{y}^{(t)}= \sigma (o ^{(t)}) 最後通過損失函式L(t)L^{(t)},比如對數似然損失函式,我們可以量化模型在當前位置的損失,即y^(t)\hat{y}^{(t)}y(t)y^{(t)}的差距。

4.RNN反向傳播演算法

RNN反向傳播演算法和DNN思路相同,即通過梯度下降法進行迭代,得到合適的RNN模型引數U,W,V,b,c,傳播過程中所有的引數在序列中各個位置是共享的,即反向傳播中我們更新的是相同的引數。為了簡化描述,反向傳播時損失函式採用對數損失函式,隱藏層的啟用函式為tanh函式,輸出的啟用函式為softmax函式。

對於RNN,由於我們在序列各位置都有損失函式,因此最終的損失函式L為 L=t=1τL(t) L = \sum_{t=1}^{\tau}L^{(t)} 其中V,c的梯度計算比較簡單,如下所示 Lc=t=1τLtc=t=1τL(t)o(t)o(t)c=t=1τ(y^(t)y(t)) \frac{\partial L}{\partial c} = \sum _{t=1}^{\tau} \frac{\partial L^{t}}{\partial c} = \sum _{t=1}^{\tau} \frac{\partial L^{(t)}}{o^{(t)}} \frac{\partial o^{(t)}}{\partial c} = \sum_{t=1}^{\tau} (\hat{y}^{(t)} - y^{(t)})

LV=t=1τLtV=t=1τL(t)o(t)o(t)V=t=1τ(y^(t)y(t))(h(t))T \frac{\partial L}{\partial V} = \sum _{t=1}^{\tau} \frac{\partial L^{t}}{\partial V} = \sum _{t=1}^{\tau} \frac{\partial L^{(t)}}{o^{(t)}} \frac{\partial o^{(t)}}{\partial V} = \sum_{t=1}^{\tau} (\hat{y}^{(t)} - y^{(t)})(h^{(t)})^T

針對W,U,b的梯度計算比較複雜,從RNN模型可以看出,在反向傳播時,在某一序列位置t的梯度損失,由當前位置的輸出對應的梯度損失和序列索引位置t+1時的梯度損失兩部分共同決定。對於W在某一序列位置t的梯度損失需要反向傳播一步步來進行計算,此處定義序列索引t位置的隱藏狀態梯度為 δ(t)=Lh(t) \delta^{(t)} = \frac{\partial L}{\partial h^{(t)}} 這樣便可以像DNN一樣從δ(t+1)\delta^{(t+1)}遞推得到δ(t)\delta^{(t)} δ(t)=Lo(t)o(t)h(t)+Lh(t+1)h(t+1)h(t)=VT(y^(t)y(t))+WTδ(t+1)diag(1(h(t+1))2) \delta^{(t)} = \frac{\partial L}{\partial o^{(t)}}\frac{\partial o^{(t)}}{\partial h^{(t)}} + \frac{\partial L}{\partial h^{(t + 1)}}\frac{\partial h^{(t + 1)}}{\partial h^{(t)}} = V^T(\hat{y}^{(t)} - y^{(t)}) + W^T \delta^{(t+1)} diag(1-(h^{(t+1)})^2)

相關推薦

神經網路之前反向傳播演算法

前面我們已經介紹了深度神經網路和卷積神經網路,這些演算法都是前向反饋,模型的輸出和模型本身沒有關聯關係。今天我們學習輸出和模型間有反饋的神經網路,迴圈神經網路(Recurrent Neual Networks),其廣泛應用於自然語言處理中的語音識別,書寫識別和機

LSTM神經網路之前反向傳播演算法

上篇文章我們已經學習了迴圈神經網路的原理,並指出RNN存在嚴重的梯度爆炸和梯度消失問題,因此很難處理長序列的資料。本篇文章,我們將學習長短期記憶網路(LSTM,Long Short Term Memory),看LSTM解決RNN所帶來的梯度消失和梯度爆炸問題。 1.從RNN到LSTM

迴圈神經網路之前反向傳播演算法

前面我們已經介紹了深度神經網路和卷積神經網路,這些演算法都是前向反饋,模型的輸出和模型本身沒有關聯關係。今天我們學習輸出和模型間有反饋的神經網路,迴圈神經網路(Recurrent Neual Networks),其廣泛應用於自然語言處理中的語音識別,書寫識別和機器翻譯等領域。 1.R

神經網路神經網路的訓練——反向傳播演算法

神經網路的訓練過程,就是通過已有的樣本,求取使代價函式最小化時所對應的引數。代價函式測量的是模型對樣本的預測值與其真實值之間的誤差,最小化的求解一般使用梯度下降法(Gradient Decent)或其他與梯度有關的方法。其中的步驟包括: 初始化引數。 求代價

神經網路之前傳播演算法

0.雜談 本來個人是準備畢業直接工作的,但前段時間學校保研大名單出來之後,發現本人有保研機會,於是就和主管請了幾天假,回學校準備保研的事情。經過兩天的準備,也是非常幸運,成功拿到本院的保研名額。明確得到保研名額的時候已經是9月18號,然而國家推免系統開放時間是9月28號,也就是說我只

吳恩達機器學習筆記 —— 10 神經網路引數的反向傳播演算法

本篇講述了神經網路的誤差反向傳播以及訓練一個神經網路模型的流程 神經網路可以理解為兩個過程:訊號的正向傳播和誤差的反向傳播。在正向的傳播過程中,計算方法為Sj=wijxi+bj,其中i是樣本、j是層數。然後xj=f(Sj),f為啟用函式。引入啟用函式的原因是可以

神經網路(CNN)學習演算法之----基於LeNet網路的中文驗證碼識別

  由於公司需要進行了中文驗證碼的圖片識別開發,最近一段時間剛忙完上線,好不容易閒下來就繼上篇《基於Windows10 x64+visual Studio2013+Python2.7.12環境下的Caffe配置學習 》文章,記錄下利用caffe進行中文驗證碼圖片識別的開發過程。由於這裡主要介紹開發和實現過程,

CNN神經網路--反向傳播(2,前傳播

 卷積層:卷積層的輸入要麼來源於輸入層,要麼來源於取樣層,如上圖紅色部分。卷積層的每一個map都有一個大小相同的卷積核,Toolbox裡面是5*5的卷積核。下面是一個示例,為了簡單起見,卷積核大小為2*2,上一層的特徵map大小為4*4,用這個卷積在圖片上滾一遍,得到一個一個(4-2+1)*(4-2+1)=3

神經網路CNN的前和後傳播(一)

卷積神經網路CNN的前向和後向傳播 卷積運算與相關的區別 卷積運算的正向和反向傳播 原文 Forward And Backpropagation in Convolutional Neural Network地址: https://medium.

神經網路CNN的前和後傳播(二)

卷積神經網路CNN的前向和後向傳播(二) padding=1,stride=1的情形 輸入為8x8和卷積核3x3 對輸入的求導 對卷積核的求導 本文在卷積神經網路CNN的前向和後向傳播(一)的基礎上做一些擴充套件

深層神經網路神經網路反向傳播過程推導

反向傳播過程是深度學習的核心所在,雖然現在很多深度學習架構如Tensorflow等,已經自帶反向傳播過程的功能。我們只需要完成網路結構的正向傳播的搭建,反向傳播過程以及引數更新都是由架構本身來完成的。但為了更好的瞭解深度學習的機理,理解反向傳播過程的原理還是很重要的。 在學

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

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

神經網路——反向傳播演算法

卷積神經網路(CNN)的結構可閱讀上一篇博文。CNN的基本層包括卷積層和池化層,二者通常一起使用,一個池化層緊跟一個卷積層之後。這兩層包括三個級聯的函式:卷積,求sigmoid函式(或使用其他激勵函式),池化。其前向傳播和後向傳播的示意圖如下: 

神經網路反向傳播演算法

神經網路的訓練過程,就是通過已有的樣本,求取使代價函式最小化時所對應的引數。代價函式測量的是模型對樣本的預測值與其真實值之間的誤差,最小化的求解一般使用梯度下降法(Gradient Decent)或其他與梯度有關的方法。其中的步驟包括: 初始化引數。求代價函式關

迴圈神經網路(RNN)模型與前反向傳播演算法

    在前面我們講到了DNN,以及DNN的特例CNN的模型和前向反向傳播演算法,這些演算法都是前向反饋的,模型的輸出和模型本身沒有關聯關係。今天我們就討論另一類輸出和模型間有反饋的神經網路:迴圈神經網路(Recurrent Neural Networks ,以下簡稱RNN),它廣泛的用於自然語言處理中的語音

Alexnet 神經網路 純 matlab程式碼 底層實現(一)正向傳播

本程式的主要目的是通過自主編寫alexnet網路,深入瞭解卷積、pooling、區域性區域正則化、全連線層、基於動量的隨機梯度下降、卷積神經網路的引數修正演算法等神經網路的基礎知識。 寫這個部落格一方面幫助自己理清思路,另一方面督促自己加快進度,也希望可以幫助到同樣想深入瞭

神經網路反向BP演算法公式推導

博文轉載至:http://blog.csdn.net/celerychen2009/article/details/8964753 此篇博文只涉及到公式推導,如果想了解卷積神經網路的具體工作過程,可檢視轉載博文博主其它文件或者百度自己去看。轉載的文章涉及到的角下標大家注意下

Keras學習(四)——CNN神經網路

本文主要介紹使用keras實現CNN對手寫資料集進行分類。 示例程式碼: import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.models impo

深度學習(十九)基於空間金字塔池化的神經網路物體檢測

原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一、相關理論    本篇博文主要講解大神何凱明2014年的paper:《Spatial Pyramid Pooling in Dee

淺析神經網路的內部結構

提到卷積神經網路(CNN),很多人的印象可能還停留在黑箱子,輸入資料然後輸出結果的狀態。裡面超級多的引數、眼花繚亂的命名可能讓你無法短時間理解CNN的真正內涵。這裡推薦斯坦福大學的CS231n課程,知乎上有筆記的中文翻譯。如果你需要更淺顯、小白的解釋,可以讀讀看本文。文章大部分理解都源自於CS3