読者です 読者をやめる 読者になる 読者になる

Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Python DeepLearningに再挑戦 26 ディープラーニング

概要

Python DeepLearningに再挑戦 26 ディープラーニング

参考書籍

よりディープなネットワークへ

  • CNN を実装する。VGGというネットワークを参照にしている。

f:id:riikku:20161227073804p:plain

  • ここで使用する畳み込み層は全て3x3の小さなフィルターで、層が深くなるにつれてチャンネル数が大きくなる。

  • チャンネル数は、16、16、32、32、64、64 と増えていく。

  • また、プーリング層を挿入して中間データの空間サイズを徐々に小さくしていく。

  • 全結合層ではDropoutレイヤを利用する。

  • まとめると以下のような特徴を持つ

・3*3の小さなフィルターによる畳み込み層
・フィルターの数は、16,16,32,32,64,64と増えていく。
・活性化関数は、ReLU
・全結合層の後にDropoutレイヤを使用
・Adamによる重みパラメータの更新
・重みの初期値には、Heの初期値 を使用
  • これを実行すると、99.38%とかになるらしい。すごい!

  • その他の実装などは以下のサイトを参照にすると掲載されているらしい。便利!

Classification datasets results

さらに認識精度を高めるには

  • アンサンブル学習、学習係数の減衰(learning rate decay)、Data Augmentation(データ拡張)などのテクニックを使っている。

  • DataAugmentationは簡単で、認識精度を向上させる上で特に有効らしい。

# DataAugmentationの特徴
・入力画像をアルゴリズムによって人工的に拡張する。
・具体的には、回転や横方向などの微小な変化を与えて、画像の枚数を増やす。
・他にも、部分的な切り抜きや、移動による変形、左右対称、輝度などを変更するなど画像の枚数を増やす。
・これは訓練データが少ない場合に特に有効らしい。

層を深くすることについて

  • 層を深くするにつれて認識性能も向上している場合ような多いかもしれない。
  • 層を深くすることで、フィルターを小さく設定することができるため、結果的にパラメータの設定が少なくて済む。かもしれない。

色々なネットワーク

  • VGG - 特徴は、層が深いところ。フィルターは3x3を使っている。
  • GoogLeNet - 基本的には、CNNだが、ネットワークが縦に深いだけではなく、横にも広がりがある。1x1フィルターを多用するとこも特徴的。
  • ResNet - Microsoftのチームによって開発されたネットワーク。層を深くできる仕掛けが重要。スキップ構造という仕組みで、畳み込み層をスキップして、層を深くしている。

ディープラーニングの高速化

  • 畳み込み層にめっちゃ時間かかってるので、この辺りの処理を高速化することが課題。

  • GPUだと早い。

  • さらに分散学習で、複数のGPUを使うとより高速化が捗る。

  • 演算精度のビット数の削減 - 浮動小数点の細かい数値を表現するのに、結構メモリに負荷がかかる。ニューラルネットワークでは、あまり数値精度のビット数をそこまで必要としていなくて、16ビットとかでもいける。多少ノイズがあっても、ロバスト性のおかげで、精度の高い数値の出力が可能。

具体的なディープラーニングの実用例

  • 物体検出 - R-CNNが有名。最初にオブジェクトらしい領域を探し出して、その領域にCNNを適用して、クラス分類を行う。

f:id:riikku:20161227090202p:plain

これは使えそうやな〜〜!

  • セグメンテーション - ピクセルレベルでクラス分類する。これはすごい!

f:id:riikku:20161227090359p:plain

  • セグメンテーションの方法としては、FCNが有名らしい。Fully Convolutional Network 。

以下論文のリンク。 https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf

これめっちゃ時間かかりそうやな。。。

  • 画像キャプション - 画像を読み取り、その内容をキャプションとして文章で表現する。

  • 画像キャプションは、NIC (Neural Image Caption) と呼ばれるモデルで、CNN+RNNで処理をする方法が有名。

画像生成

  • DOGAN(Deep Convolutional Generative Adversarial Network)という方法が有名。

  • DOGANは、Generatorと、Discriminaterと呼ばれる2つのニューラルネットワークを利用する。

  • Generatorが画像を生成して、Discriminaterがそれを本物の画像かどうかを判断して、切磋琢磨して、本物に近い画像を生成するという手法。

  • DOGANは、教師なし学習。今までのは、教師あり学習(正解と、正解のデータがある)。

強化学習

  • Deep Q networkという手法が有名。alphagoで有名。

  • 強化学習では、エージェントが行動し、環境が変わり、それによって、報酬を得るという仕組み。

  • 報酬は、見込み報酬から逆算して決める。最終的な目的(マリオだったら、ゴールした時のスコアなど)から逆算して、その行動(マリオを右に動かす等)の報酬を決定する。

  • これは確かに面白いかもな〜、すげー難しそうだけど。