畳み込みニューラルネットワーク
認識しにくい入力データの解決策のひとつはスライディングウィンドウ
前回のコラムで、手書きの数字を認識する方法を紹介しました。十分なデータを学習することで、高い認識率を得ることができました。
しかし、ひとつ問題があります。下図のように入力データがあまりうまく準備されていない場合、例えばその数字が画像のどこかにあり、必ずしも中央にないなどのときは、どうなるでしょう。前回のコラムで紹介したコードで、正しい数値を返せると考える人もいるかもしれません。しかしながら実際は、単に数値を認識できません。
この問題の解決策はいくつかあります。解決策のひとつとして、下図のようにスライディングウィンドウを選択し、数字を見つけたかどうかを何度もやり直すことです。この方法は、いくつかの状況では機能しますが、あまり効果はありません。
入力データを増やすのも、ひとつの方法です。画像の中の数字の位置とサイズの変化で、新しい入力データを作成します。その新しいデータでニューラルネットワークを学習します。この場合、数字を正しく認識することの複雑さを解消するために、いくつかの隠れレイヤーを使って通常より深いニューラルネットワークを作成します。しかし、これは依然として強引な方法であり、認識プロセスの翻訳の独立性を認識していません。
畳み込みニューラルネットワークは識別部位の位置にかかわらず学習が可能
人間は、背景や無関係な部分から画像の重要な部分を認識するのに優れています。下図ようなイメージを見ると、私たちはすぐに小さな子供を認識します。小さな子供はバックグラウンドから独立しています。
前回までのコラムで紹介した「ニューラルネットワーク」は、各層のニューロンが全て繋がっていました。認識したいオブジェクトの位置は関係なく、画像全体を学習していました。畳み込みニューラルネットワークは、識別部位の位置にかかわらず学習できるようにする方法です。上の写真を用いて取り組み方を説明します。
畳み込みニューラルネットワークの取り組み方
上記のスライディングウィンドウと同様に、イメージをより小さく、隣接するタイル同士が少しずつ重なりあうように分割(オーバーラップタイル)します。ここでは77個の小さな画像にしています。
2. 各タイル出力を同じニューラルネットワークで計算する
ひとつずつのタイルを同じニューラルネットワークで確認します。このニューラルネットワークは、いくつかの特性を決定します。数字認識の場合、それは数字分類です。顔認識の場合、もう少し複雑な特性、例えばエイジ認識です。
ここで重要な点は、タイルごとに重みの変更がない同じニューラルネットワークを使用することです。
3. 出力値を大きな行列に集める
画像内の位置に関する情報を失わないよう、各タイルの最初のニューラルネットワークからの出力を、入力タイルと同じレイアウトの行列に結合します。
4. Max Pooling
まだデータ量が多いので、出力を隣接するタイルのブロックにグループ化し、各ブロックの最大(可能性が高い)値を選択して縮小(ダウンサンプリング)します。これは利用可能な情報を、最も特徴のある可能性が高いビット部分として抽出しています。
5. 新しい行列を使用して予測を行う
ここまでで、興味深い部分に何らかの形で焦点を当てながら、大きな画像をより小さなマトリックスに縮小しました。ニューラルネットワークに、この新しい行列を与えて何度か[1]から[5]を繰り返した後に、予測を行います。
可能性にあふれる畳み込みニューラルネットワーク
Image by Xianjie Chen and Alan Yuille,
Articulated Pose Estimation by a Graphical Model with Image Dependent Pairwise Relations
現実的な畳み込みニューラルネットワークには、より多くのステップがあり、優れた認識率を達成するためのダウンサンプリングやその他の操作による畳み込みを繰り返します。
ブラウザで実行されている畳み込みニューラルネットワークの例は、こちらで紹介しています。とくに中間ステップが可視化されているMNISTの手書き数字表現を見てみましょう:MNISTデモ
畳み込みニューラルネットワークの技術は、画像認識から自然言語処理まで幅広い分野で成功を収めており、最も強力な機械学習手法のひとつです。
■関連ページ
【アクセリアのサービス一覧】
・サービスNAVI
サービスにご興味をお持ちの方は
お気軽にお問い合わせください。
Webからお問い合わせ
お問い合わせお電話からお問い合わせ
平日09:30 〜 18:00
Free Service