本記事は以下の構成です。もらえるとこれからの励みになります!よろしくお願いします!(間違いなどもございましたら、ご指摘よろしくお願いします。CNNってそもそもどう動いているの?まずCNNがどう動いているかについて解説します。わかりやすさのため、以下では全て入力が白黒(グレースケール)の画像だとします。カラー(RGB)の場合は入力画像がカラーに変わるだけで他は何も変わらないので、グレースケールさえ理解できれば大丈夫です。入力画像1枚、フィルター1枚のCNNまずは入力画像が1枚、フィルター1枚の時を考えましょう。左から右へと流れていく感じです。入力画像にフィルター(カーネルとも言われる。)がかかり、フィルター後の画像に対して活性化関数を適用することで出力の画像が得られます。これで畳み込み層(Convolution層)が出来上がります。フィルターをかけるプロセスを見てみます。入力画像の3x3の部分がフィルターによって1マスになります。ことで元の画像サイズと同じにします。パディングは出力された画像の周りに任意の数字を埋めていく処理で、0で埋めることが多いです。padding)このフィルターによって得られた画像は、例えば、「元の画像よりカドの明暗がはっきりしている画像」だったり、「元の画像より境界線がはっきりしている画像」のように、画像の基本的な特徴が浮き出ている画像となっています。このフィルターをどう決めているのか、という疑問も浮かぶと思います。ちなみにRGBを持つカラーの場合(=チャネル数3)は、フィルターがR,G,Bチャネルそれぞれに適用され、その合計値が出力されるため結果は以下図のようにグレースケールと変わらず1つのチャネルになっています。入力チャネル数がいくらであってもフィルター1つによって出力される画像は1つということです。このようにグレーでもカラーでも出力は変わらないので、ここからはまた入力をグレースケールに戻して考えます。入力画像1枚、フィルター複数枚のCNN通常、フィルターは1つだけではなく複数個使います。(人間の画像認識を超えたResNetでは64個や128個、512個のフィルターを1個の畳み込み層で使います。)ということで、ここではフィルターを4つ使った時にどうなるか見ましょう。1枚の画像に4つのフィルターをそれぞれかけるのでその結果が得られます。フィルター1つに対応して画像のチャネル(深さ、チャンネルとも言われる)が1つ出来上がります。入力画像複数枚、フィルター1枚のCNNまた、入力画像についてですがこれも通常1枚だけでなく、複数枚を一気に処理します。呼び、通常バッチサイズ(1カタマリの枚数)は16枚や32枚、64枚などです。マシンの性能が上がれば上がるほどこのミニバッチの大きさは大きくすることができます。ミニバッチにフィルターを1つだけかけてみます。各画像にフィルターをかけて、各画像に対応した出力を得ます。なんら難しいことはありませんね。入力画像複数枚、フィルター複数枚のCNNということで、複数フィルターをかけた場合も考えましょう。こちらも今まで通りで難しくはありません。わかりやすさのために各フィルターとそれに対応した出力を赤線で引っ張ってみました。それぞれの出力画像がフィルターの枚数に応じた4チャネルになっているだけです。この出力が次の層の入力となります。バッチノーマライゼーションとは?冒頭でも畳み込み層を何段も重ねて深くすることで精度を上げていくことを述べました。実際、8層しかなかったAlexNet(2012)に対して2014年には19層のVGG-19が発表され、2015年に発表されたResNetはなんと152層。このように層が深くなるとうまく学習ができなくなります。そこで導入されたのがバッチノーマライゼーション。