CVPR 2020 | 模型壓縮新範式_濾波器嫁接技術

CVPR 2020 | Filter Grafting for Deep Neural Networks
https://github.com/fxmeng/filter-grafting

1.濾波器嫁接動機

本文提出了一種全新的學習範式:濾波器嫁接,用於提高神經網絡的特徵表達能力。構建濾波器嫁接技術的動機是通常在訓練完的網絡中存在一些無效的濾波器,很多網絡模型剪枝的文獻中就會把這些無效的濾波器剪切掉。而本文考慮重新激活這些無效濾波器,在不增加模型推理時間的前提下,有效提升網絡性能。因爲這些看似無效的濾波器不一定是真的無效的,比如在集成學習中,當單個弱分類器效果差時,它們的組合反而會得到更強的性能。這說明無效的濾波器是可以被激活的。所謂的激活就是通過將外部信息移植到到這些無效濾波器中,該過程被定義爲濾波器嫁接。濾波器嫁接的關鍵是選擇合適的信息源,那麼應該從哪裏嫁接信息? 本論文深入研究了這個問題,作者認爲我們應該從外部(其他網絡)而不是從內部(自網絡)嫁接信息。通常,可以並行地訓練多個網絡。選擇完嫁接源後,在特定的訓練階段,將一個網絡中高效的濾波器移植到另一個網絡無效的濾波器中。通過嫁接,每個網絡可以從其他網絡學習外部信息。論文的貢獻有:

  • 提出了一種新的學習範式,稱爲濾波器嫁接。嫁接可以在不改變網絡結構的情況下,重新激活無效的過濾器,提高神經網絡的潛力。
  • 提出了一種基於熵的準則和自適應加權策略,進一步提高了濾波器嫁接方法的性能。
  • 在分類和識別任務上進行了大量的實驗,並證明嫁接可以顯著提高DNNs的性能。例如,嫁接的MobileNetV2在CIFAR-100上達到78.32%的正確率,比未嫁接的MobileNetV2高約7%。
2.嫁接與裁剪,蒸餾的區別

濾波器裁剪旨在去除無效的濾波器,以加速網絡的推理。而濾波器嫁接打算激活這些無效的濾波器。值得注意的是,儘管濾波器嫁接的動機與剪枝相反,但嫁接仍然需要選擇一個合適的標準來決定哪些濾波器是不重要的。下圖展示了裁剪和嫁接的主要區別。

嫁接可能涉及並行地訓練多個網絡。因此,這個過程類似於蒸餾學習。嫁接和蒸餾的區別在於,蒸餾是一個兩階段的過程。首先,我們需要訓練一個大模型(老師),然後使用訓練好的大模型來教一個小模型(學生)。而嫁接是一個單階段的過程,在訓練過程中進行濾波器嫁接。此外如下代碼所示,我們在每個epoch中嫁接權值,而不是在每個迭代中移植權值,從而大大降低了網絡之間的通信成本。

if __name__ == '__main__':
    for epoch in range(start_epoch, args.epochs):
        train(epoch)
        test(epoch)
        state = {
            'net': net.state_dict(),
        }
        torch.save(state, '%s/ckpt%d_%d.t7' % (args.s, args.i % args.num, epoch))
        grafting(net, epoch)
3.如何計算濾波器的重要性

正如上所述,不論是裁剪還是嫁接,都需要選擇一個合適的標準來決定哪些濾波器是不重要的。通常情況下多數裁剪文獻中都利用L1範數來評價濾波器的重要性,然而本文提出了不同觀點並利用熵(entropy)來評價濾波器的重要性,具體分析如下。

(1)L1範數(L1 norm)
如下公式所示,以一層濾波器爲單位,L1範數的計算就是將當前層濾波器中所有的卷積層參數進行逐點求絕對值並求和。現有的文獻中普遍認爲L1範數越接近零,當前濾波器越不重要。但最近的研究表明,更小更不重要的標準並不總是正確的。一個特殊的情況是,一個權重分佈在 0–1之間的濾波器肯定比所有權重都爲1的濾波器更好。很顯然,L1範數準則只關注濾波器權值的絕對值,並沒有關注權值的變化。因此利用L1範數評價濾波器的好壞是不全面的。

(2)熵(entropy)
基於上述分析,本文提出利用熵的形式來衡量濾波器權重的變化程度,以此爲依據來判別濾波器的好壞。具體來說,計算熵的方法爲將濾波器權重按照大小等分爲離散的幾個區間,並計算區間對應的概率,最後利用熵的公式計算整個濾波器的熵。如公式4,5結合起來,首先計算一層濾波器中一個卷積層的熵,並求和。公式6表示直接將當前層的濾波器進行權重劃分後計算熵。

如下代碼所示,爲將當前層的所有濾波器輸入,並對其整體進行劃分,代碼中將區間劃分爲了10個,並直接計算當前層的濾波器的熵量。本文采用的也是下述代碼中的計算方式,也就是公式6。

def entropy(x, n=10):
    x = x.reshape(-1)
    scale = (x.max() - x.min()) / n
    entropy = 0
    for i in range(n):
        p = torch.sum((x >= x.min() + i * scale) * (x < x.min() + (i + 1) * scale), dtype=torch.float) / len(x)
        if p != 0:
            entropy -= p * torch.log(p)
    return float(entropy.cpu())
4.濾波器嫁接詳解

文章中作者將原始網絡中無效的濾波器稱爲砧木,將有意義的濾波器稱爲接穗,這與嫁接的植物學解釋是一致的。濾波器嫁接的目的是將信息(權重)從接穗轉移到砧木,因此選擇有用的信息是嫁接的關鍵。在本文中,作者提出了三種獲取接穗的方法。
(1)噪聲作爲接穗
噪聲作爲接穗:利用均值爲0,方差爲delta的高斯噪聲作爲接穗,使得L1範數很小的無效濾波器變得更有效。當然隨着迭代次數的增加,需要適當降低高斯噪聲方差的值,因爲過大的方差會導致網絡難以收斂。

(2)內部濾波器作爲接穗
內部濾波器作爲接穗:利用當前網絡中,其餘熵值比較大,對結果輸出有較大影響的濾波器作爲接穗,此類嫁接發生在單個網絡中。具體來說,對於每一個參數層,計算濾波器的熵值並設置一個閾值γ。濾波器的熵值小於γ,則認爲這些濾波器是無效的。然後將第i個熵值最大濾波器的權值移入第i個熵值最小濾波器。由於這種嫁接技術發生在網絡內部,因此無法增加額外的信息。具體過程如下圖所示:

(3)外部濾波器作爲接穗

外部濾波器作爲接穗:針對在單一網絡中加入隨機噪聲和權值的缺點,可以從其他網絡中選擇外部濾波器作爲接穗。具體來說,可以並行地訓練兩個網絡,分別記作M1和M2。在每個epoch的訓練中,我們將M1的有效濾波器權值嫁接到M2的無效濾波器中。該過程中的嫁接發生在層級,而不是濾波器級,這意味着我們將M1中某一層中所有濾波器權重嫁接到同一層的M2中。

在進行嫁接時,具體的操作如下公式所示,通過對接穗和砧木的權重進行加權後,得到最終的嫁接參數。其中阿爾法值要大於0.5,因爲接穗的權重更有效。

正如上述公示所示,在此過程中,我們需要解決如何確定權重係數的問題。確定權重係數有兩個要點:
第一:當M2的熵值和M1的熵值相同時,阿爾法的值爲0.5;當M2的熵值大於M1的熵值時,阿爾法的值大於0.5。
第二:即使M2的熵值和M1的熵值相差非常大的情況下,阿爾法的值也不能是0或無窮。
基於上述兩個要點 ,文章利用如下公式進行阿爾法參數的約束,從示意圖中可以看出,該公式對應的阿爾法值滿足上述提出的兩個要點。最終嫁接的代碼如下所示。

def grafting(net, epoch):
    while True:
        try:
            checkpoint = torch.load('%s/ckpt%d_%d.t7' % (args.s, args.i - 1, epoch))['net']
            break
        except:
            time.sleep(10)
    model = collections.OrderedDict()
    for i, (key, u) in enumerate(net.state_dict().items()):
        if 'conv' in key:
            w = round(args.a / np.pi * np.arctan(args.c * (entropy(u) - entropy(checkpoint[key]))) + 0.5, 2)
        model[key] = u * w + checkpoint[key] * (1 - w)
    net.load_state_dict(model)
5.結果分析

下表展示了三種不同的嫁接方式對網絡最終結果的影響,很明顯利用外部濾波器嫁接得到了最好的性能。

下表展示了利用L1範數和熵值兩種指標評價濾波器好壞後,嫁接策略的性能。從結果中可以看出,利用熵值有更好的性能,進一步說明了熵值是一種更優秀的評價濾波器好壞的準則。

下表展示了由於嫁接是模型間的權值傳遞,當外部信息(權值)變化較大時,網絡能夠更好地學習。抽樣順序和學習率帶來的權重變化豐富了嫁接信息,從而鼓勵模型更好地學習。另外,在進行嫁接時,所有網絡在數據加載器和學習速率方面使用不同的超參數。

下表展示了嫁接策略對模型最終結果的增益優於傳統的蒸餾學習等方法,體現了嫁接策略的有效性。

最終作者還對嫁接後的模型進行了濾波器有效性分析,進一步證明了嫁接策略的有效性。很明顯,經過嫁接策略後無效濾波器的數量顯著減少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章