5-2-1 畳み込み層とは何か

前の章で見た全結合層は、入ってきた情報をすべてまとめて受け取る層でした。
それは、たくさんの材料を一度に机の上へ広げて、全体を見ながら判断するようなやり方です。
けれど、画像のようなデータでは、いつも「全部を一度に見る」方法がよいとは限りません。
なぜなら、画像では「近くにある情報どうしの関係」がとても大切だからです。

たとえば、人の顔を見るとき。
私たちは最初から
・画面の左上の色
・右下の色
・中央の輪郭
を全部バラバラに見ているわけではありません。

まずは、
・ここに目のような形がある
・ここに鼻のような線がある
・ここに口のような輪郭がある
というふうに、近くにまとまった部分を見ています。
この「部分を見ながら特徴を見つける」しくみが、畳み込み層です。

ここで、一枚の大きな絵を見ている場面を想像してみてください。
でも、その絵はとても大きくて、細かい模様や輪郭がたくさん描きこまれています。
そこであなたは、一度に全部を見ようとするのではなく、小さな虫めがねを手に取ります。

その虫めがねを絵の上に置いて、
・この部分には縦の線がある
・ここには角がある
・ここには模様の変化がある
というふうに、少しずつ観察していきます。
そして虫めがねを少し横へ、少し下へと動かしながら、絵全体を順番に見ていく。
畳み込み層がしていることは、これにとてもよく似ています。

カーネル(フィルタ)

このときの虫めがねにあたるのが、カーネルまたはフィルタと呼ばれるものです。
カーネルは、画像の小さな部分を見て、「ここにどんな特徴があるか」を調べるための、小さな窓のようなものです。

たとえば、
・縦の線を見つけやすいカーネル
・横の線を見つけやすいカーネル
・輪郭の変化を見つけやすいカーネル
などがあります。
虫めがねのレンズに「こういう模様を探したい」という癖がついているようなものだと思ってもいいです。
そして、このカーネルを画像の上で少しずつ動かしながら、どこにどんな特徴があるかを調べていきます。
この計算が畳み込み操作です。

畳み込み操作

「畳み込み」という言葉は少し難しく聞こえるけれど、ここではまず、小さな窓を画像の上で動かしながら、特徴を見つける計算と思っておけば大丈夫です。
虫めがねを絵の上に置いて、「この場所には知りたい特徴がどれくらいあるか」を確かめるのです。

次に少しずらして、また確かめる。
また少しずらして、もう一度見る。

こうして画像全体を順番に見ていくのが、畳み込み操作です。

特徴マップ

では、虫めがねで見た結果はどうなるのでしょうか。

たとえば、
・この場所には強い縦線がある
・この場所にはあまり特徴がない
・ここには輪郭の変化が大きい
というような情報が、画像の場所ごとに並んでいきます。
この「どこにどんな特徴があったか」をまとめた地図のようなものを、特徴マップ(feature map)と呼びます。

つまり特徴マップとは、画像のどの場所に、探している特徴が見つかったかを表した地図のようなものです。
虫めがねで絵を見て、「ここに星の模様があった」「ここにはなかった」と印をつけていくイメージに近いです。

全結合層との違い

ここで、全結合層との違いを整理してみましょう。
全結合層は、画像の情報を一度に全部受け取って、まとめて判断しようとする層でした。
それに対して畳み込み層は、画像の一部分ずつを見ながら、そこにある特徴を見つけていく層です。

たとえるなら、
・全結合層→ 絵を遠くから一気に見る
・畳み込み層→ 虫めがねで少しずつ見ていく
という違いがあります。

画像では、「目の形」「輪郭」「模様」など、局所的な特徴がとても大切です。
だから、全部をまとめて見る前に、まずは部分ごとの特徴を拾い上げる畳み込み層が役立つのです。

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

ここまで見てきたように、畳み込み層は、画像の一部分ずつを見ながら、そこにある特徴を見つけていく層でした。
では、その畳み込み層を使って画像認識を行うネットワーク全体は、どのような仕組みになっているのでしょうか。

その代表的なものが、畳み込みニューラルネットワークCNN:Convolutional Neural Network)です。

CNNとは何か

CNNは、画像の中から特徴を少しずつ見つけていくことが得意なニューラルネットワークです。
普通の全結合層だけでも画像を扱うことはできます。
けれど、画像はとても情報量が多く、しかも「近くにある画素どうしの関係」が大切です。

たとえば、人の顔を見るときも、
・ここに線がある
・ここに丸みがある
・目と目がこのくらい離れている
・鼻の下に口がある
といった、位置関係を含んだ特徴が重要になります。

CNNは、こうした画像の特徴を、部分から順番に見つけていくように設計されたネットワークです。

まずは小さな特徴を見つける

CNNは、最初から「これは猫です」「これは犬です」と判断しているわけではありません。
まずはもっと小さな特徴から見つけていきます。

たとえば最初の畳み込み層では、
・縦の線
・横の線
・角
・明るさの変化
といった、ごく基本的な特徴を拾います。

これは、絵を虫めがねで見ながら「ここに線がある」「ここに輪郭がある」と印をつけていく作業に近いです。

層を重ねると、もっと複雑な特徴が見える

CNNの面白いところは、畳み込み層を何段も重ねられるところです。
すると、下の層で見つけた小さな特徴をもとにして、上の層ではもっと複雑な特徴が見つかるようになります。

たとえば、
・最初の層:線や角
・次の層:目のような形、耳のような形
・さらに上の層:顔全体、動物らしい配置
というふうに、
単純な特徴から複雑な特徴へ、少しずつ理解が深くなっていきます。
つまりCNNは、小さな手がかりを積み重ねながら、全体の意味へ近づいていくネットワークなのです。

CNNの基本的な流れ

CNNは、ざっくり言うと次のような流れで動きます。

1 畳み込み層で画像の特徴を見つける
2 プーリング層で特徴を整理して重要な情報を残す
3 何層か重ねながら、より複雑な特徴を学ぶ
4 最後に全結合層などで総合的に判断する

つまり、
最初は「部分」を見る
だんだん「まとまり」を見る
最後に「全体として何か」を判断する
という流れです。

これは、人が何かを認識するときにも少し似ています。
最初から全体を一瞬で理解しているように見えて、実は細かな特徴をたくさん拾いながら、頭の中で意味を組み立てているのかもしれません。

全結合層との違い

ここで、前の章の全結合層との違いを、もう一度整理してみます。
全結合層は、入ってきた情報をすべてまとめて受け取り、総合的な判断をするのが得意です。
一方、CNNは、その前段階として、画像の中のどこに、どんな特徴があるかを順番に見つけるのが得意です。

たとえるなら、

全結合層→ いきなり感想を書く人
CNN→ まず細部を観察してから全体を理解する人

という違いがあります。

画像のようなデータでは、いきなり全部をまとめて見るよりも、まずは部分を丁寧に見たほうが理解しやすい。
だからCNNは、画像認識で大きな力を発揮するのです。

CNNはどんな場面で使われるのか

CNNは特に、画像を扱うタスクで広く使われています。
たとえば、
・手書き文字認識
・顔認識
・医療画像の診断支援
・自動運転における物体認識
・写真の分類
などです。

また、画像だけでなく、音声や時系列データのように「近くにある情報のつながり」が大事なデータにも応用されることがあります。
つまりCNNは、近くにある情報のまとまりをうまく捉えたいときに力を発揮するネットワークなのです。

なぜCNNが重要なのか

CNNが重要なのは、画像認識の性能を大きく高めたからです。
もし画像を全部そのまま全結合層に入れようとすると、パラメータ数がとても多くなり、計算も重くなってしまいます。
でもCNNでは、同じカーネルを画像のいろいろな場所に使い回しながら、部分的な特徴を効率よく取り出すことができます。

そのため、
・パラメータ数を抑えられる
・画像の特徴を見つけやすい
・位置関係を活かしやすい
という利点があります。

つまりCNNは、画像というデータの性質に合った方法で考えるネットワークなのです。

CNNは「部分から全体へ」理解する

CNNの考え方を一言でまとめるなら、部分から全体へ理解していくということです。
最初は線や輪郭のような小さな特徴しか見えない。でもそれを積み重ねていくことで、やがて「目」や「耳」や「顔」といった大きな意味が見えてくる。
これは、物語を読むときにも少し似ています。
最初は一つひとつの言葉や場面しか見えない。けれど読み進めるうちに、人物の関係や物語全体の流れがわかってくる。
CNNもまた、小さな断片から始めて、少しずつ大きな意味へたどり着く仕組みなのです。

next ▶ 畳み込み層の動かし方