畳み込みニューラルネットワーク
depthwise separable convolutionは空間方向の畳み込みとチャネル方向の全結合を分離した畳み込みモジュールである。すなわち通常の畳み込みを depthwiseConv + pointwiseConv で置き換えるモジュールである。計算量・パラメータ量を1/10スケールで削減できる利点がある。
畳み込みの変種として grouped convolution がある。通常の畳み込みでは全入力チャネルの畳み込み和を計算するが、grouped convolutionでは入出力チャネルをいくつかのグループに分割しグループ内で通常の畳み込みと和をおこなう。これによりカーネル枚数・計算量の削減、複数GPUを用いた学習、別技術と組み合わせた性能の向上などが可能になる(c.f. AlexNet, ResNeXt)。グループ数をチャネル数と一致させる、すなわちチャネル間の和をなくしたものは特にdepthwise convolutionと呼称される。
すなわち各出力チャネル ごとに入力チャネル k {\displaystyle k} 枚分の畳み込みカーネル w e i g h t ( C o u t j , k ) {\displaystyle \mathrm {weight} (C_{\mathrm {out} _{j}},k)} が用意され、カーネルを用いた各入力チャネルの畳み込みの総和へバイアス C o u t j {\displaystyle C_{\mathrm {out} _{j}}} 項 b i a s ( C o u t j ) {\displaystyle \mathrm {bias} (C_{\mathrm {out} _{j}})} が付与され各チャネル出力となっている。式からわかるように、入力チャネル間は畳み込み処理ではなく和で計算され、また入力チャネル i n p u t ( k ) {\displaystyle \mathrm {input} (k)} と畳みこまれるカーネルは出力チャネルごとに異なる。
カーネルはしばしばフィルタと呼ばれる。これは位置関係をもつ重みづけ和のスライド演算(畳み込み)がフィルタ適用と等価なことに由来する。
畳み込み処理自体は単純な線形変換である。出力のある1点を見ると局所以外の重みが全て0の全結合と等価であることからこれはわかる。多くのCNNでは畳み込み処理に引き続いてシグモイド関数やReLUなどの活性化関数による非線形変換をおこなう。
単純なCNNは順伝播型 (FFN)、すなわち浅い層から深い層へのみ結合をもつ。ただしCNNは2層間の結合様式を規定するクラスでありFFNと限らない。非FFN型CNNの一例として大局的に回帰結合をもち層間では畳み込みをおこなうRecurrent CNNが提唱されている。
CNNは画像・動画認識やレコメンダシステム、自然言語処理に応用されている。