深層学習の世界:画像認識と畳み込み (CNN)

「AIの基礎:探索から機械学習まで」のレッスン 13 / 15・約6分

層を重ねるディープラーニング、画像認識に強い畳み込みニューラルネットワーク(CNN)、時系列を扱うRNNを学ぶレッスンです。

このレッスンで学ぶこと

  • 重ねると何が変わるか
  • 画像を見分ける仕組み

レッスンの内容

写真アプリに届くのは数字だけ

スマホで「猫」と検索すると、写真が並びますよね。でもAIに届くのは、明るさを表す0〜255の数字だけです。

この数字の山から猫を見抜くカギは、計算を何段も重ねることにあります。

1本の線では分けられない

4つの点を青と赤に分けてみましょう。直線1本で何個まで分けられるか、もう1段重ねるとどうなるか比べます。

間に挟んだ層の名前

線1本では3個までしか合わなかった4つの点も、層を1段挟むと分けられました。入力と出力の間のこの層を隠れ層といいます。

隠れ層を何段も重ねて学ばせる方法がディープラーニングです。

線1本ではどう引いても青と赤に分けられない4つの点があります。ニューラルネットワークで分けるには、どうすればよいでしょう?

問題:線1本ではどう引いても青と赤に分けられない4つの点があります。ニューラルネットワークで分けるには、どうすればよいでしょう?

  1. 入力と出力の間に、隠れ層を1段足す(正解)
  2. 点を8つに増やして、線を引き直す
  3. 線を90度回して、もう一度引く

解説:1本の直線は平面を2つに切るだけです。隠れ層を挟むと複数の線を組み合わせられるので、4つの点を正しく分けられます。

1列に並べると失うもの

手書き画像は28×28で784個の画素です。128個の層につなぐと重みは約10万個になります。

しかも1列に並べると、隣り合っていた関係が消えてしまいます。

小さな窓をずらして読む

そこで、3×3のフィルターを1マスずつずらし、重なる9個に重みをかけて足します。

これが畳み込みです。隣り合う関係がそのまま残ります。

784個の画素を1列に並べると失われ、3×3のフィルターを1マスずつずらす畳み込みなら残せるものはどれでしょう?

問題:784個の画素を1列に並べると失われ、3×3のフィルターを1マスずつずらす畳み込みなら残せるものはどれでしょう?

  1. どの画素が、どの画素と隣り合っていたか(正解)
  2. 画像全体でいちばん明るい画素の値
  3. 784個の画素の明るさの合計

解説:28×28の画像を1列に並べると、上下の画素が28個も離れてしまいます。3×3の窓で近くの9個をまとめて見れば、隣どうしの関係を保ったまま特徴を拾えます。

境目でだけ光るフィルター

輪郭を見つけるフィルターは、中央が8で周りの8マスが−1です。

同じ明るさならちょうど0になり、境目でだけ大きな値になります。

4マスから1つだけ残す

畳み込みの結果を2×2のマスごとに区切り、いちばん大きい値だけを残します。これがプーリングです。

4×4の表は2×2に縮み、特徴が少しずれても残る値はほぼ変わりません。

○か✕か

○か✕か:2×2のマスごとに最大値だけを残すプーリングでは、特徴が同じマスの中で1マスずれると、残る値も変わる。

答え:✕。残るのは最大値なので同じ2×2内なら値は同じです。縮めるだけでなく小さなずれにも強くなります。

重ねるほど、形が見えてくる

畳み込みとプーリングを繰り返し、最後に普通の層で0〜9のどれかを決める。これが畳み込みニューラルネットワークです。

1回目は線や曲線を、2回目はそれを組み合わせた形を拾います。

○か✕か

○か✕か:畳み込みニューラルネットワークで、最初の畳み込みが拾うのは「目」や「耳」のようなまとまった形だ。

答え:✕。最初のフィルターが見るのは3×3の小さな範囲なので、見つけられるのは線や曲線だけです。縮めて再度畳み込むことで、複雑な形が見えてきます。

わざと休ませて、丸暗記を防ぐ

重みの多いネットワークほど、練習用データを丸暗記する過学習が起きやすくなります。

そこで学習のたびに一部を休ませ、1つに頼れなくします。これがドロップアウトで、CS50の例では毎回半分です。

手書き数字のネットワークが、訓練用の字はほぼ全問当たるのに、新しい字ではよく外します。学習中にニューロンをランダムに休ませる狙いはどれでしょう?

問題:手書き数字のネットワークが、訓練用の字はほぼ全問当たるのに、新しい字ではよく外します。学習中にニューロンをランダムに休ませる狙いはどれでしょう?

  1. 特定のニューロンに頼らず、どれが欠けても当たるようにする(正解)
  2. 休ませた分だけ計算を減らし、学習を早く終わらせるようにする
  3. 休ませたニューロンを消して、網を小さく作り直すようにする

解説:休むニューロンが毎回変わるため、1つに頼った丸暗記ができません。どれが欠けても正解できる覚え方なら、初めて見る数字にも対応できます。

出力を、次の入力に戻す

ここまでの仕組みは一方通行でした。再帰型ニューラルネットワークは、自分の出力を次の入力に巡らせます。

だから1枚の写真から「犬が」「芝生を」「走る」と、言葉を順番に出力できます。

ペアを見つけよう

数字から線を拾い、丸暗記を防ぎ、言葉を順に出す仕組みまで整理できました。

数字の山から、猫を見抜く

  • 画像は明るさの数字。1列に並べると位置関係が消えてしまう
  • 3×3のフィルターをずらす畳み込みで、線や境目を抜き出す
  • 2×2から最大値を残すプーリングで縮め、繰り返すと線が形になる
  • ドロップアウトで丸暗記を防ぎ、再帰型で順番のあるデータも扱う

AIが手書きの「3」の画像を、784個の明るさの数字から見分けます。畳み込みニューラルネットワークがしている流れはどれでしょう?

問題:AIが手書きの「3」の画像を、784個の明るさの数字から見分けます。畳み込みニューラルネットワークがしている流れはどれでしょう?

  1. 小さなフィルターで線を拾い、縮めながら重ねて形にまとめる(正解)
  2. 784個の数字を1列に並べ、覚えた画像と1つずつ照らし合わせる
  3. いちばん明るい画素の位置を探し、その場所から数字を決める

解説:3×3の窓で線を拾い、プーリングで縮めながら重ねることで「3」の形を認識します。お疲れ様でした。次は文章を小さく区切り、言葉を計算する仕組みを見ていきましょう。

用語

過学習(Overfitting)
丸暗記して新しいデータに弱い状態。
隠れ層(Hidden layer)
入力と出力の間で、特徴を組み合わせ直す層。
畳み込み(Convolution)
フィルターをずらし特徴を計算する処理。
フィルター(Filter / kernel)
3×3などの小さな重みの表。画像に重ねて特定の特徴を検出します。
プーリング(Pooling)
2×2などの範囲ごとに最大値だけを残し、画像を小さくする操作。
ドロップアウト(Dropout)
学習時に一部のニューロンをランダムに休み、一部に頼りきるのを防ぐ方法。
ディープラーニング(Deep learning)
隠れ層を何段も重ねて学習させる技術。
再帰型ニューラルネットワーク(Recurrent neural network (RNN))
出力を自分の次の入力に戻すネットワーク。文章や音声のように順番のあるデータを1つずつ扱える。
畳み込みニューラルネットワーク(Convolutional neural network (CNN))
畳み込みとプーリングを重ねて画像の特徴を捉え、何が写っているか判定する仕組み。