优化与训练
轮次与迭代(epoch vs iteration)
/ EP-uk vs it-uh-RAY-shun /
这两个词都是在为训练「计时」,而把它们搞混,是新手最常犯的失误之一。一次迭代(也叫一步,step)是一次权重更新——模型看一个小批量,调整自己一次,完事。一个轮次(epoch)则是把整个训练集完整地过一遍——每个样本都恰好被看过一次。想象读一本教科书:一次迭代是读完一页,一个轮次是从头到尾把整本书读完。
两者之间的关系是简单的算术:每个轮次的迭代次数,等于数据集大小除以小批量大小。一万个样本、批量100,那么一个轮次就是100次迭代。跑30个轮次,总共就做了3000次迭代。所以当有人说「我训练了10个轮次」,实际做了多少次权重更新,完全取决于批量有多大。
为什么两个词都要留着?因为它们回答的是不同的问题。迭代追踪的是原始的工作量和进度的颗粒度(损失曲线通常就是按迭代来画的)。轮次追踪的是模型把数据重温了几遍,这对发现过拟合很要紧——一个把同一批样本看了几十遍的模型,会开始死记硬背它们。从业者会盯着验证表现随轮次的变化,来决定何时该停。
六万张训练图片,小批量大小600 → 一个轮次 = 100次迭代。训练5个轮次,就是总共做500次迭代(500次权重更新),而每张图片都恰好被用了5次。
轮次数的是「过了几遍数据」;迭代数的是「更新了几次」。
轮次越多并不总是越好。过了某个点,训练损失还在降,验证损失却开始升——那就是过拟合,是该停下的信号,而不是该练得更久的信号。
又称
另见