深層学習の世界:画像認識と畳み込み (CNN)
「AIの基礎:探索から機械学習まで」のレッスン 13 / 15・約6分
層を重ねるディープラーニング、画像認識に強い畳み込みニューラルネットワーク(CNN)、時系列を扱うRNNを学ぶレッスンです。
このレッスンで学ぶこと
- 重ねると何が変わるか
- 画像を見分ける仕組み
レッスンの内容
写真アプリに届くのは数字だけ
スマホで「猫」と検索すると、写真が並びますよね。でもAIに届くのは、明るさを表す0〜255の数字だけです。
この数字の山から猫を見抜くカギは、計算を何段も重ねることにあります。
1本の線では分けられない
4つの点を青と赤に分けてみましょう。直線1本で何個まで分けられるか、もう1段重ねるとどうなるか比べます。
間に挟んだ層の名前
線1本では3個までしか合わなかった4つの点も、層を1段挟むと分けられました。入力と出力の間のこの層を隠れ層といいます。
隠れ層を何段も重ねて学ばせる方法がディープラーニングです。
線1本ではどう引いても青と赤に分けられない4つの点があります。ニューラルネットワークで分けるには、どうすればよいでしょう?
問題:線1本ではどう引いても青と赤に分けられない4つの点があります。ニューラルネットワークで分けるには、どうすればよいでしょう?
- 入力と出力の間に、隠れ層を1段足す(正解)
- 点を8つに増やして、線を引き直す
- 線を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マスずつずらす畳み込みなら残せるものはどれでしょう?
- どの画素が、どの画素と隣り合っていたか(正解)
- 画像全体でいちばん明るい画素の値
- 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つに頼った丸暗記ができません。どれが欠けても正解できる覚え方なら、初めて見る数字にも対応できます。
出力を、次の入力に戻す
ここまでの仕組みは一方通行でした。再帰型ニューラルネットワークは、自分の出力を次の入力に巡らせます。
だから1枚の写真から「犬が」「芝生を」「走る」と、言葉を順番に出力できます。
ペアを見つけよう
数字から線を拾い、丸暗記を防ぎ、言葉を順に出す仕組みまで整理できました。
数字の山から、猫を見抜く
- 画像は明るさの数字。1列に並べると位置関係が消えてしまう
- 3×3のフィルターをずらす畳み込みで、線や境目を抜き出す
- 2×2から最大値を残すプーリングで縮め、繰り返すと線が形になる
- ドロップアウトで丸暗記を防ぎ、再帰型で順番のあるデータも扱う
AIが手書きの「3」の画像を、784個の明るさの数字から見分けます。畳み込みニューラルネットワークがしている流れはどれでしょう?
問題:AIが手書きの「3」の画像を、784個の明るさの数字から見分けます。畳み込みニューラルネットワークがしている流れはどれでしょう?
- 小さなフィルターで線を拾い、縮めながら重ねて形にまとめる(正解)
- 784個の数字を1列に並べ、覚えた画像と1つずつ照らし合わせる
- いちばん明るい画素の位置を探し、その場所から数字を決める
解説: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))
- 畳み込みとプーリングを重ねて画像の特徴を捉え、何が写っているか判定する仕組み。