模型究竟是如何学习的——从原始梯度下降到Adam
梯度累积在内存有限时模拟出更大的批量。它不在每个微批量之后就更新一次,而是把好几个微批量的梯度累加起来,再统一执行一次优化器更新。
有效批量大小等于微批量大小乘以累积步数。这让一块小 GPU 也能表现得像是在更大的批量上训练一样。
雨水桶能很好地说明这个思路。一个小水杯没法一次浇完整片花园,所以你先把好几杯水倒进一个大桶,再用桶里积攒的总量去浇灌。梯度累积就是在一次更新之前,先收集好几份小小的梯度贡献。下面的图展示的正是这个过程:每一个新的项就是一杯水,不断升高的柱子就是水桶逐渐填满、趋近总量的过程。梯度累积就是梯度的部分和,你把它攒够之后,一次性兑现成一步更新。