共计 672 个字符,预计需要花费 2 分钟才能阅读完成。
batch: batch是批。深度学习每一次参数的更新所需要损失函数并不是由一个{data:label}获得的,而是由一组数据加权得到的,这一组数据的数量就是[batch size]。
batch的思想,至少有两个作用,一是更好的处理非凸的损失函数,非凸的情况下, 全样本就算工程上算的动, 也会卡在局部优上, 批表示了全样本的部分抽样实现, 相当于人为引入修正梯度上的采样噪声,使“一路不通找别路”更有可能搜索最优值;二是合理利用内存容量。
另外一种关于batch的解释,关于gd和sgd,gd每次的更新都会计算全局所有样本的代价函数,如果训练的样本集非常大那么计算的成本会很高,由此引发了sgd每次使用一个样本来更新数据,加快了速度,二者都达不到全局最优的效果。gd相比于sgd更能体现代价函数的意义,毕竟是反映全局整体代价,这个时候batch的出现,相当于二者的折中,哇咔咔,(ps:为啥对随机梯度使用部分样本更新,我觉得也是一样的)
如果数据集较小,可以采用全数据集(Full batch learning)的形式,这样有两个显然的好处:1.由全数据集计算的梯度能够更好的代表样本总体,从而更准确的朝向极值所在的方向;2.不同权重的梯度值差别很大,因此选取一个全局的学习率会比较困难(?)
batch size最大是样本总数N,此时就是Full batch learning;最小是1,即每次只训练一个样本,这就是在线学习(Online Learning)。当我们分批学习时,每次使用过全部训练数据完成一次Forword运算以及一次BP运算,成为完成了一次epoch。