在内存资源有限的条件下,我们通常推荐使用小批次数据训练神经网络。
然而,有一种称为梯度累积的技术,可以在逻辑上增加批量大小,而无需显式地增加批量大小。
很困惑是吧?
让我来解释一下。
为什么神经网络训练过程中会内存溢出?
在前面的文章中,我们说过,在反向传播过程中计算梯度时,需要存储前向传播过程中计算的激活值。
激活值占用内存大小与模型大小和输入数据大小正相关。
如果batch size过大,就可能导致训练失败。
梯度累积是如何提升batch size的?
考虑下面使用mini-batches训练神经网络。