混合精度訓練


論文:https://arxiv.org/pdf/1710.03740.pdf

譯文:混合精度訓練

摘要

增加神經網絡的size,可以提高准確率。但同時,也加大了訓練模型所需的內存和計算量。我們介紹一種使用半精度浮點數來訓練深度神經網絡的方法,不會損失准確率,也不需要修改超參數。這種方法讓內存需求減半,而且在最近的GPU上,加速了算術運算。權值、激活值和梯度都以IEEE半精度格式存儲。由於半精度的數值范圍比單精度小,我們提出3種技術避免關鍵信息丟失。1)我們維護一份權值的單精度copy,2)我們放大損失,來保留較小的梯度。3)我們證明,前面提出的方法,可以在很多任務和現代大規模模型(超過1億參數)上,基於大數據集訓練。

介紹

深度學習讓很多不同的應用都取得了很大的進步,圖像識別、語言建模、機器翻譯和語音識別等等。這也衍生出兩個關鍵的問題,更大的數據集和更復雜的模型

更大的模型通常需要更多的計算量和內存來訓練。

實現 

1、FP32:

在混合精度訓練中,權值、激活值和梯度是以FP16存儲的。

 

2、損失放大:

 

3、算術精度:

總的來說,神經網絡算術運算分為3類:向量點乘 

 

結果

Baseline(FP32):激活值、權值和梯度都用單精度存儲。所有算術運算也都用FP32。

Mix Precision(MP):存儲和算術運算都有用FP16。權值、激活值和梯度都用FP16來存儲。權值存一份FP32主copy,用於更新。

 

總結和后續工作

混合精度訓練,讓我們減少內存消耗,以及花在算術運算上的時間。我們已經證明,很多深度學習模型可以用這種技術來訓練,並且沒有准確度損失,也不需要調參。對於小梯度很多的模型,可以采用梯度放大的辦法來達到和FP32一樣的准確度。 

如果DNN運算是受限於內存和算術帶寬,那么在Volta架構的GPU上,FP16和FP32的加速比是2~6。如果是受限於延遲,加速比則會小一些網絡訓練和推理總的加速比,取決於框架和庫對混合精度的優化,這也是后續工作的一個重點(本文實驗用的庫和框架都比較舊)。

我們會把這個技術應用於生成模型,如文字轉語音系統和深度強化學習應用。進一步地,損失放大因子的選擇會自動化,來簡化混合精度的訓練。損失放大因子會根據監控到的權值梯度,動態增大或者減小來防止溢出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM