下午的时候突然想到这个经常见的东西:batchsize
那就把思路捋一遍叭
用很笨的方法理解:(借鉴这个推文)
游戏:贴鼻子
Train
假设甲是贴鼻子的人
A,B,C,D,E,F,G,H人(batchsize=8)是提出移动建议的人(左移2cm,右移3cm这样子),这时候甲 会根据8个人的建议进行移动(可能他会取平均,中位数,众数等优化算法),而且甲学习东西也是有快慢的,学的太快了反而可能会不好(因为最后的人可能提不了建议就已经贴到鼻子了,这是学习率)并且他把他前进的记录记下来方便他后续做决定(反向传播)
然后呢,换一批人I,J,K,L,M,N,O,P继续重复以上,甲继续移动
最后所有人都完成提建议,也就是一轮结束(epoch)
也可以进行多次的轮数(如200 epoches)
最后看他能不能找到贴鼻子(train acc)
Test
这次换全新的一批人a,b,c,d(batchsize=4)进行提建议,并且由于甲已经经过训练所以他很轻车熟路。
然后换一批人e,f,g,h继续提建议
最后所有人都提完建议,就是一轮结束(epoch)
也可以进行多次的轮数(如200 epoches)
最后看他能不能找到贴鼻子(test acc)
到此才能评价 甲 在找鼻子的过程中的能力是否强
最后正经聊一聊batchsize
比如我已经12000个点,想进行一个线性回归预测,这时候batchsize如何工作呢?
设定batchsize=4吧,首先网络根据这4个点生成一条直线。然后呢再传进来4个点,直线的斜率会根据之前的结果和这4个点进行一个偏移。直到12000个点全都分4个4个地完成了后,就是1个epoch。
batchsize和learn是配合着来的,batchsize太小的话,learn太大反而会进行剧烈的梯度下降进而整个训练变得不好了。而且batchsize会影响epoch的时间。
batchsize太小,震荡严重不利于收敛,batchsize太大,容易陷入局部极小值。