RNN系列

基于固定窗口的NN语音模型和RNN语言模型

Bengio等人利用神经网络来表示语言模型,在语言模型的训练过程中可以得到单词的分布式表示,具体的神经概率语言模型图如下:


该网络的主要思想是用前$n−1$个词的向量来估计当前词的概率,具体公式为:

可以看出传统语言模型在估计概率的时候需要固定$n$的大小,否则无法统计概率$P(w_i|w_{i−(n−1)},…,w_{i−1})$。 而 RNN 的最大优势在于可以统计 $P(w_i|w_1,…,w_{i−1})$ 的概率。

RNN语言模型中非常关键的一点是每个时刻采用的 $W$ 矩阵都是一个,所以参数规模不会随着依赖上下文的长度增加而指数增长。

RNN 中的BP

多变量链式法则

如果对于函数 $f(x, y)$, 每个变量都是 $t$ 的函数,即 $x(t)$, $y(t)$, 那么

对于 RNN 来说,$W_h$ 出现在每一个时刻,所以在计算时应该对每一次的梯度求和。

如果只考虑最后两个时刻$t$和$t-1$,那么:

记 $\gamma^{(t)}=\frac{\partial J^{(t)}}{\partial h^{(t)}}$,考虑到梯度可以按时间展开,那么有 $\gamma^{(t-1)}=\frac{\partial J^{(t)}}{\partial h^{(t-1)}}$,所以上述式子可以简写为

而由 $\frac{\partial h^{(t)}}{\partial h^{(t-1)}}$ 可以看出,这一项会带来梯度弥散或者梯度爆炸
上面的公式是为了详细说明下面的图:

梯度问题解决办法

  1. 梯度爆炸:当梯度超过一个阈值的时候,将梯度裁剪到一个合适的值
  2. 梯度弥散:使用 GRU 或者 LSTM

Q: 使用 $l2$ 正则会有助于改善梯度弥散吗?A: 不会,$l2$ 会让权重变为0,使情况更糟。

Q: 对于一个拥有2个隐层的NN来说,增加隐层个数会有助于改善梯度弥散吗?
A: 不会,梯度弥散就是因为层数太多引起的。

LSTM

通过更改 RNN 单元结构,使得 从 $c_t$ 到 $c_{t-1}$ 的反向传播与 $W$ 无关