この記事はゼロから作るDeep Learning7章の一部の内容について、自分自身の学習後のまとめとして書いています。
今まではニューロンが全結合したニューラルネットワークについて扱ってきましたが、ここからは畳み込みのニューラルネットワークの実装について学んでいきます。
そこで、多くの人が疑問に思うところが、
「なんでわざわざ畳み込みニューラルネットワークを学ぶの?今までのニューラルネットワークじゃダメなの?」
というところ、
僕も思いました。
しかし、畳み込みにすることでメリットがあります。
今までのニューラルネットワークでは一つの画像の配列を1次元に変換してからニューラルネットワークに入力を行なっていました。
この1次元にすることに問題があります。
この問題とはズバリ、「データの形状が無視されてしまう」ということです。
一般に画像データというものは空間的に近いピクセル同士が似たような値をとるはずなんです。
具体的にいうと、木の画像などを扱う時に葉っぱを表している部分は局所的に緑の色が集中するはずです。
しかし、これを1次元に直してしまうと近くのピクセル同士の関連性を壊してしまいます。
だから、畳み込みニューラルネットワークを学ぶんです。
畳み込みニューラルネットワークは画像データを3次元や4次元の構造のままニューラルネットワークに入力することができるんです!
では、具体的にどのようなレイヤを入れることで今までのニューラルネットワークとの違いが生まれているかというと、それは「畳み込み層(Convolutionレイヤ)」と「プーリング層(Poolingレイヤ)」です。
今までのニューラルネットワークでは「Affineレイヤ」と「ReLUレイヤ」を組み合わせることで層を作っていましたが、
畳み込みニューラルネットワークでは「Convolutionレイア」→「ReLUレイヤ」→「Poolingレイヤ」(Poolingレイヤは省略されることもある。)で層を作っています。
各層で行われている演算のまとめは次回まとめていこうと思います。