Processing math: 100%
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(Θ)=−1mm∑i=1K∑k=1[y(i)klog((hΘ(x(i)))k)+(1−y(i)k)log(1−(hΘ(x(i)))k)]+λ2mL−1∑l=1sl∑i=1sl+1∑j=1(Θ(l)j,i)2
Backpropagation Algorithm
- Backpropagation是neural network中用來表示最小化cost function的術語,就如同在logistic及linear regression中所用的gradient descent
- 在這一節中我們來看看如何計算J(Θ)的偏微分
- 演算法:
- 給定一組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之前的δ(L−1),δ(L−2),…,δ(2)
- 使用δ(l)=((Θ(l))Tδ(l+1)) .∗ a(l) .∗ (1−a(l))
- 後面兩項代表的是g′(z(l))=a(l) .∗ (1−a(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是作為accumulator用來將所有的值加起來以求出最後的偏微分
Backpropagation Intuition
- δ(l)j代表的是在a(l)j的error,實際上也可以看成cost function的微分
- 以下面這張圖為例:
- 第二層的δ(2)2可透過第三層的δ(3)1及δ(3)2來得到
- δ(2)2 == Θ(2)12*δ(3)1+Θ(2)22*δ(3)2
Gradient Checking
- Gradient checking可以用來確保我們的back propagation是正確的
- Cost function的微分結果可以用下列式子來做近似:
- 而對於有多個theta的矩陣,對於Θj微分的近似值則如下:
- ∂∂ΘjJ(Θ)≈J(Θ1,…,Θj+ϵ,…,Θn)−J(Θ1,…,Θj−ϵ,…,Θn)2ϵ
- 將epsilon設小(ϵ=10−4)可確保數學式子是正確的
- 淡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
沒有留言:
張貼留言