直接對梯度下手,阿里提出新優化技巧,一行代碼即可改善現有優化器

2021-01-09 機器之心Pro

機器之心編輯部

優化技術何其多也!比如批歸一化、權重標準化……但現有的優化方法大多基於激活或權重執行,最近阿里達摩院的研究者另闢蹊徑,直接對梯度下手,提出全新的梯度中心化方法。只需一行代碼即可嵌入現有的 DNN 優化器中,還可以直接對預訓練模型進行微調。

優化技術對於深度神經網絡 (DNN) 的高效訓練至關重要。以往的研究表明,使用一階和二階統計量(如平均值和方差)在網絡激活或權重向量上執行 Z-score 標準化(如批歸一化 BN 和權重標準化 WS)可以提升訓練性能。

已有方法大多基於激活或權重執行,最近阿里達摩院的研究人員另闢蹊徑提出了一種新型優化技術——梯度中心化(gradient centralization,GC),該方法通過中心化梯度向量使其達到零均值,從而直接在梯度上執行。

我們可以把 GC 方法看做對權重空間和輸出特徵空間的正則化,從而提升 DNN 的泛化性能。此外,GC 還能提升損失函數和梯度的 Lipschitz 屬性,從而使訓練過程更加高效和穩定。

GC 的實現比較簡單,只需一行代碼即可將 GC 輕鬆嵌入到現有基於梯度的 DNN 優化器中。它還可以直接用於微調預訓練 DNN。研究者在不同應用中進行了實驗,包括通用圖像分類和微調圖像分類、檢測與分割,結果表明 GC 可以持續提升 DNN 學習性能。

論文地址:https://arxiv.org/pdf/2004.01461.pdf

項目地址:https://github.com/Yonghongwei/Gradient-Centralization

不同於基於激活或權重向量運行的技術,該研究提出了一種基於權重向量梯度的簡單而有效的 DNN 優化技術——梯度中心化(GC)。

如圖 1(a) 所示,GC 只是通過中心化梯度向量使其達到零均值。只需要一行代碼,即可將其輕鬆嵌入到當前基於梯度的優化算法(如 SGDM、Adam)。

儘管簡單,但 GC 達到了多個期望效果,比如加速訓練過程,提高泛化性能,以及對於微調預訓練模型的兼容性。

圖 1:(a) 使用 GC 的示意圖。W 表示權重,L 表示損失函數,_WL 表示權重梯度,Φ_GC(_WL) 表示中心梯度。如圖所示,用 Φ_GC(_WL) 替換 _WL 來實現 GC 到現有網絡優化器的嵌入,步驟很簡單。(b) 全連接層(左)和卷積層(右)上梯度矩陣/權重張量的 GC 運算。GC 計算梯度矩陣/張量的每列/slice 的平均值,並將每列/slice 中心化為零均值。

研究貢獻

該研究的主要貢獻有:

提出了一種通用網絡優化技術——梯度中心化(GC),GC 不僅能夠平滑和加速 DNN 的訓練過程,還可以提升模型的泛化性能。

分析了 GC 的理論性質,指出 GC 通過對權重向量引入新的約束來約束損失函數,該過程對權重空間和輸出特徵空間進行了正則化,從而提升了模型的泛化性能。此外,約束損失函數比原始損失函數具備更好的利普希茨屬性,使得訓練過程更加穩定高效。

梯度中心化

研究動機

研究者提出了這樣的疑問:除了對激活和權重的處理外,是否能夠直接對梯度進行處理,從而使訓練過程更加高效穩定呢?一個直觀的想法是,類似於 BN 和 WS 在激活與權重上的操作,使用 Z-score 標準化方法對梯度執行歸一化。不幸的是,研究者發現單純地歸一化梯度並不能提高訓練過程的穩定性。於是,研究者提出一種計算梯度向量均值並將梯度中心化為零均值的方法——梯度中心化。該方法具備較好的利普希茨屬性,能夠平滑 DNN 的訓練過程並提升模型的泛化性能。

GC 公式

對於全連接層或卷積層,假設已經通過反向傳播獲得梯度,那麼對於梯度為 _w_i L (i = 1, 2, ..., N ) 的權重向量 w_i,GC 的公式如下所示:

其中

GC 的公式很簡單。如圖 1(b) 所示,只需要計算權重矩陣列向量的平均值,然後從每個列向量中移除平均值即可。

公式 1 的矩陣表述如下所示:

在實際實現中,我們可以從每個權重向量中直接移除平均值來完成 GC 操作。整個計算過程非常簡單高效。

GC 嵌入到 SGDM/Adam 中,效果如何?

GC 可以輕鬆嵌入到當前的 DNN 優化算法中,如 SGDM 和 Adam。在得到中心化梯度 Φ_GC(_wL) 後,研究者直接使用它更新權重矩陣。算法 1 和算法 2 分別展示了將 GC 嵌入兩大最流行優化算法 SGDM 和 Adam 的過程。此外,如要使用權重衰減,可以設置

,其中 λ 表示權重衰減因子。

將 GC 嵌入到大部分 DNN 優化算法僅需一行代碼,就可以微小的額外計算成本執行 GC。例如,研究者使用 ResNet50 在 CIFAR100 數據集上進行了一個 epoch 的訓練,訓練時間僅增加了 0.6 秒(一個 epoch 耗時 71 秒)。

GC 的特性

提升泛化性能

我們可以把 GC 看作具備約束損失函數的投影梯度下降方法。約束損失函數及其梯度的利普希茨屬性更優,從而使訓練過程更加高效穩定。

之前的研究已經說明了投影梯度方法的特性,即投影權重梯度將限制超平面或黎曼流形的權重空間。類似地,我們也可以從投影梯度下降的角度看待 GC 的作用。下圖 2 展示了使用 GC 方法的 SGD:

圖 2:GC 方法的幾何解釋。梯度被投影在超平面 e^T (w w^t) = 0 上,投影梯度被用於更新權重。

加速訓練過程

優化圖景平滑:之前的研究表明 BN 和 WS 可以平滑優化圖景。儘管 BN 和 WS 在激活和權重上執行,但它們隱式地限制了權重梯度,從而使權重梯度在快速訓練時更具預測性,也更加穩定。

類似的結論也適用於 GC 方法,研究者對比了原始損失函數 L(w) 和公式 4 中約束損失函數的利普希茨屬性,以及函數梯度的利普希茨屬性。

梯度爆炸抑制:GC 對於 DNN 訓練的另一個好處是避免梯度爆炸,使訓練更加穩定。這一屬性類似於梯度剪裁。梯度太大會導致權重在訓練過程中急劇變化,造成損失嚴重振蕩且難以收斂。

為了研究 GC 對梯度剪裁的影響,研究者在圖 4 中展示了,在使用和不使用 GC 方法時(在 CIFAR100 上訓練得到的)ResNet50 第一個卷積層和全連接層的梯度矩陣最大值和 L2 範數。從圖中我們可以看到,在訓練過程中使用 GC 方法使得梯度矩陣的最大值和 L_2 範數有所降低。

圖 4:梯度矩陣或張量的 L_2 範數(對數尺度)和最大值(對數尺度)隨迭代次數的變化情況。此處使用在 CIFAR100 上訓練得到的 ResNet50 作為 DNN 模型。左側兩幅圖展示了在第一個卷積層上的結果,右側兩幅圖展示了全連接層上的結果。紅點表示不使用 GC 方法的訓練結果,藍點反之。

實驗結果

下圖 5 展示了四種組合的訓練損失和測試準確率曲線。

與 BN 相比,BN+GC 的訓練損失下降得更快,同時測試準確率上升得也更快。對於 BN 和 BN+WS 而言,GC 能夠進一步加快它們的訓練速度。此外,我們可以看到,BN+GC 實現了最高的測試準確度,由此驗證了 GC 能夠同時加速訓練過程並增強泛化性能。

圖 5:在 Mini-ImageNet 數據集上,訓練損失(左)和測試準確率(右)曲線隨訓練 epoch 的變化情況。ResNet50 被用作 DNN 模型。進行對比的優化方法包括 BN、BN+GC、BN+WS 和 BN+WS+GC。

下表 3 展示了不同權重衰減設置下的測試準確率變化,包括 0、1e^-4、2e^-4、5e^-4 和 1e^-3。優化器是學習率為 0.1 的 SGDM。從表中可以看到,權重衰減的性能通過 GC 實現了持續改善。

表 3:在不同權重衰減設置下,使用 ResNet50 在 CIFAR100 數據集上的測試準確率。

下表 4 展示了 SGDM 和 Adam 在不同學習率下的測試準確率變化。

表 4:使用 ResNet50,不同學習率的 SGDM 和 Adam 在 CIFAR100 數據集上的測試準確率。

下圖 6 展示了 ResNet50 的訓練和驗證誤差曲線(GN 被用於特徵歸一化)。我們可以看到,藉助於 GN,GC 可以大大加速訓練過程。

圖 6:在 ImageNet 數據集上,訓練誤差(左)和驗證誤差(右)曲線隨訓練 epoch 的變化情況。

下圖 7 展示了在 4 個細粒度圖像分類數據集上執行前 40 個 epoch 時,SGDM 和 SGDM+GC 的訓練和測試準確率。

圖 7:在 4 個細粒度圖像分類數據集上,訓練準確率(實線)和測試準確率(虛線)曲線隨訓練 epoch 的變化情況。

下表 8 展示了 Faster R-CNN 的平均精度(Average Precision,AP)。我們可以看到,在目標檢測任務上,使用 GC 訓練的所有骨幹網絡均實現了約 0.3%-0.6% 的性能增益。

表 8:使用 Faster-RCNN 和 FPN,不同骨幹網絡在 COCO 數據集上的檢測結果。

下表 9 展示了邊界框平均精度(AP^b)和實例分割平均精度(AP^m)。我們可以看到,目標檢測任務上的 AP^b 提升了 0.5%-0.9%,實例分割任務上的 AP^m 提升了 0.3%-0.7%。

表 9:使用 Mask-RCNN 和 FPN,不同骨幹網絡在 COCO 數據集上的檢測和分割結果。

使用方法

研究者開源了論文中所提方法,使用 PyTorch 實現。包括 SGD_GC、SGD_GCC、SGDW_GCC、Adam_GC、Adam_GCC、AdamW_GCC 和 Adagrad_GCC 多種優化器,其相應實現在 SGD.py 中提供。後綴為「_GC」的優化器使用 GC 對卷積層和全連接層進行優化,而後綴為「_GCC」的優化器僅可用於卷積層。

而想要使用這些優化器非常簡單,只需使用如下命令 import 對應的模塊即可。

from SGD import SGD_GC

作者信息

論文一作 Hongwei Yong(雍宏巍)分別在 2013 年和 2016 年取得了西安交通大學的本科與碩士學位,目前是香港理工大學電子計算系博士生。他的主要研究領域包括圖像建模和深度學習等。

論文一作 Hongwei Yong。

其餘三位作者均供職於阿里達摩院,其中 Jianqiang Huang(黃建強)為達摩院資深算法專家,Xiansheng Hua(華先勝)為達摩院城市大腦實驗室負責人,Lei Zhang(張磊)為達摩院城市大腦實驗室高級研究員。

相關焦點

  • 10個梯度下降優化算法+備忘單
    在一個線性回歸問題中,我已經用梯度下降實現了SGD, momentum, Nesterov, RMSprop 以及Adam,獲取代碼(JavaScript)通過梯度下降,優化算法可以在如下三個主要方面起作用:1、修改學習率成分,α, 或2、修改梯度成分
  • 【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述
    原標題:【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述 1新智元獲授權轉載 但是,它們就像一個黑盒優化器,很難得到它們優缺點的實際解釋。這篇文章旨在提供梯度下降算法中的不同變種的介紹,幫助使用者根據具體需要進行使用。 這篇文章首先介紹梯度下降算法的三種框架,然後介紹它們所存在的問題與挑戰,接著介紹一些如何進行改進來解決這些問題,隨後,介紹如何在並行環境中或者分布式環境中使用梯度下降算法。最後,指出一些有利於梯度下降的策略。
  • 【AAAI論文】阿里提出新圖像描述框架,解決梯度消失難題
    新智元推薦 來源:阿里巴巴AI Labs編輯:克雷格【新智元導讀】阿里AI Labs在最近的論文中提出了一種粗略到精細的多級圖像描述預測框架,該框架由多個解碼器構成,通過提供一個實施中間監督的學習目標函數,其學習方法能在訓練過程中解決梯度消失的難題。現有的圖像描述方法通常都是訓練一個單級句子解碼器,這難以生成豐富的細粒度的描述。另一方面,由於梯度消失問題,多級圖像描述模型又難以訓練。
  • 技術| 深度解讀最流行的優化算法:梯度下降
    與此同時,最新的深度學習程序庫都包含了各種優化梯度下降的算法(可以參見如 lasagne、caffe 及 Kera 等程序庫的說明文檔)。但它們的算法則不被公開,都作為黑箱優化器被使用,這也就是為什麼它們的優勢和劣勢往往難以被實際地解釋。 本文旨在讓你對不同的優化梯度下降法的算法有一個直觀認識,以幫助你使用這些算法。
  • 優化器怎麼選?一文教你選擇適合不同ML項目的優化器
    常見的優化算法包括梯度下降(變體 BGD、SGD 和 MBGD)、Adagrad、Adam、Momentum 等,如此繁多的優化器應該如何做出抉擇呢?不久前,Lightly-ai 的機器學習工程師 Philipp Wirth 撰寫了一篇指南,總結了計算機視覺、自然語言處理和機器學習領域普遍使用的流行優化器,並就如何選擇合適的優化器給出了建議。
  • 一行代碼安裝,TPU也能運行PyTorch,修改少量代碼即可快速移植
    現在福利來了,一個叫做Pytorch Lightning的項目,可以讓你幾乎修改代碼的情況下用上TPU。Pytorch Lightning已經上傳到PyPI,因此只需一行代碼就能安裝這個軟體。幾乎無需修改代碼首先讓我們來看一個MNIST圖像分類網絡的搭建,PyTorch的原始代碼和修改後的PyTorch Lightning代碼幾乎無異。我們只需將nn.Module替換為pl.LightningModule即可。作者表示,相比切換框架,用這種方法重構原來的代碼只需數小時的時間。
  • 二階梯度優化新崛起,超越 Adam,Transformer 只需一半迭代量
    近日,谷歌研究者聯合普林斯頓大學等,提出了真正應用的二階梯度最優化器 Shampoo,讓這個理論上頗有前景的設想變為現實。目前,無論是從理論還是應用層面來說,機器學習中的優化都是以隨機梯度下降等一階梯度方法為主。囊括二階梯度和/或二階數據統計的二階優化方法雖然理論基礎更強,但受限於計算量、內存和通信花銷等因素,二階梯度優化方法的普及度不高。
  • 引入Powerball 與動量技術,新SGD優化算法收斂速度與泛化效果雙...
    另一方面,因為冪係數 γ∈[0,1),根據冪函數的作用原理,不難發現,通過引入作用於梯度的冪係數,可以有效地改善梯度消失的現象。對於離散時間模型(優化算法)在有限時間內收斂性的推導是非常困難的。正是這一點促使[1]中作者提出了優化方法的連續時間模型,並分析了它們在有限時間內的收斂性。此外,[1]中指出了對於給定的優化問題,如何選取最優的γ在理論上是開放的。
  • 谷歌大腦新型優化器LAMB加速大批量訓練
    近日,來自谷歌大腦的研究者提出了一種新型優化器 LAMB,有效降低 BERT 預訓練時間,76 分鐘即可完成 BERT 預訓練!儘管 BERT效果驚人,但它所需的計算量非常大,原作者在論文中也表示每次只能預測 15% 的詞,因此模型收斂得非常慢。如果我們想保留這種 Mask 機制,那麼就需要尋找另一種加速方法了。
  • AdaBelief:一個有「信仰」的優化器
    但從方程裡也能看出,SGD 是對全局參數用一個學習率,而其實真正優化更想要讓那些梯度方向穩定的參數更新更快,而不穩定的更新步伐更小。因此這也導致 SGD 算法訓練不太穩定,收斂慢(尤其訓練早期)。對於上面這點問題,就有人提出了適應性法(Adaptive Method),能針對各個參數計算出其定製化的學習率,進行更新訓練。此類優化算法很多(名字帶 Ada 的都是),而 Adam 就是其中的佼佼者。
  • 一行代碼即可調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性
    新智元報導 來源:PyTorch編輯:元子【新智元導讀】為了解決日益增長的論文可復現性需求,Facebook推出了PyTorch Hub,類似TensorFlow Hub的一個模型共享庫,加載ResNet、BERT、GPT、VGG、PGAN還是MobileNet等經典模型只需一行代碼。
  • 關於深度學習優化器 optimizer 的選擇,你需要了解這些
    在很多機器學習和深度學習的應用中,我們發現用的最多的優化器是 Adam,為什麼呢?在 Sebastian Ruder 的這篇論文中給出了常用優化器的比較,今天來學習一下: 原文連結:https://arxiv.org/pdf/1609.04747.pdf本文將梳理:● 每個算法的梯度更新規則和缺點● 為了應對這個不足而提出的下一個算法● 超參數的一般設定值
  • 40行Python代碼,實現卷積特徵可視化
    如果你想知道哪種模式可以顯著地激活某個特徵圖,你可以:1)嘗試在數據集中查找導致此特徵圖高於平均激活的圖像;2)嘗試通過優化隨機圖像中的像素值來生成這種模式。後者的想法是由 Erhan 等人提出的。再來最後一張,比較可愛,之後我們就直接進入代碼部分。你能猜到這個是什麼嗎?
  • Facebook 發布無梯度優化開源工具 Nevergrad,可應用於各類機器...
    Nevergrad 提供了許多不依賴梯度計算的優化算法,並將其呈現在標準的問答 Python 框架中。此外,Nevergrad 還包括了測試和評估工具。Nevergrad 現已對外開放,人工智慧研究者和其他無梯度優化相關工作者馬上就可以利用它來協助自己的工作。
  • 代碼詳解:用Pytorch訓練快速神經網絡的9個技巧
    有關模型加速的思考和技巧Pytorch-Lightning文中討論的各種優化,都可以在名為Pytorch-Lightning 的Pytorch圖書館中找到。Lightning是基於Pytorch的一個光包裝器,它可以幫助研究人員自動訓練模型,但關鍵的模型部件還是由研究人員完全控制。參照此篇教程,獲得更有力的範例。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    應該用梯度下降,隨機梯度下降,還是Adam方法? 這篇文章介紹了不同優化算法之間的主要區別,以及如何選擇最佳的優化方法。 什麼是優化算法? 優化算法的功能,是通過改善訓練方式,來最小化(或最大化)損失函數E(x)。 模型內部有些參數,是用來計算測試集中目標值Y的真實值和預測值的偏差程度的,基於這些參數,就形成了損失函數E(x)。
  • 比可微架構搜索DARTS快10倍,第四範式提出優化NAS算法
    在本文中,我們提出了一種基於近端迭代(NASP)的高效 NAS 方法。與以往的工作不同,NASP 將搜索過程重新定義為具有離散約束的優化問題和模型複雜度的正則化器。由於新的目標是難以解決的,我們進一步提出了一種高效的算法,由近端啟發法進行優化。
  • PyTorch代碼調試利器:自動print每行代碼的Tensor信息
    TorchSnooper 的安裝非常簡單,只需要執行標準的 Python 包安裝指令就好:pip install torchsnooper安裝完了以後,只需要用 @torchsnooper.snoop() 裝飾一下要調試的函數,這個函數在執行的時候,就會自動 print 出來每一行的執行結果的 tensor 的形狀、數據類型、設備、是否需要梯度的信息。
  • 陳天奇等人提出TVM:深度學習自動優化代碼生成器
    TVM 是由華盛頓大學在讀博士陳天奇等人提出的深度學習自動代碼生成方法,去年 8 月機器之心曾對其進行過簡要介紹。該技術能自動為大多數計算硬體生成可部署優化代碼,其性能可與當前最優的供應商提供的優化計算庫相比,且可以適應新型專用加速器後端。