RepOptimizer学习笔记
RepOptimizer學習筆記
Re-parameterizing Y our Optimizers rather than Architectures
Abstract
神經網絡中設計良好的結構反映了納入模型的先驗知識。然而,雖然不同的模型具有不同的先驗,但我們習慣于使用模型無關優化器(例如SGD)對其進行訓練。在本文中,我們提出了一種新的范式,將特定于模型的先驗知識合并到優化器中,并使用它們來訓練通用(簡單)模型。作為實現,我們提出了一種新的方法,通過根據一組特定于模型的超參數修改梯度來添加先驗知識,稱為梯度重新參數化,優化器稱為重新優化器。為了模型結構的極端簡單性,我們重點關注VGG風格的平面模型,并展示了這樣一個使用重新優化器訓練的簡單模型,即RepOpt-VGG,其性能與最近設計良好的模型相當。從實用角度來看,RepOpt-VGG由于其結構簡單、推理速度快和訓練效率高,是一種很好的基礎模型。與結構重參數化相比,結構重參數化通過構造額外的訓練時間結構向模型中添加先驗知識,再優化不需要額外的正向/反向計算,并解決了量化問題。代碼和模型可在https://github.com/DingXiaoH/RepOptimizers.
1 Introduction
神經網絡的結構設計是將先驗知識納入模型中。例如,將特征變換建模為殘差加法(y=x+f(x))優于普通形式(y=f(x))[22]。ResNet將此類先驗知識納入具有快捷結構的模型,并優于沒有此類先驗的簡單模型,例如VGGNet[42]。模型結構的最新進展表明,高質量的結構先驗對神經網絡至關重要。例如,EfficientNet[44]通過網絡架構搜索和復合縮放獲得了一組結構超參數,作為構建模型的先驗知識;RegNet[36]通過改變結構超參數、生成模型和觀察模式獲得了豐富的先驗知識。當然,更好的結構先驗會導致更高的性能。
另一方面,優化方法也發揮著重要作用,可分為三類[43]。1) 一階方法,例如SGD[38]及其變體[27、16、33]已用于各種模型,包括ConvNet[29、42、22]、LSTM[23]、Transformer[47、15]和MLP[45、46]。2) 高階方法[40、25、35]利用曲率信息,但面臨計算或近似海森矩陣[8、39]的挑戰。3) 對于目標函數的導數可能不存在的情況,無導數方法[37,1]很有用。
我們注意到1)雖然高級優化器以不同的方式改進了訓練過程,但它們沒有特定于被優化模型的先驗知識;2) 雖然我們通過設計高級結構不斷將我們的最新理解融入到模型中,但我們使用SGD[38]和AdamW[33]等模型無關優化器對其進行訓練,也就是說,我們長期以來一直使用特定結構+通用優化器。為了探索另一種方法,我們做出以下貢獻。
A new paradigm
我們提出了通用結構+特定優化器。一般結構意味著模型應盡可能少地具有結構先驗知識。特定優化器是指優化器通過以特定于模型的方式更改訓練動態來實現更好的性能。
A methodology for SGD-based optimizer
本文主要研究深度神經網絡等大規模非凸模型,因此我們只考慮基于SGD的優化器,但高層思想可以推廣到高階或無導數方法。由于SGD的核心是用梯度更新參數,我們建議在更新可訓練參數之前,根據一組模型特定的超參數修改梯度,使優化器模型特定。我們將這種方法稱為梯度重新參數化(GR),將優化器稱為重新優化。為了獲得這樣的超參數,我們提出了一種稱為超搜索的方法。
A favorable base model.
為了證明通用結構+特定優化器的有效性,我們需要一個盡可能簡單的模型。當然,我們選擇VGG風格的[42]架構,它只包含一個3×3 conv層的堆棧。長期以來,這種架構一直被認為不如設計良好的模型,如RegNet[36]和EfficientNet[44],因為后者具有更豐富的結構先驗。令人印象深刻的是,使用重新優化器訓練的VGG類型模型,即RepOpt-VGG,可以與精心設計的模型表現相當(表3)。
從理論方面來說,我們希望通過與RepVGG[13]及其關鍵方法——結構重參數化(Structural Re-parameterization)[13、12、10、9、11、14、17、52、53、48、54](SR)的比較來強調我們工作的新穎性,該方法通過額外的訓練時間結構來改變訓練動態,從而提高模型的性能。我們采用RepVGG作為基線,因為它也可以生成強大的VGG風格的模型,但方法不同。具體來說,針對VGG風格的推理時間架構(稱為目標結構),RepVGG構建額外的訓練時間結構,然后通過SR將其轉換為目標結構進行部署。差異總結如下,如圖1所示。1)與常規模型(如ResNet)類似,RepVGG也將先驗添加到具有良好設計結構的模型中,并利用通用優化器,但RepOpt-VGG將先驗添加到優化器中。2) 與RepOpt-VGG相比,雖然轉換后的RepVGG具有相同的推理時間結構,但訓練時間RepVGG要復雜得多,需要消耗更多的時間和內存。換句話說,RepOpt VGG是訓練期間真正的普通模型,但RepVGG不是。3) 我們擴展和深化了隨機共振,表明對于隨機共振的特殊情況,訓練時間結構設計足夠簡單(每個分支僅包含一個線性可訓練算子),我們可以使用自定義優化器實現等效的訓練動態。這種等價性意味著SR模型(具有額外結構)和GR模型(沒有額外結構,但使用修改的梯度進行更新)在訓練過程中的任何迭代中產生數學上相同的輸出,前提是它們具有相同的輸入和訓練配置。我們必須強調的是,本文設計了遵循RepVGG的重優化器的行為只是為了公平比較,其他設計也可能很好或更好;從更廣泛的角度來看,我們僅展示了VGG模型+基于SGD的重優化器,但該范式可能推廣到其他模型和優化方法。
從實用角度來看,RepOpt VGG也是一種良好的基礎模型,它具有高效推理和高效訓練的特點。1) 作為一種極為簡單的架構,它具有低內存消耗(因為它沒有分支)、高并行度(一個大運算符比具有相同浮點運算的幾個小運算符更高效[34]),并大大受益于高度優化的3×3 conv(例如,Winograd算法[30])[13]。更好的是,由于模型主體僅包含一種類型的操作員,我們可以將大量3×3 conv單元集成到定制芯片上,以獲得更高的效率[13]。2) 有效的培訓對于計算資源有限或我們希望快速交付或快速迭代模型的應用場景,例如,我們可能需要每隔幾天使用新收集的數據重新訓練模型。表2顯示,RepOpt-VGG的訓練速度約為RepVGG的1.7倍。與推理類似,與使用通用設備(如GPU)訓練的復雜模型相比,使用定制的高通量訓練芯片可以更有效地訓練此類簡單模型。3) 除了訓練效率外,重新優化器還克服了結構重新參數化[13]的一個主要缺點:量化問題。推理時間RepVGG難以通過訓練后量化(PTQ)進行量化。例如,使用簡單的INT8 PTQ,ImageNet[7]上RepVGG的精度降低到54.55%。在第4.4節中,我們證明了RepOpt-VGG有利于量化,并揭示了量化RepVGG的問題是由訓練模型的結構轉換引起的。我們很自然地用重新優化器解決了這個問題,因為重新定位VGG根本不經歷結構轉換。
2 Related Work
RepVGG采用了一種名為結構重參數化(SR)[13、12、10、9、11、14、17、52、53、48、54]的方法,該方法通過轉換參數來轉換結構。針對VGG式推理時間架構,它構造了一些額外的快捷方式(即身份映射和1×1 conv層)用于訓練,并將整個塊轉換為單個3×3 conv。簡而言之,BN層融合到前面的conv層中(注意,身份映射也可以被視為1×1 conv層,其核心是身份矩陣),將1×1 conv核添加到3×3核的中心點上(圖1 b)。SR的一個顯著缺點是,無法節省一般SR的額外訓練成本。與REPORT VGG相比,RepVGG具有相同的目標結構,但訓練結構復雜且耗時。此外,量化RepVGG可能會導致顯著退化,而量化REOPT VGG與量化常規模型一樣容易(第4.4節)。
GR擴展和深化了SR,就像SR擴展了再參數化的經典意義一樣。作為一種典型的“重新參數化”,例如,DiracNet[50]以不同的形式對conv內核進行編碼,以便于優化。具體來說,將3×3 conv核(視為矩陣)重新參數化為W^=diag(a)I+diag(b)Wnorm\hat{W}=diag(a)I+diag(b)W_{norm}W^=diag(a)I+diag(b)Wnorm?,其中a、b是學習向量,WnormW_{norm}Wnorm?是歸一化可訓練核。對于每個正向計算,conv層首先歸一化其核,用a、b和WnormW_{norm}Wnorm?計算W^\hat{W}W^,然后使用所得核進行卷積。然后,優化器必須導出所有參數的梯度并更新它們。與DiracNet相比,REPORT VGG不改變可訓練參數的形式,也不引入額外的正向/反向計算。
3 RepOptimizers
重新優化器通過更改原始訓練動態來工作,但似乎很難想象如何更改訓練動態以改進給定模型。為了設計和描述重優化器的行為,我們采用了三步流水線:1)定義先驗知識并想象一個復雜的結構來反映知識;2) 我們研究了如何使用更簡單的目標結構實現等效訓練動力學,該目標結構的梯度根據一些超參數進行修改;3) 我們獲得了超參數來建立重新優化。請注意,重優化器的設計取決于給定的模型和先驗知識。在下面,我們使用RepOpt VGG作為展示。
3.1 Incorporate Knowledge into Structure
重新優化程序的核心是我們希望納入優化器的先驗知識。在REPORT VGG的情況下,我們知道,可以通過將多個分支的輸入和輸出相加來提高模型的性能,這些分支按不同的比例加權。如此簡單的知識引發了多種結構設計。例如,ResNet[22]可以被視為此類知識的簡單但成功的應用,它簡單地組合(相加)剩余塊的輸入和輸出;RepVGG[13]有著相似的想法,但使用了不同的實現。有了這些知識,我們設計結構來滿足我們的需求。在這種情況下,我們希望改進VGG樣式的模型,因此我們選擇了RepVGG的結構設計(3×3 conv+1×1 conv+身份映射)。
3.2 Shift the Structural Priors into an Equivalent RepOptimizer
然后,我們描述了如何將結構先驗轉換為重新優化。關于上述先驗知識,我們注意到一個有趣的現象:在一個特殊情況下,每個分支僅包含一個具有可選恒定尺度的線性可訓練算子,只要適當設置恒定尺度值,模型的性能仍然會提高。我們將這種線性塊稱為恒定比例線性加法(CSLA)。
此外,我們注意到,我們可以用單個算子替換CSLA塊,并通過將梯度乘以從常數尺度導出的一些常數掩碼來實現等效的訓練動力學(這意味著,如果使用相同的訓練數據,則在任何次數的訓練迭代后,它們總是產生相同的輸出)。我們將此類掩碼稱為Grad Masks(Grad Masks)(圖1)。用梯度掩模修改梯度可以被視為GR的具體實現,
我們在附錄A中給出了這種等價性的證明,稱為CSLA=GR。為了簡單起見,這里我們只展示了兩個卷積和兩個常數標量作為4個標度因子的結論。假設αA,αBα_A,α_BαA?,αB?是兩個常數標量,W(A),W(B)W^{(A)},W^{(B)}W(A),W(B)是兩個形狀相同的conv核,X和Y是輸入和輸出,? 表示卷積,CSLA塊的計算流公式為YCSLA=αA(X?W(A))+αB(X?W(B))Y_{CSLA}=α_A(X? W^{(A)})+α_B(X? W^{(B)})YCSLA?=αA?(X?W(A))+αB?(X?W(B))。對于GR對應項,我們直接訓練由W′W^{'}W′參數化的目標結構,使YGR=X?W′Y_{GR}=X?W^{'}YGR?=X?W′ 假設我是訓練迭代次數,我們可以確保YCSLA(i)=YGR(i)?i≥0Y^{(i)}_{CSLA}=Y^{(i)}_{GR}?_i≥ 0YCSLA(i)?=YGR(i)??i?≥0,只要我們遵循兩條規則:
Rule of Initialization:W′W^{'}W′應初始化為W′(0)←αAW(A)(0)+αBW(B)(0)W^{'(0)}←α_AW^{(A)(0)}+α_BW^{(B)(0)}W′(0)←αA?W(A)(0)+αB?W(B)(0)。換句話說**,應使用等效參數**(可通過線性輕松獲得)初始化GR對應項,作為CSLA對應項,以使其初始輸出相同。
Rule of Iteration:當使用常規SGD更新規則更新CSLA對應項時,GR對應項的梯度應乘以(αA2+αB2)(α^2_A+α^2_B)(αA2?+αB2?)。形式上,假設L是目標函數,λ是學習率,我們應該通過
當CSLA=GR時,我們可以通過首先設計CSLA結構來設計和描述再優化器的行為。在REPOT VGG的情況下,CSLA結構是通過簡單地將RepVGG塊中3×3和1×1層之后的批歸一化(BN)[26]層替換為恒定的通道級縮放,將標識分支中的BN替換為可訓練的通道級縮放(因為CSLA分支沒有超過一個線性可訓練算子)來實例化的,如圖2所示。
在這種稍微復雜的情況下,卷積具有不同的核大小,然后是通道方向的常數尺度,Grad Masks將是張量,條目應分別使用相應位置上的尺度計算。我們提出了與這種CSLA塊對應的梯度掩模公式,該公式將用于訓練單個3×3通道。設C為通道數,s,t∈ RC分別是3×3和1×1層之后的恒定通道尺度,梯度掩模MC×C×3×3M^{C×C×3×3}MC×C×3×3由以下公式構造:
直觀地說,p=2和q=2意味著3×3核的中心點與1×1分支相關(就像RepVGG塊將1×1 conv合并到3×3核的中心點一樣)。由于可訓練的通道級縮放可以被視為“深度”1×1 conv,然后是一個恒定的縮放因子1,我們在“對角線”位置向Grad Masks添加1(如果輸出形狀與輸入形狀不匹配,CSLA塊將沒有這樣的快捷方式,因此我們只需忽略此項)。
Remark
與RepVGG等常見SR形式相比,CSLA塊既沒有BN等訓練時間非線性,也沒有序列可訓練算子,還可以通過常見SR技術將其轉換為產生相同推理結果的等效結構。然而,推斷時間等價并不意味著訓練時間等價,因為轉換后的結構將具有不同的訓練動態,在更新后打破了等價性。此外,我們必須強調,CSLA結構是虛構的,它只是描述和可視化再優化器的中間工具,但我們從未實際訓練過它,因為結果在數學上與直接用GR訓練目標結構相同。
只剩下一個問題:如何獲得常數標度向量s和t?
3.3 Obtain the Hyper-Parameters of RepOptimizer via Hyper-Search
當然,作為重優化器的超參數,梯度掩模會影響性能。由于深度神經網絡優化的非凸性,研究界仍然缺乏對黑箱的透徹理解,因此我們不期望得到可證明的最優解。我們提出了一種新方法,將優化器的超參數與輔助模型和搜索的可訓練參數相關聯,因此稱為超搜索(HS)
具體來說,給定一個重優化器,我們通過用可訓練的尺度替換再優化器對應的CSLA模型中的常數來構建輔助超搜索模型,并在一個小的搜索數據集上進行訓練(例如,CIFAR-100[28])。直觀地說,這一步驟受到DART[32]的啟發,即可訓練參數的最終值是模型預期的值。在搜索數據集上進行訓練后,可訓練量表的最終值被視為預期值虛擬CSLA模型中的常數值。由于CSLA=GR,CSLA模型中的預期常數正是我們構建再優化器的預期Grad Masks所需的。
3.4 Train with RepOptimizer
在超搜索之后,我們使用搜索到的常數尺度為每個算子(在RepOpt VGG的情況下,每個3×3 conv層)構建重新優化器的梯度掩碼,這些梯度掩碼存儲在內存中。在目標數據集上訓練目標模型的過程中,重新優化器將在每次規則向前/向后計算(迭代規則)后,將梯度掩碼明智地乘以相應算子的梯度。
我們還應該遵循初始化規則。為了使用重新優化器開始訓練,我們根據搜索到的超參數重新初始化模型參數。在RepOpt VGG的情況下,就像上面最簡單的示例(W′(0)←αAW(A)(0)+αBW(B)(0))(W^{'(0)}←α_AW^{(A)(0)}+α_BW^{(B)(0)} )(W′(0)←αA?W(A)(0)+αB?W(B)(0)),我們還應該在初始化時使用相應CSLA塊的等效參數初始化每個3×3內核。更準確地說,我們假設通過MSRA初始化[21]自然初始化假想CSLA塊中的3×3和1×1內核,作為一種常見做法,可訓練的通道級縮放層為,另一個合理的選擇是使用HS模型中的訓練權重初始化虛擬的可訓練通道級縮放層。如果我們假設這樣做,我們應該將等式4中的1更改為逐層縮放層的第c個通道的訓練權重。我們觀察到最終精度的差異可以忽略不計。 在這種情況下,設W(s)(0)∈RC×C×3×3andW(t)(0)∈RC×C×1×1W^{(s)(0)}∈ R^{C×C×3×3} and W^{(t)(0)}∈ R^{C×C×1×1}W(s)(0)∈RC×C×3×3andW(t)(0)∈RC×C×1×1是隨機初始化的3×3和1×1核,等效核由給出(注意,通道尺度是初始化為單位矩陣的1×1 conv,因此我們應該在對角中心位置加1該操作,如等式3)
我們使用W′(0)W^{'(0)}W′(0)初始化RepOpt VGG模型中的3×3 conv層,因此訓練動力學將等效于訓練用W(s)(0)andW(t)(0)W^{(s)(0)} and W^{(t)(0)}W(s)(0)andW(t)(0)初始化的CSLA塊。如果沒有這兩條規則中的任何一條,等價性就會中斷,因此性能會下降(表4)。
4 Experiments
5 Conclusions and Limitations
本文提出了一種將模型先驗轉換為優化器的新范式,并提出了一種通過梯度重參數化(GR)實現的方法。我們希望這篇論文能夠在設計良好的模型結構領域之外引發進一步的研究。然而,雖然該方法經過了實證驗證,但我們相信進一步的研究(例如,數學上可證明的界限)將是有用的,這可能需要對深度神經網絡的黑匣子有更深入的理解。與結構再參數化(SR)相比,我們必須強調,盡管SR(CSLA)的特例可以被視為GR的數學等價實現,但更復雜和一般的SR情況(例如,分支[10,13]中存在BN層或多個序列線性可訓練算子[11,12])不能被GR取代。
總結
以上是生活随笔為你收集整理的RepOptimizer学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。