<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          DARTS:年輕人的第一個NAS模型

          共 4591字,需瀏覽 10分鐘

           ·

          2020-12-02 12:16

          ↑ 點擊藍字?關(guān)注極市平臺

          作者丨薰風(fēng)初入弦@知乎
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/156832334
          編輯丨極市平臺

          極市導(dǎo)讀

          ?

          Darts 是用于構(gòu)建雙數(shù)組 Double-Array的簡單的 C++ Template Library。DARTS做到了大幅提升搜索算法的速度,本文作者結(jié)合論文詳細解釋了DARTS的相關(guān)基礎(chǔ)概念及解釋,并簡述一些自己的關(guān)于假設(shè)以及發(fā)展方向的思考。?>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿

          1. 薰風(fēng)說

          DARTS是第一個提出基于松弛連續(xù)化的,使用梯度下降進行搜索的神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(neural architecture search, NAS)算法,將最早礦佬們(說的就是你Google)花成千上萬個GPU-hour(即用一塊卡跑一小時)的搜索算法降低到了一塊卡四天就能跑完。這使得我們這種窮苦的實驗室也有了研究NAS這個酷炫方法的可能,不愧是年輕人的第一個NAS模型哈哈哈。


          DARTS最大的貢獻在于使用了Softmax對本來離散的搜索空間進行了連續(xù)化,并用類似于元學(xué)習(xí)中MAMAL的梯度近似,使得只在一個超網(wǎng)絡(luò)上就可以完成整個模型的搜索,無需反復(fù)訓(xùn)練多個模型。(當(dāng)然,之后基于演化算法和強化學(xué)習(xí)的NAS方法也迅速地借鑒了超網(wǎng)絡(luò)這一特性)。


          而實際上,DART還有個更大的貢獻就是開源了。不過源代碼是基于Pytorch 0.3寫的,和主流的1.x版本差別很大,所以需要一段時間進行重新復(fù)現(xiàn)。我現(xiàn)在寫了1.4版本的分布式并行搜索代碼,等后續(xù)可視化和保存模型都摸熟了會發(fā)實現(xiàn)的教程(在做了在做了)。


          除此之外,DARTS雖然想法十分優(yōu)雅,但我個人覺得其在假設(shè)上有不少值得推敲的地方。在略讀了CVPR2020里有關(guān)NAS的20篇論文后,的確很多工作都是針對我覺得很“有趣”的假設(shè)做的233。之后,我也會持續(xù)更新CVPR2020中NAS有關(guān)的論文,尤其是基于梯度下降方法的。


          2. 正文開始

          DARTS通過以可微分的方式描述任務(wù)來解決架構(gòu)搜索的可擴展性挑戰(zhàn)。
          與傳統(tǒng)的在離散的、不可微的搜索空間上應(yīng)用進化或強化學(xué)習(xí)的方法不同(這些方法需要再一堆離散的候選網(wǎng)絡(luò)中間搜索),我們的方法基于連續(xù)松弛的結(jié)構(gòu)表示,允許在驗證集上使用梯度下降對結(jié)構(gòu)進行高效搜索。

          DARTS在大搜索空間中搜索有復(fù)雜拓撲結(jié)構(gòu)的高效架構(gòu)cell,而過去使用梯度下降更多是找濾波器形狀,分支方式之類的低維超參數(shù)。

          2.1 概念介紹與符號聲明

          上圖為DARTS的算法示意圖。首先,這里的搜索空間(對CNN而言)是一個組成模型的Cell,其可以被描述成一個有??個節(jié)點的有向無環(huán)圖。在這個有向無環(huán)圖中,有節(jié)點??和邊??,其中
          • 節(jié)點?是第??個特征圖
          • 是從第??個特征圖到第??個特征圖之間的變換(如卷積、池化)

          而每個中間節(jié)點(特征圖)都是由有向無環(huán)圖中所有的前繼節(jié)點計算得來的,即:

          此外,所有的邊(操作)都是在一個候選操作集??中選取出來的。
          在CNN的DARTS中,可選的操作集合為:3×3深度可分離卷積,5×5深度可分離卷積,3×3空洞深度可分離卷積,5×5空洞深度可分離卷積,3×3極大值池化,3×3均值池化,恒等,0操作(兩個節(jié)點直接無連接)

          2.2 連續(xù)松弛化

          在傳統(tǒng)的方法中,為了在候選操作集??中尋找最好的操作,都是使用強化學(xué)習(xí)或者演化算法等啟發(fā)式算法取某個操作,也就是說這種選擇是非此即彼的離散操作。

          離散的操作不好求導(dǎo),所以需要引入連續(xù)松弛化這個概念。具體地,實際上在搜索過程中,操作集的每個操作都會處理每個節(jié)點的特征圖。之后,再對所有所有操作得到的結(jié)果加權(quán)求和,即
          可以看到這里引入了新的符號??,其含義為:第??個特征圖到第??個特征圖之間的操作??的權(quán)重。這也是我們之后需要搜索的架構(gòu)參數(shù)。

          舉個例子,如果這個操作的權(quán)重??,那么就可以認為我們完全不需要這個操作。

          而為了保證所有節(jié)點的輸出大致穩(wěn)定,我們要對每兩個節(jié)點之間的架構(gòu)參數(shù)(即操作的權(quán)重)進行Softmax操作,即??。
          可以看到,如果每個操作的權(quán)重確定,那么最終的網(wǎng)絡(luò)架構(gòu)也隨之確定,因此我們后續(xù)可以稱??為網(wǎng)絡(luò)架構(gòu)(的編碼)本身。

          2.3 兩級最優(yōu)化

          和之前基于強化學(xué)習(xí)方法的獎勵函數(shù),或者基于演化算法的種群適應(yīng)性一樣。DARTS的優(yōu)化目標也是在驗證集上的損失函數(shù)(只不過DARTS直接用梯度下降優(yōu)化)。

          這里令訓(xùn)練損失和驗證損失分別為??和??。網(wǎng)絡(luò)中操作的的權(quán)重為??,有 * 上標則說明其為最優(yōu)的。因此,我們其實希望找到的是一個能在訓(xùn)練集訓(xùn)練好之后(最優(yōu)權(quán)重??),在驗證集上損失最小的架構(gòu)(??)。

          這里就有個問題,每次我們判斷架構(gòu)好不好的之前,首先他要先在訓(xùn)練集上收斂,即??。而最優(yōu)的權(quán)重本身必然是和架構(gòu)對應(yīng)的,架構(gòu)變化,對應(yīng)的權(quán)重也會跟著變化。

          把上面這個過程用數(shù)學(xué)語言描述,就是以架構(gòu)??為上級變量,權(quán)重??為下級變量的兩級最優(yōu)化問題:

          但是,實際上這種問題看起來復(fù)雜,卻在元學(xué)習(xí)領(lǐng)域十分常見。尤其是基于梯度下降的超參數(shù)優(yōu)化問題(比如著名的MAMAL)。所以,你也可以把這個問題看成元學(xué)習(xí)問題,而架構(gòu)參數(shù)本身也是超參數(shù),只不過這個超參數(shù)維度高的有點點離譜233...

          2.4 近似梯度

          之前也提到過,DARTS對架構(gòu)參數(shù)的更新方法實際上是在驗證集上對架構(gòu)參數(shù)做梯度下降。

          但是這又有個問題,那就是由二級最優(yōu)化的定義,每次更新架構(gòu)參數(shù)都理應(yīng)重新訓(xùn)練模型的權(quán)重,但這顯然是不可接受的(因為太慢了……)。DARTS算法實際上在驗證集上的搜索過程中,權(quán)重是不會變的,這就需要某種梯度近似的方法。這里先給出作者提出的(二階)梯度近似(其中??是權(quán)重的學(xué)習(xí)率)
          這種近似在架構(gòu)于訓(xùn)練集上達到局部極值點(??)時,??。

          也就是說,這種近似實際上是用??(訓(xùn)練集上對權(quán)重執(zhí)行一次梯度下降)來近似最優(yōu)權(quán)重??。

          用人話來講,實際上就是交替進行以下兩步:
          1. 在驗證集損失上梯度下降更新架構(gòu)參數(shù)
          2. 在訓(xùn)練集損失上梯度下降更新操作權(quán)重
          類似的方法在元學(xué)習(xí)(MAMAL)、基于梯度的超參數(shù)調(diào)整與避免GAN崩潰(unrolled GAN)中都能看到。

          那么這個近似梯度究竟需要如何求解呢?
          PS:以下流程很大程度上參考了浙大李斌大佬的專欄(羨慕一波數(shù)學(xué)功底),也推薦配合食用。

          李斌:【論文筆記】DARTS公式推導(dǎo)

          https://zhuanlan.zhihu.com/p/73037439

          首先,上面這個近似的梯度涉及了二元復(fù)合函數(shù),因此對其求導(dǎo)需要用到鏈式法則。為了簡單可以先將??記為??,其中:
          現(xiàn)在對這個復(fù)合函數(shù)求導(dǎo)
          其中(??):
          • ?(復(fù)合函數(shù)對第一項的偏微分)
          • ?(復(fù)合函數(shù)對第二項的偏微分)
          帶入并整理,我們可得到具體可求的梯度:

          為啥說是具體可求呢,因為在上式第二行的結(jié)果中??變成了一個常數(shù),而不是之前一個變量為架構(gòu)參數(shù)??的復(fù)合函數(shù)!

          但是,這個梯度的第二項依然十分麻煩,因為對兩個變量(權(quán)重和架構(gòu)參數(shù))的二階梯度以及權(quán)重的梯度求解涉及到很麻煩的向量-矩陣乘積。

          因此作者提出使用有限差分近似來求解,具體地,設(shè)有一小標量??(經(jīng)驗中取??)。
          其中?

          這個具體是怎么做到的呢,答案是——泰勒展開(說到底都是本科知識,但就是想不起來)
          現(xiàn)在我們用??來替代??,則有
          將上面兩個式子相減,可以得到
          之后,用??替代??, 再把??換成??,還有把??換成??,最后把??換成??,就是有限差分近似的結(jié)果啦~

          實際上這種有限差分近似只需要對梯度進行兩次前向傳播,以及對架構(gòu)進行兩次反向傳播。其計算復(fù)雜度也會從??降至?

          最后,如果你覺得這個有限差分近似依然很煩,你w可以直接把第二項扔掉,即只保留??。這種操作等價于假設(shè)當(dāng)前的權(quán)重??就是最優(yōu)權(quán)重??,此時梯度將退化為一階近似
          一階近似的速度更快,但最后的效果沒有二階近似好。

          2.5 生成最優(yōu)模型

          假設(shè)通過之前說的這些流程,架構(gòu)參數(shù)已經(jīng)訓(xùn)練的挺不錯了。那么,接下來就要提取真正的模型了,因為直至目前,架構(gòu)依然是計算了所有的操作,而所有操作依然是連續(xù)組合而不是離散的。但是,和分類問題一樣,我們可以取出每條邊上權(quán)重最大的 $$k$$ 個操作(在CNN中DARTS取2個最大的操作,并忽略0操作)。


          3. 思考

          實際上,如果從本文作者的角度看DARTS,我能發(fā)現(xiàn)有以下假設(shè)是值得注意的,從CVPR2020的paper看,這些也是被后來者當(dāng)靶子的點。(當(dāng)然,我要是真的能做出這個檔次的工作,我做夢都會笑醒……)

          3.1 "有趣"的假設(shè)

          1. CNN可以由相同的Cell堆疊得到,RNN可以由相同的Cell遞歸連接得到
          2. 每個Cell有兩個輸入節(jié)點和一個輸出節(jié)點組成,對于CNN來說輸入節(jié)點是前兩個Cell的輸出(the cell outputs of the in the previous two layers)
          3. 每個Cell的輸出實際上是對所有中間節(jié)點作reduction操作(比如concatenate)得到的
          4. 在驗證集上效果最好的模型,在測試集上效果也最好
          5. 作者并沒有證明這個梯度近似的收斂性,所以直接拿來用了hhh
          6. 作者將每個Cell的每個節(jié)點之間都取前2個最大權(quán)重的操作,(作者的理由是別人都是這么做的)
          7. 作者忽略了定義在搜索空間中的0操作(因為作者認為0操作在搜索過程中不會改變運算的結(jié)果)
          8. 在小模型搜到的Cell在大模型上也會很好用,因此無需重新搜索。
          9. Reduction Cell 和 Normal Cell的搜索空間是一樣的,且全都是深度可分離卷積,都有池化層。
          假設(shè)2和6 Follow了谷歌大腦18年CVPR的論文Learning Transferable Architectures for Scalable Image Recognition。不過這篇論文中取的兩個輸入具體是之前哪兩個cell實際上是不固定的,而Darts則固定只取前兩個(存疑)

          3.2 作者給出的下一步方向

          連續(xù)體系結(jié)構(gòu)編碼和派生離散模型之間存在差異,所以最好讓引入類似有退火閾值的01編碼。

          在搜索工程中學(xué)到的共享參數(shù)是否可以用于設(shè)計一個性能可感知(performance aware)的架構(gòu)派生機制。


          推薦閱讀



            添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳),即可申請加入極市目標檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群:每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~

            △長按添加極市小助手

            △長按關(guān)注極市平臺,獲取最新CV干貨

            覺得有用麻煩給個在看啦~??
            瀏覽 161
            點贊
            評論
            收藏
            分享

            手機掃一掃分享

            分享
            舉報
            評論
            圖片
            表情
            推薦
            點贊
            評論
            收藏
            分享

            手機掃一掃分享

            分享
            舉報
            <kbd id="afajh"><form id="afajh"></form></kbd>
            <strong id="afajh"><dl id="afajh"></dl></strong>
              <del id="afajh"><form id="afajh"></form></del>
                  1. <th id="afajh"><progress id="afajh"></progress></th>
                    <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    啪啪啪无码网站 | 日本777视频 | 日韩无码黄色 | 国产精品久久久久久久久久久久午夜片 | 九九亚洲 |