在计算损失时,并不是对所有数据计算loss,而是分成一个个的批量(batch)。遍历所有批量成为一个epoch,划分批量时也会打乱。
批量大小对梯度下降法的影响
假设有20笔数据
BGD 批量梯度下降算法: bs=训练数据大小 , 把数据全训练完才更新一次loss。
SGD 随机梯度下降法(增量梯度下降法): bs=1,取出一笔数据就进行loss计算,每次epoch计算20次。
随机梯度下降引入了随机噪声,在非凸优化问题中,更容易逃离局部最小值
前者并不一定比后者花费的时间长,因为可以gpu可以并行计算,但是非常大的时候还是会长,因此大的批量是最有效率的。
批量大小越大,验证集准确率越低
相关解释:随机梯度下降中,每次更新参数时所使用的损失函数可以是不同的,这种有噪声的训练反而更好。
选择? 在有并行计算的情况下,小的批量跟大的批量运算的时间并没有太大的差距。除非大的批量非常大,才会显示出差距。但是一个回合需要的时间,小的批量比较长,大的批量反而是比较快的,所以从一个回合需要的时间来看,大的批量是较有优势的。 而小的批量更新的方向比较有噪声的,大的批量更新的方向比较稳定。但是有噪声的更新方向反而在优化的时候有优势,而且在测试的时候也会有优势。所以大的批量跟小的批量各有优缺点,批量大小是需要去调整的超参数。
动量法
引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向。 他不太会被困住。