Mini-Batch Gradient Descent
當 training set 非常大,例如有 m = 5000000 筆時
Batch gradient descent 需要跑完所有 m 才能進行一次下降
Mini-batch gradient descent 從 m 中取出一批一批 training set
那就可以執行 5000 次下降
全部 5000 筆執行完一次,稱為 1 epoch
前 1000 筆用 (X{1},Y{1}) 表示,
最後 1000 筆就是 (X{5000},Y{5000})
每次執行的 gradient descent 和 batch 時一模一樣
執行 5000 次完還可以重複進行,直到 converge
Batch 和 Mini-Batch 的 cost per iteration 如下
Mini-Batch Size
Mini-batch size 也是一個需要經驗的 hyperparameter
當 size = m 時
就是原本的 Batch gradient descent
當 size = 1 時
稱為 Stochastic gradient descent
每讀一筆 training set 就做一次 gradient descent
Batch Gradient Descent
對整個 m 進行一次 gradient descent
Stochastic Gradient Descent
但完全沒享受到 vectorization 的加速優勢
永遠不會 converge,會在最小值周圍移動
可以用 learning rate decay 解決
Mini-Batch
將兩者優點合併,但需要找出適合的 batch size
另外,size 一定要定義為 CPU/GPU 裝的下的大小
Exponentially Weighted Averages
在實作一些比 gradient descent 還要棒的 optimization algorithm 前
需要先學會使用 Exponentially Weighted Averages
這是一種用於分析移動平均的算法、像天氣、股票等一連串資訊
Understanding Exponentially Weighted Averages
所有的 Bias correction 加總會接近或等於 1
而真實溫度會隨著 Bias correction 不斷被降低 (被無視)
10 天後的溫度在乘上 bias correction 後,已經下降到原本的 1/3 左右
最後,在計算 exponentially weighted averages 只需要一行程式碼
因為不需定義所有的 v,只需對同一個 v 進行運算更新即可
雖然不會比你直接計算前 10 天、50 天的平均還要精準
但他只需要一行代碼、而且佔用非常少 memory、效率極高
Bias Correction Adjustment
Gradient Descent with Momentum
Momentum 事實上就是對 gradient 進行 Exponentially weighted averages 的計算
oscillation 更大,甚至會 overshoot
所以 gradient descent with momentum 的實作如下
momentum 不需要修正 bias correction
RMSprop
RMSprop 全名為 Root-Mean-Square Propagation
Adam
Adam 的全名為 Adaptive Moment Estimation
Adam 將 momentum 和 RMSprop 融合在一起,得到更好效果
接著在 Adam,要對這四個參數進行 bias correction adjustment
Hyperparameter choices
在這個算法中出現非常多 hyperparameters
Learning Rate Decay
gradient descent 將會在最小值周圍擺動
最常用的 learning rate decay 公式如下
k epoch
代表所有 mini-batch 全跑過 k 遍
decay-rate
是一個 hyperparameter
Other Learning Rate Decay Formula
Manual decay : Only small num training set
Problem of Local Optima
在 machine learning 時,我們對梯度接近 0 的想像都是 local optima
但在 deep learning 中,你的維度變的非常大
通常會遇到梯度接近 0 的地方是 saddle point
所以在大型的 nn、有著大量參數、較高維度時
困在 local optima 的情況是不太可能的
所以 deep learning optimization 的問題不是 local optima 而是 plateaus
這個 saddle point 或者 plateaus 會使得 learning 速度變慢
所以才會不斷的推出新的 optimization algorithm
Momentum, RMSprop, Adam, ...
甚至找出更棒的 optimization algorithm 是 deep learning 的挑戰之一
若 m 較小,如 m≤2000 可以考慮直接使用 batch gradient descent
若 m 較大,通常使用 26,27,28,29 作為 batch size 較好
我們定義 vi 為前一天算完的平均 (v0=0)
v0v1v2⋮v365=0=0.9v0+0.1θ1=0.9v1+0.1θ2=0.9v364+0.1θ365 把 vt 想成是 ≈1−β1 天的溫度
vt=βvt−1+(1−β)θt 所以 β 是一個 weight,在上面例子是 0.9
若設定 β=0.98
所以 β 越小,代表平均越少前面天數,就會改變的越激烈
所以綠線就是平均前 50 天所產生的線 (β=0.98)
黃線則是平均前 2 天 (β=0.5)
我們設定 β=0.9,可以計算出
⋮v98v99v100=0.9v97+0.1θ98=0.9v98+0.1θ99=0.9v99+0.1θ100 然後把計算到 v100 的值攤開
v100=0.1θ100+0.1×0.9θ99+0.9v98=0.1θ100+0.1×0.9θ99+0.1×0.92θ98+0.9v97=⋯ 因為每個 θi 代表第 i 天的真實溫度
每個 θi 前方的 0.1×0.9(n−i) 稱為 Bias correction
β→0lim(1−β)β1=e1≈0.368 上面這個公式代表當 β=0.9 時
Repeat : v:=βv+(1−β)θt 所以 v1=βv0+(1−β)θ1
前項完全被消掉,因此第一個 v 僅為當天溫度的 (1−β) 倍
vt=1−βtβvt−1+(1−β)θt 而隨著 t 越大,βt 將趨近於 0,代表整個修正不再影響結果
紫線為 learning rate α 特別大的 gradient descent
On iteration t :Compute dw,db on current mini-batchvdW=β(vdW)+(1−β)dWvdb=β(vdb)+(1−β)dbW=W−α(vdW)b=b−α(vdb) 其中 vdW,vdb 就是計算 exponentially weighted averages 的方法
而 β 跟 α 一樣,是一個 hyperparameter
當 β=0,就等於一般的 gradient descent
通常會設置 β=0.9,會很好的得到紅線的效果
我們假設 w 和 b 是主要影響 oscillation 的 parameters
而 b 是影響上下擺動較嚴重的 parameter
為了跟 momentum 區分,RMSprop 中的 β 改為 β2
On iteration t :Compute dw,db on current mini-batchsdW=β2(sdW)+(1−β2)(dW)2sdb=β2(sdb)+(1−β2)(db)2W=W−αsdW+ϵdwb=b−αsdb+ϵdb 因為 W 較小,所以用 (dW)2 計算的 sdW 也會較小
那麼更新 W 時,sdW 在分母,算出來的 dw 就適中
而 b 較大,所以用 (db)2 計算的 sdb 就會較大
那麼更新 b 時,sdb 在分母較大,算出來的 db 就會變小
另外在分母加上 ϵ,是為了防止分母太小,導致數值不穩定
這裡只是舉 b 為影響上下擺動嚴重的 parameter
實際例子可能為 w1,w2,w3,⋯ 是影響上下擺動的原因
而 w4,w5,⋯ 是不影響的
β2 也是一個 hyperparameter
初始化以下參數 vdW=0,vdb=0,sdW=0,sdb=0
在 momentum 部分的 β 用 β1 表示
在 RMSprop 部分的 β 用 β2 表示
Compute dw,db on current mini-batchvdW=β1(vdW)+(1−β1)dWvdb=β1(vdb)+(1−β1)dbsdW=β2(sdW)+(1−β2)(dW)2sdb=β2(sdb)+(1−β2)(db)2 vdWcorrectedvdbcorrectedsdWcorrectedsdbcorrected=1−β1tvdW=1−β1tvdb=1−β2tsdW=1−β2tsdb Wb=W−αsdWcorrected+ϵvdWcorrected=b−αsdbcorrected+ϵvdbcorrected α : learning rate,需要自己慢慢找到一個合適的
β1 : momentum 使用到的像 exponentially weighted averages 的 weight
β2 : RMSprop 所使用到的 β,一樣是由 exponentially weighted averages 而來
ϵ : 不重要,用預設的 10e-8 即可
β1,β2,ϵ 通常不太需要去修改調整
若使用固定 α 的 mini-batch,那麼 gradient descent 幾乎不會準確 converge
為此我們可以讓 α 隨著時間慢慢減少
最終 α 變小,幫助我們在最小值收斂
α=1+decay-rate×epoch-num1×α0 α0 是初始的 learning rate
假設我們設計 α0=0.2,decay-rate = 1
那 α 將會隨著跑過所有 mini-batch 的次數而下降
α=0.95epoch-num×α0 α=epoch-numconstant×α0 α=mini-batch-num tconstant×α0