概述
文章目录
- 1 背景
- 2 RNN
- 3 LSTM
- 3.1 遗忘门
- 3.2 输入门
- 3.3 信息更新
- 3.4 输出门
- 4 GRU
- 4.1 重置门
- 4.2 信息更新
- 4.3 更新门
1 背景
在解决文本相关的任务时,各单词之间在语义上是有关联的。
- 若直接使用全连接层等线性模型,则会丢失各单词之间的联系。
- CNN模型虽然可以构建相邻单词的联系,但受限于窗口大小,该模型仅能建立有限邻近单词之间的联系。
因此,一种新的模型被提出,期望能改进上述两种模型的缺陷,既能建立单词之间的联系,同时使单词的信息可以传递到更远的位置。这一模型便是循环神经网络。
迄今为止,主要有3种循环神经网络模型被提出,分别是RNN、LSTM、GRU,下面我们将依次展开讨论。
2 RNN
RNN模型结构如下所示,该模型思路是,希望将模型前一时刻输出与当前时刻输入结合,产生当前时刻输出。
其中
- x t x_t xt 是当前时刻的输入;
- h t − 1 h_{t-1} ht−1 是前一时刻隐藏层的输出;
-
y
t
y_t
yt 是当前时刻的输出,在RNN模型里,它既是当前时刻输出,也被用作下一时刻隐藏层的输入。
y t = h t = t a n h ( W x T x t + W h T h t − 1 ) y_t = h_t = tanh(W^T_xx_t+W^T_hh_{t-1}) yt=ht=tanh(WxTxt+WhTht−1) - 引入tanh激活函数目的主要有两点:
- 大多问题并非线性模型可解决,因此引入非线性变换;
- 限制输出值大小,避免其在经过多个单元传递之后过大。
该模型具有一个重要的缺陷:输出值在多个Cell之间依次传递,这一过程容易产生梯度爆炸或梯度消失现象。
为了降低该问题的影响,在RNN基础上,LSTM模型被提出。
3 LSTM
LSTM模型结构如下所示,该模型思路是通过遗忘门、输入门、输出门的控制,将往期语义信息、前一时刻输出、当前时刻输入各变量进行组合,得到当前时刻输出及当前时刻希望保留的往期语义信息。
该模型利用Sigmoid函数进行门阀控制,利用tanh函数控制输入、输出的界限。
3.1 遗忘门
用于控制往期语义信息有多少在当前时刻的计算中得到保留,其中
- 遗忘门计算: f t = σ ( W f T [ h t − 1 , x t ] ) f_t = sigma(W_f^T[h_{t-1},x_t]) ft=σ(WfT[ht−1,xt])
- 经过遗忘门之后,被保留的过往信息为 f t C t − 1 f_tC_{t-1} ftCt−1
3.2 输入门
用于控制当前输入有多少可被采用,其中
- 经过输入门之前,当前时刻输入信息为 C t ˇ = t a n h ( W c [ h t − 1 , x t ] ) check{C_t} = tanh(W_c[h_{t-1},x_t]) Ctˇ=tanh(Wc[ht−1,xt])
- 输入门计算: i t = σ ( W i T [ h t − 1 , x t ] ) i_t = sigma(W_i^T[h_{t-1},x_t]) it=σ(WiT[ht−1,xt])
- 经过输入门之后,当前时刻输入信息为 i t C t ˇ i_tcheck{C_t} itCtˇ
3.3 信息更新
对经过遗忘门与输入门的信息流进行整合,更新被保留的语义信息作为下一时刻往期信息的输入。
其计算方式为:
C
t
=
f
t
C
t
−
1
+
i
t
C
t
ˇ
C_t = f_tC_{t-1} + i_tcheck{C_t}
Ct=ftCt−1+itCtˇ
3.4 输出门
用于控制更新后的信息有多少将作为当前时刻的输出及下一时刻的隐藏层输入,其中
- 输出门计算: o t = σ ( W o T [ h t − 1 , x t ] ) o_t = sigma(W_o^T[h_{t-1},x_t]) ot=σ(WoT[ht−1,xt])
- 经过输出门之后,当前时刻的输出信息为 y t = h t = o t ∗ t a n h ( C t ) y_t = h_t = o_t*tanh(C_t) yt=ht=ot∗tanh(Ct)
该模型增加了过往信息的传输距离,同时降低了梯度消失的可能性。但是该模型的缺陷在于参数较多,模型计算较慢。
于是,另一种参数更少的模型,GRU模型,也被广泛使用。
4 GRU
GRU模型如下所示,该模型思想是通过重置门替代LSTM中的遗忘门与输入门、通过更新门替代LSTM中的输出门,将上一时刻隐藏层输出和当前时刻输入进行组合,得到当前时刻输出。
4.1 重置门
用于控制上一时刻的输入有多少信息得到保留。
其中
r
t
=
σ
(
W
r
T
[
h
t
−
1
,
x
t
]
)
r_t = sigma(W_r^T[h_{t-1},x_t])
rt=σ(WrT[ht−1,xt])
4.2 信息更新
结合经过重置门后的上一时刻输入与当前时刻模型输入,得到更新后的信息: h t ′ = t a n h ( W h [ r t h t − 1 , x t ] ) h_t' = tanh(W_h[r_th_{t-1},x_t]) ht′=tanh(Wh[rtht−1,xt])
4.3 更新门
用于控制模型输出有多少信息来自上一时刻的输入,有多少信息来自于当前时刻更新后的信息。
- 更新门计算: z t = σ ( W z T [ h t − 1 , x t ] ) z_t = sigma(W_z^T[h_{t-1},x_t]) zt=σ(WzT[ht−1,xt])
- 模型当前时刻输出: y t = h t = z t h t − 1 + ( 1 − z t ) h t ′ y_t = h_t = z_th_{t-1} + (1-z_t)h_t' yt=ht=ztht−1+(1−zt)ht′
对于GRU模型
- 参数数量减少,有助于提升模型计算效率
- 重置门有助于捕捉序列里短期的关系
- 更新门有助于捕捉序列里长期的关系
最后
以上就是老迟到茉莉为你收集整理的NLP算法(三)- 循环神经网络1 背景2 RNN3 LSTM4 GRU的全部内容,希望文章能够帮你解决NLP算法(三)- 循环神经网络1 背景2 RNN3 LSTM4 GRU所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复