Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

20171206 Sony Neural Network Console 活用テクニック

7 610 vues

Publié le

2017年12月6日に実施した、「ソニーのNeural Network Console大勉強会~何ができる?どう使う?質問しよう!~」で使用したスライド資料です。

This is a slide of "Seminar of Sony's Neural Network Console" held in 6th December.

Publié dans : Logiciels
  • Identifiez-vous pour voir les commentaires

20171206 Sony Neural Network Console 活用テクニック

  1. 1. ソニーのNeural Network Console大勉強会 ソニーネットワークコミュニケーションズ株式会社 / ソニー株式会社 シニアマシンラーニングリサーチャー 小林 由幸 Neural Network Console活用テクニックのご紹介
  2. 2. 2 自己紹介 小林 由幸 1999年にソニーに入社、2003年より機械学習 技術の研究開発を始め、音楽解析技術「12音 解析」のコアアルゴリズム、認識技術の自動 生成技術「ELT」などを開発。近年は 「Neural Network Console」を中心にディー プラーニング関連の技術・ソフトウェア開発 を進める一方、機械学習普及促進や新しいア プリケーションの発掘にも注力。 @frievea
  3. 3. 3 Neural Network Console 商用クオリティのDeep Learning応用技術(画像認識機等)開発のための統合開発環境 コーディングレスで効率の良いDeep Learningの研究開発を実現 クラウド版(オープンβ期間中)Windows版(無償) dl.sony.com インストールするだけ、もしくはサインアップするだけで本格的なDeep Learning開発が可能 成果物はオープンソースのNeural Network Librariesを用いて製品、サービス等への組み込みが可能
  4. 4. 4 Neural Network Libraries / Consoleのソニーグループ内活用事例 価格推定 ソニー不動産の「不動産価格推定エンジン」に、Neural Network Librariesが使用されています。この技術を核として、ソニー不動産が持つ査定ノウハウ やナレッジをベースとした独自のアルゴリズムに基づいて膨大な量のデータを解析し、 不動産売買における成約価格を統計的に推定する本ソリューションが実現されました。 本ソリューションは、「おうちダイレクト」や、「物件探索マップ」「自動査定」など、 ソニー不動産の様々なビジネスに活用されています。 ジェスチャー認識 ソニーモバイルコミュニケーションズの「Xperia Ear」の ヘッドジェスチャー認識機能にNeural Network Librariesが使用されています。「Xperia Ear」に搭載されているセンサーからのデータを元に、ヘッドジェスチャー認識機能に より、首を縦や横に振るだけで、「Xperia Ear」に搭載されているアシスタントに対し て「はい/いいえ」の応答や、着信の応答/拒否、通知の読み上げキャンセル、次/前 のトラックのスキップを行えます デジタルペーパー ソニーのデジタルペーパー「DPT-RP1」の手書きマーク検索 のうち、*の認識にNeural Network Librariesが使用されています。文書を読んでいて 「ここが大切」「ここを後で読みたい」と思ったら、 *や☆のマークをさっと手書きし ます。手書きマークを認識する機能により、ページ数の多い文書でも、マークを付けた 箇所を素早く検索し、開くことができます。 既にソニーグループ内で多数の商品化・実用化実績
  5. 5. 5
  6. 6. 6 認識機を作成するために必要な作業(画像認識機における例) … … … … … … … 画像認識機 (Neural Network) Input:画像 Output:画像認識結果 「2」 1. データセットを用意する 入力と、期待する出力のペアを多数用意 2. ニューラルネットワークの構造を 設計する (サンプルを利用可能) 3. 用意したデータセットで、設計した ニューラルネットワークを学習する 基本的にはこの3ステップで画像認識機を作成することができる … 「0」 … 「1」 … 「2」 … 「3」 … 「4」 … 「5」 … 「6」 … 「7」 … 「8」 … 「9」 (自動)
  7. 7. 7 入出力次第で無限に広がるDeep Learningの応用 Deep Learning応用開発人材の育成と、活用の促進が求められる …入力 出力 実現する機能 入力 出力 画像認識 画像 カテゴリ 文章の自動仕分け 文章 文章カテゴリ 音声認識 音声 文字列 機械翻訳 英単語列 日単語列 人工無能(チャット) 入力発話の単語列 期待応答の単語列 センサ異常検知 センサ信号 異常度 ロボット制御 ロボットのセンサ ロボットのアクチュエーター … 実現する機能
  8. 8. LIVE DEMO
  9. 9. 9 Neural Network設計の基礎 1層(Logistic Regression) 2層(Multilayer perceptron) Convolutional Neural Networks(CNN) Input:データ入力 → Convolution → ReLU → MaxPooling → Affine → ReLU → Affine → Softmax → Categorical Crossentropy 繰り返し 配置 最後の 仕上げ (分類問題時) 基本はそんなに難しくありません!是非色々試してみましょう
  10. 10. 10 会場からのご質問と、リクエスト ご質問 • コード書くより速く開発できますか? • デバッグや試行錯誤が圧倒的に楽です! • RNN系の扱い方 • チュートリアルを拡充していきます! • 今後の広報活動は? • blogやTwitterで随時案内します! @NNC_NNL_Jpn リクエスト • ARMのビルドが欲しい • QualcommのDSP等に対応してほしい • テキストデータを簡単に扱いたい(分散表現、識別タスク、生成タスク)。テキスト系exampleの充実 • Mac、Linux版Console • 簡単にextensionを実装したい ⇒関係者(主に私)にもれなく伝えます!
  11. 11. 11 Q1. 画像認識以外にも使えますか? A. Yes。ベクトルや行列の入出力にも対応しています neural_network_consolesamplessample_datasetiris_flowe r_dataset ベクトルデータの場合 以下のようなフォーマットのデータセットCSVファイルを 用意してConsoleに読み込みます 例)フィッシャーのアヤメ がく、花びらの長さ、幅 あやめの種類 入力センサデータのcsvファイル データセットCSVファイル 行列データの場合 1つ1つの行列を1つのCSVファイルとし、 データセットCSVファイルにそのファイル名を記入します
  12. 12. 12 Q2. テキストの入出力方法は? A. 事前にテキストの単語Index系列もしくはベクトル系列への変換が必要です ベクトル系列形式のテキスト ・各単語が固定長次元のベクトルで表現される ・各単語の固定長ベクトルはWord2vec等で学習 単語Index系列 ・0から始まる単語のIndexを文頭から順に並べるのみ まずはテキストを単語に分割し、Index化する ・例えば3千個の頻出単語を選択し、その他は1つの 単語にまとめるなどする ・上記3001単語に0~3000のIndexを振る 文末 ↓ ↑ 文頭 文末 ↓ ↑ 文頭 ←1単語分の ベクトル
  13. 13. 13 Q3. 複数の入出力を扱えますか? A. Yes。InputレイヤーやLossレイヤーを複数配置するだけで実現できます データセットCSVファイルに複数変数のデータを定義 ・1行に1データ(例えばxとy)のルール ・変数名は何でもよく、変数の数はいくつでもよい ・画像、ベクトル、行列が混在してもよい Inputレイヤーで変数を入力 ・Datasetプロパティで入力する変数名を指定 Lossレイヤーで、ネットワーク出力と目的変数の値を近づける ・T.Datasetプロパティに目的変数とする変数名を指定 ←y(画像) ←c(画像) ←x(行列) a(画像)→ z(スカラ)→ b(画像)→
  14. 14. 14 Q4. 転移学習(Transfer Learning)はできますか? A. できます。 学習済みネットワークを重み係数付きで読み込み ・学習結果リストを右クリックしたメニューから、 Open in EDIT tab with Weightを選択 ・ConvolutionやAffineレイヤーのW.File、 b.Fileプロパティなどに学習済みの重み ファイルが読み込まれる 学習させたくない(再利用)レイヤーの重みを固定 ・重みを固定するレイヤーの*.LRateMultiplierプロパ ティを0に設定 ・例えば、最後のレイヤー以外全 て選択してこれらのプロパティを 0にする
  15. 15. 15 Q5. 重みパラメータやニューロンの途中出力は可視化できますか? A. できます。 重みパラメータの可視化は、TRAININGタブから ・Overviewのレイヤーをダブルクリックして重みパ ラメータを可視化 ダブルクリック 途中結果は、以下の手順で可視化可能 ・Transfer Learningと同様に、重みパラメータを読み込み ・途中出力が出力されるように、ネットワークを編集 ・学習実行ボタンを右クリックし、Create Training Resultを選択 (学習は行わず、ネットワークを出力) ・評価実行を行い、評価結果として途中出力を得る ReLUの後を SquaredErrorにし、 ここの出力をモニタ
  16. 16. 16 Neural Network LibrariesとConsoleの位置づけ Neural Network Libraries ・プログラマ向けの関数ライブラリ(他社製Deep Learningフレームワークと同じカテゴリに分類) ・コーディングを通じて利用→高い自由度 ・最先端の研究や機能の追加にも柔軟に対応 Neural Network Console ・研究や、商用レベルの技術開発に対応した Deep Learningツール。 ・様々なサポート機能→高い開発効率 ・GUIによるビジュアルな操作→敷居が低い 主なターゲット ・じっくりと研究・開発に取り組まれる方 ・プログラミング可能な研究、開発者 import nnabla as nn import nnabla.functions as F import nnabla.parametric_functions as PF x = nn.Variable(100) t = nn.Variable(10) h = F.tanh(PF.affine(x, 300, name='affine1')) y = PF.affine(h, 10, name='affine2') loss = F.mean(F.softmax_cross_entropy(y, t)) 主なターゲット ・特に開発効率を重視される方 ・はじめてDeep Learningに触れる方 内部でNeural Network Librariesを利用
  17. 17. 17 Neural Network Librariesの特長1:洗練された文法構造 • CPU/GPUを切り替えてもネットワーク、学習コードの変更不要! 以下のコードをネットワーク定義前に追加するのみ CPU/GPU間の転送は必要な時に自動で行われます(意図的に行わせることも可能) • Dynamic/Static Networkなど切り替えも、動的実行宣言の1行追加のみ! • Multi GPU時も、ネットワークコードの変更なし、学習コードの変更もわずか! 同じコードで様々な環境で動作 from nnabla.contrib.context import extension_context nn.set_default_context(extension_context('cuda.cudnn')) # 動的NNモードに変更 nn.set_auto_forward(True) for i in range(max_iter): … loss.backward(clear_buffer=True) # デバイス間でパラメタを交換 comm.allreduce(division=False, inplace=False) solver.update() 学習コード中の変更は1行
  18. 18. 18 Neural Network Librariesの特長2:プラグインでデバイス追加 宣言一つで、APIやコア部分はそのままに、特定デバイス用のコードを利用 High-level API •Python API •C++ API •CLI •Utils CPU Implements •Array •Function •Solver •Communicator Core •Variable •CoputationGraph •… nnabla nnabla-ext-cuda CUDA Implements •CudaArray •Function •Solver •Communicator from nnabla.contrib.context import extension_context nn.set_default_context(extension_context('cuda.cudnn')) 宣言一つで、 APIやコア部分はそのままに、 特定デバイス用のコードを利用○○ Implements •Array •Function •Solver •Communicator nnabla-ext-cudaをフォークし 特定デバイス用実装を開発可 nnabla-ext-○○
  19. 19. 19 例)Neural Network LibrariesのAffineCUDA実装 template <class T> void AffineCuda<T>::forward_impl(const Variables &inputs, const Variables &outputs) { cuda_set_device(std::stoi(this->ctx_.device_id)); const T *x = inputs[0]->get_data_pointer<T>(this->ctx_); const T *w = inputs[1]->get_data_pointer<T>(this->ctx_); T *y = outputs[0]->cast_data_and_get_pointer<T>(this->ctx_); // y = x * w. ... } template <class T> void AffineCuda<T>::backward_impl(const Variables &inputs, const Variables &outputs, const vector<bool> &propagate_down, const vector<bool> &accum) { cuda_set_device(std::stoi(this->ctx_.device_id)); const T *dy = outputs[0]->get_grad_pointer<T>(this->ctx_); if (propagate_down[0]) { T *dx = inputs[0]->cast_grad_and_get_pointer<T>(this->ctx_); const T *w = inputs[1]->get_data_pointer<T>(this->ctx_); // dx += dy * w^t ... } Forward計算 Backward計算 新しいデバイスへの移植は、基本的にココがメイン (他にSetupがある)
  20. 20. 20 Neural Network Librariesの特長3:学習結果はC++で組み込み可 Framework A Exchange format Runtime software B サーバー学習 組み込み推論 “レイヤー zzz がありません” NNLのC++ APIはコアが同じなので大丈夫! C++ core Python API C++ API 学習済 モデル 推論エンジンへの組み込みでよくある躓きポイント 学習時に使ったコアをそのままデバイス上で利用するため、実装がスムーズ
  21. 21. 21 学習済ニューラルネットワークを利用する方法は3通り • Neural Network Libraries Pythonコードからの実行 おすすめ • Neural Network LibrariesのCLI(Python利用)からの実行 簡単 • Neural Network Libraries C++からの実行 コンパクトに製品搭載する際に • https://github.com/sony/nnabla/tree/master/examples/cpp/mnist_runtime python "(path of Neural Network Console)/libs/nnabla/python/src/nnabla/utils/cli/cli.py" forward -c Network definition file included in the training result folder (net.nntxt) -p Parameter file included in the training result folder (parameters.h5) -d Dataset CSV file of input data -o Inference result output folder 1. Neural Network Console上で推論に用いるネットワークを右クリックして、Export、Python Code (NNabla)を選択 2. 学習結果のparamters.h5を、load_parametersコマンドで読み込み import nnabla as nn nn.load_parameters('./parameters.h5') 3. 2によりパラメータが読み込まれた状態で、1でExportされたネットワークを実行(forward)
  22. 22. 22 その他の特長 • 信号処理、回帰、異常検知など、様々なタスクに対応 • ResNet-152など大型のネットワークの設計や学習に対応 • LSTM、GRUなどのRecurrent neural networks (RNN) にも対応 • Generative Adversarial Networks (GAN)、半教師学習など、複数のネットワーク を用いた複雑な構成にも対応 • …
  23. 23. 23 Neural Network Libraries / Consoleまとめ ライブラリ・ツールの提供を通じ、需要の急拡大するAI技術の普及・発展に貢献 Neural Network Libraries https://nnabla.org ニューラルネットワークの研究・開発・実装を効率化するオープンソースソフトウェア Neural Network Console https://dl.sony.com ニューラルネットワークを直感的に設計。学習・評価を快適に実現するツール • 様々な環境に簡単セットアップ • 1つのコードで様々な環境に対応する洗練された文法構 造(CPU/GPU切り替え、マルチノード、動的ニューラ ルネットワーク利用時も必要なコードの変更はごく僅 か) • オーバーヘッドの小さい設計で、シングルGPU/マルチ GPU/マルチノード実行時とも高速 • コンバート不要でC++を用いた組み込みが可能 • ドラッグ&ドロップでニューラルネットワークを設計 • 学習履歴の管理機能など、快適なDeep Learningの研究 開発をサポートする機能を多数搭載 • ニューラルネットワークのチューニングを自動化する、 構造自動探索機能 • 学習したニューラルネットワークは、オープンソースの Neural Network Librariesを用いた組み込みが可能 @NNC_NNL_jpn
  24. 24. SONYはソニー株式会社の登録商標または商標です。 各ソニー製品の商品名・サービス名はソニー株式会社またはグループ各社の登録商標または商標です。その他の製品および会社名は、各社の商号、登録商標または商標です。

×