作者pipidog (如果狗狗飞上天)
看板DataScience
标题Re: [问题] batch size过大时,为什麽容易overfittin
时间Sun Dec 2 10:32:39 2018
想像一个极端的情况,你在做梯度修正时,如果每次都是拿所有数据喂进去,然後再做修正,这意味着你每次送进去的数据都是一样的,没有任何随机性,所以你在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://webptt.com/cn.aspx?n=bbs/DataScience/M.1543717965.A.62A.html
1F:推 kumitang: 长知识 12/02 12:29
2F:推 michellehot: 推比喻 12/02 13:17
3F:推 y956403: 推 12/02 13:33
4F:推 youmehim: L1, L2 regularization跟引入noise的关系该怎麽理解? 12/02 15:26
5F:→ youmehim: 我的理解是 regularization可以使得学习的机制分散在各 12/02 15:28
6F:→ youmehim: neuron 不会押宝特定neuron 所以不容易被noise影响 12/02 15:29
7F:推 abc53: 推 12/03 01:58
8F:推 watashino: 优文 推 12/10 02:11
9F:→ Helala: 推 12/10 23:38
10F:→ kiazo: local min会很容易遇到吗?之前听过一个说法是在high dimen- 12/14 11:15
11F:→ kiazo: sion下,要遇到local min的机率好像不高 12/14 11:16
12F:→ pipidog: @kiazo,如果这个说法成立,意味着高维问题就不用处理过拟 12/15 16:59
13F:→ pipidog: 合了,我想简单的试试看几个数据集就知道答案了. 12/15 17:00
14F:→ pipidog: 非凸优化为何可行还是个谜,说法太多,很多说法听听就好. 12/15 17:06
15F:→ pipidog: 但对於训练初期不要使用大batch,我认为学界应该算有共识. 12/15 17:07
16F:推 show19971025: 推 08/22 18:51