実際には画像でなくてもいいですが、馴染みが深いので画像を例にしていきます。画像処理では従来から、エッジ処理やぼかし処理と呼ばれる処理が使われてきました。用いることに注意してください。用いる場合には以下のような計算をします。処理が施された後の画像です。簡単のため極端にピクセルの少ない画像を考えます。以下のようにフィルタを掛ける。画像とフィルタにはそれぞれのマスに値が入っており、要素同士の掛け算を行ってから和を取る(積和演算)1つの積和演算から1つの画素が得られるため、今回の場合3×3の処理された画像が得られることとなる。これが空間フィルタリングになりますが、それと同時にほぼ畳み込み層の全容と言えます。出力画像のサイズを調整するために以下の図のようなテクニックを使う場合もあります。本来の画像の周囲に、適当な値を外挿することで擬似的にピクセル数を増やす。これに2×2のフィルタを用いた場合は5×5の画像が得られる。この画像の周囲に値を外挿する処理をパディングと呼び、周囲に0を外挿することを特にゼロパディングと呼びます。仮に4×4の画像に対してフィルタ処理をした際に画像サイズを維持したい場合は、周囲に1マス分のパディング処理を行い6×6に変更し、3×3のフィルタを準備すれば良いです。上記ではフィルタが1マスずつ移動していくことを想定しましたが実際にはフィルタを2マスずつ移動しても構いません。このフィルタの移動の大きさをストライドと言います。通常はストライド1の処理を行いますが、密な情報が不要だと思えばストライドを大きくしても良いでしょう。畳み込み層の全容は上記で述べた空間フィルタに集約されています。通常の画像処理では、どのような空間フィルタに対してどのような処理が対応するのかをしっかりと検討します。ぼかし処理をしたいとか、輪郭強調をしたいとか、何らかの要望があった場合にフィルタはどのような値を配置しておくべきかなどを検討します。畳み込みニューラルネットにおいては、この空間フィルタが学習の対象になります。識別をするという目的があった場合に、その識別に有利になるような空間フィルタを学習で探させるということです。従って、その空間フィルタに具体的に如何なる意味があるのかというのは、予め決めておくものではありません。重要な点は、何も空間フィルタは1つとは限られないということです。ある画像からその動物を当てたいときに、輪郭が重要であったり、色の具合が重要であったりと様々です。それらすべてを考慮して動物を当てればいいのであって、輪郭しか見てはいけないなどというルールはありません。したがって畳み込みニューラルネットワークでは、学習すべきフィルタを予め複数準備しておきます。畳み込みニューラルネットに入力された画像は、それぞれのフィルタ処理を並列に施されるため、例えばフィルタが4枚準備されているのであれば、画像は4枚に増幅されることになります。異なるフィルタを4枚準備し、異なる処理を施した画像を4枚獲得。従って数式としては以下のようになります。追加されていますが、これがフィルタを指定するものです。畳み込み演算に関しては関与していないことに注意してください。ピクセル上を動かすのが畳み込み演算です。数だけあるということです。フィルタの数によって画像の数も決まってくるわけですが、通常これを画像のチャンネル数と表現します。上記の画像では畳み込み層を通過した際のデータのチャンネル数は4であるということです。RGB画像を扱う場合RGB画像の場合、画像は赤色に対応する画素値、緑色に対応する画素値、青色に対応する画素値をそれぞれ独立に考えることができます。1つのRGB画像は、それぞれの色に関する3枚の2次元データを使って表現するということです。言い換えれば、RGB画像のチャンネル数は最初から3であるということです。このような場合には、それぞれのチャンネルに対してフィルタを準備してあげないと行けません。フィルタにもチャンネルという概念を考え、入力のチャンネル数に揃える必要があります。入力がRGBの3チャンネルならば、フィルタも必ずセットで3チャンネルとする。上の図の場合、出てくる画像は1チャンネルであることに注意。上記の図は画像1枚に対してフィルタを1種類準備した例です。チャンネル数が増えたからと言って、それは入力のチャンネル数に合わせただけの話で、上記の図の場合3枚のフィルタで1種類と考えます。従って畳み込みニューラルネットでは、RGBの画像に対して3チャンネルのフィルタを複数種類準備するということを行います。これを見ると画像が「2枚出てきた」と考えるのではなく、「2チャンネル」の1枚の画像が出てきたとも考えることができます。畳み込みニューラルネットでは実際にそのように考えます。フィルタのチャンネル数を合わせる。チャンネルの画像となる。いう変換が行われます。出力層のチャンネル数を、フィルタを何種類準備するかで調整できるということです。通常は、チャンネル数を次第に増やしていき、代わりに画像のサイズを小さくしていきます。最後に数式を見ておきましょう。複数あっても和の計算を行うため、出力では1つのチャンネルに情報が集約されることになります。あることに注意しましょう。つかう場合が多いです。これが畳み込み層の全容となります。新たな画像だと思い、もう一度畳み込み層を準備する(つまり多層化する)ことも可能です(それが可能なように整備されているわけです)。畳み込み層まとめ入力のサイズ、フィルタのサイズによって出力のサイズが変わる。パディング処理、ストライドの変更なので出力サイズを調整できる。空間フィルタを複数種類することで出力画像のチャンネル数を調整できる。1種類の空間フィルタのチャンネル数は入力データに合わせる。学習のパラメータは空間フィルタの係数。分類の方法について分類を如何にして行うのかを考えるのは至ってシンプルです。上記の図の場合、3×3の画像が4枚あります。画素値が3×3×4=36個あるわけですね。分類を行う場合は、あたかもこれらの画像の集まりを36次元ベクトルとみなして、従来同様のニューラルネットワークに接続してしまうのです。画像が10種類に分類可能ならば、36次元ベクトルを10次元に変換する通常のニューラルネットを準備し、出力層にソフトマックス層を準備するという具合です。ソフトマックスは如何なる入力であろうと、出力層がソフトマックスである限り、入力があるクラスに属する確率を出力すると見なすことができます。s0sem0y.hatenablog.comそして学習時にはまずデータを通過させ、ソフトマックス層で確率を出力させます。最初はデタラメの確率となっていますから、正解に近づくようにニューラルネットの結合係数や、畳み込み層における空間フィルタの係数を調整していくことになります。畳込み層は係数が2次元上に配置されており、そのようなフィルタが複数種類あり、しかも1種類のフィルタが複数チャンネルであるため、学習パラメータの数は膨大極まりないです。GPUなしではまともに学習するのは難しいかもしれません。畳み込みニューラルネットにはプーリング層なるものもあります。これはとても簡単です。画像の代表値を抜き出す処理だと言えます。プーリングのサイズを決める。2×2ごとの画素を見ていき、代表値を決めて新たな画像とするのです。有名なマックスプーリングでは、着目領域で最も大きな値の画素値を代表として抜き出します。他にも着目領域の平均値を代表とする平均プーリングなどもあります。この処理は学習などは行わず決め打ちします。この処理を挟むのかというと、例えば着目領域のどこかの部分に高い値が1個でもあればいいという場合において、どこにあるかは問題ではない場合は、返って高い画素数が学習の妨げになる可能性があります。「1」という手書き文字が、画像の真ん中にあろうが左の方にずれていようが構わないはずです。基本的にReLU関数が用いられます。これは画素毎に行われるため、特別解説の必要はないでしょう。各画素値を見て0以上ならばそのまま、負なら0にしてしまうということです。(生画像ならば当然非負値ですが、畳み込みニューラルネットの内部では、フィルタ係数が負を取るために内部で画素値が負になることも考えられます。そのような値はReLUの活性化では0に変更されます。)全体のまとめ今回最も重要だったのは畳み込み層に関することです。畳み込みニューラルネットの豊かさは、この層によって実現されています。フィルタの種類によって出力データのチャンネル数を調整でき、更にフィルタのサイズによってデータのサイズも変更を受けていきます。フィルタのサイズが着目領域の範囲を決定します。ここの部分が最も重要であることは疑いありません。プーリング層はロバスト性を確保するために補助的に導入します。学習のパラメータは含まれておらず表現力には関与しないものの、畳み込みニューラルネットの汎化性能を影で支えている立役者と言えます。活性化関数は多層化に耐えうる単純な構造を持っているReLUが用いられます。他にも様々な工夫が施された活性化関数が提案されていますが、あまり性能差は出ていないようです。本質的に多層化に意味があるというのであれば、活性化関数は誤差逆伝搬法を助けることのできる微分可能かつ単純なものが使われるのが標準になっていくかもしれません。»プロフィール自分が勉強していく上で学んだことなどをまとめていきたいと思います。ML_deepスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。