天天看點

谷歌 MorphNet:讓你的神經網絡更小但更快

雷鋒網 AI 科技評論按,深度神經網絡(DNN)在解決圖像分類、文本識别和語音轉換等實際難題方面具有顯著的效果。然而,為一個給定的問題設計一個合适的 DNN 體系結構仍然是一個具有挑戰性的任務。考慮到架構可能需要巨大的搜尋空間,從頭開始為特定的應用程式設計一個網絡在計算資源和時間方面花銷可能非常大。神經網絡架構搜尋和 AdaNet 等方法利用機器學習來搜尋設計空間,以便找到改進架構的方法。另一種選擇是将現有的體系結構用于類似的問題,并一次性為手頭的任務進行優化。

正對這個問題,谷歌 AI 釋出了一篇博文讨論了 MorphNet。MorphNet 是一種複雜的神經網絡模型細化技術,它采用了上面說的第二種方法。本文對 MorphNet 的解釋是:「深度神經網絡的快速、簡單的資源受限結構學習」。MorphNet 以現有的神經網絡為輸入,生成一個更小、更快、性能更好的新神經網絡,以适應新的問題。我們已經将這項技術應用于「Google-scale」問題,以設計更小、更準确的生産服務網絡。而且,現在我們已經向社群開放了 MorphNet 的 TensorFlow 實作,這樣你就可以使用它來提高你的模型的效率。

它是如何工作的

MorphNet 通過收縮和擴充階段的循環優化神經網絡。在收縮階段,MorphNet 識别效率低下的神經元,并利用稀疏正則化器将其從網絡中删去,這樣網絡的總損失函數就包含每個神經元的成本。然而,MorphNet 并沒有對每個神經元使用一樣的成本,而是根據目标資源計算神經元成本。随着訓練的進行,優化器在計算梯度時會意識到資源成本,進而了解哪些神經元是是節省資源的,哪些神經元可以被移除。

例如,考慮 MorphNet 如何計算神經網絡的計算成本,以觸發器為例。為了簡單起見,讓我們考慮一個用矩陣乘法表示的神經網絡層。在這種情況下,層有 2 個輸入(xn),6 個權重(a,b,…,f)和 3 個輸出(yn;神經元)。使用标準教科書中的行和列相乘的方法,可以計算出評估該層需要 6 次相乘。

谷歌 MorphNet:讓你的神經網絡更小但更快

神經元的計算成本

MorphNet 将其計算為輸入計數和輸出計數的乘積。注意,盡管左邊的例子顯示了兩個為 0 的權重值,我們仍然需要執行所有的乘法來評估這個層。然而,中間的例子顯示了結構化稀疏性,其中神經元 yn 中的所有行權重都為 0。MorphNet 識别出這個層的乘法數從 6 減少到 4,于是這個層的新輸出計數是 2。利用這一思想,MorphNet 可以确定網絡中每個神經元的增量成本,進而生成一個更有效的模型(右邊),其中神經元 y3 已經被移除。

在展開階段,我們使用寬度乘數來均勻地擴充所有的層大小。例如,如果我們擴大 50%,那麼一個以 100 個神經元開始并縮小到 10 個的低效率層隻會擴大到 15 個,而一個隻縮小到 80 個神經元的重要層可能會擴大到 120 個,并有更多的資源來工作。也就是将計算資源從網絡中效率較低的部分重新配置設定到可能更高效的部分。

在縮減階段之後,人們可以停止 MorphNet,隻需縮減網絡以滿足更嚴格的資源預算。這會導緻在給定目标成本的時候網絡效率更高,但有時也會導緻精度下降。另外,使用者還可以完成擴充階段,該階段将與原始目标資源成本相比對,但提高了準确性。稍後我們通過一個示例來介紹這個的完整實作過程。

為什麼是 MorphNet?

MorphNet 提供了四個關鍵的有價值的主張:

有針對性的正則化:與其他稀疏的正則化方法相比,MorphNet 采取的正則化方法目的性更強。尤其是,MorphNet 方法進行更好的稀疏化的目的是減少特定的資源。這可以更好地控制由 MorphNet 生成的網絡結構,根據應用領域和相關限制,MorphNet 可以有明顯的不同。例如,下圖的左側面闆顯示了一個基線網絡,該網絡具有在 JFT 上訓練的常用 ResNet-101 體系結構。當以觸發器(中間圖,觸發器減少 40%)或模型大小(右圖,權重減少 43%)為目标時,MorphNet 生成的結構有很大不同。在優化計算成本時,較低層網絡中的高分辨率神經元比低分辨率神經元更容易受到修剪。當模型尺寸較小時,在修剪權衡上正好相反。

谷歌 MorphNet:讓你的神經網絡更小但更快

MorphNet 有針對性的正則化。矩形寬度與層中的通道數成正比。底部的紫色條是輸入層。左圖:基線網絡用作 MorphNet 的輸入。中圖:輸出應用觸發器調節器。右圖:輸出應用大小調整器。

MorphNet 是為數不多的能夠針對特定參數進行優化的解決方案之一。這使它能夠針對特定實作的參數。例如,可以通過結合特定于裝置的計算時間和記憶體時間,将延遲作為一階優化參數。

拓撲變形:當 MorphNet 學習每層神經元的數量時,算法在一個層中稀疏所有神經元的過程中可能會遇到一種特殊的情況。當一個層有 0 個神經元時,通過切斷網絡中受影響的分支,可以有效地改變網絡的拓撲結構。例如,當遇到 ResNet 體系結構時,MorphNet 可能保留 skip-connection,但删除殘差塊,如下左圖所示。對于 Inception 樣式的架構,MorphNet 可能會删除整個平行的塔,如右圖所示。

谷歌 MorphNet:讓你的神經網絡更小但更快

左圖:MorphNet 可以删除 ResNet 樣式網絡中的殘差連接配接。右圖:它還可以删除 Inception 樣式的網絡中的平行塔。

可擴充性:MorphNet 在一次訓練中學習新的結構,在教育訓練預算有限時,它是一個很好的方法。MorphNet 也可以直接應用于昂貴的網絡和資料集。例如,在上面的比較中,MorphNet 直接應用于 ResNet-101,而它最初是在 JFT 上花費了 100 個 GPU 月訓練的。

可移植性:MorphNet 産生的網絡是「可移植的」,從這個意義上說,它們是打算從頭開始重新訓練的,并且權重與體系結構學習過程無關。你不必擔心複制檢查點或遵循特殊的訓練規則,而隻需像平時一樣訓練你的新網絡!

變形網絡

作為一個示範,我們将 MorphNet 應用于在 ImageNet 上通過目标定位 FLOPs 訓練的 Inception V2(見下文)。基線方法是使用一個寬度倍增器,通過均勻地縮小每個卷積(紅色)的輸出數量來權衡精度和觸發器。MorphNet 方法的目标是直接 FLOPs,并在縮小模型時産生更好的權衡曲線(藍色)。在這種情況下,與基線相比,觸發器成本降低了 11% 到 15%,而精确度相同。

谷歌 MorphNet:讓你的神經網絡更小但更快

MorphNet 應用于 ImageNet 上的 Inception V2。單獨使用 FLOP 正則化器(藍色)可将性能相對于基線(紅色)提高 11-15%。在一個完整的周期中,正則化器和寬度乘法器在相同的成本(「x1」;紫色)下提高了精度,并在第二個周期(「x2」;青色)持續改進。

此時,您可以選擇一個 MorphNet 網絡來滿足較小的 FLOP 預算。或者,您可以通過将網絡擴充回原始的 FLOP 成本來完成這個周期,進而在相同的成本(紫色)下獲得更好的準确性。再次重複變形網縮小\擴充循環會導緻另一個精度增加(青色),使總精度增加 1.1%。

結論

我們已經将 MorphNet 應用到了谷歌的幾個量産級圖像處理模型中。使用 MorphNet 可以在品質幾乎沒有損失的情況下顯著減少模型大小。我們邀請您嘗試 MorphNet。可以在這裡找到開源 TensorFlow 實作方法,還可以閱讀 MorphNet 論文了解更多詳細資訊。

via:https://ai.googleblog.com/

雷鋒網雷鋒網(公衆号:雷鋒網)

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

繼續閱讀