Processing math: 100%

2017年9月24日 星期日

Week5

Cost Function

  • 首先定義一些在neural network會用到的變數
    • L:在這個network中有幾層layer
    • sl:在這個layer中有幾個unit (不含bias unit)
    • K:總共有幾個output unit,即結果分成幾類
    • hΘ(x)k:產生第k個output的hypothesis
  • Neural network的cost function定義如下:
  • J(Θ)=1mmi=1Kk=1[y(i)klog((hΘ(x(i)))k)+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2mL1l=1sli=1sl+1j=1(Θ(l)j,i)2

Backpropagation Algorithm

  • Backpropagation是neural network中用來表示最小化cost function的術語,就如同在logistic及linear regression中所用的gradient descent
    • 目標是計算:minΘJ(Θ)
  • 在這一節中我們來看看如何計算J(Θ)的偏微分
    • Θ(l)i,jJ(Θ)
  • 演算法:
    • 給定一組training set {(x(1),y(1))(x(m),y(m))}
      • 設定Δ(l)i,j for all (l,i,j)
      • Δ代表的是error
    • For training example t =1 to m:
      • 設定a(1):=x(t)
      • 使用forward propogation計算a(l) for l=2,3,…,L
      • 利用y(t)計算δ(L)=a(L)y(t)
        • 這是最後一個layer的error
        • δΔ的小寫
        • 將最後一層得到的結果跟正確值y相減
      • 計算最後一層layer之前的δ(L1),δ(L2),,δ(2)
        • 使用δ(l)=((Θ(l))Tδ(l+1)) . a(l) . (1a(l))
        • 後面兩項代表的是g(z(l))=a(l) . (1a(l)),也就是對g(z(l))的微分(g-prime derivative)
      • Δ(l)i,j:=Δ(l)i,j+a(l)jδ(l+1)i
        • 或是用vector計算:Δ(l):=Δ(l)+δ(l+1)(a(l))T
    • 最後可以得到新的Δ matrix
      • 若j≠0
        • D(l)i,j:=1m(Δ(l)i,j+λΘ(l)i,j)
      • 若j=0
        • D(l)i,j:=1mΔ(l)i,j
      • D是作為accumulator用來將所有的值加起來以求出最後的偏微分
        • Θ(l)ijJ(Θ) = D(l)ij

Backpropagation Intuition

  • δ(l)j代表的是在a(l)j的error,實際上也可以看成cost function的微分
    • δ(l)j=z(l)jcost(t)
  • 以下面這張圖為例:

    • 第二層的δ(2)2可透過第三層的δ(3)1δ(3)2來得到
      • δ(2)2 == Θ(2)12*δ(3)1+Θ(2)22*δ(3)2

Gradient Checking

  • Gradient checking可以用來確保我們的back propagation是正確的
  • Cost function的微分結果可以用下列式子來做近似:
    • ΘJ(Θ)J(Θ+ϵ)J(Θϵ)2ϵ
  • 而對於有多個theta的矩陣,對於Θj微分的近似值則如下:
    • ΘjJ(Θ)J(Θ1,,Θj+ϵ,,Θn)J(Θ1,,Θjϵ,,Θn)2ϵ
  • 將epsilon設小(ϵ=104)可確保數學式子是正確的
  • 淡epsilon若設的過小會遇到數值上的問題
  • 將近似的結果跟用back propagation得到的delta做比較,若結果正確的話數值不會差太多
  • 由於實作上近似值的計算很慢,所以在檢查完back propagation演算法後就不要再多做了!

Random Initialization

  • 在neural network中若將weight的初始值都設為0的話,在做back propagate時所有的node都會被update成相同的數值,這樣會大大降低準確度
  • 所以我們應該將Θ(l)ij設成介於[ϵ,ϵ]間的隨機值
    • 這裡的epsilon跟gradient checking的沒有關聯
    • epsilon比較好的選擇如下圖,Lin/Lout為該Layer input/output的unit數量

  • 首先要選擇network architecture,hidden unit有幾個,要分成幾個layer
    • hidden unit:越多越好,但要衡量計算成本
    • hidden layer:預設為1層,若超過1層,則建議每一層的hidden unit數目一樣\
  • Training a Neural Network
    • 隨機初始化weights
    • 實作forward propagation以求得hΘ(x(i))
    • 實作cost function
    • 實作back propagation以算出cost function的偏微分
    • 跑一次gradient checking確認back propagation是對的
    • 使用gradient descent或內建的最佳化方式求出讓cost function最小的weights

沒有留言:

張貼留言