Site Overlay

機械学習は楽しい! Part 3: Deep Learning and Convolutional Neural Networks

この種のニューラルネットワークは、最新のラップトップで数分以内に学習させることができます。 それが終われば、「8」の絵をかなり高い精度で認識できるニューラルネットワークができあがります。 1980 年代後半の)画像認識の世界へようこそ!

Tunnel Vision

ニューラルネットワークにピクセルを入力するだけで、実際に画像認識を構築できたのは本当に素晴らしいことです。 機械学習は魔法だ! 5069>

もちろん、そんなに簡単なことではありません。

まず、良いニュースとして、私たちの「8」認識器は、文字が画像のちょうど真ん中にあるような単純な画像で本当にうまく機能することが挙げられます。

しかし、本当に悪いニュースは、

文字が画像の中央に完全に位置していない場合、「8」の認識機能はまったく動作しない、ということです。 わずかな位置の変化ですべてが台無しです。

これは、ネットワークが完全に中央にある「8」のパターンしか学習しなかったからです。 中心がずれている「8」が何であるかは、まったくわかりません。 5069>

これは現実の世界ではあまり役に立ちません。 実世界の問題は、それほどきれいで単純ではありません。 5069>

Brute Force Idea #1: Sliding Window で検索する

私たちはすでに、イメージの中心にある「8」を見つけるための非常に優れたプログラムを作成しました。 5069>

このアプローチはスライドウィンドウと呼ばれています。 これは、ブルートフォース・ソリューションです。 限られたケースではうまくいくのですが、実に非効率的です。 同じ画像を何度もチェックし、異なるサイズのオブジェクトを探さなければならないのです。 5069>

Brute Force Idea #2: More data and a Deep Neural Net

私たちがネットワークを訓練したとき、完全に中央にある「8」だけを表示しました。 5069>

新しい学習データを収集する必要さえありません。 画像内のさまざまな位置に「8」がある新しい画像を生成するスクリプトを書くだけです。

すでにある学習画像の異なるバージョンを作成し、合成学習データを作成しました。 これは非常に便利なテクニックです!

このテクニックを使用すると、簡単に無限の学習データを作成できます。

データが増えると、ニューラルネットワークが問題を解くのは難しくなりますが、ネットワークを大きくして、より複雑なパターンを学習できるようにすることでそれを補うことができます。

ネットワークを大きくするには、ノードを何層にも積み重ねるだけです。

従来のニューラルネットワークより層数が多いことから、これを「深いニューラルネットワーク」と呼んでいます。 しかし、最近まで、これほど大規模なニューラルネットワークのトレーニングは、遅すぎて役に立ちませんでした。 しかし、通常のコンピューター プロセッサーの代わりに 3d グラフィック カード (行列の乗算を非常に高速に行うように設計されている) を使用する方法を発見すると、大規模なニューラル ネットワークでの作業が突然実用化されたのです。 実際、オーバーウォッチをプレイするために使用するのとまったく同じ NVIDIA GeForce GTX 1080 ビデオ カードは、ニューラルネットワークを信じられないほど迅速にトレーニングするために使用することができます。 ニューラル ネットワークに画像を処理する方法について、より賢くなる必要があります。 写真の上部にある「8」を認識するようにネットワークを訓練することと、写真の下部にある「8」を認識するようにネットワークを訓練することを、あたかもそれらが 2 つのまったく異なるオブジェクトであるかのように別々に行うことは意味がありません。

余分な訓練なしに、写真のどこに「8」があっても同じものだと認識できるほどニューラルネットワークを賢くする方法があるはずです。 幸いにも…あります!

解決策はコンボリューション

人間であれば、絵には階層構造または概念構造があることを直観的に知っています。 この絵について考えてみましょう。

Gratuitous picture of my son

人間として、この絵に階層があることを即座に理解することができるのです。

  • 地面は草とコンクリートで覆われている
  • 子供がいる
  • 子供は弾む馬に座っている
  • 弾む馬は草の上にある

最も重要なことは、子供がどんな表面にいても子供の考えを認識することである。 子供が現れる可能性のあるすべての表面について、子供という概念を再学習する必要はありません。

しかし、今のところ、私たちのニューラルネットワークはこれを行うことができません。 画像の別の場所にある「8」をまったく別のものだと考えてしまうのです。 画像内のオブジェクトを移動させても、それが別のものになるわけではないことを理解していません。 つまり、あらゆる位置でそれぞれの物体の識別を再学習しなければならないのです。 これは最悪です。

私たちは、写真のどこに表示されても「8」は「8」であるという、並進不変性をニューラルネットワークに理解させる必要があります。 コンボリューションのアイデアは、コンピュータ サイエンスと生物学からヒントを得たものです (つまり、マッド サイエンティストが、猫が画像を処理する方法を解明するために、奇妙なプローブで猫の脳を文字通りつつくなど)。

以下、順を追って説明します。

ステップ 1: 画像をオーバーラップする画像タイルに分割する

上記のスライドウィンドウ検索と同様に、スライドウィンドウを元の画像全体に渡し、それぞれの結果を個別の小さな画像タイルとして保存することにしましょう。

このようにして、元の画像を 77 の等サイズの小さな画像タイルに変えました。

ステップ 2: 各イメージ タイルを小さなニューラルネットワークにフィードする

先に、1 つのイメージをニューラルネットワークにフィードし、それが「8」であるかどうかを確認しました。 ここではまったく同じことを行いますが、個々のイメージ タイルに対して行います。

これを 77 回、それぞれのタイルに対して 1 回ずつ繰り返します。

ただし、ひとつ大きな工夫があります。同じ元画像のすべてのタイルについて、同じニューラルネットワークの重みを維持するのです。 言い換えれば、すべての画像タイルを平等に扱うということです。 5069>

ステップ 3: 各タイルからの結果を新しい配列に保存する

元のタイルの配置を見失わないようにするためです。 そこで、各タイルを処理した結果を、元の画像と同じ配置のグリッドに保存します。 5069>

つまり、大きな画像から始めて、元の画像のどの部分が最も興味深いかを記録した少し小さな配列で終了しました。

ステップ 4: ダウンサンプリング

ステップ 3 の結果は、元の画像のどの部分が最も興味深いかをマッピングする配列でした。

配列のサイズを縮小するために、最大プーリングというアルゴリズムを使ってダウンサンプリングします。 派手なように聞こえますが、まったく違います!

私たちは配列の各 2×2 平方を見て、最大の数字を維持します。

ここで考えられることは、各 2×2 グリッド平方を構成する 4 つの入力タイルのいずれかで何か興味深いものが見つかったら、最も興味深いビットだけを残すということです。 これにより、最も重要なビットを維持しながら配列のサイズを小さくすることができます。

最後のステップ。 予測を行う

ここまでで、私たちは巨大なイメージをかなり小さな配列に縮小してきました。 その配列は単なる数字の束なので、その小さな配列を別のニューラルネットワークの入力として使用することができます。 この最終的なニューラルネットワークは、画像が一致するかしないかを決定します。 畳み込みのステップと区別するために、これを「完全連結」ネットワークと呼びます。

つまり、最初から最後まで、5 つのステップのパイプライン全体は次のようになります:

Add Even More Steps

画像処理パイプラインは一連のステップである、畳み込み、最大プール、最後に全連結ネットワークです。

現実の世界で問題を解決する場合、これらのステップは何度でも組み合わせたり重ねたりすることができます! 2層、3層、あるいは10層の畳み込み層を持つことができます。 データ サイズを小さくするために、好きなところで最大プーリングを行うことができます。 例えば、最初の畳み込みステップではシャープ エッジの認識を学習し、2 番目の畳み込みステップではシャープ エッジの知識を使用してくちばしを認識し、3 番目のステップではくちばしの知識を使用して鳥全体を認識するなど、畳み込みステップを増やすほど、ネットワークはより複雑な特徴を認識するように学習することができるようになります。

以下は、より現実的な深層畳み込みネットワーク (研究論文にあるようなもの) の例です:

この場合、224 x 224 ピクセルのイメージから始めて、2 回畳み込みを適用してマックス プーリングを行い、もう 3 回畳み込みを適用、マックス プーリング、2 層の完全接続を持ちます。 最終結果は、画像が 1000 のカテゴリの 1 つに分類されることです!

正しいネットワークの構築

では、画像分類器を機能させるために、どのステップを組み合わせる必要があるか、どのようにして知ることができますか?

正直に言うと、多くの実験とテストをして、これに答える必要があります。 解決しようとしている問題に最適な構造とパラメータを見つける前に、100 のネットワークを訓練する必要があるかもしれません。 機械学習には多くの試行錯誤が必要です!

Building our Bird Classifier

さて、ついに、写真が鳥かどうかを判断するプログラムを書くのに十分な知識が得られました。 無料の CIFAR10 データセットには、6,000 枚の鳥の写真と 52,000 枚の鳥でないものの写真が含まれています。 さらに、Caltech-UCSD Birds-200-2011 データセットには、さらに 12,000 枚の鳥の写真があります。

ここで、私たちの結合データセットからいくつかの鳥を紹介します。

コメントを残す

メールアドレスが公開されることはありません。