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

実践 時系列解析 輪読会 #6

F994a1fd489d95ac93ae9610734a25bc?s=47 Yoichi Tokita
January 13, 2022

実践 時系列解析 輪読会 #6

オライリーから出版された「実践 時系列解析」の輪読会資料です。
ここでは10章の「ディープラーニングによる時系列解析」を解説しています。
https://reading-circle-beginners.connpass.com/event/235537/

輪読会でまとめているリポジトリはこちら。
https://github.com/tok41/note_oreilly_time_seriese_analysis

F994a1fd489d95ac93ae9610734a25bc?s=128

Yoichi Tokita

January 13, 2022
Tweet

Transcript

  1. 「実践 時系列解析」 輪読会#6 2022/01/13 @yoichi_t

  2. ⾃⼰紹介 • tokita(@yoichi_t) • 所属:株式会社Glia Computing (https://www.glia-computing.com/) • 2018年8⽉に設⽴(Co-Founder) •

    機械学習/データ分析のPoC、導⼊⽀援、コンサル • 過去 • 広告会社で推薦システムの開発をやっていたり、警備会社で⼈物⾏動 の研究をしてました
  3. ⾃⼰紹介 • tokita(@yoichi_t) • チョコボールの秘密を解明するために、⽇々データを収集&解析 チョコボール 統計

  4. 10章「ディープラーニングによる時系列 解析」構成 • 前書き • ディープラーニングによる時系列解析についての概要 • 10.1, 10.2 ディープラーニングについての基礎

    • 数学的な定義、プログラミングの導⼊ • 10.3 訓練⽤パイプラインの構築 • ここから実例を通したハンズオン形式 • 深層学習モデルを訓練するにあたっての準備 • 10.4 ~ 10.7 予測モデルの実装 • Full-Connect, CNN, RNN, 修正LSTNet
  5. ディープラーニングによる時系列解析 • 特徴 • ニューラルネットは極めて柔軟なモデルなので⼤きなポテンシャルを 秘めている • 前処理の⼯夫、先読みの避ける⼯夫などまだまだ研究の余地があるが • 対象に対する仮定や関数形式を推測する必要なくモデル化の可能性

    • 定常性の要件がない • ただし、モデルの⼯夫や前処理の⼯夫が必要 • 不均⼀なデータはディープラーニングでは普通に使われる (←ほんとですか??) • 注意 • 全てのモデルには「仮定」がある • モデルの仕組みや思想とデータを理解することで性能の向上につながる
  6. 10.1 ディープラーニングの概念 • ニューラルネットワークの基本は⾏列積 • ⼀般化線形モデルの連鎖 • 中間層の出⼒ 𝐻 =

    f!(𝑊!×𝑋 + 𝐵!) • 出⼒ 𝑌 = f"(𝑊"×𝐻 + 𝐵") 学習パラメータ • ⼊⼒データ𝑋を特徴量𝐻に変換する関数を含めて 学習すると考えると⾒通しが良くなると思う • 出⼒層だけ⾒ると⼀般化線形モデルと等価 • loss関数として何を⽤いるべきか、モデル 構造がデータの仮定を満たすかなど考えら れる
  7. 10.2 ニューラルネットワークのプログラ ミング⽅法 • モデル構造(⾏列積の連鎖、活性化関数など)を計算グラフと して構築 • フレームワークとしてMXNetを利⽤する • notebook

  8. 10.3 訓練⽤パイプラインの構築 • 以降ハンズオン形式で進⾏ • 問題設定 • 321地点の電⼒使⽤量データを利⽤して、 321地点それぞれの電⼒使⽤量の変化量を 予測する

    • データ(右図) • 1時間ごとに計測された使⽤量 • 約3年分 • 予測⽬標 • 3期先(3時間後)の使⽤量の変化量を予測 • 評価指標 • 実測値と予測値の相関 適当な3地点の1週間分の電⼒使⽤量(上)と使 ⽤量の変化量(下)
  9. 10.3 訓練⽤パイプラインの構築 • 深層学習モデルの学習を進めるにあたっての全体的な流れ • パラメータの設定 • 環境設定 • 各種のハイパーパラメータ

    • ⼊⼒データの準備 • データの前処理、整形、分割 • イテレータ構築 • モデル評価指標の定義 • タスクに依存した指標 • モデル定義 • 計算グラフの構築 • 学習フローの作成 • パラメータ更新、validation • モデルの記録 • 全体の組み⽴てと実⾏ ← 10.4~7節 4つのモデルを紹介
  10. 10.3 訓練⽤パイプラインの構築: ⼊⼒データの整形 • ニューラルネットワークの学習の際に データは全系列を直接⼊⼒しない • バッチという分割した単位で⼊⼒ • 分割の仕⽅に⼤きく2通り

    • NC形式、NTC形式 • N: Number of sample (分割されたデータ) • C: Channel (多変量の各変数。今回は321箇所の計測地点) • T: Time (時間。どこまで過去の情報を参照するか) • 多次元の表(配列)をイメージ
  11. 10.3 訓練⽤パイプラインの構築: ⼊⼒データの整形 • NTC形式 • 時系列を窓幅で分割し、それぞれを各サンプルとする • サンプルindex、時間、チャネルで3次元の配列になる 時刻

    A B C t-3 4 8 12 t-2 3 7 11 t-1 2 6 10 t 1 5 9 T=t 時刻 A B C t-2 3 7 11 t-1 2 6 10 T=t-1 時刻 A B C t-3 4 8 12 t-2 3 7 11 窓幅=2
  12. 10.3 訓練⽤パイプラインの構築: ⼊⼒データの整形 • NC形式 • 時間をチャネル(多変量の成分)とみなした形式 • つまり、時間の順序を明⽰せず独⽴な情報として扱う •

    サンプルindex、チャネルで2次元の配列になる 時刻 A B C t-3 4 8 12 t-2 3 7 11 t-1 2 6 10 t 1 5 9 窓幅=2 T A_1 A_2 B_1 B_2 C_1 C_2 t-1 3 4 7 8 11 12 t 2 3 6 7 10 11
  13. 10.4 フィードフォワードネットワーク • 全結合ネットワーク • ⼊⼒ノードと出⼒ノードの全てがそれぞれ異なる重みで結合している A_1 A_2 B_1 B_2

    A_t B_t H • これは時系列を想定して構築されたわけで はない • しかし、ベースラインとしていくつか有効 なポイントがある • ⾼速 • 時間的な構造を明に仮定する必要があ るのかのテストになる NC形式データ
  14. 10.4 フィードフォワードネットワーク • Feed-Forward Networks + Attention • Attention:系列データにおいて、「いつ、どの情報が重要である か?」を学習する機構

    • Colin Raffel+, 2016, FEED-FORWARD NETWORKS WITH ATTENTION CAN SOLVE SOME LONG-TERM MEMORY PROBLEMS, link • フィードフォワードネットワークを系列データに適⽤する⽅法の提案
  15. 10.5 CNN • 畳み込みネットワーク(Convolutional Neural Networks) • ⼩さなカーネル(フィルタ)を分析対象の⾏列(画像など)にスライドさせ ながら新しい⾏列を⽣成する仕組み •

    特定の点の周辺に関係があり、離れた点は依存関係がないというデー タ構造のモデル • 参考 • 畳み込みネットワークの「基礎の基礎」を理解する • 岡⾕, 2015, 深層学習, 講談社 • 須⼭, 2019, ベイズ深層学習, 講談社
  16. 10.5 CNN • 今回学習するモデル(中間の特徴マップの次元は適当、計算してない) input 窓幅(1週間分) 計測点(321地点) 各地点は1次元の系列なのでchannelは1 データ形式はNTC形式(各サンプルは2次元配列) フィルタは8(sz_filt)x321

    output 321地点の使⽤量の変化量 • 畳み込みネットワークの利点が時系 列解析にうまく当てはまるとは限ら ない • 空間が平等に扱われる:時間 的に過去や直近であることな どが考慮されない • スケール不変:時系列では⽇ の周期と年の周期が似ていた としても分けて扱う⽅が良い ことが多いなど • 畳み込み構造は予測モデルの⼀部と しての利⽤が多い • 10.7節の修正LSTNetなど?
  17. 10.5 CNN • 他のCNN系モデル • 因果的畳み込み(WaveNet) • https://deepmind.com/blog/article/wavenet-generative-model-raw-audio • 過去の点のみが畳み込みフィルタに⼊⼒される

    • 時系列を画像に変換する • リカレンスプロット, Wikipedia • 他にもスペクトログラムにするなどの⽅法もよく採られると思う
  18. 10.6 RNN • 回帰型ニューラルネットワーク(Recurrent Neural Networks) • 系列データを⼀つづつ⼊⼒ • 中間層で「状態」が造られる

    • この状態と次の⼊⼒データで 次の出⼒が計算される • シンプルなRNNでは⻑期的な 系列を扱えないという課題があった • そこで、LSTMやその簡易版である GRUが提案された • 今回はGRUを利⽤する
  19. 10.6 RNN:GRUの概説 • シンプルなRNNでの状態𝐻, の計算 • 𝐻# = f(𝑊 $

    𝑋# + 𝑊% 𝐻#&' + 𝑏) • GRUでは、状態𝐻, を計算するためのネットワークが構築される • 過去の状態𝐻#&' の影響をどれほど残すかを 加味した候補状態 * 𝐻# を計算 • 𝐻#$! を残す割合については[𝑅# = 𝜎(𝑋#, 𝐻#, 𝑊 %)]で計算 • * 𝐻# と𝐻#&' を適切な割合で混合して𝐻# を計算 • 混合の割合は[𝑍# = 𝜎(𝑋#, 𝐻#, 𝑊 &)]で計算 • 参考 • 農学情報科学, GRU, link • Dive into Deep Learning, 9.1, link
  20. 10.6 RNN:GRUの概説

  21. 10.6 RNN:オートエンコーダ • seq2seqモデル • Bahdanau et al., 2015, NEURAL

    MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE, link • 逐次出⼒するモデルでは不向きな タスクがある • 翻訳タスクでは、語順も⻑さも⾔語に よって異なる • ⼊⼒の系列データを全て処理して 特徴ベクトルを作成(エンコーダ) この特徴ベクトルに基づいて出⼒を ⽣成(デコーダ) 参考: CVMLエキスパートガイド, seq2seq (sequence-to-sequence), link
  22. 10.7 アーキテクチャの組み合わせ • ニューラルネットワークの本質は⾏列積に代表される演算 • 線形回帰モデル(ARモデルなども)もニューラルネットワークで表現 できる(1層のNNは線形モデルと等価) • これらを組み合わせることも当然可能 •

    LSTNet(モデルの詳細は読解できてません) • https://perma.cc/9KM2-RNPK
  23. まとめ • ディープラーニングの仕組みについて概要を眺めた • ⽣物学的な観点は忘れて、純粋に⾏列演算だと理解すると良いと思い ました • 実例を使ったハンズオンで4つのモデルを実装してみた • (CPU環境では時間がかかりすぎる。。。)

    • 最も単純なフィードフォワードネットワークでもより複雑な構造のモ デルよりもスコアが良かった(修正LSTNetは別) • パラメータ探索が⽢い、データ構造をより意識したモデルにチューンするなどで より⾼い精度が出せる可能性はある • 同じ課題に対して多くの⼿法が考えられる • タスクとデータの背景構造を意識してモデルを設計することが必要に なってくると思いました(NNを使うにしても仮説は重要と思う)