畳み込みニューラルネットワーク

畳み込みニューラルネットワーク（たたみこみニューラルネットワーク、英: Convolutional neural network、略称: CNNまたはConvNet）は層間を共通重みの局所結合で繋いだニューラルネットワークの総称・クラスである。機械学習、特に画像や動画認識に広く使われる。 CNNは、その重み（行列の）共有構造と並進不変特性に基づいて、シフト不変（shift invariant）あるいは位置不変（space invariant）人工ニューラルネットワーク（SIANN）とも呼ばれている。 一般的な畳み込み処理は以下のように定式化される。 C o u t j {\displaystyle C_{\mathrm {out} _{j}}} はj番目の出力チャネルを、 ⋆ {\displaystyle \star } は相互相関関数を意味する。 o u t p u t ( C o u t j ) = b i a s ( C o u t j ) + ∑ k = 1 C i n w e i g h t ( C o u t j , k ) ⋆ i n p u t ( k ) {\displaystyle \mathrm {output} (C_{\mathrm {out} _{j}})=\mathrm {bias} (C_{\mathrm {out} _{j}})+\sum _{k=1}^{C_{\mathrm {in} }}\mathrm {weight} (C_{\mathrm {out} _{j}},k)\star \mathrm {input} (k)} すなわち各出力チャネル ごとに入力チャネル 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は画像・動画認識やレコメンダシステム、自然言語処理に応用されている。 CNNの核となるアイデアは畳み込み処理（convolution）であり、それには様々な変種がある。以下はその一例である。 w e i g h t ( C o u t j , k ) {\displaystyle \mathrm {weight} (C_{\mathrm {out} _{j}},k)} がスカラーの畳み込みは pointwise convolution と呼称される。例えば2DConvにおける1x1カーネルがある。出力チャネル C o u t j {\displaystyle C_{\mathrm {out} _{j}}} に着目するとこの畳み込みは入力チャネルの加重平均とみなせる。あるいは各点（pointwise）での入力チャネルを跨いだ全結合とみなせる。処理全体では出力チャネルごとに異なる加重を用いて入力チャネル平均を取ることと同義である。利用目的には位置情報を保った（pointwiseな）変換、出力次元数 C o u t {\textstyle C_{\mathrm {out} }} 調整などが挙げられる。実装上は最小カーネルによる畳み込みで表現される（例: 2DConvにおける 1 × 1 × C i n {\textstyle 1\times 1\times C_{\mathrm {in} }} weightテンソル）。全結合層（Linear）を用いても容易に表現できる。 畳み込みの変種として grouped convolution がある。通常の畳み込みでは全入力チャネルの畳み込み和を計算するが、grouped convolutionでは入出力チャネルをいくつかのグループに分割しグループ内で通常の畳み込みと和をおこなう。これによりカーネル枚数・計算量の削減、複数GPUを用いた学習、別技術と組み合わせた性能の向上などが可能になる（c.f. AlexNet, ResNeXt)。グループ数をチャネル数と一致させる、すなわちチャネル間の和をなくしたものは特にdepthwise convolutionと呼称される。 CNNは畳み込み処理を用いたニューラルネットワークの総称である。convolutionの種類、Conv kernelのサイズと層の関係、特殊なモジュールの有無などにより様々なサブタイプ（変種）が存在する。 depthwise separable convolutionは空間方向の畳み込みとチャネル方向の全結合を分離した畳み込みモジュールである。すなわち通常の畳み込みを depthwiseConv + pointwiseConv で置き換えるモジュールである。計算量・パラメータ量を1/10スケールで削減できる利点がある。 Recurrent CNN（RCNN）は回帰結合を持つ畳み込みニューラルネットワークである。すなわちフィードフォワード型 (FFN) ではなく回帰型 (RNN) のネットワーク構造を持ち、層間の結合に全結合 (MLP) ではなく畳み込みを採用したニューラルネットワークである。ゆえにCNNでありRNNでもある。 受容野（英: receptive field）は出力中の一点と結合している入力の広さ・幅である。すなわち出力中の一点へと情報を伝達しうる入力域である。視覚等の感覚神経における「受容野」から転用して名付けられた。 例えば1次元の入出力をもつ1層のCNNがあったとする。CNNのカーネルサイズが 3 {\displaystyle 3} だった場合、出力 o 2 {\displaystyle o_{2}} は入力 i 1 {\displaystyle i_{1}} , i 2 {\displaystyle i_{2}} , i 3 {\displaystyle i_{3}} の重みづけ和で計算されるため受容野は 3 {\displaystyle 3} になる。このCNNを2層重ねた場合、 o 3 {\displaystyle o_{3}} は中間層 m 2 {\displaystyle m_{2}} , m 3 {\displaystyle m_{3}} , m 4 {\displaystyle m_{4}} の和でありさらに m 2 {\displaystyle m_{2}} は i 1 {\displaystyle i_{1}} , i 2 {\displaystyle i_{2}} , i 3 {\displaystyle i_{3}} 、 m 4 {\displaystyle m_{4}} は i 3 {\displaystyle i_{3}} , i 4 {\displaystyle i_{4}} , i 5 {\displaystyle i_{5}} の和となるため、CNNの受容野は 5 {\displaystyle 5} になる。 Convパラメータ・変種およびネットワーク変種によって受容野サイズへ異なる影響を与える。以下はその一例である。 Kernelパラメータ: 受容野の端をカーネルで置き換える形で広げる Strided Convolution: 受容野の端以外の部分をstride倍率に合わせて倍増させる Dilated Convolution: 歯抜けカーネルであるため、より大きいカーネルとして振る舞う（例: k3d2はk5と同じ受容野） 受容野のサイズは再帰的に求めることができる。 N {\displaystyle N} 層の畳み込みからのなるCNNを考える。ここでは第 l {\displaystyle l} 層 L l {\displaystyle L_{l}} を畳み込み C l + 1 {\displaystyle C_{l+1}} で変換して次の層 L l + 1 {\displaystyle L_{l+1}} を得る（例: 入力層 L 0 {\displaystyle L_{0}} に C 1 {\displaystyle C_{1}} を作用させて中間層 L 1 {\displaystyle L_{1}} を得る）。ここで C l {\displaystyle C_{l}} はカーネルサイズ k l {\displaystyle k_{l}} 、ストライド s l {\displaystyle s_{l}} をもつとする。出力層 L N {\displaystyle L_{N}} から見た L l {\displaystyle L_{l}} における受容野を R F l {\displaystyle RF_{l}} としたとき、次の式が成立する（図参照）。 R F l − 1 = ( R F l − 1 ) s l + k l {\displaystyle RF_{l-1}=\left(RF_{l}-1\right)s_{l}+k_{l}} よって R F N = 1 {\displaystyle RF_{N}=1} を初期条件としてこの式を入力層受容野 R F 0 {\displaystyle RF_{0}} まで再帰することで受容野を計算できる。 CNNは動物の視覚野から発想を得て福島邦彦によって提唱されたネオコグニトロンに起源を持つ。 当時の画像処理は画像（ピクセルデータ）を注意深く設計されたデータ前処理により特徴量へ変換し、それを用いて学習がおこなわれていた。CNNはピクセルを直接入力に用いることができ、特徴量設計において専門家の知識に依存しない特徴をもつとされた。現在ではCNN以外のニューラルネットワーク（例: Vision Transformer; ViT、MLPベースの gMLP）でもピクセル入力の画像処理が実現されている。ゆえに畳み込みそのものが特徴設計を不要にするキー技術であるとは言えないことがわかっている[要出典]。