深度學習基礎(一)——反向傳播算法

概述

梯度下降法需要利用損失函數對所有參數求梯度,來尋找最小值點。而反向傳播法就是用於計算該梯度的方法,其本質利用鏈式法則對每個參數求導。

網絡傳播的過程

這裏寫圖片描述

前向傳播

  • Initialize the parameters for for an L -layer neural network.
  • Implement the forward propagation module.
    • Complete the LINEAR part of a layer’s forward propagation step (resulting in Z[l] ).
    • We give you the ACTIVATION function (relu/sigmoid).
    • Combine the previous two steps into a new [LINEAR->ACTIVATION] forward function.
    • Stack the [LINEAR->RELU] forward function L-1 time (for layers 1 through L-1) and add a [LINEAR->SIGMOID] at the end (for the final layer L ). This gives you a new L_model_forward function.
  • Compute the loss.
  • Implement the backward propagation module (denoted in red in the figure below).
    • Complete the LINEAR part of a layer’s backward propagation step.
    • Gradient of the ACTIVATE function (relu_backward/sigmoid_backward)
    • Combine the previous two steps into a new [LINEAR->ACTIVATION] backward function.
    • Stack [LINEAR->RELU] backward L-1 times and add [LINEAR->SIGMOID] backward in a new L_model_backward function
  • Finally update the parameters.

輸入數據及各層shape

Input X is (12288,209) (with m=209 examples) then:

Shape of W Shape of b Activation Shape of Activation
Layer 1 (n[1],12288) (n[1],1) Z[1]=W[1]X+b[1] (n[1],209)
Layer 2 (n[2],n[1]) (n[2],1) Z[2]=W[2]A[1]+b[2] (n[2],209)
Layer L-1 (n[L1],n[L2]) (n[L1],1) Z[L1]=W[L1]A[L2]+b[L1] (n[L1],209)
Layer L (n[L],n[L1]) (n[L],1) Z[L]=W[L]A[L1]+b[L] (n[L],209)

We compute WX+b in python, it carries out broadcasting. For example, if:

(2)W=[jklmnopqr]X=[abcdefghi]b=[stu]

Then WX+b will be:

(3)WX+b=[(ja+kd+lg)+s(jb+ke+lh)+s(jc+kf+li)+s(ma+nd+og)+t(mb+ne+oh)+t(mc+nf+oi)+t(pa+qd+rg)+u(pb+qe+rh)+u(pc+qf+ri)+u]

Forward propagation

這裏寫圖片描述

Three functions:

  • LINEAR
  • LINEAR -> ACTIVATION where ACTIVATION will be either ReLU or Sigmoid.
  • [LINEAR -> RELU] × (L-1) -> LINEAR -> SIGMOID (whole model)

The linear forward module (vectorized over all the examples) computes the following equations:

Z[l]=W[l]A[l1]+b[l]

where A[0]=X .

A[l]=g(Z[l])=g(W[l]A[l1]+b[l]) where the activation “g” can be sigmoid() , relu(), and so on.

Loss Function

Check if your model is actually learning.

Backward propagation

Remember that back propagation is used to calculate the gradient of the loss function with respect to the parameters.
這裏寫圖片描述

反向傳播的公式

全連接

這裏寫圖片描述

  • 計算輸出層L每個單元的誤差,第L層第j個單元的誤差的定義δjl
     δjl=Czjl. 
  • 根據鏈式求導得:

    δjL=CajLajLzjL=CajLσ(zjL).
  • 算完輸出層開始往回算之前層的誤差,當前層l的誤差用下一層l+1的誤差來表示:

    (40)δjl=Czjl(41)=kCzkl+1zkl+1zjl(42)=kzkl+1zjlδkl+1,

    其中j是當前層的某個神經元,它和下一層的若干個神經元(由k表示)相連。注意上式交換右邊兩項,並用誤差δ的定義代入,同時注意到:
    (43)zkl+1=jwkjl+1ajl+bkl+1=jwkjl+1σ(zjl)+bkl+1.

(44)zkl+1zjl=wkjl+1σ(zjl).

(45)δjl=kwkjl+1δkl+1σ(zjl).
  • W,b
    這裏寫圖片描述

CNN

CNN的反向傳播不同之處
  • 一般神經網絡中每一層輸入輸出a,z都只是一個向量,而CNN中的a,z是一個三維張量,即由若干個輸入的子矩陣組成。
  • 池化層沒有激活函數,可以令池化層的激活函數爲σ(z)=z,這樣池化層激活函數的導數爲1。
  • 池化層在前向傳播的時候,對輸入進行了壓縮,那麼我們向前反向推導上一層的誤差時,需要做upsample處理。
  • 卷積層是通過若干個矩陣卷積求和而得到當前層的輸出,這和一般的網絡直接進行矩陣乘法得到當前層的輸出不同。這樣在卷積層反向傳播的時候,上一層誤差的遞推計算方法會不同。
  • 對於卷積層,由於W使用的運算是卷積,那麼由該層誤差推導出該層的所有卷積核的W,b的方式也不
池化層

已知池化層的誤差,反向推導上一隱藏層的誤差,第l層誤差的第k個子矩陣δkl :
這裏寫圖片描述
擴展:
這裏寫圖片描述

如果是MAX,假設我們之前在前向傳播時記錄的最大值位置分別是左上,右下,右上,左下,則轉換後的矩陣爲:

這裏寫圖片描述
如果是Average,則進行平均,轉換後的矩陣爲:

這裏寫圖片描述
上邊這個矩陣就是誤差矩陣經過upsample之後的矩陣,那麼,由後一層誤差推導出前一層誤差的公式爲:

δkl1=J(W,b)akl1akl1zkl1=upsample(δkl)σ(zkl1)

簡化:
δl1=upsample(δl)σ(zl1)

對比:
(45)δjl=kwkjl+1δkl+1σ(zjl).

區別:
  • 無權重W
  • upsample

池化層: 沒有W,b,不用求W,b的梯度

卷積層
  • 已知卷積層的誤差,推導上一隱藏層的誤差:

    δl1=δlzlzl1=δlrot180(Wl)σ(zl1)

    對比:翻轉180°
    (45)δjl=kwkjl+1δkl+1σ(zjl).
  • 權重梯度
    這裏寫圖片描述
    對比:旋轉180度的操作。

  • 偏置
    偏差是三維向量,b是一個一個向量,不能和偏差直接相等,通常做法就是將偏差的子矩陣分別求和,得到誤差向量,即b的梯度
    這裏寫圖片描述

旋轉180°原因
卷積神經網絡(CNN)反向傳播算法-劉建平

一句話

DNN:

這裏寫圖片描述

  • L層的偏差δjL =損失函數對a求梯度再圈乘該層激活函數的導數
  • l層偏差δjl =上層權重矩陣的轉置與偏差矩陣的乘積,再圈乘該層的激活函數的導數。
  • 根據偏差分別求W,b的梯度
    • W:等於該層偏差與上一層a轉置的矩陣乘積
    • b: 等於該層偏差矩陣

CNN

卷積偏差:上層偏差與權重矩陣的翻轉180°的卷積,再乘該層的激活函數的導數。

δl1=δlzlzl1=δlrot180(Wl)σ(zl1)

池化偏差:上層偏差上採樣後圈乘該層的激活函數的導數。
δl1=upsample(δl)σ(zl1)

權重W:上層a卷積該層偏差
J(W,b)Wl=J(W,b)zlzlWl=al1δl

偏置b: 將δl 的各個子矩陣的項分別求和,得到一個誤差向量,即爲b的梯度:
J(W,b)bl=u,v(δl)u,v
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章