Setting up your Optimization Problem
Last updated
Last updated
在這個篇章裡會講到一些關於優化 cost function 也就是 gradient descent 的方法
若某個 feature 的 input range 非常大 (size=1 ... 1000000)
那他的 cost function 會像橢圓一樣的形狀
在 gradient descent 時非常緩慢曲折
所以我們可以 normalize feature
使得 cost function 變成像正常的碗狀一樣
適合 implement gradient descent
Normalize 方法如下
其中的 是平均數 (mean)
另一個 是變異數 (variance)
在 gradient 有可能出現 vanishing gradient 或是 exploding gradient 的問題
梯度消失、梯度爆炸
通常發生在 nn 有非常多 layers 時
可被視為阻檔 deep learning 發展的一個原因
也就是 weights 將 decrease / increase exponentially
假設 activation function 是一個 linear function
假設所有的
如此一來, 可以很容易的算出
若所有 的值大於 1 時,weights 將會 increase exponentially
若所有 的值小於 1 時,weights 將會 decrease exponentially
對於 backpropogation 的導數一模一樣
這會讓訓練難度變得非常高
Weight initialization 雖然沒辦法完全解決 vanishing / exploding gradient
但可以減緩兩者的發生
從 single neuron 看起,若一個 neuron 得到很多個 input,那麼計算 z 等於
因為 n 很大,所以我們勢必要讓每個 都越小越好
為此,我們套用一招 Xavier initialization
用 python 寫成
其中 n 是输入的神经元个数,即 WL.shape[1]
若是 activation function 使用 ReLU 時
可以套用另一招 He initialization
Gradient Checking 可以用來檢查 backpropogation 的導數是否正確
先利用雙邊誤差方式計算出近似於 slope 的值
當有多個 parameters 時,我們會針對每一個 parameter 都做一次雙邊誤差計算
我們希望每一個算出來的值,都可以跟自己計算的一樣
我們用以下方式來 check,可以固定比例,不怕數值過小
若結果和 近似,表示 backpropogation 做得不錯
另外上面計算時用到的為 Euclidean norm
Gradient checking 只適用於 debug,training 時應該關掉
Fail 時,可以去觀察每一個 來找出 bug
記得要包含 regularization
Gradient checking 不適合跟 dropout regularization 一起使用