Adaptive Importance Sampling to Accelerate Training of a Neural Probabilistic Language Model

Bengio Y. and Sen\acute{e}cal J. S. Adaptive importance sampling to accelerate training of a neural probabilistic language model. IEEE Transactions on Neural Networks and Learning Systems (TNNLS), 2008.

一种自适应的负样本采样方法.

符号说明

  • \(w_{t}^T\) 表示序列 \((w_t, \ldots, w_T)\);

Motivation

  • 给定一串文字序列 \(w_1, \ldots, w_T\), 传统的语言模型的任务就是建立这串序列的联合分布:

    \[P(w_1^T) = \prod_{t=1}^T P(w_t|w_1^{t-1}), \]

    这里我们认为每个 word \(w\) 只与前面的 words 有关;

  • 即便如此, 依旧难以建模的 (特别是当 \(T\) 很大的时候), 这时惯用的做法是通过截断的方式来逼近:

    \[P(w_1^T) = \prod_{t=1}^T P(w_t|w_{t-n+1}^{t-1}), \]

    即假设仅与前面的 \(n-1\) 个 words 有关;

  • 此时, 我们只需要建模出 \(n\) 个 words 的分布即可:

    \[P(w_t|w_{t-n+1}^{t-1}) = \frac{P(w_{t-n+1}^t)}{P(w_{t-n+1}^{t-1})}; \]

  • 作者采用什么方式建模暂且不论, 我们假设获得了目标 word \(w_t\) 和它的历史 words \(h_t=w_{t-n+1}^{t-1}\) 之间的 energy \(\mathcal{E}(w_t, h_t)\), 然后通常我们会采用如下方式去建模条件概率分布 (Boltzmann energy distribution):

    \[P(w_t|h_t) = \frac{e^{-\mathcal{E}(w_t, h_t)}}{Z(h_t)}, \: Z(h_t) = \sum_{w \in \mathcal{V}} e^{-\mathcal{E}(w, h_t)}, \]

    然后通过

    \[\tag{1} \min_{\theta}\: -\log P(w_t|h_t) \]

    的方式来进行优化;

  • 但是问题是当 \(\mathcal{V}\) 很大的时候, 即 words 数量很多的时候, 计算 \(Z\) 是很麻烦的一件事情.

本文方法

  1. 首先, 注意到通过梯度求解的时候, (1) 中的梯度为

    \[\nabla_{\theta}(-\log P(x)) = \nabla_{\theta}(\mathcal{E}(x)) - \sum_{x' \in \mathcal{X}} P(x') \nabla_{\theta} (\mathcal{E}(x')) = \nabla_{\theta}(\mathcal{E}(x)) - \mathbb{E}_{P} [\nabla_{\theta'} (\mathcal{E}(x'))], \]

    故我们现在的任务就是估计

    \[\mathbb{E}_{P}[\nabla_{\theta}(\mathcal{E}(x'))]; \]

  2. 一个很自然的想法是从 \(P(x)\) 中采样 \(n\) 个点, 然后

    \[\mathbb{E}_{P}[\nabla_{\theta}(\mathcal{E}(x))] \approx \frac{1}{n} \sum_{i=1}^n [\nabla_{\theta}(\mathcal{E}(x_i))], \]

    但是想要采样的前提必须是知道 \(P\);

  3. 另一种法子是利用 importance sampling:

    \[\mathbb{E}_{P}[\nabla_{\theta}(\mathcal{E}(x))] = \sum_{x \in \mathcal{X}} P(x) \nabla_{\theta} (\mathcal{E}(x)) = \sum_{x \in \mathcal{X}} Q(x) \frac{P(x)}{Q(x)} \nabla_{\theta} (\mathcal{E}(x)) = \mathbb{E}_Q [\frac{P(x)}{Q(x)} \nabla_{\theta} (\mathcal{E}(x))], \]

    于是我们可以从一个已知的便于采样的分布 \(Q\) 中采样 \(y_1, \ldots, y_n\), 然后

    \[\approx \frac{1}{n} \sum_{i=1}^n\frac{P(x_i)}{Q(x_i)} \nabla_{\theta} (\mathcal{E}(x_i)), \]

    虽然能采样了, 计算规模也降下来了, 但是在不知道 \(Z\) 的前提下, 我们还是没法计算 \(P\) ! 所以很可惜, 这样子还是不行;

  4. 我们可以用一个有偏的估计, 注意到

    \[\tag{2} \begin{array}{ll} \frac{1}{n} \sum_{i=1}^n\frac{P(x_i)}{Q(x_i)} \nabla_{\theta} (\mathcal{E}(x_i)) &=\frac{1}{nZ} \sum_{i=1}^n\frac{e^{-\mathcal{E}(x_i)}}{Q(x_i)} \nabla_{\theta} (\mathcal{E}(x_i)) \\ &=\frac{1}{nZ} \sum_{i=1}^n w(x_i) \nabla_{\theta} (\mathcal{E}(x_i)) \quad \leftarrow w(x_i):= \frac{e^{-\mathcal{E}(x_i)}}{Q(x_i)} \\ &\approx \frac{1}{W} \sum_{i=1}^n w(x_i) \nabla_{\theta} (\mathcal{E}(x_i)) \quad \leftarrow W := \sum_{i=1}^n w(x_i). \\ \end{array} \]

  5. 注意到, 当 \(W \rightarrow +\infty\) 的时候 (\(x_i \sim Q\))

    \[\frac{W}{n} = \frac{1}{n} \sum_i w(x_i) \rightarrow \mathbb{E}_Q \frac{e^{-\mathcal{E}(x)}}{Q(x)} = Z \\ \frac{n}{W} \frac{1}{n} \sum_{i=1}^n w(x_i) \nabla_{\theta} (\mathcal{E}(x_i)) \rightarrow \frac{1}{Z} \mathbb{E}_Q [\frac{e^{-\mathcal{E}(x)}}{Q(x)} \nabla_{\theta}(\mathcal{E}(x))] = \mathbb{E}_P [\nabla_{\theta}\mathcal{E}(x)]; \]

  6. 故该方法对应的算法如下:

更简洁的形式

让我们把上述算法的更新写成一个更加简洁的形式 (\(x \sim Q\)):

\[\begin{array}{ll} \nabla_{\theta}(\mathcal{E}(x)) - \sum_{i=1}^n \frac{w(x_i)}{W} \nabla_{\theta}(\mathcal{E}(x_i)) &= \nabla_{\theta} \Big[-\log \frac{e^{-\mathcal{E}(x)}}{\sum_i w(x_i)} \Big] \\ &= \nabla_{\theta} \Big[-\log \frac{e^{-\mathcal{E}(x)}}{\sum_i \frac{e^{-\mathcal{E}(x_i)}}{Q(x_i)}} \Big] \\ &= \nabla_{\theta} \Big[-\log \frac{e^{-\mathcal{E}(x)}}{\sum_i e^{-\mathcal{E}(x_i) - \log Q(x_i)}} \Big] \\ &= \nabla_{\theta} \Big[-\log \frac{e^{-\mathcal{E}(x) - \log Q(x)}}{\sum_i e^{-\mathcal{E}(x_i) - \log Q(x_i)}} \Big]. \\ \end{array} \]

这里 \(Q\) 就是一个校准的作用, 当然, 它和 \(P\) 越接近是越好的.

posted @ 2022-09-18 20:23  馒头and花卷  阅读(233)  评论(3编辑  收藏  举报