優化與訓練

輪次與迭代(epoch vs iteration)

/ EP-uk vs it-uh-RAY-shun /

這兩個詞都是在為訓練「計時」,而把它們搞混,是新手最常犯的失誤之一。一次迭代(也叫一步,step)是一次權重更新——模型看一個小批量,調整自己一次,完事。一個輪次(epoch)則是把整個訓練集完整地過一遍——每個樣本都恰好被看過一次。想像讀一本教科書:一次迭代是讀完一頁,一個輪次是從頭到尾把整本書讀完。

兩者之間的關係是簡單的算術:每個輪次的迭代次數,等於資料集大小除以小批量大小。一萬個樣本、批量100,那麼一個輪次就是100次迭代。跑30個輪次,總共就做了3000次迭代。所以當有人說「我訓練了10個輪次」,實際做了多少次權重更新,完全取決於批量有多大。

為什麼兩個詞都要留著?因為它們回答的是不同的問題。迭代追蹤的是原始的工作量和進度的顆粒度(損失曲線通常就是按迭代來畫的)。輪次追蹤的是模型把資料重溫了幾遍,這對發現過擬合很要緊——一個把同一批樣本看了幾十遍的模型,會開始死記硬背它們。從業者會盯著驗證表現隨輪次的變化,來決定何時該停。

六萬張訓練圖片,小批量大小600 → 一個輪次 = 100次迭代。訓練5個輪次,就是總共做500次迭代(500次權重更新),而每張圖片都恰好被用了5次。

輪次數的是「過了幾遍資料」;迭代數的是「更新了幾次」。

輪次越多並不總是越好。過了某個點,訓練損失還在降,驗證損失卻開始升——那就是過擬合,是該停下的信號,而不是該練得更久的信號。

又稱
epochiterationstep轮次迭代輪次迭代