CS224N笔记(三) Lecture 6~7:深入理解循环神经网络RNN模型

本文深入探讨循环神经网络(RNN)的基础结构,训练与优化过程,特别是梯度计算,以及梯度消失和梯度爆炸问题。RNN因其能够处理不定长序列并捕捉长时依赖而备受关注,但梯度消失是其主要挑战。文中还介绍了RNN在词性标注、文本分类和生成任务中的应用。
摘要由CSDN通过智能技术生成

本文将从语言模型的概念出发,引出循环神经网络RNN的概念,对RNN的结构进行描述,详细推导了梯度计算过程,并解释RNN容易出现梯度消失、梯度爆炸的原因。文章的最后对RNN的应用场景进行了简单的介绍。

一、背景知识

1. 语言模型

在讲解循环神经网络RNN之前,先来回顾一下什么是统计语言模型,之前说到统计语言模型就是用以计算一个句子的概率的模型,简而言之就是判断一句话“是不是正常人说的”,常常会挖空语料中的某些位置,要求预测该位置填什么词最合适。其模型可以归结为:

p ( W ) = p ( w 1 T ) = p ( w 1 , w 2 , . . . , w T ) = p ( w 1 ) ⋅ p ( w 2 ∣ w 1 ) ⋅ p ( w 3 ∣ w 1 2 ) … p ( w T ∣ w 1 T − 1 ) p(W)=p(w_1^T)=p(w_1,w_2,...,w_T)=p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1^2) \dots p(w_T|w_1^{T-1}) p(W)=p(w1T)=p(w1,w2,...,wT)=p(w1)p(w2w1)p(w3w12)p(wTw1T1)

上面这条公式中,W表示一个句话,它是由单词 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T w1,w2,...,wT按顺序排列而构成的,再次强调见到 w 1 T w_1^T w1T不要认为是T幂次,它就是表示首单词为 w 1 w_1 w1,长度为T,末尾单词为 w T w_T wT的一句话。

2.n-gram

上面的公式其实可以表示一切语言模型,如果我们是以统计信息来构建模型,那么就叫做统计语言模型,比如n-gram,其表述形式为:

p ( w k ∣ w 1 k − 1 ) ≈ c o u n t ( w 1 k ) c o u n t ( w 1 k − 1 ) p(w_k|w_1^{k-1})\approx\frac{count(w_1^k)}{count(w_1^{k-1})} p(wkw1k1)count(w1k1)count(w1k)

在深度学习未应用与NLP时,n-gram模型是非常流行的,但它存在以下问题

  1. 稀疏性问题:随着n增大,语料库中出现特定的连续词语组合的可能性会越小,看你从词表中找不到特定的连续词语组合。
  2. 存储问题:需要存储一个非常大的共现矩阵,且还会随着n增大而增大。
  3. n-gram通常无法捕捉深层的语义信息。

3. 固定窗口神经语言模型

为了解决这一问题,提出了固定窗口神经语言模型,它是通过将一个窗口内的词语的词向量拼接起来,送入全连接神经网络,最后通过softmax函数预测概率。这里的词向量one-hot,但其实用word2vec的词向量应该也是可以的。

在这里插入图片描述

这一模型的好处在于:

  1. 不存在稀疏性问题
  2. 不需要存储所有的n-gram

但是它也有缺点:

  1. 固定窗口不能太小也不能太大,太小捕捉不到上下文信息,太大拼接的向量会异常大,对机器要求很高。
  2. 虽说每个词向量拼接在了一起,但是它们分别对应参数矩阵W的一条向量,参数不共享。这样不一定合理,因为它们其实都在做一件事,我们希望参数具有泛化性,对任意位置的处理是一致。
  3. 窗口大小是固定的,一旦确定不能更改。

二、基本结构

上面说了固定窗口神经语言模型的不足之处,我们希望找到了一个更强大的模型,它应当具备以下特定:

  1. 不受窗口限制,能够处理不定长的输入
  2. 对于每一个位置上的词都可以用同一套参数进行处理

循环神经网络可以满足以上要求,它的模型结构如下:

在这里插入图片描述

模型的真正输入是各个词的词向量,模型中有一个隐状态 h h h,输出是预测词的概率 y ^ \hat{y} y^。模型的参数为输入层 W e W_e We、隐含层 W h W_h Wh、输出层 U U U,注意 E E E不算是可学习参数,它负责从将词的one-hot向量映射到词向量,本质上是个查表的工作,相当于tensorflow中tf.embedding_lookup操作。

词向量依次送入到模型中,每个词向量 e e e在模型中首先和输入层 W e W_e We相乘,再加上另一条支路上隐状态 h h h与隐含层 W h W_h Wh的相乘结果,然后再加上一个偏置 b b b,最终的和送入非线性激活函数 σ \sigma σ;输出的结果作为新的隐状态传递下去,参与下一轮计算,在下一轮的计算是以下一个词向量作为输入,以此不断循环,最终将隐状态 h h h与输出矩阵相乘,加上偏置后进行softmax计算,输出概率值。

这里每一轮计算的参数 W e W_e We W h W_h Wh U U U是一样的,中间的隐状态 h ( 1 ) h^{(1)} h(1) h ( 2 ) h^{(2)} h(2) h ( 3 ) h^{(3)} h(3)如有需要也是可以输出,每一轮都输出一个结果,且这个循环可以一直进行下去,尽管实际操作中不会让它一直循环下去,因为会遇到别的问题——计算量巨大、梯度消失。

三、训练与优化

1. 损失函数

在这里插入图片描述

在RNN的训练过程中,每一轮都会计算损失函数 J ( 1 ) ( θ ) J^{(1)}(\theta) J(1)(θ) J ( 2 ) ( θ ) J^{(2)}(\theta) J(2)(θ) J ( 3 ) ( θ ) J^{(3)}(\theta) J(3)(θ) J ( 4 ) ( θ ) J^{(4)}(\theta) J(4)(θ),最后将他们相加得到最终的损失函数:

J ( θ ) = 1 T ∑ t = 1 T J ( t ) ( θ ) J(\theta) = \frac{1}{T}\sum_{t=1}^TJ^{(t)}(\theta) J(θ)=T1t=1TJ(t)(θ)

每一轮的损失函数 J ( t ) ( θ ) J^{(t)}(\theta) J(t)(θ)均采用交叉熵函数,即:

J ( t ) ( θ ) = C E ( y ( t ) , y ^ ( t ) ) = − ∑ w ∈ V   y w ( t ) l o g y ^ w ( t ) = − l o g   y ^ w ( t ) J^{(t)}(\theta) = CE(y^{(t)},\hat{y}^{(t)}) = -\sum_{w \isin V}\ y_w^{(t)}log\hat{y}_w^{(t)} = -log\ \hat{y}_w^{(t)} J(t)(θ)=CE(y(t),y^(t))=wV yw(t)logy^w(t)=log y^w(t)

其中 y ( t ) y^{(t)} y(t)表示真实值,它是 x ( t + 1 ) x^{(t+1)} x(t+1)所对应的one-hot向量,我们希望输入 t t t时刻前的词,能预测得到 t + 1 t+1 t+1时刻的词。

2. 梯度计算

接下来思考怎么计算梯度进行反向传播,这是RNN中的一个难点中的难点,这里课堂上讲得不是很清晰,补充材料notes里的符号又和课件slides里的不一致,很容易让人迷惑,因此下面我会根据课件和补充材料中内容,重新组织语言进行讲解,不完全遵循课件和补充材料中的顺序和符号。

根据前面的损失函数:

J ( θ ) = 1 T ∑ t = 1 T J ( t ) ( θ ) (1) J(\theta) = \frac{1}{T}\sum_{t=1}^TJ^{(t)}(\theta) \tag{1} J(θ)=T1t=1TJ(t)(θ)(1)

很容易可以得到它关于W_h的梯度:

∂ J ∂ W h = 1 T ∑ t = 1 T ∂ J ( t ) ∂ W h (2) \frac{\partial J}{\partial W_h} = \frac{1}{T}\sum_{t=1}^T \frac{\partial J^{(t)}}{\partial W_h} \tag{2} WhJ=T1t=1TWhJ(t)(2)

现在问题来了,那么 t t t时刻的梯度 ∂ J ( t ) ∂ W h \frac{\partial J^{(t)}}{\partial W_h} WhJ(t)应该怎么计算?结论很简单,它等于 J ( t ) J^{(t)} J(t)在1~ t t t时刻关于 W h W_h Wh的梯度之和,即:

∂ J ( t ) ∂ W h = ∑ i = 1 t ∂ J ( t ) ∂ W h ∣ i (3) \frac{\partial J^{(t)}}{\partial W_h} = \sum_{i=1}^t \frac{\partial J^{(t)}}{\partial W_h} \bigg| _{i} \tag{3} WhJ(t)=i=1tWhJ(t)i(3)

右边每个求和项的下标 i i i指的是第 i i i个时刻或者第 i i i轮,即 J ( t ) J^{(t)} J(t)对第 i i i个时刻的 W h W_h Wh的梯度。这个公式是怎么来的呢?由于 J ( t ) J^{(t)} J(t) t t t时刻前每个时刻的参数矩阵 W h ∣ 1 、 W h ∣ 2 、 . . . 、 W h ∣ t W_h|_1 、 W_h|_2 、 ... 、 W_h|_t Wh1Wh2...Wht都有关,根据多元函数的链式法则,可以得到下面式子:

∂ J ( t ) ∂ W h = ∑ i = 1 t ∂ J ( t ) ∂ W h ∣ i ∂ W h ∣ i ∂ W h = ∑ i = 1 t ∂ J ( t ) ∂ W h ∣ i × 1 (4) \frac{\partial J^{(t)}}{\partial W_h} = \sum_{i=1}^t \frac{\partial J^{(t)}}{\partial W_h} \bigg| _{i} \frac{\partial W_h|_i}{\partial W_h} = \sum_{i=1}^t \frac{\partial J^{(t)}}{\partial W_h} \bigg| _{i} \times 1 \tag{4} WhJ(t)=i=1tWhJ(t)iWhWhi=i=1tWhJ(t)i×1(4)

这条式子怎么来的?首先要明确,RNN在训练时对一段语料进行前向传播,如果语料长度为 T T T就会经历了 T T T个时刻,之后再将每个时刻 t t t的损失叠加起来求梯度反向传播, t = 1 ~ T t=1~T t=1T时刻内,参数矩阵是一直没有更新的,也即是同一个矩阵 W h W_h Wh。那么 i = 1 ~ t i=1~t i=1t时刻内,因为它们是 1 1 1 ~ ~ T T T内的一个子时段,参数矩阵 W h ∣ i W_h|_i Whi肯定一直不变的,也即 W h ∣ 1 = W h ∣ 2 = . . . = W h ∣ t = W h W_h|_1 = W_h|_2 = ... = W_h|_t = W_h Wh1=Wh2=...=Wht=Wh,因此 ∂ W h ∣ i ∂ W h = 1 \frac{\partial W_h|_i}{\partial W_h}=1 WhWhi=1,第二项可以被忽略掉。

现在问题转化为 ∂ J ( t ) ∂ W h ∣ i \frac{\partial J^{(t)}}{\partial W_h} \bigg| _{i} WhJ(t)i要怎么计算?这个就比较复杂了,这里需要用到链式法则:

∂ J ( t ) ∂ W h ∣ i = ∂ J ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ h ( t ) ∂ h ( t ) ∂ h ( i ) ∂ h ( i ) ∂ W h ∣ i \frac{\partial J^{(t)}}{\partial W_h} \bigg| _{i} = \frac{\partial J^{(t)}}{\partial \hat{y}^{(t)}} \frac{\partial \hat{y}^{(t)}}{\partial h^{(t)}} \frac{\partial h^{(t)}}{\partial h^{(i)}} \frac{\partial h^{(i)}}{\partial W_h|_i} WhJ(t)i=y^(t)J(t)h(t)y^(t)h(i)h(t)Whih(i)

上面提到说 W h ∣ i = W h W_h|_i = W_h Whi=Wh,因此下面就都简写成 W h W_h Wh,上面的式子可以写作:

∂ J ( t ) ∂ W h ∣ i = ∂ J ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ h ( t ) ∂ h ( t ) ∂ h ( i ) ∂ h ( i ) ∂ W h (5) \frac{\partial J^{(t)}}{\partial W_h} \bigg| _{i} = \frac{\partial J^{(t)}}{\partial \hat{y}^{(t)}} \frac{\partial \hat{y}^{(t)}}{\partial h^{(t)}} \frac{\partial h^{(t)}}{\partial h^{(i)}} \frac{\partial h^{(i)}}{\partial W_h} \tag{5} WhJ(t)i=y^(t)J(t)h(t)y^(t)h(i)h(t)Whh(i)(5)

这个公式中第1、2、4项都很容易求得,关键是第三项 ∂ h ( t ) ∂ h ( i ) \frac{\partial h^{(t)}}{\partial h^{(i)}} h(i)h(t)应该怎么求?我们还是可以用链式法则拆开它,但可以注意到它是与时刻 i i i有关的,可以想象当 i = t − 1 i=t-1 i=t1,那就向前追溯1个时刻,当 i = t − 2 i=t-2 i=t2时,要向前追溯2个时刻,以此类推, i = 1 i=1 i=1的话要向前追溯两个时刻,也即 ∂ h ( t ) ∂ h ( i ) \frac{\partial h^{(t)}}{\partial h^{(i)}} h(i)h(t)需要向前追溯 ( t − i ) (t-i) (ti)个时刻,写成公式的话可以表示成:

∂ h ( t ) ∂ h ( i ) = ∏ j = i + 1 t ∂ h ( j ) ∂ h ( j − 1 ) (6) \frac{\partial h^{(t)}}{\partial h^{(i)}} = \prod_{j=i+1}^t \frac{\partial h^{(j)}}{\partial h^{(j-1)}} \tag{6} h(i)h(t)=j=i+1th(j1)h(j)(6)

至此,损失 J J J W h W_h Wh的梯度可以写成:
∂ J ∂ W h = 1 T ∑ t = 1 T ∂ J ( t ) ∂ W h = 1 T ∑ t = 1 T ∑ i = 1 t ∂ J ( t ) ∂ W h ∣ i = 1 T ∑ t = 1 T ∑ i = 1 t ∂ J ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ h ( t ) ∂ h ( t ) ∂ h ( i ) ∂ h ( i ) ∂ W h = 1 T ∑ t = 1 T ∑ i = 1 t ( ∂ J ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ h ( t ) ( ∏ j = i + 1 t ∂ h ( j ) ∂ h ( j − 1 ) ) ∂ h ( i ) ∂ W h ) (7) \begin{aligned} \frac{\partial J}{\partial W_h} &= \frac{1}{T}\sum_{t=1}^T \frac{\partial J^{(t)}}{\partial W_h} \\ &= \frac{1}{T}\sum_{t=1}^T\sum_{i=1}^t \frac{\partial J^{(t)}}{\partial W_h} \bigg|_{i}\\ &=\frac{1}{T}\sum_{t=1}^T\sum_{i=1}^t \frac{\partial J^{(t)}}{\partial \hat{y}^{(t)}} \frac{\partial \hat{y}^{(t)}}{\partial h^{(t)}} \frac{\partial h^{(t)}}{\partial h^{(i)}} \frac{\partial h^{(i)}}{\partial W_h} \\ &=\frac{1}{T}\sum_{t=1}^T\sum_{i=1}^t (\frac{\partial J^{(t)}}{\partial \hat{y}^{(t)}} \frac{\partial \hat{y}^{(t)}}{\partial h^{(t)}} (\prod_{j=i+1}^t \frac{\partial h^{(j)}}{\partial h^{(j-1)}} )\frac{\partial h^{(i)}}{\partial W_h}) \end{aligned} \tag{7} WhJ=T1t=1TWhJ(t)=T1t=1Ti=1tWhJ(t)i=T1t=1Ti=1ty^(t)J(t)h(t)y^(t)h(i)h(t)Whh(i)=T1t=1Ti=1t(y^(t)J(t)h(t)y^(t)(j=i+1th(j1)h(j))Whh(i))(7)
接下来其实可以继续追问 ∂ h ( j ) ∂ h ( j − 1 ) \frac{\partial h^{(j)}}{\partial h^{(j-1)}} h(j1)h(j)怎么求解,我们回顾之前的图示:

在这里插入图片描述

从图中我们可以得知 h ( j ) h^{(j)} h(j) h ( j − 1 ) h^{(j-1)} h(j1)具有直接关系:

h ( j ) = σ ( W h h ( j − 1 ) + W e e ( t ) + b 1 ) (8) h^{(j)} = \sigma(W_hh^{(j-1)}+W_ee^{(t)} + b_1) \tag{8} h(j)=σ(Whh(j1)+Wee(t)+b1)(8)

则它们间的梯度也很容易求得:

∂ h ( j ) ∂ h ( j − 1 ) = d i a g ( σ ′ ( W h h ( j − 1 ) + W e e ( t ) + b 1 ) ) × W h (9) \frac{\partial h^{(j)}}{\partial h^{(j-1)}} = diag(\sigma'(W_hh^{(j-1)}+W_ee^{(t)} + b_1)) \times W_h \tag{9} h(j1)h(j)=diag(σ(Whh(j1)+Wee(t)+b1))×Wh(9)

其中 d i a g ( ∗ ) diag(*) diag()表示对角矩阵,对角线中的值即为 ∗ * ,这条式子在补充材料notes中有些许不同,但是本质上是一致的。

至此,RNN关于W_h的梯度计算就完成了,关于 W e W_e We的梯度计算也是类似,这里就不再赘述。

3. 梯度消失和梯度爆炸

可以看到 ( 7 ) (7) (7)式相当复杂,最关键的地方是两个不同时间隐状态间的梯度 ∂ h ( t ) ∂ h ( i ) \frac{\partial h^{(t)}}{\partial h^{(i)}} h(i)h(t),需要从t时刻一直地追溯到i时刻,而且要进行多次这样的追溯。我们结合 ( 6 ) (6) (6) ( 8 ) (8) (8)可将 ∂ h ( t ) ∂ h ( i ) \frac{\partial h^{(t)}}{\partial h^{(i)}} h(i)h(t)写做:

∂ h ( t ) ∂ h ( i ) = ∏ j = i + 1 t ∂ h ( j ) ∂ h ( j − 1 ) = ∏ j = i + 1 t d i a g ( σ ′ ( W h h ( j − 1 ) + W e e ( t ) + b 1 ) ) × W h (10) \frac{\partial h^{(t)}}{\partial h^{(i)}} = \prod_{j=i+1}^t \frac{\partial h^{(j)}}{\partial h^{(j-1)}} = \prod_{j=i+1}^t diag(\sigma'(W_hh^{(j-1)}+W_ee^{(t)} + b_1)) \times W_h \tag{10} h(i)h(t)=j=i+1th(j1)h(j)=j=i+1tdiag(σ(Whh(j1)+Wee(t)+b1))×Wh(10)

接下来将结合该式子讲述了为什么会RNN特别容易梯度消失和梯度爆炸,CS224N的课件slides和补充材料notes是从两个角度来进行解释的,下面将分别对两者的思路进行讲解,在推导过程中为了保持本文符号的一致性,可能与课件材料有些出入。

课件中的解释:

为了简化问题,我们假设激活函数 σ \sigma σ为恒等映射即 σ ( x ) = x \sigma(x)=x σ(x)=x,则 σ ′ = 1 \sigma'=1 σ=1,公式 ( 10 ) (10) (10)可以改写成:

∂ h ( t ) ∂ h ( i ) = ∏ j = i + 1 t I × W h = ∏ j = i + 1 t W h = W h t − i (11) \frac{\partial h^{(t)}}{\partial h^{(i)}} = \prod_{j=i+1}^t I \times W_h = \prod_{j=i+1}^t W_h = W_h^{t-i} \tag{11} h(i)h(t)=j=i+1tI×Wh=j=i+1tWh=Whti(11)

也即是矩阵 W h W_h Wh连续自乘了 ( t − i ) (t-i) (ti)次,由于输入的词向量 e e e和隐状态 h h h一般都是保持同样的维度,因此 W h W_h Wh一定是方阵,不用担心自乘时维度对不上。假设矩阵 W h W_h Wh的特征值和特征向量分别为:

特征值:    λ 1 , λ 2 , . . . , λ n 特征向量:    q 1 , q 2 , . . . , q n \begin{aligned}\text{特征值:} \ \ \ \lambda_1, \lambda_2,...,\lambda_n \\ \text{特征向量:}\ \ \ q_1,q_2,...,q_n\end{aligned} 特征值:   λ1,λ2,...,λn特征向量:   q1,q2,...,qn

根据线性代数的知识,有:

W h = P Λ P − 1 , P 是 特 征 向 量 组 成 的 矩 阵 , Λ 是 特 征 值 组 成 的 对 角 矩 阵 W_h = P\Lambda P^{-1},P是特征向量组成的矩阵,\Lambda是特征值组成的对角矩阵 Wh=PΛP1PΛ

进一步可以推出:

∂ h ( t ) ∂ h ( i ) = W h t − i = P Λ t − i P − 1 (12) \frac{\partial h^{(t)}}{\partial h^{(i)}}= W_h^{t-i} = P\Lambda^{t-i} P^{-1} \tag{12} h(i)h(t)=Whti=PΛtiP1(12)

假设 W h W_h Wh的特征值全都小于1,那么一旦两个词相隔越远,或说两个时刻 ( t − i ) (t-i) (ti)相隔越长,对角矩阵 Λ t − i \Lambda^{t-i} Λti上的元素会越乘越小,接近于0,那 ∂ h ( t ) ∂ h ( i ) \frac{\partial h^{(t)}}{\partial h^{(i)}} h(i)h(t)自然也接近于零矩阵,再跟其他的矩阵或向量相乘也会存在大量的零,也就是梯度几乎都为零,这就是梯度消失的原因。反过来,如果说 W h W_h Wh的特征值全都大于1,对角矩阵 Λ t − i \Lambda^{t-i} Λti上的元素会越乘越大,之后其他矩阵内的元素也会变得越来越大,甚至出现NaN值,这就是梯度爆炸的原因。上面在推导前是假设激活函数为恒等映射,但其实换成别的激活函数也一样会出现梯度消失或梯度爆炸,因为公式12中参数矩阵 W h W_h Wh的幂次形式依然存在。


补充材料中的讲解

这次从公式 ( 6 ) (6) (6)出发,如果我们考虑矩阵的模,那么从公式 ( 10 ) (10) (10)可以得知:

∣ ∣ ∂ h ( j ) ∂ h ( j − 1 ) ∣ ∣ ≤ ∣ ∣ d i a g ( σ ′ ( W h h ( j − 1 ) + W e e ( t ) + b 1 ) ) ∣ ∣ × ∣ ∣ W h ∣ ∣ ≤ β W β h (13) ||\frac{\partial h^{(j)}}{\partial h^{(j-1)}}|| \le ||diag(\sigma'(W_hh^{(j-1)}+W_ee^{(t)} + b_1))|| \times ||W_h|| \le \beta_W\beta_h\tag{13} h(j1)h(j)diag(σ(Whh(j1)+Wee(t)+b1))×WhβWβh(13)

其中的 β \beta β只是对 ∣ ∣ d i a g ( σ ′ ( W h h ( j − 1 ) + W e e ( t ) + b 1 ) ) ∣ ∣ ||diag(\sigma'(W_hh^{(j-1)}+W_ee^{(t)} + b_1))|| diag(σ(Whh(j1)+Wee(t)+b1)) ∣ ∣ W h ∣ ∣ ||W_h|| Wh分别进行简写。在这之后,结合公式 ( 10 ) (10) (10),可以得到

∣ ∣ ∂ h ( t ) ∂ h ( i ) ∣ ∣ = ∣ ∣ ∏ j = i + 1 t ∂ h ( j ) ∂ h ( j − 1 ) ∣ ∣ ≤ ( β W β h ) t − i (14) ||\frac{\partial h^{(t)}}{\partial h^{(i)}}|| = ||\prod_{j=i+1}^t \frac{\partial h^{(j)}}{\partial h^{(j-1)}}|| \le (\beta_W\beta_h)^{t-i} \tag{14} h(i)h(t)=j=i+1th(j1)h(j)(βWβh)ti(14)

如果 β W \beta_W βW β h \beta_h βh小于1,即 W h W_h Wh的模与 ∣ ∣ d i a g ( σ ′ ( W h h ( j − 1 ) + W e e ( t ) + b 1 ) ) ∣ ∣ ||diag(\sigma'(W_hh^{(j-1)}+W_ee^{(t)} + b_1))|| diag(σ(Whh(j1)+Wee(t)+b1))的乘积小于1,那么由于指数项的作用, ∣ ∣ ∂ h ( t ) ∂ h ( i ) ∣ ∣ ||\frac{\partial h^{(t)}}{\partial h^{(i)}}|| h(i)h(t)同样也会变得很小,容易出现梯度消失,相反如果它们大于1,那么 ∣ ∣ ∂ h ( t ) ∂ h ( i ) ∣ ∣ ||\frac{\partial h^{(t)}}{\partial h^{(i)}}|| h(i)h(t)会变得相当大,容易出现梯度爆炸。

这里可以注意到两个细节,一方面,根据线性代数额知识, W h W_h Wh的模和它的特征值有密切关系,如果像上面课件中说的那样 W h W_h Wh特征值都小于1,那么它的模肯定也很小;另一方面,另外一项 β h \beta_h βh是和激活函数相关的,上面说激活函数不采用恒等映射同样可能出现梯度消失或梯度爆炸,此话没错,但更准确地说,梯度会不会出现问题和激活函数是会存在关系的。为了缓解梯度消失,我们可以选择ReLU激活函数,尽管它相对容易引起梯度爆炸,但是对于梯度爆炸我们好歹有梯度截断方法可以缓解,比起梯度消失更加可控。

还有最后一点需要注意的是,RNN的梯度消失主要是长距离的梯度消失,公式 ( 12 ) 、 ( 14 ) (12)、(14) (12)(14)的指数项 ( t − i ) (t-i) (ti)需要足够大才有明显地梯度消失效应,短距离的梯度还是正常的,而总梯度是包含了长距离和短距离的梯度,所以总梯度并不是完全为0,只是模型参数的更新方向不受长时约束,这样RNN就失去了捕捉更大范围上下文信息的能力。

四、优缺点

相比于统计语言模型以及固定窗口神经语言模型,RNN的优点在于:

  1. 可以处理不定长序列
  2. 对不同位置的词向量采用同样的参数进行计算,缩减模型参数且增强参数了泛化性
  3. 模型的大小与序列长度无关
  4. 可以更好地捕捉长时信息

但是其缺点也很明显:

  1. 很容易梯度消失,且是致命弱点,普通的RNN对此没有解决办法。梯度消失会造成两个问题:

    • 长时约束的作用减弱,模型几乎只受短时约束
    • 我们无法分辨是真的没有长距离间的两个词是真的没有联系,还是我们没能捕捉到它们间的联系
  2. 很容易梯度爆炸,可以通过梯度截断缓解

    • 模型发散,无法学习到有效信息
    • 梯度截断的实现
      在这里插入图片描述

五、应用与展望

  1. 词性标注,对序列中每一个词预测其词性;类似的还有NER(name entity recognition),即命名实体识别

在这里插入图片描述

  1. 文本分类,比如情感分类

在这里插入图片描述

  1. 作为编码模块,可以应用到QA问答系统、机器翻译等

在这里插入图片描述

  1. 可以用于文本生成,如语音识别、文本翻译、文本梗概,此时的RNN是一个条件语言模型

在这里插入图片描述

六、参考文献

  1. CS224N Lecture 6 slides && notes
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值