nVIDIA Deep Learning Day 2016 Report (ベルサール＠高田馬場)

# Overview

* Subject : nVIDIAによるDeep Learningに関する取り組みに関してを紹介するtechnical conference (GTC2016を日本でも)
* Place : ベルサール高田馬場
* Date : 2016/4/27
* Time : 10:00-18:00
* Attendees
 * 参加者 : hidenorly (会場には1800人ほどが満員御礼とのこと)

# Agenda

* 公式ページ : http://www.nvidia.co.jp/object/event-jp.html?id=280

## エヌビディアが加速するディープラーニング～進化するニューラルネットワークとその開発方法について～

* by エヌビディア合同会社　プラットフォームビジネス本部ディープラーニングソリューションアーキテクト 兼CUDA エンジニア　村上 真奈
* 資料: http://images.nvidia.com/content/APAC/events/deep-learning-day-2016-jp/NV-DL-Murakami-Session.pdf　/ http://www.slideshare.net/NVIDIAJapan/ss-61344653

* 2011から2012年の間に飛躍があった。ディープラーニングで飛躍した。
 * imagenetで、人間を越えた画像認識率を達成した。マイクロソフトとGoogle。スーパーディープなニューラルネットワークを使っている。
 * baidu deep speech2は、一つのニューラルネットワークで、英語と中国語の二つの言語を認識
* alphagoは、50GPUで3週間､3億4000万回のトレーニングステップで、DNNをトレーニング。valueラーニングで基盤の状況を予測。
* 自立走行にもディープラーニングが活用
* CNNを用いたテクスチャ合成と変換。アニメーションの自動作成（サポートツール）
　* ディープラーニングを画像ノイズ削減や高周波成分補完（高解像度化）への応用も
* deeplearningで、ゲームプレイにも応用。高得点になるのを学習していく
* DNNがまず良いモデル構築できるかがキー。次に入力させて学習させる為のビックデータも重要。最後に演算量がすごいので、GPU
* DNNの階層が深くなったなったときには、非常に演算量が多くなる。シンプルにいって、GPUを使うと10倍早くなる。行列演算が多く、GPUはそれが得意なので速くなる。
* フォワードプロパゲーションとバックワードプロパゲーションの反復を行うがこの処理が重い。この学習が重い。その後、推論が可能になる。
* cuBLAS, cuDNN, cuSPARSEのライブラリを介して、GPUにわたされて、高速化が実現する
* 研究者がDNNを出してくる。それをベースにして、改善するのが、利用者の流れ。改善するときに、自分のデーターを食わせて学習させるが、その学習に膨大な処理が必要なので、GPUが有効
* 学習だけでなく、実際に活用するシーンでの推論処理も演算量がそれなりにあるので、GPUが有効である。 
![https://pbs.twimg.com/media/ChAyhfEUgAAyPYS.jpg](https://pbs.twimg.com/media/ChAyhfEUgAAyPYS.jpg)
![https://pbs.twimg.com/media/ChAyipXUoAAYvYa.jpg](https://pbs.twimg.com/media/ChAyipXUoAAYvYa.jpg)
* deeplearning SDK cuFFT, cuSPARSE, cuFFT 疎行列、密行列、フーリエ変換のintrinsic
* cuDNNは、Caffe, CNTK, Tensorflowなどで活用されていて、高速な演算をサポート。cuDNN5では、時系列データを扱えるリカレントニューラルネットワークの高速化が可能に。
* VGG, GoogleNet, ResNetのような3x3のコンボリューションを多用するケースで高速化が可能になる
* NVIDIA Deep Learning SDK を利用した画像認識
* cuDNNでは、自動で最適なアルゴリズムを決定する。演算量やメモリーサイズなどで、自動決定できる。明示指定も可能
* NCCL これで、マルチGPUでの集合ライブラリにより、broadcast, all gather, reduceなどの集合通信処理が、帯域がちゃんとでるように扱うためのサポートライブラリ
* DIGITSは、Caffe or Torcheをbackendとして使う
* caffeは、新しいコンボリューションネットワークモデルがペーパーに紹介されていたりする。C++でかかれているが、他の言語にもバインドされている
* 動的なニューラルネットワークの更新を行う場合にはcaffe以外がおすすめ
* torchは、最初からアルゴリズムが多数最初から実装されている。多数の落ちてるアルゴリズムを使うには、caffe,torchがおすすめ
* Tensorflow、thena, chainerは、アルゴリズムがあまり公開はされていないので、自分でガリガリ書きたい人向け。
* 自動微分が、thena, tensorflowは備える
* [deeplearning入門](https://developer.nvidia.com/deep-learning-courses)は、無料。ただし、その後のawsを使うところはお金がかかる
 * 確かにdeep learning courseがあるけれども、55分しか1アカウントに使えないみたいなので、気を付けよう。時間のある時に一気にやらないと困るかも。。。
 * nvidia.qwiklab.com/payments/new でcreditがかえる。caffeとかのコースには、15 creditだったが、現在の価格は、14.99$のようです。GPU買うよりは安く、入門はできそうだ（時間制限はまだ見ていないので不明)
 * 4000 Credits $3,200.00(20% Discount) というオプションもあるみたい。普通に使うときはGTX970/980とかを買った方がよさそう。。。
 * torchの講座では、luaでかかれており、トルストイとか、kernelっぽいコードや文章を生成してくれる
 * tensorflow入門も今後予定されているらしい！！

## NVIDIA Deep Learning Institute

* by エヌビディア合同会社　プラットフォームビジネス本部 シニア CUDA エンジニア　森野 慎也
* 資料 : http://images.nvidia.com/content/APAC/events/deep-learning-day-2016-jp/NV-DL-Morino-Session.pdf

* 推論処理を高速に行うためのエンジンの話
* トレーニングとはモデル、係数を決めるための作業で、ふぉわあとバックワードプロパゲーションの反復処理。推論はモデルや係数も決定済みで、フォワードプロパゲーションのみ。つまるところ、トレーニングが開発作業であって、推論は実行、トレーニング結果を動かす端末等側の話。
* メモリー帯域がネックになるので、kernel fusionと呼ぶ方法で、一回のメモリーアクセスの中で演算をまとめる。pipe-filterのおまとめ演算みたいなことをする。演算パワーはあるが、メモリー帯域は、個々の処理をして、メモリーに読み書きの回数を削減する。
* 依存がないものを同時に動かすことで、並列度を高める。GPU Inference engineで、これらの最適化処理を実装してくれているので、楽に高速化できる

## GTC 2016 基調講演からディープラーニング関連情報のご紹介

* by エヌビディア合同会社 プラットフォームビジネス本部 部長 林 憲一
* 資料 : http://images.nvidia.com/content/APAC/events/deep-learning-day-2016-jp/NV-DL-Hayashi-Session.pdf

* watsonの話
 * 質問応答の技術を使っている。検索エンジンとは違う技術。論理的に思考し、学習する。コグニティブなシステムである。これは、爆発的なデーターが背景にある
 * 最新の医療の現場でもキャッチアップに使える時間と、実際に必要な時間には乖離がある。故にコグニティブサービスが必要
 * natural language classifierは、自然言語処理で、必要な情報に到達できる。
 * northfaceでも、watsonのコグニティブなシステムが使われている
 * コグニティブコンピューティングには、GPUを使ってトレーニングを行っており、CPU に比べ8.5倍速くなっている
 * nVIDIAのPASCALを使ったサーバーシステムも計画している
* 自立運転の話
    * 120万人の人が交通事故で亡くなっているので、これの対策として、自動運転が有効
    * 人の脳は30wだが、現在は機械は大量の電力を消費する。
    * 自動運転モード、守護神モードがあるだろう
    * シミュレーションが必要に重要である。毎年トヨタは全てのトヨタの車を考えると毎年一兆キロになる。
* deep learning is new computing model
    * マイクロソフトは125層のニューラルネットを使い、それを、スーパーディープネットワークと呼ぶ。
    * ディープラーニングは、新しいコンピューティングモデルともいえる。 
    * これまでは、それぞれのドメインの専門家がチューニングして行くモデル。ディープラーニングは、DNN+データ+HPCという形で、データとコンピューティングパワーがキーになる
    * 従来の手法を一足飛びでとんでいくモデル。
    * 今後十年で50兆円のビジネスが発生する
    * tracticaのソース
    ![https://pbs.twimg.com/media/ChBbPQ0U4AAkDL2.jpg](https://pbs.twimg.com/media/ChBbPQ0U4AAkDL2.jpg)
* Pascal is the best (as of now)
    * tesla m40とm4があり、トレーニングと推論をそれぞれで扱うのに適している。しょうひでんりょくこうりつが高いのでFPGAは不要
    * Tesla p100は、ハイパースケールデータセンターに適したGPU
    * P100は、プリエンプションができる。16nFF, 3DメモリHBM2, NVInter connect, Pascalアーキテクチャ
    * nvlinkにより複数リンクでのパフォーマンス向上。PCIeの5倍速い
    * P100は、まずはサーバーシステム向けに。2017年1Qから。DGX-1はP100x8で、170TFLOPS
    * 7TBのSSD, 8xP100, 2x Xeonで、DGX-1は1台で地球シミュレーターより速いらしい。
    * DGX-1は、dual xeonの250台相当のパフォーマンスになる。ALEXNET を動かしたときのケース
    * DGX-1: 今日から日本でも正式に販売されます ![https://pbs.twimg.com/media/ChBdyfpU0AAK2Y0.jpg](https://pbs.twimg.com/media/ChBdyfpU0AAK2Y0.jpg)
* 自立運転 
   * KITTI自動車認識で最高性能を獲得
    * 新しいend-to-end hd mapping。高精細な3dのマップを常に更新していくのが必要。12のカメラポートを備える。cloudに吸い上げて、cloudでp100でトレーニングさせる。
    * マッピングプラットフォーム(地図作成プラットフォーム)![https://pbs.twimg.com/media/ChBfF-3UUAAl5ju.jpg](https://pbs.twimg.com/media/ChBfF-3UUAAl5ju.jpg)
 * AI運転の新しい試み。初めての場所でも、周りを見てなんとかやっていく、という方法
 * BB8。フロントカメラだけ。人間がどうやってハンドルさばきをしたかを学習させて、自動運転させている。デーブネットと呼ぶのを使っている
 * 自動運転でのロボレース。アルゴリズムを競う。DrivePXが提供される
 * formula-Aは、1tある。バッテリー+ハイトルク。事前にシミュレーションされる。DrivePX2が搭載される。
 * 10/5に、GTC JAPAN 2016を開催される。ジェンスンが4年ぶりに来てくれる！
* 日本にはオリンピックに向けて多数のカメラが設置されるのでそれにもGPUが有効のようだ。

## GTC リピートセッション

### P6139 Heterogeneous Learning for Multi-task Facial Analysis Using Single Deep Convolutional Network

* by 中部大学工学部 情報工学科 講師 山下隆義先生
* 資料 : http://www.slideshare.net/Takayosi/deeplearningday2016spring

* 複数の回帰推定タスクと認識タスクを単一のDCNNで行うのは難しいので、重みづけを行い、メインタスクとサブタスクで分ける。個々のタスクで学習をして置き、それの学習誤差の少なくなったものをメインタスクとする。差を見ながら学習誤差が大きく減ることがわかった。
* 単一タスクと比較して同等以上の識別性能を実現した。メインタスクとサブタスクをわけ、重みを付けることによって、認識結果が向上した。
* ヘテロジニアスラーニングによる歩行者検出と部位推定
* 把持物体の検出と把持位置の推定

### S6309 - Capitalico - Chart Pattern Matching in Financial Trading Using RNN

* by Alpaca Chief Engineering Officer 林 佑樹様
* 資料 : たぶん : http://www.slideshare.net/HitoshiHarada/capitalico-chart-pattern-matching-in-financial-trading-using-rnn

* housands/xx thousands of dataに対する推論のtestに関しては、GPUを使った場合に、context 切り替えのoverheadが大きく、CPUを使った。サービス型だとそういう形になるのか？
* preferred networksはIoT+AIが大きくインパクトを与える領域にフォーカスする
* 強化学習を使って自動運転をさせてみた、とのこと。

### S6523 - Chainer: A Powerful, Flexible, and Intuitive Deep Learning Framework

* by 株式会社Preferred Networks 取締役副社長 岡野原 大輔様
* 資料 : http://www.slideshare.net/shoheihido/chainer-gtc-2016 / http://www.slideshare.net/pfi/ss-57087522
* github : github.com/pfnet/chainer/

* scalablity oriented + flexibility orientedの2つが、DL frameworkにおける背景となる。
* flexible oriented frameworkは、10+k training samplesで対応できるようになる。scalabilityだとmillion orderのサンプルが必要. chainerはflexible. tensorflowはscalab

* 入力から出力を出すforward propagationと逆方向のbackward propagationがある。
* ニューラルネットワークをどのように構成するか？どのようにトレーニングするのか？どのようなテキストフォーマット・言語でモデルするのか？どの言語？GPで複数GPU?
* 1.computational graph, 2.loss&gradients(正解との差), 3.optimize modelの3つのステップからなる。
* step1が一番大変だと考え、それに注力したのがchainer
* text DSL, symbolic program, impreative programの3種がneural networkの記述言語としてはある。
* test dsl, symbolicは最適化がしやすいが、デバッグがしにくい。impreativeは事前最適が難しい。


## GTC 2016 ディープラーニング最新情報

* by エヌビディア合同会社 エンタープライズビジネス事業部 DLビジネスデベロップメント シニアマネージャー　井﨑 武士

* 資料 : http://images.nvidia.com/content/APAC/events/deep-learning-day-2016-jp/NV-DL-Izaki-Session.pdf

* EC siteへの応用
 * level毎にcascade化をしている。マルチタスクロスと呼ぶ。各レベルごとの損失関数を用意して推論を行う。商品検索に行っている。
 * オブジェクト検出は、バンディングボックスというのを作ってその候補を改善するという方法を取った。
 * 属性分類。衣服で、丸首、V字とか、スリーブがショートかロングかとか
 * 撮影した画像をもとに類似画像検索。ファッション雑誌乗っているものから、それそのものあるいは類似商品を購入ということをアリババではやっている。
* adobe. deepfont.
 * font recognition, 類似性、問題点。微妙な違いを認識する
 * 人工的に学習データを作成して学習させた。フォントはそのまま使われるだけでなく、加工されて使われることがあるため。
 * data augmentationを使った。ノイズ、ぼんやり、変形、影、文字の空き具合、アスペクト比を加えて、データ量を増やした。
 * network decompositionを行っている。
 * 前半分は教師無し、後半は教師有りなど。
 * 結果、81.8%の正答率(top5), top1では71.4%。少ないデータ量から精度を上げるというのが認識精度を上げる手法がキーになるのでは？
 * 教師無しを使って、まず、分類して、それを教師有りに入力する（？）
* Line stampへのdeep learningを使った類似画像ベースでのrecommendationの取り組み
 * click数評価。作者ベース、売り上げベース、画像ベースのrecommendationがあるが、今は作者ベースが一番有効だが、0.32(author), 0.2(image)と善戦している。
* Baidu deep speech
  * baiduはdeep speechでよく知られている。baiduは、損失関数としてCTCを使っている。open source化されている。github.com/baidu-research… で参照可能。
  * baiduはdeep speech2を既に発表していて、英語と中国語の両方が利用可能。
  * Googleは発表したbatch normalizationにより終息を早めることを導入している
  * RNN training性能がリニアですごい
  * OpenMPIは使っていない。独自に実装している。これがRNNのマルチノードでの性能向上に聞いているようだ。fp16(not true-fp16)を使っているそうです。Pascalになるとtrueなのでさらに向上されるはずとのこと
* videoの音だけで、都市を特定する試み。
* ロボットのための3次元deep leraning認識
 * 2次元での認識の限界→3D detection.
 * 深さ方向の情報(depth情報)(kinectのようなもの)を使ったとのこと
 * これまでの手法は2次元でほぼ処理をして最後に深さ方向を使った処理をするというものだったが、今回は最初から最後まで3次元で扱うという試み。
 * 3次元での領域の候補出しを行い、その上で、3次元で認識を行う、とした。
 * 3次元のフィルターを用意して適用し、その上で認識を行っていく。
 * data augumentationを行って教師データを増やす。回転とかだけでなく、時間方向にも。885→30万点のデータへ
* 監視カメラへの応用
 * 監視カメラはobject detection, feature(human, vehicle), identification (human face, vehicle license)の順番で行う
 * 雨天時のような時では従来手法では認識が難しかったが、deep learningではあまり認識精度が変わらない。
 * 自動車の特徴における認識率の向上。deep learningを適用することによって人間が認識できているように認識るようになってくる。。。
* 高画質化へのdeep learningの応用
    * DCGAN, LAPGAN, DCGANを使うことで、画像事態を作り出すことができる。荒い画像から高精細な画像を作り出したり、眼鏡をかけた女性とか、ベッドルームの画像とか。。。
* MXNET : http://www.cs.cmu.edu/~muli/file/mxnet-learning-sys.pdf
    * MIX programming API. MXNetは両方の実装が可能、imperative NDArray, Declarative symbolic executorの両方。
    * 分散コンピューティング。データ並列が、簡単に扱えるようになる。4xGTX980で3.7倍の性能が出たので、高いlinearityをもっている。multinodeでもコードの変更は必要ない。
    * MXNETの性能評価：AWS EC2 GPU instance, 4 GPU per machine → 10 machinesで、9.8倍の性能が出たので、非常に良いチューニングがされている。
    * backendはC++で実装されており、多種多様な言語のbindがある。MinPyによりNumPy likeに扱える。importをNumPyの代わりにMinPyにするだけで、GPU最適化ができる。
* training dataの作成に、仮想現実を使えないか？という試み。
* 推論側に対する圧縮手法についての研究の話。deep compression.
    * 35x-50x size compression. no loss less.
    * シナプスの削減を行って削減を行う。ニューラルネットワークも、人間と同じように数が減っても大丈夫なはずだから。取り除いて追加で学習を行うということを行っている。結果精度が下がらずに削減が可能になってきている。

# Appendix

* Togetter : http://togetter.com/li/967942
* PC Watchの記事 : http://pc.watch.impress.co.jp/docs/news/20160427_755418.html
* it__sseiさんの記事 : http://qiita.com/it__ssei/items/822101c25568229fd3cd