Upgrade to Pro — share decks privately, control downloads, hide ads and more …

再起型ニューラルネットワーク入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Ryota Nishi Ryota Nishi
November 25, 2019

 再起型ニューラルネットワーク入門

Avatar for Ryota Nishi

Ryota Nishi

November 25, 2019

More Decks by Ryota Nishi

Other Decks in Technology

Transcript

  1. No. 2 概要 (1) 再帰型ニューラルネットワーク (RNN) (A) 時系列データ,自然言語などの連続的なデータを学習可能 (B) 本スライドでは,シンプルな

    RNN と LSTM を解説 (2) LSTM の利用例として,2017年度コンテスト応募作品「Pigeon」の エネルギー使用量予測のモデルを紹介
  2. No. 3 目次 (1) Simple RNN (Elman Network) (2) Long

    short-term memory (LSTM) (3) Pigeon におけるエネルギー使用量予測
  3. No. 4 Simple RNN (Elman Network) 入力層 出力層 中間層 −1

    −1 −1 +1 +1 ⋯ ⋯ (2) t-1 の中間層の出力が t の中間層の入力になる − 1 + 1 1つ前のデータを扱うことで (理論上) 連続的な情報を学習可能 (1) 可変長のデータを扱うことができる
  4. No. 5 RNN における誤差逆伝搬法の問題点 ・・・ 誤差伝搬 = 1 = 2

    = 3 = ・・・ (1) 時間方向に展開したネットワークで時間を遡って誤差逆伝搬を行う (2) N が大きくなると重みが何度も掛けられ勾配の爆発・消失が発生 勾配消失により,長期依存を学習できなくなる
  5. No. 6 目次 (1) Simple RNN (Elman Network) (2) Long

    short-term memory (LSTM) (3) Pigeon におけるエネルギー使用量予測
  6. No. 7 Long short-term memory (LSTM) LSTM Block 入力層 出力層

    中間層 −1 (1) RNN の勾配消失問題に対処し,長期依存を学習可能 (2) 中間層を LSTM Block に置き換えることで実現
  7. No. 8 LSTM Block (2) LSTM Block の構造には様々なバージョンが存在 (A) オリジナル(95,97年)[Hochreiter

    & Schmidhuber, 95;97] (B) 忘却ゲートの導入(99年)[Gers & Schmidhuber, 99] (C) Peephole Connectionの導入(00年)[Gers & Schmidhuber, 00] (D) Full Gradientの導入(05年)[Graves & Schmidhuber, 05] (1) 入力ゲート,出力ゲート,忘却ゲートなどのゲートを持つ
  8. 第1世代 LSTM th + th × σ + + ×

    σ + 出力層 LSTM Block 入力ゲート 出力ゲート −1 −1 −1 To recurrent input σ シグモイド関数 th tanh 関数 前の中間層から の信号 :入力層からの信号 :出力層,次の中間層への信号 −1:前の中間層からの信号 , , :にかかる重み , , :−1にかかる重み 入力ゲート: 前のユニットからの入力を調整 出力ゲート: 次のユニットへの出力を調整 Constant Error Carousel (CEC) No. 9
  9. 忘却ゲートを導入した LSTM :入力層からの信号 :出力層,次の中間層への信号 −1:前の中間層からの信号 , , , : にかかる重み

    , , , : −1にかかる重み th + th × σ + + × σ + 出力層 LSTM Block 入力ゲート 出力ゲート −1 −1 −1 To recurrent input σ シグモイド関数 th tanh 関数 前の中間層 からの信号 × σ + 忘却ゲート −1 入力ゲート: 前のユニットからの入力を調整 出力ゲート: 次のユニットへの出力を調整 忘却ゲート: 不要な記憶を忘れることを学習 No. 14
  10. + × σ + 忘却ゲート −1 No. 15 忘却ゲートによる記憶の消去 (1)

    CEC を上書きするためには大きな入力を繰り返す必要がある (対処) 直前の状態を記憶する量を調整 ∴ 短期間に大きく記憶を更新したい場合に対処できない 忘却ゲートの値により CEC の記憶量を調整
  11. No. 16 目次 (1) Simple RNN (Elman Network) (2) Long

    short-term memory (LSTM) (3) Pigeon におけるエネルギー使用量予測
  12. HEMS データの予測 (2) 未来のHEMSデータを予測 (1) 過去の HEMS データを学習 (3) 予測値から在宅確率を算出

    2.5 2.0 1.5 1.0 0.5 0.0 電力使用量 (kWh) 高精度な予測を実現 <在宅確率の予測手順> HEMS データの予測結果 現在の HEMS データから,現在の在宅状況を推測可能 未来の HEMS データを予測し,未来の在宅確率を推測 No. 17 HEMS データ: 家庭のエネルギー使用量を管理するシステム
  13. 学習データ No. 18 (1) 利用する HEMS データは1時間ごとに電力,ガス,水道の3つの 使用量を記録 (2) 1週間分のデータをまとまりとして,傾向を学習

    電力 ガス 水道 ・・・ ・・・ ・・・ 1週間分 電力 ガス 水道 ・・・ ・・・ ・・・ 電力 ガス 水道 ・・・ ・・・ ・・・ 電力 ガス 水道 ・・・ ・・・ ・・・ 電力 ガス 水道 ・・・ ・・・ ・・・ 電力 ガス 水道 ・・・ ・・・ ・・・ 電力 ガス 水道 ・・・ ・・・ ・・・ 24時間分
  14. 学習モデルの概要 No. 19 24 3 * CNN * ・・・ ・・・

    ・・・ LSTM 7 CNN (1) CNN と LSTM を組み合わせることで,短期的な周期と長期的な 周期を学習
  15. No. 20 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (256 → 256) (9) ドロップアウト層 (20%) (10) 全結合層 (256 → 3) (11) プーリング層: GlobalAveragePooling
  16. No. 21 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (9) ドロップアウト層 (20%) (10) 全結合層 (11) プーリング層: GlobalAveragePooling TimeDistributed レイヤラッパを用いて, 1日ごとにネットワークを構築 日ごとの短期的な周期を学習(?)
  17. No. 22 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (256 → 256) (9) ドロップアウト層 (20%) (10) 全結合層 (256 → 3) (11) プーリング層: GlobalAveragePooling
  18. No. 23 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (256 → 256) (9) ドロップアウト層 (20%) (10) 全結合層 (11) プーリング層: GlobalAveragePooling 1週間分の長期的な周期を学習
  19. No. 24 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (256 → 256) (9) ドロップアウト層 (20%) (10) 全結合層 (256 → 3) (11) プーリング層: GlobalAveragePooling
  20. No. 25 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (256 → 256) (9) ドロップアウト層 (20%) (10) 全結合層 (256 → 3) (11) プーリング層: GlobalAveragePooling
  21. No. 26 Keras による学習モデルの構築 * コード: https://github.com/nomlab/pigeon-cli/blob/master/model.py (1) 入力層: shape

    = (7, 24, 3) (2) 畳み込み層×2 (A) 1×4 のフィルタ128個 (B) 1×2 のフィルタ128個 (3) プーリング層: 1×2 MaxPooling (4) ドロップアウト層 (20%) (5) 平滑化 (6) 全結合層 (1,536 → 256) (7) LSTM (8) 全結合層×2 (256 → 256) (9) ドロップアウト層 (20%) (10) 全結合層 (256 → 3) (11) プーリング層: GlobalAveragePooling 1×7 電力 ガス 水道 各チャンネルの平均を算出
  22. No. 27 参考 (1) Qiita: わかるLSTM ~ 最近の動向と共に https://qiita.com/t_Signull/items/21b82be280b46f467d1b (2)

    SlideShare: Recurrent Neural Networks https://www.slideshare.net/beam2d/pfi-seminar-20141030rnn (3) 【Day-18】時系列のディープラーニング、RNNのまとめとKeras実装 http://www.procrasist.com/entry/18-rnn (4) Github: nomlab/pigeon-cli https://github.com/nomlab/pigeon-cli