Recurrent Marked Temporal Point Processes: Embedding Event History to Vector

发布时间 2023-11-09 16:30:22作者: 馒头and花卷

Du N., Dai H., Trivedi R., Upadhyay U., Gomez-Rodriguze M. and Song L. Recurrent marked temporal point processes: Embedding event history to vector. KDD, 2016.

利用 RNN 学习强度函数 \(\lambda^*\). 在往下阅读前, 请确保对 Temporal Point Process 有一定的了解.

Motivation

  • 在日常生活中, 常常有这样的需求, 知道过往的一些事件 (及其发生的时间), 希望预测下一发生的事件 (及其发生的时间).

  • 严格来说, 我们有序列:

    \[\mathcal{S} = [(t_1, y_1), (t_2, y_2), \ldots, (t_n, y_n)], \]

    我们希望预测: \((t_{n+1}, y_{n+1})\).

  • 通常来说, 我们会有多个序列

    \[\mathcal{C} = \{\mathcal{S}^1, \mathcal{S}^2, \ldots\}, \]

    此为拟合模型所需的数据集.

  • TPP (Temporal Point Process) 就是解决这个问题的一个工具, 它需要给定强度函数:

    \[\lambda^*(t, y) = \lambda^*(t) \cdot f^*(y|t). \]

    注: 这里 \(*\) 表示以 \(\mathcal{H}_{t^-} = \{(t_i, y_i): t_i < t\}\) 为条件.

  • 有了强度函数后, 我们便可以求得密度函数:

    \[f^*(t, y) = p(t_{n+1}=t, y_{n+1}=y| \mathcal{H}_{t_n}) = \bigg( \lambda^* \exp\big(- \int_{t_n}^t \lambda^*(\tau) \mathrm{d} \tau \big) \bigg) \cdot f^*(y|t). \]

  • 传统的关于 \(\lambda^*(t, \kappa)\) 的设计主要在于 \(\lambda^*\) 的设计:

    • Hawkes process:

      \[\lambda^*(t) = \gamma_0 + \alpha \sum_{t_j < t} \gamma(t, t_j). \]

    • Self-correcting process:

      \[\lambda^*(t) = \exp(\mu t - \sum_{t_i < t} \alpha). \]

  • 它们存在一些问题:

    1. \(\lambda^*(t)\) 是固定的, 所以往往仅适用于一些特定的任务;
    2. \(f^*(y|t)\) 的设计往往特别简单.
  • 本文希望通过神经网络 (RNN) 来拟合 \(\lambda^*(t)\), 从而 TPP 更具普适性.

Marked Temporal Point Process

  • 思想很简单, 假设我们现在要预测 \((t_{j+1}, y_{j+1})\).

  • 假设 \(\mathcal{H}_{t_{j-1}}\), 即历史信息已经融入到了隐向量 \(\bm{h}_{j-1}\) 中.

  • 给定当前的事件 \((t_j, y_j)\), 得到它们的 embedding 表示 \(\bm{t}_j, \bm{y}_j\).

  • 则当前时刻的信息建模为:

    \[\bm{h}_j = \max\{ \bm{W}^y \bm{y}_j + \bm{W}^t \bm{t}_j + \bm{W}^h \bm{h}_{j-1} + \bm{b}_h, 0 \}. \]

  • 定义:

    \[\mathbb{P}(y_{j+1}=k|t_{j+1}, \mathcal{H}_j) =f^*(y_{j+1}|t_{j+1}) = \frac{ \exp(\bm{V}_{k, :}^y \bm{h}_j + b_k^y) }{ \sum_{k=1}^K \exp(\bm{V}_{k, :}^y \bm{h}_j + b_k^y) } \]

    实际上就是一个 \(K\) 类的分类 (这里我们假设事件类型是有限的).

  • 然后:

    \[\lambda^*(t) := \exp \bigg( \underbrace{{\bm{v}^t}^T \cdot \bm{h}_j}_{past influence} + \underbrace{w^t (t - t_j)}_{current influence} + \underbrace{b^t}_{base intensity} \bigg). \]

  • 一个比较好的消息是, 上面的函数关于 \(t\) 是容易积分的, 这使得我们可以很容易地球密度函数:

  • 于是, 我们可以通过极大化对数似然进行优化:

    \[\sum_i \sum_j \bigg( \log P(y_{j+1}^i | \bm{h}_j) + \log f(d_{j+1}^i | \bm{h}_j) \bigg). \]

  • 注: 在推理的时候, 作者采用

    \[\hat{t}_{j+1} = \mathbb{E}_{f^*}[t] = \int_{t_j}^{\infty} t \cdot f^*(t) \mathrm{d}t \]

    作为下一时刻的估计. 这里需要通过数值方法近似. (Q: 为啥不用最大概率作为估计呢?)

代码

[official]