back to index
【機器學習2021】類神經網路訓練不起來怎麼辦 (二): 批次 (batch) 與動量 (momentum)

link |
好,今天我們要講Batch跟Momentum這兩個訓練的技巧
link |
為什麼Training的時候要用Batch?
link |
我本來第一週的時候是不打算講這個東西的
link |
因為我相信講了以後大家就會有好多好多的問題
link |
因為這好像不是一個一般常理會想要採取的方式
link |
所以我決定先告訴大家用Batch這個東西
link |
上次我們有講說我們實際上在算微分的時候
link |
你還不是真的對所有Data算出來的L做微分呢
link |
你是把所有的Data分成一個一個的Batch
link |
那我這邊叫做Batch其實指的是一樣的東西
link |
這邊每一個Batch的大小就是大B比資料
link |
算個GradientUpdate參數
link |
再算個Gradient再Update參數
link |
所以我們不會拿所有的資料一起去算出Loss
link |
我們會拿一個Batch的資料拿出來算Loss
link |
在把你所有的資料分成一個一個Batch的時候
link |
第二個APOC會重新再分一次Batch
link |
再說Batch的Training帶來了什麼樣的幫助
link |
那右邊的Case就是Batch Size等於1
link |
我們的程式必須把20筆訓練資料都看完
link |
所以我們必須要把所有的Example
link |
也就是20筆Example都看完以後
link |
我們的Model參數才能夠Update一次
link |
那如果是一個Batch的話會怎麼樣呢
link |
代表我們只需要拿一筆資料出來算Loss
link |
叫做Amnesty的Compass上面
link |
Amnesty是手寫數字辨識的Compass
link |
它要計算出Gradient進了Update參數
link |
等於1 等於10 等於100 等於1000
link |
還是會隨著Batch Size的增加
link |
但是當你的Batch Size增加到1萬
link |
確實有隨著Batch Size的增加
link |
Batch Size的大小跟時間的關係
link |
所以你Batch Size真的很大的時候
link |
是比大的Batch Size還要多的
link |
那你要6萬個Update才能跑完一個Apple
link |
如果今天是Batch Size等於1000
link |
你要60個Update才能跑完一個Apple
link |
假設今天一個Batch Size等於1000
link |
那6萬次Update跟60次Update比起來
link |
所以左邊這個圖是Update一次參數
link |
但是假設你的Batch Size1000
link |
如果你的Batch Size1000
link |
比Batch Size1000的時候
link |
其實是比Batch Size1還要更快
link |
大的Batch Size反而是比較有效率的
link |
一個Apple大的Batch花的時間
link |
這個Batch Size大小的差異的話
link |
跟這邊看1筆資料Update一次的時間
link |
它的Gradient的方向比較Noisy嗎
link |
不管是Amnesty還是Cypher10
link |
如果你今天看Validation Set上的結果
link |
如果你今天看Validation Set上的結果
link |
Validation Set上的結果越差
link |
因為如果你看你的Trending的話
link |
照理說他們可以表示的Function
link |
但神奇的事情是大的Batch Size
link |
所以這個不是Model Bias的問題
link |
這個是Optimization的問題
link |
代表當你用大的Batch Size的時候
link |
你的Optimization可能會有問題
link |
Optimization的結果反而是比較好的
link |
在Trending Set上會得到比較好的結果
link |
那你今天在Update你的參數的時候
link |
你就是沿著一個Loss Function
link |
那你用Gradient Descent的方法
link |
但是假如是Small Batch的話
link |
假設你用L1算Gradient的時候
link |
但L2它的Function跟L1又不一樣
link |
你還是有辦法Train你的Model
link |
所以今天這種Noisy的Update方式
link |
假設我們今天在Training的時候
link |
不管是大的Batch還是小的Batch
link |
剛才的Case是Training的時候
link |
你努力的調大的Batch的Learning Rate
link |
小的Batch居然在Testing的時候
link |
On Large Batch Training for Deep Learning Durization Gap
link |
有Fully Connected Feedforward Network的
link |
一個Batch裡面有256名Sample
link |
大的Batch就是Dataset乘0.1
link |
Training Accuracy就已經差掉了
link |
想辦法Train到大的Batch的時候
link |
Training Accuracy跟小的Batch
link |
小的Batch居然比大的Batch差
link |
假設這個是我們的Training Loss
link |
那在這個Training Loss上面
link |
可能有很多個Local Minima
link |
還是有好Minima跟壞Minima之分
link |
什麼叫做好Minima跟壞Minima呢
link |
因為假設現在Training跟Testing中間
link |
Training的Loss跟Testing的Loss
link |
本來Training跟Testing的Distribution
link |
因為Training跟Testing
link |
你都是從Sample的Data算出來的
link |
也許Training跟Testing
link |
這個Training跟Testing
link |
把Training的Loss這個Function
link |
對這個在一個盆地裡面的Minima來說
link |
在Training跟Testing上面的結果
link |
但是因為Training跟Testing之間的不一樣
link |
因為每次Update的方向都不太一樣
link |
反正他就是順著Gradient Update
link |
你會Update的方向比較Noisy
link |
大的BatchUpdate的方向比較穩定
link |
反而在Optimization的時候
link |
變成另外一個Hyperparameter
link |
我們用大的Batch Size來做訓練
link |
1分鐘Train ImageNet等等
link |
有可能可以對抗Satellite Point
link |
如果今天是Gradient Descent
link |
它走到Local Minima就停住了
link |
走到Satellite Point就停住了
link |
就算滾到Satellite Point
link |
甚至它走到一個Local Minima
link |
它並不會被Satellite Point
link |
不一定會被Satellite Point
link |
到Gradient Descent裡面呢
link |
原來的Gradient Descent
link |
這個是Vanilla的Gradient Descent
link |
一般的Gradient Descent
link |
一般的Gradient Descent是說
link |
然後計算完這個Gradient以後呢
link |
Gradient Descent變成這個樣子
link |
我們不是只往Gradient Descent
link |
在一般的Gradient Descent裡面
link |
跟原來的Gradient Descent是一樣的
link |
但是我們不是只聽Gradient的話
link |
我們不是只根據Gradient的反方向
link |
在這個位置我們計算出Gradient
link |
但我們不是只根據Gradient反方向走
link |
前一步指示的方向跟Gradient指示的方向
link |
Gradient在這個地方說要往這個方向走
link |
所以這個跟一般Gradient Design不一樣
link |
之前所有算出來的Gradient的Weight Design
link |
就跟Learning Rate一樣是要調的
link |
η是Learning Rate我們要調
link |
就知道說N2等於負的λ乘上η乘上G0
link |
它是G0跟G1的Weight Design
link |
而是考慮過去所有Gradient的綜合
link |
希望幫助你了解Momentum是怎麼回事
link |
那我們從這個地方開始Update參數
link |
照理說走到Local Minimum
link |
那走到Settle Point也一樣
link |
因為Momentum不是只看Gradient
link |
Gradient告訴你應該要往左走了