MindSpore 高阶优化器
MindSpore 高階優化器
MindSpore自研優化器THOR(Trace-based Hardware-driven layer-ORiented Natural Gradient Descent Computation),該優化器在ImageNet上訓練ResNet50,使用MindSpore+8 Ascend 910 僅需66.7分鐘,當使用256節點時僅需2.7分鐘!
關于一二階優化器,其中二階優化器與一階優化器相比收斂速度更快,但缺點是二階信息矩陣求逆復雜度高,為
, 其中 n 為二階信息矩陣維度,當模型參數量為
時,對應的二階信息矩陣的大小為
。在深度學習模型中,
常常在數百萬的量級,此時二階信息矩陣的逆無法計算。因此如何降低二階信息矩陣求逆的計算復雜度成為關鍵問題。
MindSpore針對該問題,提出了自研算法THOR,該算法是基于自然梯度法,對Fisher矩陣做了近似,自然梯度法中的
矩陣可以表示為:
其中
是網絡模型的預測分布,
是其概率密度,
是需要網絡模型的參數。
那THOR主要做了哪些改進呢,我們一起來看一下:
- 降低二階信息矩陣更新頻率
通過實驗觀察
矩陣的F范數(Frobenius norm),在前期變化劇烈,后期逐漸變穩定,從而假設
是一個馬爾可夫過程,可以收斂到一個穩態分布π,其中
代表第k個迭代時的
矩陣。因此,在訓練過程中逐步增大
矩陣的更新間隔,可以在不影響收斂速度的情況下,減少訓練時間。例如在ResNet50中,更新間隔步數隨著訓練的進行越來越大,到后期每個epoch只需更新一次二階信息矩陣,如下圖所示。
THOR受KFAC啟發,將
矩陣按層解耦來降低矩陣復雜度,分別針對每一層的
矩陣做實驗,發現有些層的
矩陣趨于穩態的速度更快,因此在統一的更新間隔上,更加細粒度的去調整每一層的更新頻率。THOR使用矩陣的跡作為判斷條件,當跡的變化情況大于某一閾值時,更新該層的二階信息矩陣,否則沿用上一個迭代的二階信息矩陣,并且引入了停止更新機制,當跡的變化量小于某個閾值時,停止更新該層二姐信息矩陣,具體更新公式如下:
- 硬件感知矩陣切分
THOR在將
矩陣按層解耦的基礎上,進一步假設每個網絡層中的輸入和輸出塊之間也是獨立的,例如將每層網絡的輸入輸出切分為n個塊,這n個塊之間即是獨立的,根據該假設,對二階信息矩陣做進一步的切分,從而提高了計算效率。THOR結合矩陣信息損失數據和矩陣性能數據確定了矩陣分塊維度,從而大大提升
矩陣求逆時間。
那么如何確定矩陣分塊維度的呢。具體方法為:
(1)根據
矩陣中維度最大的那一層,確定矩陣切分維度,拿ReseNet-50舉例,網絡層中的最大維度為2048,確定矩陣切分維度為[1,16,32,64,128,256,512,1024,2048];
(2)根據確定的矩陣維度,根據譜范數計算每個維度下的矩陣損失,具體公式為
其中
表示矩陣 X 的最大特征值, A 表示原始未分割矩陣,
表示分割后的矩陣。然后統計在該維度下損失小于1%的矩陣數量,最后通過除以總的矩陣數量得到標準化后的矩陣損失信息。
(3)根據確定的矩陣維度,計算每個維度下的矩陣求逆時間,再通過公式
得到每個維度下標準化后性能數據,其中
表示維度最小的矩陣的性能數據,
表示第n個維度下的性能數據。
(4)根據標注化后的矩陣損失信息和標準化后的性能數據繪圖,如以ResNet50為例,可得到下圖,圖中交叉點為106,與128最接近,最后確定矩陣切分維度為128。
- 實驗結果
下圖展示了THOR在ResNet50+ImageNet,batchsize為256時一二階上的訓練曲線圖。
圖中的THOR,THOR_stop,THOR_NT分表表示 ,從圖中可以看到THOR收斂所需迭代數大約是一階的一半,且單step的時間與一階相差也不大。相比一階算法需要117min,二階優化器端到端時間提速約40%。
THOR還測試了在不同batchsize下ResNet50+ImageNet的收斂結果,結果見下表,當batchsize為8192,使用256塊Ascend 910時,只需2.7分鐘精度即可收斂到75.9%,該結果在業界也是非常有競爭力的。MindSpore團隊還會將THOR進一步應用到NLP領域中,如Bert和GPT-3,THOR在NLP任務上的表現。
總結
以上是生活随笔為你收集整理的MindSpore 高阶优化器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MindSpore模型精度调优实践
- 下一篇: 超轻量AI引擎MindSpore Lit