Machine Learning學習日記 — Coursera篇 (Week 5.2):Unrolling Parameters, Gradient Checking
BackPropagation in Practice(上)
大綱
- Unrolling Parameters
- Gradient Checking
1. Unrolling Parameters
將matrix展開成為一個n*1的vector,為了方便參數θ的傳遞
舉Neural Network的例子,會將每層不同的θ展開並合併為一個向量
而在需要的時候再將其重新塑形(reshape)
reshape(VEC(x,y),a,b)
reshape是一個用來將向量中的元素取出並重新排列成matrix的函式
VEC(x,y)指的是從向量VEC中取出從x至y的所有資料
後面的(a,b)代表又重新塑造成一個a*b的matrix
隨堂練習
Ans:
2. Gradient Checking
To check whether the partial derivative is correct or not
在開始前,首先要先知道什麼是partial derivative,我的理解是該參數的瞬間變動速率,可以參考:什麼是多變數函數的偏微分。
這一個章節要做的事情就是確信我們透過Back Propagation求得的偏導項是正確的,那我們要怎麼用別的方法算出一個近似偏導項的值呢?
以下用二維圖形來說明:
所謂斜率就是(y2-y1)/(x2-x1),求的會是兩個點間的一段斜率。
但是微分所做的事情就是求得某個點的切線斜率,所以根據上述式子,我們可以得到:當x2跟x1間的距離無限縮小時(比方說可能只差個一奈米之類的),我們就能得到近似於x1或是x2的切線大小!
所以上圖所做的事情其實就是:
為了求得某點的切線斜率,我們分別往上(+ε)跟往下(-ε),ε可以想像為一個個極小的變數(小寫epsilon,ε)。取兩個極近的點,並透過取這兩點的斜率來得到近似於切線斜率的數值k
最後再透過確認原本偏導項的數值與k是否相近來確信back propagation是否運作正確。
當然你也可以只取往上的一點x,然後取x點與原點間的斜率,但Andrew不推薦這種做法
當然你可能會問:這只是個二維圖形啊,所以我們可以透過這種國中數學很簡單的求出近似於斜率的數值。但是如果是更高次項、更為複雜的函式的話要怎麼計算呢?
基本上就是變動部分的參數θ,代入函式後得到結果:J(θ),再透過結果相減來得出此參數的瞬間變動速率,即偏導項
隨堂練習
Ans: