增加運算效率
理論上,在不考慮平行運算下,小的Batch會跑得比較快,但update參數時造成的noisy也多;而大的Batch跑得慢,但較update參數比較可以一步到位。
但真實環境中,我們是有GPU平行運算的,Batch大小與耗費時間幾乎成反比。
這點與我做SQL Tuning的時候經驗符合:效能來說,Batch 從來都不是越大或越小越好,因為還有平行運算。
小的Batch Size反而會有更好的準確率,這是一個Optimaization問題,而不是Overfiting問題。
一個合理的解釋是,當Batch Size越大,就越有可能遇到走不下去的點,反之Batch Size越小,就有越多可選擇路徑。
而且在Testing時,小的Batch比較好,也就是說,大的Batch容易Overfiting。
一個合理的解釋:小的Batch容易走到平原,使得Training與Testing的誤差小(紅色虛線處),大的Batch容易走到谷底,使得Training與Testing的誤差大(紅色虛線處)。
Momentum引入物理動量的概念,有動能的存在,應該要考慮動能,如此一來,不一定到saddle point就會做不下去。
考慮動能前,每次都走gradient的反方向
考慮動能後,走gradient與momentum的向量之和處。
數學證明,其實每個momentum,就是所有gradient的某個Sum。
Reference:
https://www.youtube.com/watch?v=zzbr1h9sF54&list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J&index=5
https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/small-gradient-v7.pdf
Share on Twitter Share on FacebookSQL Server Analytics Service 1
SEO(1) Github(2) Title Tag(2) ML(1) 李宏毅(1) SQL Server(18) Tempdb(1) SSMS(1) Windows(1) 自我成長(2) Excel(1) python Flask(1) python(5) Flask(2)
Max Chen (159)