進階最佳化
隨機權重平均(stochastic weight averaging,SWA)
在訓練後期,用循環或高的固定學習率跑的 SGD 並不會收斂到單一點;它在一個寬而平坦的盆地邊緣上來回彈跳,造訪許多好但略有差異的權重向量。隨機權重平均下了一個簡單的賭注:如果這些點都坐在邊緣上,它們的平均就應該更接近盆地的中心,而寬平盆地的中心往往比任何單一的邊緣點泛化得更好。
具體而言,在一段正常訓練之後,你切換到高的固定或循環學習率,記下每個週期結束時的權重,再取它們的滑動平均 theta_SWA = (1/n) sum theta_i。有一個微妙處:批次正規化(batch normalization)的統計量並不是被平均的參數,所以在形成平均權重之後,你必須對資料額外跑一次前向傳播,為這個平均後的模型重新計算激活統計量。
SWA 在一般 SGD 之上提供幾乎免費的泛化提升,而且它直接連到銳度感知方法背後「平坦極小值」的推理。它的貝氏延伸 SWAG 會對蒐集到的權重擬合一個高斯分布來估計不確定性。關鍵在於:最終產物是單一組權重,所以不像真正的集成,它在推論時不增加任何額外成本。
\theta_{\text{SWA}} = \frac{1}{n}\sum_{i=1}^{n} \theta_i
把訓練後期每個週期末蒐集到的權重取平均。
忘了為平均後的權重重新計算批次正規化統計量,是 SWA 經典的錯誤:平均後的參數搭配了過時的滑動統計量,模型表現便會很差。
又称
另见