[爆卦]batch size越大越好是什麼?優點缺點精華區懶人包

為什麼這篇batch size越大越好鄉民發文收入到精華區:因為在batch size越大越好這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者pipidog (如果狗狗飛上天)看板DataScience標題Re: [問題] batch s...



想像一個極端的情況,你在做梯度修正時,如果每次都是拿所有數據餵進去,然後再做修正,這意味著你每次送進去的數據都是一樣的,沒有任何隨機性,所以你在N維空間中走向優化解的路徑會是一條確定的路徑,不存在隨機性。

深度學習的優化解本身是個非凸問題,本質上是NP hard,你能做的是盡可能走遍歷個空間來尋找相對最優解,所以如果你使用GD(即,使用全數據做修正),你對空間的探索性就等於0,你的模型會直直的奔向最靠近起始值的local min,所以除非你運氣很好,不然你自然很容易會陷入局域最優出不來。

另一個極端是,你每次只用一個sample來做修正,每次取那個sample做修正是隨機的,這好處是你會引入最多的隨機性,所以你可以想像成系統走向最優解的過程是類似布朗運動,大方向是往local min走,但是整個過程是搖搖晃晃的,如同醉漢走路,所以你比較有機會探索到較大的空間,這就是隨機梯度下降法,SGD。

事實上在沒有GPU的時代,大家都是用SGD的,但是GPU出來以後,為了盡可能利用GPU的優勢,大家才開始引入mini batch GD,犧牲掉一些隨機性換取效率。

至於batch size該用多少?目前的文獻大致的說法是,在訓練初期最好選擇2-32之間,透過較大的隨機性,讓系統盡可能搜索較大的空間,等系統開始傾向收斂,我們就不希望隨機性這麼大,免得模型又跳出去,變得很難收斂,所以會把batch size調大,降低隨機性,從數百到一兩千都是可接受的,看你的數據量而定。

其實透過隨機性來增加模型的泛化能力是深度學習裡常見的做法,例如添加noise layer,例如dropout,甚至引入L1, L2正規化某方面也可視為引入噪音,SGD自然也是在這個體系下的做法之一。

但說歸說,在真的數據量大的時候,為了加速訓練,在訓練初期就把batch size用上好幾千的文獻也不少,只是這樣做通常需要搭配其他精巧的設計來避免上述問題。


-----
Sent from JPTT on my Asus ASUS_Z017DA.

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 67.161.8.79
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1543717965.A.62A.html
kumitang: 長知識 12/02 12:29
michellehot: 推比喻 12/02 13:17
y956403: 推 12/02 13:33
youmehim: L1, L2 regularization跟引入noise的關係該怎麼理解? 12/02 15:26
youmehim: 我的理解是 regularization可以使得學習的機制分散在各 12/02 15:28
youmehim: neuron 不會押寶特定neuron 所以不容易被noise影響 12/02 15:29
abc53: 推 12/03 01:58
watashino: 優文 推 12/10 02:11
Helala: 推 12/10 23:38
kiazo: local min會很容易遇到嗎?之前聽過一個說法是在high dimen- 12/14 11:15
kiazo: sion下,要遇到local min的機率好像不高 12/14 11:16
pipidog: @kiazo,如果這個說法成立,意味著高維問題就不用處理過擬 12/15 16:59
pipidog: 合了,我想簡單的試試看幾個數據集就知道答案了. 12/15 17:00
pipidog: 非凸優化為何可行還是個謎,說法太多,很多說法聽聽就好. 12/15 17:06
pipidog: 但對於訓練初期不要使用大batch,我認為學界應該算有共識. 12/15 17:07
show19971025: 推 08/22 18:51

你可能也想看看

搜尋相關網站