2017/07/30

2017年 DeepLearning用のGPUの選び方

いきなりまとめ


メーカーはNVIDIA一択。

全般的なオススメ。
  • GTX 1080 Ti(11GB)
  • GTX 1080(8GB)
  • GTX 1070(8GB)

入門用
  •  GTX 1060(6GB)

Today I Learned


Which GPU(s) to Get for Deep Learning: My Experience and Advice for Using GPUs in Deep Learning
を参考に。


マルチGPUの必要性

 

・並列化

NNをマルチGPUで効率的に並列化するのはとても難しい。

大規模なNNに対して恩恵は得られない。
小規模なNNは多少効率的。

・ライブラリ対応

DeepLearning用ライブラリでマルチGPUに対応しているものは少ない。
MSのCNTKはコア数に対してリニアに速度向上を期待できる。
次点はPytorch。
これらは1マシン最大4コアに対応し3.6-3.8倍の速度向上を期待できる。
Tensorflowは2-3倍。
Thernoは論外。

・並列化以外の可能性

並列化以外のマルチGPUの利点はGPUごとにアルゴリズムをテストできること。
モデル開発を加速できる。
リサーチの経験から言うと、big oneよりmany small GPUsが好み。


ハード選択


・メーカー選択

NVIDIA一択。
NVIDIAのライブラリはDLライブラリを作るのに便利。
AMDのOpenCLにはDL向けの良いライブラリがない。
将来出るとしてもCUDAの巨大なGPGPUコミュニティの利便性には敵わない。
IntelのXeon Phiはストレスマックス。

・スペック選択

一番重要なのはメモリの帯域。
同一のアーキテクチャ内ではメモリ帯域の比較は可能。
異なるアーキテクチャでは直接的には比較不可能。
だが大まかな目安にはなる 。

次に重要なのがアーキテクチャ。
kepler以降じゃないとcuDNNに対応していない。
しかしkeplerは遅いためmaxwellもしくはpascal。

モデルのサイズも重要。
上位GPUは大規模ANNでないとパフォーマンスを発揮できない。

・オススメのGPU

全般的なオススメ
  • GTX 1080 Ti(11GB)
  • GTX 1080(8GB)
  • GTX 1070(8GB)
GTX 980 Ti(6GB)買うくらいならこれらが良い。
メモリ8Gは少なく見えるが実際のところ十分以上。

入門用
  •  GTX 1060(6GB)
ただしメモリ3GBはダメ。
GTX 1060はTitan Xよりは遅いがコスパではGTX980に匹敵。

・各製品のポジション

GTX 1060 GTX 1050 Tiは初心者向け。
GTX 1070 GTX 1080はベンチャー、リサーチャー、企業向け。
GTX 1080 Tiはハイエンド向け。
Titan Xpはコスパが悪くお勧めできない。
GTX 1080 Tiの方が良い。
どうしてもメモリが欲しいcomputer vision researcher向け。

GTX Titan X (Maxwell)持ちなら次を待て。
12GBのメモリがどうしても欲しいならGTX Titan X (Maxwell)をeBayで買うのもよい。
が、ほとんどの研究者は GTX 1080 Tiで十分。
1GBの差はほとんど必要ない。

個人的にはGTX 1070 or GTX 1080のマルチを使用。
NLPがメインなのと複数のモデルを同時に試す方が好みだから。

GPUにコストをかけられない人のオプションは限られている。
AWSは遅いうえに高くなってしまった。
GTX 970も遅いうえに高い。
それならもう少しコストをかけてGTX 1060が良い。
GTX 1060が無理ならGTX 1050 Ti(4GB)。
4GBはきついが遊び程度ならよい。

2017/07/23

DCGANsについて

いきなりまとめ


DCGANsとは、
  • CNN + GANs
  • representationsの学習が可能
  • image classificationへの応用が可能
  • W2Vのような算術が可能


Today I Learned


Unsupervised representation learning with deep convolutional generative adversarial networks
を参考に。


DCGANsの特徴


  • 階層的にデータのrepresentationsを学習できる
  • 様々な設定に対して安定してトレーニング可能
  • 学習後のdiscriminatorはimage classificationに利用可能
  • 学習後のgeneratorはW2Vのようにオブジェクトの概念が算術可能


背景


再利用可能なデータのrepresentationsをラベルなしデータから学習するが現在ホット。
学習したrepresentationsはimage classificationに適用可能。
これまでのところauto-encoders、clustering、deep belief networksがrepresentationsの学習に利用されてきた。
GANsをトレーニングすることでもrepresentationsを学習することができる。


モデル


モデルはのコアは3つ。
  •  all convolutinal net(pooling layerの廃止、strideを使用)
  •  FCレイヤーの廃止
  •  batch normalizationの実施(discriminator inputとgenerator output以外)

その他にも
  • generatorのアクティベーションにはReLu(ただしoutputにはTanh)
  • discriminatorにはleaky-ReLu
によって学習速度が向上。


トレーニング方法


  • データをTanhのレンジにスケーリング
  • ミニバッチのサイズは128
  • すべてのweightsはN(0,0.02)で初期化
  • leaky-ReLuのslopeは0.2
  • optimizerにはAdam
  • learning-rateは0.0002
  • momentum β1 は0.5


DCGANSの応用


  • CIFAR-10に対するclassificationではk-meansと同程度
  • Imagenet-1kに対してはk-meansをアウトパフォーム
  • トレーニングとテストのデータが異なっても頑健(Imagenet-1k、CIFAR-10)

2017/07/22

VAE(VariationalAutoEncoder)とは

いきなりまとめ


VAEとは、
  • エンコーダー、デコーダー、ロス関数からなる生成的ANN
  •  架空のセレブの顔、高解像度の絵画を生成


Today I Learned


What is a variational autoencoder?
を参考に。


VAEの用途


複雑な生成的モデルを構築できる。
架空のセレブの顔を作る、高解像度の絵画を生成するなど。


VAEの構造


VAEはencoder、decoder、loss-functionからなる。


・エンコーダー

encoderはinputの次元を削減=エンコードするANN。
encoderはGaussianのパラメーターθを出力。
ここからサンプリングすることで入力データをzとしてエンコードする。
確率モデルで言えばzの事後分布のパラメーターを出力し、事後分布からサンプリングする。


・デコーダー

decoderはエンコードされたデータzを入力としてデータ1ピクセルごとのパラメーターφを出力するANN。
データがモノクロのピクセルによる画像データの場合、decoderは個々のピクセルのためのBernoulli distributionのパラメーターを出力する。
この確率分布よりサンプリングすることでデータを復元する。


 ・LOSS

autoencoderのloss-functionはreconstruction loss + regularizer(the Kullback-Leibler divergence)。
reconstruction lossは個々のデータポイントに対するexpected negative log-likelihood。
decoderの出力をencoderが出力するrepresentationsの確率によって期待値を取ったもの。
これによりデコーダーがデータを復元するようになる。

regularizerはencoderが出力する確率分布qθ(zx)q_\theta(z\vert x)と標準正規分布p(z)p(z)のKullback-Leibler divergenceで情報の損失量を表す。
regularizerによって同種のデータ(別々の人間による同じ文字の手書き)に対して近い値をエンコードするようになる。

2017/07/15

Q-Learningについて

いきなりまとめ


Q-Learningは状態とそこでの行動をもとに、
長期の期待利得を学習するためのアルゴリズム。


Today I Learned


Simple Reinforcement Learning with Tensorflow Part 0: Q-Learning with Tables and Neural Networksables-and-neural-networks
を参考に。


Q-Learning


Q-Learningは現在の状態とその状態での行動による報酬を学習するアルゴリズム。
これに対しpolicy gradientは状態と行動をマッピングする関数を学習するアルゴリズム。
最終的にはどちらも賢い選択に導くことが可能。 


Qテーブル


Q-Learningの最も簡単な実装はQテーブル。
行が状態、列が行動に対応。
それぞれのセルが期待利得を表す。


bellman equation


Qテーブルの更新にはbellman equationを使用。
長期の報酬=現在の報酬+次回以降の報酬の最大値*割引率。
Q(s,a) = r + γ(max(Q(s’,a’))


ANNによるQ-Learning


現実世界や現代ゲームではサイズが無制限に大ききくなるためQテーブルは適用できない。
そこでANNが必要となる。
one-hotベクトルとして表現したstatesをインプットとしてアクションごとのQ-valueをアウトプットする。

ANNの利点はレイヤーを追加したり、アクティベーションやインプットタイプを変えたりするのが簡単なこと。
これはすべてQ-tableでは不可能。

値のアップデートには現在の予測値とbellman equationに基づいたターゲット値との間のsum-of-squares Lossによるback-propagationを使用。

単純なANNではQ-tableほどうまく機能しない。
そのためExperience ReplayやFreezing Target Networksを行う必要がある。

2017/07/13

ブランドのネーミング論

いきなりまとめ


 推奨されるネーミング手順。
  • 明確な目的設定
  • ブランド名の生成
  • ブランド名の評価
  • システム的に最終候補名の決定
  • 商標とトレードマーク用に4-5の名前を提出


Today I Learned


CREATING EFFECTIVE BRAND NAMES: A STUDY OF THE NAMING PROCESS
を参考に。


ネーミングの類型


ブランドのネーミング戦略は2通り。
  • Juliet  Principle(無意味な言葉を繰り返す中で刷り込ませる)
  • Joyce Principle(意味に基づくネーミング)

Joyce Principleにもとづいたトップ200のブランド名調査による2つのネーミング法。
  • semantic  appositeness(名前の一致性)
  • initial  plosives( b,  c,  d,  g,  k,  p,  q,  tから始まる名前)


消費者調査


消費者が名前から受ける印象。
  •  消費者は名前と製品カテゴリーの関連付けている
  •  消費者は製品カテゴリに典型的な名前を好む

技術製品について。
  •  英数字の羅列は技術製品に向いている
  •  AよりはZを使う方が良い
  •  響きの重い英数字の方が良い

記憶・認知度テストによるブランド名の調査。
  •  言葉より画像の方が記憶に残る
  •  関連する画像と共に掲示された名前の方が記憶に残る
  •  名前からの連想力と記憶性が関連


企業による実際のネーミング方法


フォーチュン500の消費財メーカーに対する調査。
6ステップ。
  •  ネーミング目的の確立
  •  ブランド名の発案
  •  ブランド名の絞り込み
  •  消費者に対する調査
  •  トレードマーク作成
  •  最終案決定

よく使われるブランド名選択の基準。
  • 製品性の表現力
  • 記憶性
  • 企業イメージとの合致
  • トレードマークの利用可能性

 推奨されるネーミング手順。
  • 明確な目的設定(マーケティング戦略、製品のポジションより)
  • ブランド名の生成(平均46、ブレインストーミングや個人による発案)
  • ブランド名の評価(調査の平均サンプル数74では統計的に不十分)
  • システム的に最終候補名の決定
  • 商標とトレードマーク用に4-5の名前を提出

2017/07/08

FEW-SHOT LEARNINGについて

いきなりまとめ


few-shot learningの概要
  • ハイパーパラメーターの最適化であるmeta-learningを行う
  • meta-learnerにはLSTM-based meta-learnerを使用
  • LSTMのinput-gateおよびforget-gateのパラメーターを学習

パフォーマンス
  • 5-shotにおいて60%のaccuracy
  • 比較モデルより良好なパフォーマンス


Today I Learned


OPTIMIZATION AS A MODEL FOR FEW-SHOT LEARNING
を参考に。


背景


image classification、machine translation、speech modelingなどにおいてDNNは成功を収めた。
それはキャパの高いDNNを大量のラベル付きデータでトレーニングしたため、

gradient-based optimizationが少ないトレーニングデータでうまくいかないのは2つの理由がある。
  • Adagrad, Adadelta, ADAMなどはアップデート回数の制約下でうまくいくようデザインされていない
  • 別々のデータセットではパラメーターがランダム状態から再スタートしなければならない

トレーニングのスタート時における最適な共通のinitializationの学習方法が必要。


LSTM-based meta-learner


・概要

LSTM-based meta-learner optimizerに対してneural network classifierを最適化するようトレーニングする。
ゴールをアップデート回数が制限されたもとで各learnerが各タスクに対して良好なパフォーマンスをもたらすアルゴリズムの発見。
そうしてmeta-learnerはlearner classifierを少ないトレーニングデータで収束するようトレーニングされる。
これによりmeta-learnerはタスク固有(短期)およびタスク共通(initialization)の知識を学習する。


・データセット

トレーニング、バリデーション、テストごとに複数のデータセットからなるメタセットを用いる。
meta-learnerはトレーニングセットのうちの1つを入力として高パフォーマンスをもたらすclssifierを作る。
バリデーションとテストセットでmeta-learnerのハイパーパラメーターの選択と評価を行う。


・モデル

meta-learnerはinput-gateとforget-gateのパラメーターを学習するLSTMセル。
learnerのパラメーターθがLSTMのstate、gradientsがcandidate state。
ANNのアップデートおいてinput-gateはlearning-rate、forget-gateは1に相当。

input-gateおよびforget-gateは4つの値の関数。
  • the current parameter value
  • the current gradient
  • the current loss
  • the previous learning rate 
 LSTMパラメーターはすべてのアップデートにおいてシェア。


・トレーニング

LSTM meta-learnerはトレーニングごとにlearner(classifier)からgradientとerrorを受け取る。
そしてlearnerのパラメーターをアップデートする。
その後、最終パラメーターを用いて、テストを行う。
テストロスでmeta-learnerをトレーニングする。

learnerのgradientとerrorはmeta-learnerのパラメーターに依存しているが、meta-learnerのトレーニングに際してはこれを無視する。

LSTMパラメーターの初期値は通常のgradient descent with small learning rateと近くなるよう設定する。
  • small-random-weightで初期化
  • forget-gateのbiasはforget-gateが1になるよう大きくとる
  • input-gateのbiasは小さくとる

学習速度と安定性向上のためbatch-normalizationを行う。


・パフォーマンス

1-shotおよび5-shotにおいてベースラインモデルよりも遥かに良かった。
Matching Networkに対しては、1-shotで同程度(43%)。
5-shotで51% vs 60%となり良好なパフォーマンスだった。


2017/07/01

MLを実装する際の方法論2

いきなりまとめ


MLのアルゴリズムの調査にはとても時間がかかる。
問題に応じたベストプラクティス知ることで開発効率を上げることができる。


Today I Learned


11 Practical Methodology
を参考に。


デザインプロセス


  • ゴールを決める(エラー指標、ターゲット、パフォーマンス指標)
  • ベースモデルを作る
  • システムの問題を調べる(overfitting、underfitting、a defect in the data、software)
  • 徐々に修正を加える(データ追加、ハイパーパラメーター調整、アルゴリズム)


データ収集


ベースラインモデルを構築した後はパフォーマンスの測定とその改善。
初心者は多くのアルゴリズムを試そうとするが多くのデータを集める方がはるかにうまくいく。

もっとデータ収集すべきか否かをどうやって決めるのか。
まず、トレーニングデータに対するパフォーマンスが良好かどうかを見る。
良好でないならlearning algorithmがトレーニングデータを使っていない証拠だから、モデルのキャパを増加させる(レイヤーを追加する、hidden unitsを加える、learning rateを変更するなど)。
それでもパフォーマンスが良好でないなら、データの質に問題があるかもしれない。
ノイズが含まれているか、そもそも入力データが予測するための情報を含んでいないかもしれない。
データ集めのやり直し。

トレーニングデータに対するパフォーマンスが良好なら次はテストデータ。
テストデータに対するパフォーマンスがトレーニングに対するパフォーマンスよりはるかに悪ければ最も有効な対策はデータをもっと集めること。
ラベル付きデータを集めることがobject recognitionでは最も重要な要因。

しかし、医療などでは多くのデータを集めることは困難。
代替案として、モデルのキャパを減少させるか、regularizationを向上させるか(weigth decay coefficientsの調整やdropoutを加えることなど)。

それでもギャップが埋まらない場合はやはりデータを集めるのが良い。
どの程度データを集めるべきか?
トレーニングサイズとgeneralization errorをプロット、それを外挿し見当をつける。
少々のデータを加えたところでパフォーマンスには影響しないためlog-scaleで検討をつける。

どうしてもさらなるデータが集められない場合にはlearning algorithm自体を向上させるしかない。
これはまさに現在研究されている最中。


ハイパーパラメーターの調整


ハイパーパラメーターの選択には2つの方法がある。
マニュアルか自動か。
前者ではMLモデルとハイパーラメーターに対する理解が必要。
後者では必要ないが計算コストがかかる。


・マニュアル

マニュアルでハイパーパラメーターを設定する場合にはハイパーパラメーター、トレーニングエラー、一般化エラー、計算コストの関係について理解が必要。

マニュサルサーチの目標は制約下において最も低い一般化エラーを達成すること。
モデルのeffective capacityを調整することで様々なタスクに対処する。
effective capacityは3つの要素からなる。
モデルのrepresentational cpaacity、トレーニングにおけるlearning algorithmの能力、モデルの一般化の程度。


・ハイパーパラメーターと一般化エラー

一般化エラーはハイパーパラメーターに対して通常U字型。
low capacityとhigh capacityの中間において一般化エラーが最も小さくなる。

あるハイパーパラメーターでは値を増加させるとcapacityが増加しオーバーフィッティングになる。
レイヤーやhidden unitを追加するとrepresentational capacityは高くなる(複雑な関数型が表現可能となる)。
別のハイパーパラメーターでは小さくするとオーバーフィッティングになる(weight decay coefficient)。

ハイパーパラメーターはU字のすべての値を探索できるわけではない(binaryであったりdiscreteであったりmin、maxがあったりするため)。
モデルのcapacityを下げるだけのハイパーパラメーターもある。

learning rateは最も重要なハイパーパラメーター。
learning rateが適切なときにモデルのeffective capacityは最も高くなる。
learning rateはトレーニングエラーに対してU字型。
learning rateが低すぎるとトレーニングエラーが高い地点に永久にとらわれてしまう可能性がある


・トレーニングエラーと一般化エラー

learning rate以外のパラメーターを調整する際にはトレーニングとテストの両エラーを監視する必要がある。

トレーニングエラーが目標よりも高いときはキャパを増やすしかない。
テストエラーが目標より高いときはregularization hyperparametersを変更しeffective model capacityを減らす(dropoutやweight decayを追加すること)。

通常は巨大なモデルをregularizeすればベストなパフォーマンスになる。

トレーニグエラーが低いときにはサンプルを追加すれば一般化エラーも低下する。
モデルのキャパとトレーニングデータを増加させ続けるのはコストがかかるが確実に成功する。


・サーチ

ハイパーパラメーターサーチのためのアルゴリズムにはさらにsecondary hyperparametersが必要となる。
良好なパフォーマンスを得るためのsecondary hyperparametersを選択するのは簡単。

ハイパーパラメーターの数が3個程度ならgrid searchがよい。
サーチするリストはその中にoptimal valueが入るように保守的に選択すべき。
特に値はlog scalでリストすること。
grid searchはリストの範囲を狭めつつ繰り返し実行するとベストなパフォーマンスが得られる。
grid searchの欠点は計算コストが指数的に増加すること。

それ以外の場合はrandom searchが良い。
プログラムしやすく、収束するのもはるかに速い。
サーチリストは離散化や2値化すべきではない。
そうすることではるかに多くの値がサーチでき、計算コストが減る。
グリッドサーチと比較し指数的に効率的な場合もある。

Relation Netowrksの概要

いきなりまとめ Relation Netowrksとは関係性の推論を行えるニューラルネット。 画像や音声の単純な認識ではなく、複雑な思考が可能。 例えば、 グレーの物体から最も離れている物体の形は何か? ボールは今何処にあるか? ランダムに動くボール群のどれが...