CNNの計算量
【CNNの計算量】 AlexNetの場合 ・wの個数(メモリ容量)は62M個でfc層が95%を占める ・乗算回数(計算量)は1G回でconv層が95%を占める |
本項ではDLにはどれくらいの計算パワーが要るのかを見ていく。
◇
画像を入力とするDLではConvolutional Neural Network(CNN) が使われる。
CNNでは、前半をconv層,pool層の組み合わせ、後半を通常のfc層で構成する。
・畳み込み層(conv) ←局所的なパターンマッチング(重みwと凸凹が一致しているか) ・プーリング層(pool) ←畳み込み後に間引く ・全結合層(fc) |
conv層の計算は、普通の画像フィルタのようにカーネルを画素ごとにかけていくが、違うのは複数個のカーネルを用意して複数個の出力画像を作る点である。次の層では入力画像が複数になっているので入力画像ごとにカーネルを用意して最後に和をとって1つにする。したがって1層あたりの計算量は
wの個数 = (カーネルサイズ)2 × (入力ch数) × (出力ch数)
乗算回数 = (wの個数) × (入力サイズ/Stride) 2 ←Stride個飛ばしでカーネルをかける
pool層の計算は、カーネルの中のMaxを選ぶだけでwの演算はない。
fc層の計算は、全入力と全出力間に重みがかかるので1層あたりの計算量は
wの個数 = (入力サイズ) × (出力サイズ)
乗算回数 = (wの個数)
◇◇
例として、DLブームの火付け役となったAlexNet(2012)で計算量を求めてみる。
入力画像は3色(RGB)x227x227画素で、出力は1000個のクラスへの分類。
層 |
入力サイズ |
ch数 |
窓サイズ |
Stride |
出力サイズ |
wの個数 |
乗算回数 |
input |
|
3 |
|
|
227 |
|
|
conv1 |
227 |
96 |
11 |
4 |
55 |
0.03 M |
112 M |
pool1 |
55 |
96 |
3 |
2 |
27 |
|
|
conv2 |
27 |
256 |
5 |
1 |
27 |
0.6 M |
448 M |
pool2 |
27 |
256 |
3 |
2 |
13 |
|
|
conv3 |
13 |
384 |
3 |
1 |
13 |
0.9 M |
150 M |
conv4 |
13 |
384 |
3 |
1 |
13 |
1.3 M |
224 M |
conv5 |
13 |
256 |
3 |
1 |
13 |
0.9 M |
150 M |
pool5 |
13 |
256 |
3 |
2 |
6 |
|
|
fc6 |
9216 |
|
|
|
4096 |
38 M |
38 M |
fc7 |
4096 |
|
|
|
4096 |
17 M |
17 M |
fc8 |
4096 |
|
|
|
1000 |
4 M |
4 M |
total |
62 M |
1,142 M |
・wの個数(メモリ容量)は62M個でfc層が95%を占める
・乗算回数(計算量)は1G回でconv層が95%を占める
1G回というと1GFLOPSのマシンでも1sかかるから、GPUが必要というわけなのだろう。
特にconv層は乗算回数が多く(FPGAは乗算器がたくさんある)、wのメモリ容量が4M個と少ない(がんばればFPGA 内のRAMに収まる)ので、FPGA 1個で実装可能な規模である。