狠狠撸

狠狠撸Share a Scribd company logo
ネットワーク軽量化についてのまとめ
2019/01/23
Agenda
1. ネットワークの軽量化とは
2. 通常の畳み込み処理
3. pointwiseとdepthwise 畳み込み
4. Inception
5. MobileNets
6. SqueezeNet
7. ShuffleNet
8. Xception
9. BinaryNet
1. ネットワークの軽量化とは
ネットワークの軽量化
軽量なネットワーク
=性能あたりのパラメータ数が少ないネットワーク
軽量なネットワークを構築すること
計算資源の限られているモバイルやエッジコンピューティングにおいて重要。
また軽量化することで、その分ネットワークの層を深くしたりすることもできるので、逆に
精度改善につながる可能性も。
軽量化のアプローチ
?畳み込み層の構造を工夫することでパラメータ数を削減する手法
?パラメータ自体を圧縮する手法
に大別できる。
軽量化手法
(1) 畳み込み層の構造を工夫することで
パラメータ数および計算量を削減する手法
● GoogLeNet (Inception module)
● ResNet (bottleneck architecture),
● SqueezeNet (fire module)
● MobileNets & Xception (depthwise and pointwise convolution)
(2) ネットワークのパラメータを圧縮する手法
● バイナリ化
● Pruning
● 量子化(直積量子化含む)
● ハフマン符号化
XceptionとMobileNets
この2つはともに前者、パラメータ数を削減するアプローチ
どちらの論文もpointwise convolutionとdepthwise (separable) convoutionを用いて精
度を保ちながらCNNのパラメータ数を削減している。
すなわち、精度とパラメータ数のトレードオフを改善していると言える。
Xceptionは、パラメータ削減により、同一のパラメータで大規模な画像認識の高精度化
を実現し、
MobileNetsは、精度を保ちながMobile上での高速な画像認識を実現している。
ちなみに作者「Fran?ois Chollet」は「フランソア?ショレ」
2. 通常の畳み込み処理
畳み込み層の計算量とパラメータ数
Pointwise convolutionとdepthwise convolutionのメリットを理解する前に
通常の畳み込み層の計算量とパラメータ数について
入力特徴マップのサイズをF×F、
入力チャネル数をN、
カーネルサイズをK×K、
出力チャネル数をMとすると、
この畳み込み層の計算量は、
F2
NK2
M
となる。
畳み込み層の計算量とパラメータ数
Pointwise convolutionとdepthwise convolutionのメリットを理解する前に
通常の畳み込み層の計算量とパラメータ数について
計算量 F2
NK2
M
入力特徴マップの1箇所につき畳み込みの
コストがK2
N、
これを入力特徴マップのF2
箇所
に適用することで、1チャネルの出力
特徴マップが生成されることから、
出力特徴マップがM個のケースでは上記の
計算量になる。
畳み込み層の計算量とパラメータ数
Pointwise convolutionとdepthwise convolutionのメリットを理解する前に
通常の畳み込み層の計算量とパラメータ数について
計算量 F2
NK2
M
パラメータ数
パラメータ数がK2
Nの畳み込みが
M種類あるので、K2
NMとなる。
計算量削減のキモ
この計算量とパラメータ数を畳み込み層の構成を工夫することで
削減することがMobileNetsおよびXceptionのキモ。
具体的には、
?通常の畳込みが、特徴マップの「空間方向とチャネル方向に同時に」畳み込みを行う
のに対し、
?チャネル方向の畳み込み (pointwise convolution) と
 空間方向の畳み込み (depthwise convolution)
 を分ける (factorize) ことを行う。
3. pointwiseとdepthwise 畳み込み
Pointwise convolution
Pointwise convolutionは、
ResNet等のskip connectionでも
利用される1x1の畳み込み。
空間方向の畳み込みは行わず、
チャネル方向への畳込みを行う。
特徴マップの次元を増やしたり
減らしたりするのにも利用される。
Pointwise convolutionは、通常の畳
込みのK=1としたもの
計算量はF2
NM、
パラメータ数はNMとなる。
pointwise convolutionのメリット
最大のメリットは層数を簡単に任意の値に変更できる点。
他にも副次的に色々とメリットがある。
?1x1の畳み込みはCPUでも高速で動作する
?畳み込みのフィルタサイズを1x1にするだけで実装できるため
他の次元削減?拡張手法に比べて圧倒的に実装が楽
?出力の層数を簡単に増減できる
?出力にrelu等を与えることによって、非線形性を増すことができる
Depthwise convolution
Depthwise convolutionは、
特徴マップのチャネル毎にそれぞれ
空間方向の畳込みを行う。
チャネル方向への畳込みを行わない
通常の畳込み1回のコストがK2
NからK2
に
なるため、
計算量は F2
NK2
、
パラメータ数は K2
N となる。
削減される計算量
pointwise convolutionおよびdepthwise convolutionを合わせて適用すること
で、空間方向とチャネル方向を同時に畳み込む通常の畳込み層を、
より少ないパラメータおよび計算量で近似することができる。
計算量に関しては、
F2
NK2
M → F2
NM+F2
NK2
に削減される。比率で言うと、1/K2
+1/Mになる。
通常 M >> K2
(e.g. K=3, M≥32) より、計算量はK=3では1/9程度に削減される。
また、pointwise convolutionのほうがボトルネックになっていること
も分かる。
4. Inception
Inceptionモジュール V1/V2/V3/V4 (2015-2016)
フィルターのサイズについて
正直どれがいいかわからないという問題
  ↓
「全部試してみて、その中で優劣を学習の過程で
決めればいい」という考え方
「Inception Module」を多段に重ねることで、
各Module内のフィルターの学習と選択を
やっていると考えることができる
複数のフィルターを用いることで、
「細部の表現だけでなく、より抽象的な表現
の獲得も、一つのモジュール内で行うこと
が出来る」
と解釈することもできる
Inceptionモジュール V1/V2/V3/V4 (2015-2016)
Inceptionモジュールの効果
入力と出力はどちらも28×28なので、モジュール内の
たたみ込みに対して同じパディングを使用している
次元削減をしなかった場合
5×5の畳み込みが計算上どのようになるか。
1×1のフィルターを大きなフィルター5×5や3×3の
前に入れている。→次元圧縮が狙い
例:28×28の画像があり、192 channelの出力を前層で出
力
 28^2 *192 * 5^2 * 32 = 120,422,400
192 channel
Inceptionモジュールの効果
1*1 フィルター使用時
16の出力を1×1のフィルターで出した後、
5×5のフィルターをかけて、同じく32の出力
(28^2 * 192 * 1^2 * 16) + (28^2 * 16 * 5^2 * 32)
= (2,408,448) + (10,035,200) = 12,443,648
→約1/10に計算量軽減
5. MobileNets
MobileNets
完全に
depthwise separable
convolution
でやったネットワーク。
MobileNets
MobileNets
● Googleが2017年(V1)と2018年(V2)に発表した論文。
モデルのサイズが小さく、計算量が少なく(アプリの処理待ちなどが短い)、
メモリも少なく済む。精度も他の有名なモデルと比較して、結構高い水準を維持しているモデ
ル。
名前の通り、モバイル端末でも耐えうる性能を持つ。
● 用途はスマホアプリ専用ではない。
計算リソースに制限のあるサーバーや、リソースのコスパを良くしたい場合、起動時間に制限
のある環境などでも便利。
● αとρというハイパーパラメーターを調整することで、ネットワークの深さ
などを調整しなくても、精度と負荷のトレードオフを調整できる。
アプリの対応する端末に応じて、パフォーマンスを調整したりがとてもシンプル。
MobileNets
● ハイパーパラメーターを調整したもので、
VGG16比でKerasの学習速度が約3倍速、
モデルサイズが約180分の1。
● Kerasで簡単に使える。
● Depthwise comparable convolution を採用
惭辞产颈濒别狈别迟蝉のハイパーパラメータ
Width Multiplierと、Resolution Multiplierという二つのハイパーパラメーターが登場する。共に
精度を少しずつ下げつつ、パフォーマンスを上げる調整値。
MobileNet自体が前述の通り、9倍程度早いネットワークだが、アプリ側で
さらなるパフォーマンスが要求されるケースで設定。
?精度を少し下げて、快適に使える対象のモバイル端末を増やす
?サーバーで質より量で、大量の推論のリクエストを捌く
双方とも、1.0が基本の値で、0.0に近づけていくほど精度が下がる代わりに
パフォーマンスが高まる。
Width Multiplier:ネットワークの厚みのようなパラメーターで、小さくするほどネットワークが薄くなっ
ていきます。論文では α
Resolution Multiplier:扱うデータ(画像)の解像度的なところが調整される。論文ではρ
惭辞产颈濒别狈别迟蝉のハイパーパラメータ
惭辞产颈濒别狈别迟蝉のハイパーパラメータ
惭辞产颈濒别狈别迟蝉のハイパーパラメータ
αとρを使って計算コストを表すと、両方ともパフォーマンス調整用のパラメーターであるものの、値を
変えた際の挙動が異なる。
DK
?DK
?αM?ρDF
+αM?αN?ρDF
?ρDF
αは、減らすと計算量?パラメーター数(モデルサイズに直結)共に減少する。
ρは、値を小さくしてもパラメーター数は減らず、計算量が少なくなるだけ。
ただし、精度の低下が安定していて、急激に精度が落ちたりはしない。
MobileNets:kerasにおける実装
from keras.applications import MobileNet
model = MobileNet(
input_shape=(IMG_SIZE, IMG_SIZE, 3),
alpha=1.0, depth_multiplier=1, weights=None,
classes=NUM_CLASSES)
Width MultiplierはKeras上ではalphaという引数名。
weightsによる重みの指定は、 Noneを指定しないと学習済みの重みがネットからダウンロードされる
ランダムな値で初期化するため、 Noneを指定。
6. SqueezeNet
SqueezeNet
SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB
model size
2016/02
3*3Conv層の前に少ないフィルタ枚数の1*1Conv層を挿入することで, 3*3Conv層への
入力チャネルを削減し高速化する構造の提案.
7. ShuffleNet
ShuffleNet
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
Devices
2017/07
1*1 pointwise convolutionは頻出であるが, これはチャネル方向への参照範囲が
大きくコストが高い.これをgrouped convolutionに変更し, 更に出力チャネルが
全ての入力チャネルを参照できるよう「channel shuffle」(チャネルの入れ替え)を行う層
を提案.
8. Xception
ネットワークの違い
通常の畳み込みの代わりにpointwise convolutionおよびdepthwise convolution
を利用するのがXceptionとMobileNets。
ネットワークの違い
Xceptionモジュール:
ReLU-depthwise-pointwise-BN
-ReLU-depthwise-pointwise-BN
-ReLU-depthwise-pointwise-BN(+identity mapping)
MobileNetsモジュール:
depthwise-BN-ReLU-pointwise-BN-ReLU
ネットワークの違い
2つのネットワークの大きな違い
● Xceptionはskip connection (identity mapping) を持っている
● Xceptionはdepthwise convolutionとpointwise convolutionの間に
非線形関数が入っていない
※Xceptionの元となっているInceptionでは非線形関数は入っている。
Cholletさんの考察
Inceptionのケースでは、depthwiseに対応する畳み込みはチャネル1の畳込み
を行っているわけではないので、そのようなケースでは非線形性が重要なのでは、との
こと。
ちなみに、Inceptionモジュールではpointwise convolutionが先に来ている。
9. BinaryNet
BinaryNetの概要
二値化(binarization)によってNeural Networkの高速化と省メモリ化を図るというもの。
binarizationの対象は、weightのみ。
これにより乗算器の数が2/3になり、training time が3倍高速化され、
memory量は1/16(weightに関してのみ)に。
https://github.com/MatthieuCourbariaux/BinaryConnect
Deep Networkの演算のほとんどはweightとactivationの乗算が占めている。
この論文ではこのweightの乗算にFocusして、forward propagationと
back propagation中のweightを2値化することで掛け算の量を減らす試みを実施
計算精度
勾配の積算や平均では十分な計算精度が必要。
weightの微妙な変動は、gradientの積算によって平均化され影響が薄れる。
→それ故に積算の精度を維持することは重要とされる。
精度に関しては、
● Randomized rounding
● weightの精度を6bit?8bitにする方法
● dynamic fixed pointで12bitにする方法
などが提案されている。
脳のシナプスは6?12bitの精度という推定もある。
Noisy weight
Weightの変動は、汎化性能を高めるための正則化の役目を果たす。
例
Dropout は RandomにNeuronをOn/Offすることによって汎化性能を高めるという手法
DropConnect は Neuron間の結合をOn/Offするという手法。
→これらの手法はactivationやweightにnoiseを加えていると考えることができる。
特に DropConnect は weight に対して randomな処理を行う という点で
BinaryConnectと近いと言える。
BinaryConnect
weightのbinarization手法として「Deterministic」と「Stochastic」という手法を提案。
Deterministic
Stochastic
randomの時の確率がσ(x)
この確率によって+1か-1が決まる。
確率はx=0で50%, 1/2に近づくほど+1に
なりやすい。
逆に-1/2に近づくと-1になりやすい。
参考文献
● GoogLeNet (Inception module)
Going Deeper with Convolutions
https://arxiv.org/abs/1409.4842
● ResNet (bottleneck architecture)
Deep Residual Learning for Image Recognition
https://arxiv.org/abs/1512.03385
● SqueezeNet (fire module)
SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model
size
https://arxiv.org/abs/1602.07360
参考文献
● MobileNets
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
https://arxiv.org/abs/1704.04861
● Xception
Xception: Deep Learning with Depthwise Separable Convolutions
https://arxiv.org/pdf/1610.02357.pdf
参考文献
● BinaryConnect: Training Deep Neural Networks with binary weights during
propagations
http://arxiv.org/pdf/1511.00363v2.pdf
●

More Related Content

Network weight saving_20190123