李宏毅機器學習課程筆記-13.4模型壓縮之架構設計

調整Network的架構設計(Architecture Design),讓它變得只需要比較少的參數,這是在實際操作中最有效的做法。

Low Rank Approximation

如果是Fully Connected Network,前一層和後一層分別有N、M個neuron則需要\(N\times M\)個參數,我們可以在這兩層中間加一個有K個neuron的層(不要激活函數)就需要\(K(N+M)\)個neuron,這樣就可以減少參數量,但是根據線性代數的知識可知這3層的性能不一定比之前的2層好。

Depthwise & Pointwise Convolution

在普通卷積中,每個filter(卷積核)要處理輸入的所有channel。假設輸入有\(I\)個channel,有\(O\)個尺寸爲\(k\times k\)的filter,則需要\((k\times k\times I)\times O\)個參數、輸出\(O\)個channel。

深度可分離卷積(Depthwise Separable Convolution)又稱爲Depthwise&Pointwise Convolution,分爲以下2步,共需要\(k\times k\times I+I\times O\)個參數、輸出\(O\)個channel。

  1. Depthwise Convolution

    在這一步中,filter的數量等於輸入channel的數量,即每個filter只處理一個channel,這步的作用就是修改輸入的尺寸

    假設輸入有\(I\)個channel,因此就有\(I\)個filter;假設每個filter的尺寸爲\(k\times k\),則需要\((k\times k\times1)\times I\)個參數、輸出\(I\)個channel。

  2. Pointwise Convolution

    在這一步中,以上一步(Depthwise Convolution)的輸出作爲輸入,每個filter的尺寸必須爲\(1\times 1\),和普通卷積核一樣要處理輸入的所有channel,這步的作用就是修改輸入的通道數

    假設有\(O\)個filter,則需要\((1\times1\times I)\times O\)個參數、輸出\(O\)個channel。

Group Convolution

Group Convolution就是把輸入的多個channel分成多個group,對每個group分別進行一次或多次普通卷積。Group Convolution算是普通卷積和Depthwise Convolution的折衷,當group數量和輸入的通道數相同時它就相當於Depthwise Convolution,當group數量爲1時它就相當於普通卷積。

不同卷積的PyTorch實現

# 普通卷積, weight數量 = in_chs * out_chs * kernel_size^2
nn.Conv2d(in_chs, out_chs, kernel_size, stride, padding)

# Group Convolution, Group數量可以自行控制,表示要分成幾個group,其中in_chs和out_chs必須可以被groups整除
nn.Conv2d(in_chs, out_chs, kernel_size, stride, padding, groups=groups)

# Depthwise Convolution, 輸入通道數=輸出通道數=group數量, weight數量 = in_chs * kernel_size^2
nn.Conv2d(in_chs, out_chs=in_chs, kernel_size, stride, padding, groups=in_chs)

# Pointwise Convolution, 也就是1×1卷積, weight數量 = in_chs * out_chs
nn.Conv2d(in_chs, out_chs, 1)

Application

Depthwise Separable Convolution被廣泛地用在各種小型網絡中:SqueezeNet、MobileNet、ShuffleNet、Xception,其中最知名的爲MobileNet。


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


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