論文読みメモ: Latent Ordinary Differential Equations for Irregularly-Sampled Time Series(その1)

以下の論文を読みます。

Yulia Rubanova, Tian Qi Chen, David K. Duvenaud. Latent Ordinary Differential Equations for Irregularly-Sampled Time Series. In Advances in Neural Information Processing Systems 32, 2019.
https://papers.nips.cc/paper/8773-latent-ordinary-differential-equations-for-irregularly-sampled-time-series
※ キャラクターは架空のものです。解釈の誤りは筆者に帰属します。おかしい点がありましたらご指摘ください。
f:id:cookie-box:20190101155733p:plain:w60

前回のあらすじです。

「不規則にサンプリングされた時系列のための隠れ常微分方程式」? 不規則にサンプリングされた時系列は通常のRNNで扱うのは難しいと。それはそうですね。そこでRNNを、常微分方程式による連続的な隠れ状態をもつものに魔改造されたのですね。なるほど、だから「隠れ常微分方程式」ですか…。そもそもこれ以前に Latent ODE という手法が提案されているのですね。この ODE-RNNs も Latent ODE もポアソン過程から不規則にサンプリングされた系列を上手くモデリングしたようですね。この ODE を用いた手法は既存の RNN ベースの手法よりアウトパフォームしたということです。
ところでRNNには「等間隔でない」系列の特徴を学ぶのは難しいんですか? RNNに入力するのって必ずしも時間方向に増えていく系列ではないと思うので等間隔というのがよくわからないんですが、例えば文章を形態素ごとに入力していくのとかは「等間隔」なんですか?

f:id:cookie-box:20190101160814p:plain:w60

RNNは「最新の入力」と「直前までの特徴」から「最新の特徴」を出すモデルだよね。「直前までの特徴」を「最新の特徴」に更新できるだけの情報が各 x_i に含まれていればいいと思うから、不等間隔というよりはそれで情報が欠落するのが問題なんじゃないかな。もちろん、情報の欠落がなかったとしても、あまりにばらばらな間隔の情報がどんどんモデルに投げ込まれてきたら、パターンが爆発して、モデル側も学習しづらいと思うけど。

f:id:cookie-box:20190101155733p:plain:w60

うーん、それで、不等間隔なデータを取り扱う常套手段として、「等間隔になるようにプレ処理する」がありますが、これは情報を損ねると。特に情報が到着したタイミングなどを。それはそうですね。だから連続時間に対応できるモデルが望ましいといっています。それで、近年では観測時点の間で内部状態が指数関数的に減衰するような RNN(RNN-Decay)が発表されているそうです。指数関数的に減衰させるというのはそれはそれでいいんでしょうか? まあ、あまりに長い間観測値が入ってこなかったらRNNさんもいまどんな状況なのか全然わからなくなりそうなので、そういう意味ではもっている情報が減衰していくことになるんでしょうか…。また別のモデルとして、著者の方々のグループが過去に Neural ODEs というのを発表しているようですね。これは Figure 1 をみるに隠れ状態の各次元の時間変化を柔軟に記述しているようですが、どのようなものなんでしょうか。これは RNN ではなさそうですね。今回はその Neural ODEs で構築した、ODE による連続的な状態変化を RNN に組み込むといった感じなのですね。それが ODE-RNN だと…。それで2節に入ると、不等間隔なデータをRNNで取り扱う最もシンプルな方法は、前回の入力からの時間差をモデルに入れてしまうことだとありますね。確かに、これならRNNさんはいまの入力をどのように受け止めるべきか知ることができるかもしれません。

 h_i = {\rm RNNCell}(h_{i-1}, \Delta_t, x_i)\tag{1}
しかしこれだと観測間の隠れ状態をどう定義するかに疑問が残る…? RNNさんが出力するのは、「これまで受け取った系列の特徴はこうです」ですよね? 観測間の隠れ状態を定義する必要があるんですか??

f:id:cookie-box:20190101160814p:plain:w60

だから、判定を常に出しっぱなしにしてほしいんだろうね。例えば、不定期的にジムにトレーニングに来るお客さんがいたとして、その人がもうジムに来なくなってしまう確率を毎日出しっぱなしにしたいとか? きっと日々変化していくよね。最後に来てから日が空くほど徐々に離脱確率は高まっていきそうだし、来てくれたらまた下がりそうだし。離脱確率が高い人が判定できれば確率が高い人たちだけに無料クーポンを配布するとかできそうだよね…まあそんな風に行動履歴をつかえるのかとか、クーポンが配布されなかったお客さんに不公平感か出ないかとかはありそうだけど。…これだと単純そうだから医療の例とかの方がいいのかな。色々な症状が不定期的に出て来院する患者さんが向こう1年に重大な病気を発症する可能性、とか?

f:id:cookie-box:20190101155733p:plain:w60

急に中途半端に現実的になりましたね…ともかく、いまの問題設定は通常のRNNの想定と少しずれている気がします。通常のRNNってこうでしょう?

  • 「最新の入力」と「直前までの特徴」から「最新の特徴」を出す。そういう仕組みで現在までに順番に入力されてきた入力たちの特徴を出す。
しかし、いまの文脈だとこうなのですね?
  • 不定期的に入力される入力を受け取って常に特徴を出し続ける。
これだけ状況が変わると、まずリカレントにやるべきなんでしょうか…まあそれで、状態を連続的に出し続ける1つの方法は、ずっと同じ状態を出し続けることですね。しかしそれではよくないだろうということで次の RNN-Decay ですか。
 h_i = {\rm RNNCell} \bigl( h_{i-1} \cdot \exp(- \tau \Delta_t), x_i\bigr)\tag{2}
左辺が h_i ですが連続時間の特徴を考えるなら添え字を t にした方がいい気もしますが、とにかく x_i が入力されたときに出力される状態(特徴)が h_i ですね。しかし RNN-Decay では予測性能がよくならなかったと…何のタスクでなんでしょうか。そもそも RNN-Decay 自体何がやりたいのかよくわからないし…。

f:id:cookie-box:20190101160814p:plain:w60

何がしたいのかも含めて読んでいけばわかるんじゃないかな。次に Neural ODEs の話が出てくるけど、隠れ状態 h(t) を次の ODE の解とするんだね。

\displaystyle \frac{dh(t)}{dt} = f_\theta \bigl( h(t), t \bigr), \; h(t_0) = h_0 \tag{3}
この f_\theta を学びさえすれば好きな時刻の h(t) を手に入れられると。これはどのタイミングで学習してどのタイミングで利用するモデルなのかな…。まあそれで今回提案する ODE-RNN は3ページ目の上にある Algorithm 1 をみればいいのかな。つまり、各時刻 t_i に、状態をまず時間発展させて、時間発展させた状態を通常のRNNのようにつかうんだね。
  • 「最新の入力」と「直前の特徴をその時刻まで時間発展させたもの」から「最新の特徴」を出す。そういう仕組みで現在までに順番に入力されてきた入力たちの特徴を出す。
入力がない時刻についても時間発展させた状態が取り出せそうかな。RNN-Decay は減衰しかできなかったのを、より柔軟な時間発展が学習できるようにしたって感じだね。

(その2があれば)つづく