深度學習之DNN與反向傳播算法總結

2021-02-25 灃雲平臺

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

在了解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中,損失函數優化極值求解的過程最常見的一般是通過梯度下降法來一步步迭代完成的,當然也可以是其他的迭代方法比如牛頓法與擬牛頓法。對DNN的損失函數用梯度下降法進行迭代優化求極小值的過程即為我們的反向傳播算法。

在進行DNN反向傳播算法前,我們需要選擇一個損失函數,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。DNN可選擇的損失函數有不少,為了專注算法,這裡我們使用最常見的均方差來度量損失。即對於每個樣本,我們期望最小化下式:

其中,aL和y為特徵維度為n_out的向量,而||S||2為S的L2範數。現在我們開始用梯度下降法迭代求解每一層的W,b。首先是輸出層第L層。注意到輸出層的W,b滿足下式:

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

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

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

輸入: 總層數L,各隱藏層與輸出層的神經元個數,激活函數,損失函數,迭代步長α,最大迭代次數MAX與停止迭代閾值ϵ

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

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 to 2, 進行反向傳播算法計算

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

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

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

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

本文內容採編自極智能,版權歸原作者所有,灃雲平臺不擁有其著作權,亦不承擔相應法律責任。如果本文涉及版權問題,請聯繫工作人員刪除,感謝。

相關焦點

  • 深度學習基礎之反向傳播算法
    介紹反向傳播算法(Back Propagation)的文章有很多,但講得通俗易懂的很少,有的只給出公式推導,很難理解,有的雖然給出了例子,但介紹得過於複雜
  • 乾貨 | 深度學習之CNN反向傳播算法詳解
    要套用DNN的反向傳播算法到CNN,有幾個問題需要解決:1)池化層沒有激活函數,這個問題倒比較好解決,我們可以令池化層的激活函數為σ(z)=z,即激活後就是自己本身。這樣池化層激活函數的導數為1.2)池化層在前向傳播的時候,對輸入進行了壓縮,那麼我們現在需要向前反向推導δl−1,這個推導方法和DNN完全不同。
  • 誤差反向傳播算法淺解
    本文主要內容:神經網絡應用梯度下降的直觀理解反向傳播算法的學習過程反向傳播算法推導總結探討本文靈感來源參考文獻直觀理解考慮一個有兩個輸入單元、一個輸出單元、沒有隱藏單元的簡單神經網絡。根據複合函數的求導規則,其一般形式為:反向傳播算法的學習過程學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。正向傳播時,輸入樣本從輸入層傳入,經各隱層逐層處理後,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號) 不符,則轉入誤差的反向傳播階段。
  • 反向傳播算法的工作原理(2)
    反向傳播算法根據前述方程,下面以算法的形式,顯示地寫出反向傳播算法:研究一下這個算法,你就會明白為什麼它被稱為反向傳播。在網絡中反向操作似乎很奇怪,但是如果你考慮反向傳播的證據,反向傳播源於這樣一個事實:代價函數是網絡輸出的函數。為了了解代價是如何隨先前的權重和偏差而變化的,我們需要反覆應用鏈式規則,在各個層中反向操作以獲得可用的表達式。為什麼說反向傳播是一種快速算法?為什麼說反向傳播是一種快速算法?為了回答這個問題,我們思考一下計算梯度的另一種方法。
  • 算法推導:反向傳播算法
    13.3.1 反向傳播算法推導如下圖所示為一個神經網絡的結構圖,由於本文主要探討激活函數在反向傳播過程中的作用,因此不會帶入數值進行計算,而是以兩個權重的更新為案例進行公式的推導,分別為如何通過反向傳播算法更新和的值。
  • 用反向傳播算法解釋大腦學習過程?Hinton等人新研究登Nature子刊
    機器之心報導魔王、Jamin、杜偉反向傳播可以解釋大腦學習嗎?近日 Hinton 等人的研究認為,儘管大腦可能未實現字面形式的反向傳播,但是反向傳播的部分特徵與理解大腦中的學習具備很強的關聯性。而反向傳播算法在深度神經網絡中解決了上述問題,不過長期以來人們一直認為反向傳播在生物層面上存在問題。儘管如此,神經科學的最新發展和神經網絡的成功激活了人們對反向傳播能否幫助進一步了解皮層學習的興趣。反向傳播算法使用反向連接(feedback connection)傳遞誤差信號,來計算突觸更新,從而實現快速學習。
  • 人工智慧系列(七) 深度學習中的梯度下降與反向傳播
    原力君在系列的第六篇《人工智慧系列(六) 深度學習中的神經網絡》中提到人工神經網絡的基礎是人工神經元,常用的神經元激活函數為sigmoid,應對深度學習的激活函數為ReLU、maxout等函數;多層感知機與DNN結構一致,激活函數有區別;CNN可以用來解決DNN網絡參數太多的問題;RNN為帶有反饋的神經網絡。
  • 離散優化代替反向傳播:Pedro Domingos提出深度學習新方向
    Friesen & Pedro Domingos機器之心編譯在改革深度學習、拋棄反向傳播的道路上我們不僅看到了 Geoffrey Hinton 的努力。近日,《終極算法》一書作者,華盛頓大學計算機科學教授 Pedro Domingos 也提出了自己的方法——離散優化。神經分類的原始方法是學習單層模型,比如感知機(Rosenblatt, 1958)。
  • 卷積神經網絡(CNN)反向傳播算法推導
    首先我給大家介紹一下我分析delta誤差反向傳播過程的簡單方法,如果神經網絡l+1層某個結點的delta誤差要傳到l層,我們就去找前向傳播時l+1層的這個結點和第l層的哪些結點有關係,權重是多少,那麼反向傳播時,delta誤差就會乘上相同的權重傳播回來。
  • 深度學習算法 | LSTM算法原理簡介及Tutorial
    LSTM(Long Short-Term Memory)算法作為深度學習方法的一種,在介紹LSTM算法之前,有必要介紹一下深度學習(Deep Learning)的一些基本背景。Hinton的團隊在ImageNet比賽(圖像識別中規模最大影響最大的比賽之一)中使用深度學習方法獲勝之後,關於深度學習的研究就呈井噴之勢;在2012年以前,該比賽結果的準確率一直處於緩慢提升的狀態,這一年突然有質的飛越,而從此之後深度學習方法也成為了ImageNet比賽中的不二選擇。
  • RNN系列教程之三 | 基於時間的反向傳播算法和梯度消失問題
    基於時間的反向傳播算法(BPTT)和梯度消失問題 (本部分) 4.建立基於門控循環單元(GRU)或者長短時記憶(LSTM)的RNN模型說明: 為完全掌握本部分教程,建議您對偏微分(也稱偏導數)和基本反向傳播的工作原理有所了 解,以下是三 篇關於反向傳播算法的教程供大家參考:http://cs231n.github.io/optimization
  • 反向傳播(BP)算法的數學原理
    ============================================在前面的文章(從神經網絡識別手寫體數字開始)中,我們已經了解了如何用梯度下降法來學習神經網絡的權重和偏置參數,但在梯度下降算法中所依賴的損失函數梯度(偏微分)計算方法並沒有介紹。本文詳細介紹神經網絡損失函數的梯度計算方法,即反向傳播算法(簡稱BP算法)。
  • OpenCV+深度學習預訓練模型,簡單搞定圖像識別 | 教程
    而OpenCV最近一次版本更新,為我們帶來了更好的深度學習支持,在OpenCV中使用預訓練的深度學習模型變得非常容易。pyimagesearch網站今天發布了一份用OpenCV+深度學習預訓練模型做圖像識別的教程,量子位編譯整理如下:最近,OpenCV 3.3剛剛正式發布,對深度學習(dnn模塊)提供了更好的支持,dnn模塊目前支持Caffe、TensorFlow、Torch、PyTorch等深度學習框架。
  • 深度學習三人行(第3期)---- TensorFlow從DNN入手
    我們已經學習了TensorFlow的一些基礎知識,深度學習三人行(第1期)---- TensorFlow愛之初體驗
  • 【強基固本】卷積神經網絡(CNN)反向傳播算法
    轉自:https://www.cnblogs.com/pinard/p/6494810.html01我們首先回顧DNN的反向傳播算法。現在我們想把同樣的思想用到CNN中,很明顯,CNN有些不同的地方,不能直接去套用DNN的反向傳播算法的公式。
  • 人人都能看懂的LSTM介紹及反向傳播算法推導(非常詳細)
    圖8 轉化後的窺視孔LSTM前向傳播:在t時刻的前向傳播公式為:反向傳播:對反向傳播算法了解不夠透徹的,請參考陳楠:反向傳播算法推導過程(非常詳細),這裡有詳細的推導過程,本文將直接使用其結論。已知:
  • 反向傳播算法最全解讀,機器學習進階必看!
    目前網絡上關於反向傳播算法的教程已經很多,那我們還有必要再寫一份教程嗎?答案是『需要』。為什麼這麼說呢?我們教員Sanjeev最近要給本科生上一門人工智慧的課,儘管網上有很多反向傳播算法的教程,但他卻找不到一份令他滿意的教程,因此我們決定自己寫一份關於反向傳播算法的教程,介紹一下反向傳播算法的歷史背景、原理、以及一些最新研究成果。
  • 深度學習的興起:從NN到DNN | 小白深度學習入門
    直觀理解深度學習基本概念    2. 白話詳解ROC和AUC    3. 什麼是交叉熵    4. 神經網絡的構成、訓練和算法神經網絡的歷史沿革Rosenblatt 還給出了相應的感知機學習算法。儘管結構簡單,感知機能夠學習並解決相當複雜的問題,在60年代掀起了 NN 研究的第一次熱潮。很多人都認為只要使用成千上萬的神經元,他們就能解決一切問題。
  • 大腦中的反向傳播_湃客_澎湃新聞-The Paper
    當前,「backprop」(即back propagation,反向傳播之簡稱)是機器學習領域最常用、最成功的深度神經網絡訓練算法。用backprop訓練的網絡在最近的機器學習浪潮中佔據著中流砥柱的地位,承擔上了語音和圖像識別、語言翻譯等任務。
  • 巧用torch.backends.cudnn.benchmark減少訓練時間
    點擊文末「閱讀原文」立刻申請入群~作者:xiaopl授權轉載自知乎專欄淺度學習大家在訓練深度學習模型的時候,經常會使用 GPU 來加速網絡的訓練。但是說起 torch.backends.cudnn.benchmark 這個 GPU 相關的 flag,可能有人會感到比較陌生。