背景
畳み込み層は理解しているけど、プログラミングでの動きしか理解しておらず、細かい所までちゃんと見れてないなあと思い、改めて理論も含めておさらいしようと思いました。単純に畳み込み層の部分しか触れません。
畳み込みニューラルネットワーク全体について簡単に知りたい人は「畳み込みニューラルネットワークについて(2022.6.29)」をご覧下さい。
畳み込み層とは
畳み込み層の機能を考える時、簡単には「入力データ」「カーネル(フィルター)」「出力データ」を考えます。それぞれを見ていきます。
入力データ
文字通り入力するデータの事です。今回は$4\times4$のデータを想定します。具体的には以下の様になります。
カーネル
入力データに対してフィルター的な役割をします。カーネルを通して出力したデータを可視化したものは特徴マップと言われ、データの一部の特徴を表現しています。どのような特徴かはカーネルに設定されるパラメータ(数字)によって変わります。今回は$3\times3$のカーネルを想定します。
出力データ
カーネルを通した後の入力データです。これを可視化したものは特徴マップと言われます。計算は次のように行われます。
-
まず、入力データ(input data)の赤枠部とカーネル(filter)の同じマスを掛けたものを足します。下の図で言うと、赤枠部の同じ色の丸同士を掛け合わせます。具体的には$(1\times2)+(2\times0)+(3\times1)+(0\times0)+(1\times1)+(2\times2)+(3\times1)+(0\times0)+(1\times2)=15$となります。
-
次にカーネルと一つ右にずらします。具体的には以下の赤枠部です。再度、入力データの赤枠部とカーネルの同じマスを掛けたものを足します。$(2\times2)+(3\times0)+(0\times1)+(1\times0)+(2\times1)+(3\times2)+(0\times1)+(1\times0)+(2\times2)=16$となります。
-
以下、同じように左下9マス、右下9マスの計算を行います。
まとめ
基本的にやっている事はこれだけです。画像のデータなどを使うと$256\times256\times3$サイズだったり、畳み込み層が何層もある上に、プーリング層やら活性化関数やら考える必要があり、初学者には大変分かり辛いと思います。今回は思い切ってデータも簡単に、畳み込みの計算だけをやってみました。
感想
いろんな本を見ても明確な定義が無く、どう書こうか迷う事が多くあります。その場合は、多くの人が同じようなイメージを持つように自分で定義しています。表現力が乏しく間違った表現になっているかもしれません。また、簡単にし過ぎて違和感がある方も多くいらっしゃると思いますので、ご意見等ありがたく頂戴いたします。遠慮なく編集リクエストなりコメントなりして頂ければ幸いです。
参考
岐阜工業高等専門学校電気情報工学科(2022.4)、畳み込み層の定義