Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2018/02/27 Recurrent Neural Networks starting with Neural Network Console

2,920 views

Published on

2018年2月27日開催した「ソニーのNeural Network Console大勉強会 #2」で使用したスライドです。

Published in: Software

2018/02/27 Recurrent Neural Networks starting with Neural Network Console

  1. 1. ソニーのNeural Network Console大勉強会 #2 ソニーネットワークコミュニケーションズ株式会社 / ソニー株式会社 シニアマシンラーニングリサーチャー 小林 由幸 Neural Network Consoleではじめる Recurrent Neural Networks
  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 目次 • Recurrent Neural Networks概要 • Neural Network ConsoleでRNNを扱う方法 • RNNサンプルプロジェクト解説 • 学習したRNNを自分のアプリケーション上で実行する方法 • 数式なしで理解するLSTM • Q&Aとまとめ
  5. 5. 5 Recurrent Neural Networks(RNN)とは? Feed Forward Neural Networks (FFNN) Recurrent Neural Networks (RNN) 出力側から入力側へのフィードバックを持つニューラルネットワーク NN NN Recurrent 入力 出力 入力 出力
  6. 6. 6 Recurrent Neural Networks(RNN)とは? Feed Forward Neural Networks (FFNN) Recurrent Neural Networks (RNN) T 入力 出力 一問一答 出力は現在の 入力のみから 決まる S S O O N N Y t-3 t-2 t-1 t 系列 出力の推定に過去のデータも利用することで、より知的な処理が実現できる 出力の推定には 現在の入力に加 え、過去の入力 データの処理結 果も利用 S→O→Nと 来たから 次はYでは? Recurrent
  7. 7. 7 様々なRNNの使い方 Many to One 時系列の入力データから単一の出力を得る 応用例:時系列データの認識等 One to Many 単一のデータから時系列出力を得る 応用例:画像へのキャプショニング 4匹の猫 Many to Many (1) 時系列の入力データの各時刻に対応する 出力を得る 応用例:時系列データの時刻ごとの認識、 時系列予測 Many to Many (2) 時系列の入力データから特徴を抽出し、そこから新たな時系列出力を得る 応用例:機械翻訳、対話 Here we go さあ 行くぞ 1枚の画像 単語時系列 (複数の単語)
  8. 8. 8 事例:Visual Question Answering 画像と、画像に対する質問の2つの入力を元に、質問に対する答えを推定する問題 入力1: 画像 入力2: 質問文 Cloudy What is the weather like? CNN LSTM(RNN) NN 出力:質問に対する答え 質問文の解釈にRNNを利用
  9. 9. 9 VQA Challenge 紹介ページ: Visual Question Answeringのコンペティション 論文:「Multimodal Compact Bilinear Pooling for Visual Question Answering and Visual Grounding」 Akira Fukui, Dong Huk Park, Daylen Yang, Anna Rohrbach, Trevor Darrell, Marcus Rohrbach https://arxiv.org/abs/1606.01847 http://demo.berkeleyvision.org/ 2016年の優勝チームはUC Berkeley&SONY DEMO
  10. 10. 10 高い応用可能性を持つRNN 構成と入出力次第で様々な機能を実現することができる …入力 出力 実現する機能 入力 出力 映像認識 映像(画像系列) カテゴリ 株価の予測 株価(時系列信号) 1時刻先の株価(時系列信号) 音声認識 音声(スペクトル等の系列) 文字列(単語系列) 機械翻訳 英単語列(単語系列) 日単語列(単語系列) 人工無能(チャット) 入力発話(単語系列) 期待応答の単語列(単語系列) センサ異常検知 センサ信号(時系列信号) 異常度(時系列信号) ロボット制御 センサ(時系列信号) アクチュエーター(時系列信号) … 実現する機能 記憶 RNNはチューリング完全 =コンピュータに実現できることは 何でも実現できるポテンシャルを 秘めている
  11. 11. Neural Network ConsoleでRNNを扱う方法
  12. 12. 12 Neural Network ConsoleでRNNを扱うには? このような時系列方向に展開されたネットワークを 手で書くこともできます。が… t-3 t-2 t-1 t t-3 t-2 t-1 t 各時刻の 入力データ 各時刻の ラベル ※2つのAffineレイヤーは、全ての時刻で共通の ParameterScopeを使用するようにして、 各時刻で係数を共有する RecurrentInput/OutputとDelay レイヤーで簡潔に記述できます 簡単! 全時刻をまとめた入力データ 全時刻をまとめたラベル
  13. 13. 13 Neural Network ConsoleでRNNを扱うには? - ネットワーク構成 処理をfor文の要領でRecurrentレイヤーで囲む。Delayレイヤーで次の時刻に情報を引き継ぐ 全時刻をまとめた入力データ 全時刻をまとめたラベル 各時刻における処理を RecurrentInput~ RecurrentOutputで囲む 1つ前の時刻の情報を フィードバックする箇所に Delayを挿入する RecurrentInput/Outputの Axisプロパティには 系列の軸のIndexを設定 ←各時刻のクラスラベル
  14. 14. 14 Neural Network ConsoleでRNNを扱うには? - データセット S O N CSVデータセットのヘッダに、__(ダブルアンダースコア)+indexを付加することで 系列データを表現できます x__0 x__1 x__2 x__3 y__0 y__1 y__2 y__3 18 14 13 24 0 1 2 3 … A B C D 例えば各画像のサイズが1,28,28の場合、4つのデータが スタックされてxのサイズは4,1,28,28となる yのサイズは4となる その他、CSVデータにIndexを付加した場合、データのサイズは系列数,行数,列数になる
  15. 15. 15 Neural Network ConsoleのRNNサンプルプロジェクト elman_netサンプルプロジェクト:最もシンプルなRecurrent Neural Networks 手書き数字画像の高さ方向を時系列データとみなし、 1ラインずつRNNに入力 時系列 (28時刻) 1時刻分のデータ=28次元 (横1ライン=28 pixel) 28 pixel 28 pixel Sliceレイヤーで最後の1時刻分の RNN出力を取り出し logistic_regiressionサンプルプロジェクト 同様に、9かどうかを判別する学習
  16. 16. 16 そのほかのRNNサンプルプロジェクト(1/2) bidirectional_elman_net elman_net双方向化したもの elman_net_with_attention attentionを加えたelman_net long_short_term_memory(LSTM) 現在最もポピューラーなRNNアーキテクヤ (後ほど解説) 編集を加えることで、柔軟にオリジナルのRNN構造を試すことができる
  17. 17. 17 そのほかのRNNサンプルプロジェクト(2/2) gated_recurrent_unit(GRU) LSTMよりシンプルながら LSTMに匹敵する性能を実現 stacked_GRU GRUを縦に2つつなげた構造 LSTM_auto_encoder LSTMで圧縮した画像を、再度復元する Many to Manyのサンプル
  18. 18. 18 (参考)RNNを扱う時によく使うNNCのレイヤー レイヤー名 機能 使い道 Concatenate 複数のテンソルを結合して1つにする 1時刻前から引き継いだデータと、現 在時刻のデータを結合するためなどに 使用 Reshape テンソルの要素数はそのままに、形状 だけを変更する 複数のデータをConcatenateする際、 複数のデータの形状を合わせるためな どに使用 Transpose テンソルの次元の順序を入れ替える 系列軸の順序の入れ替えなどに使用 Slice テンソルの一部を取り出す RecurrentOutputから最後の1時刻の データを抽出する場合などに使用 Unpooling テンソルのサイズを、データをコピー することで大きくする 1時刻分のデータを複数時刻分コピー して伸長する場合に使用 Flip データの順序を反転する Bidirectional RNN(双方向RNN)の際、 データの順序を反転させるために使用
  19. 19. 19 学習したRNNを自分のアプリケーション上で実行する方法 RNNを用いた認識処理は、同じネットワークの計算を 繰り返し行うもの t-3 t-2 t-1 t t-3 t-2 t-1 t 各時刻の 入力データ 各時刻の ラベル 赤枠で示すネットワークの処理を、 時間ごとに繰り返し行う つまり推論時には、1時刻分のみ処理する ネットワークがあればよい 1時刻前から 引き継ぐデータ 現在時刻の 入力データ 現在時刻の 出力 次の時刻に 受け渡すデータ 1時刻前から引き継ぐデータを受け取り、 次の時刻に引き継ぐデータを出力する ネットワーク
  20. 20. 20 学習済RNNを編集し、1時刻分のみ処理するネットワークを作成 1. 学習結果を「Open in EDIT Tab with Weight」を用いて開く 2. EDITタブで1時刻分のネットワークに 編集 • RecurrentInput/Outputの削除 • Inputレイヤーの入力サイズを1時刻分 のデータサイズに変更 • DelayレイヤーをInputレイヤーと Identityレイヤー(出力用に使用)で 置き換え 3. CONFIGタブでMax Epochを0に設 定して学習実行 ※Windows版Version 1.10では学習実行ボタンの右 クリックメニューから「Create Training Result」選 択でも作成可能 作成した1時刻分のみ処理するネット ワークを元に(学習処理を伴わず)学 習結果が作成される elman_netサンプルでの編集例
  21. 21. 21 この後の推論実行方法は、FFNNの場合と同じ • 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. 数式なしで理解するLSTM ( Long short term memory )
  23. 23. 23 • 1層のAffineのみによる演算 • 単一の出力のみを次の時刻に引き継ぐ LSTM(Long short term memory)とは 長期の記憶の保存と学習の安定性に優れたRNNの構成 Elman-net LSTM • 1層のAffineと、3つのGateによる演算 • 各時刻の出力Hに加え、各時刻における状態 C(Cell state)を次の時刻に引き継ぐ
  24. 24. 24 Elman-netからLSTMへ(1/5) Elman-net Neural Network Consoleのネットワーク表示を見ながら Elman-netとLSTMの差分を追っていきます。
  25. 25. 25 Elman-netからLSTMへ(2/5) 過去の出力を足し続けながら保持する Cell Stateを追加 ⇒遠い過去の記憶の消失を防ぐ効果
  26. 26. 26 Elman-netからLSTMへ(3/5) 入力データを選択的に取り込むInput Gateを追加 Sigmoidの出力が1.0 :入力をそのまま取り込む Sigmoidの出力が0.0 :入力は破棄される ⇒Cell Stateが入力によらず毎回書き換えられるのを防ぎ さらに長期の記憶を保持しやすく 0 0.2 0.4 0.6 0.8 1 -6 -1 4 Output Input Sigmoid
  27. 27. 27 Elman-netからLSTMへ(4/5) 各時刻の出力をコントロールする Output Gateを追加
  28. 28. 28 Elman-netからLSTMへ(5/5) 記憶を選択的に忘却する Forget Gateを追加 複数の工夫がLSTMの高い記憶力と学習の安定性を支えている。RNNを扱うならまずはLSTMから
  29. 29. Q&Aとまとめ
  30. 30. 30 Q. テキストの入出力方法は? A. 事前にテキストの単語Index系列もしくはベクトル系列への変換が必要です ベクトル系列形式のテキスト ・各単語が固定長次元のベクトルで表現される ・各単語の固定長ベクトルはWord2vec等で学習 単語Index系列 ・0から始まる単語のIndexを文頭から順に並べるのみ まずはテキストを単語に分割し、Index化する ・例えば3千個の頻出単語を選択し、その他は1つの 単語にまとめるなどする ・上記3001単語に0~3000のIndexを振る 文末 ↓ ↑ 文頭 文末 ↓ ↑ 文頭 ←1単語分の ベクトル
  31. 31. 31 Q. 最近系列データもCNNを使ったほうが性能が良いと聞くのですが A. 適材適所です • 画像系の研究で培われた様々なテクニックを用いることができるCNNを用いたほうが性能が出るケースが増え ています • 一方、アプリケーションによってはRNNを用いたほうがメモリ量、演算量、レイテンシを小さくできるなどの メリットが生きるケースがあり、ケースバイケースでより適した構造を選択する必要があります Convolutional Neural Networksを用いた場合 Recurrent Neural Networks を用いた場合 全時刻分のデータをまとめて入力 CNNの出力として、 全時刻分のラベルをまとめて予測 1時刻分ずつデータを入力 1時刻分ずつラベルを予測
  32. 32. 32 まとめ • RNNは出力側から入力側へのフィードバックを持つニューラルネットワーク • RNNにはOne to Many、Many to One、Many to Manyといった構成がある • 構成と入出力次第で様々な機能を実現することができる • 最初に使ってみるRNNの構成としてはLSTMがおすすめ • Neural Network Consoleでは、RecurrentInput/OutputレイヤーとDelayレイ ヤーを用いて柔軟にRNNを扱うことができる • 学習したRNNは、1時刻分を処理するネットワークを切り出してデプロイ Neural Network Consoleで快適なRNNライフを twiter @NNC_NNL_jpn
  33. 33. SONYはソニー株式会社の登録商標または商標です。 各ソニー製品の商品名・サービス名はソニー株式会社またはグループ各社の登録商標または商標です。その他の製品および会社名は、各社の商号、登録商標または商標です。

×