笔记:ML-LHY-21: Recurrent Neural Network(RNN) 循环神经网络

本节课介绍了3中传统词汇编码方式:1-of-N encoding、Beyond 1-of-N encoding、Word hashing
RNN概念即原理
LSTM、GRU原理
RNN训练
pdf 视频1-RNN 视频2-LSTM

有这么一个任务例子:

在这里插入图片描述
上图假设是一个订票系统上,输入 “Arrive Taipei on November 2nd” ,我们设置几个槽位(Slot),希望算法能够将关键词’Taipei’放入目的地(Destination)槽位,将November和2nd放入到达时间(Time of Arrival)槽位,将Arrive和on放入其他(Other)槽位,实现对输入序列的一个归类,以便后续提取相应信息。这个过程称为槽位填充(Slot Filling)

用前馈神经网络(Feedforward Neural Network)来解决这个问题的话,我们首先要对输入序列向量化,将每一个输入的单词用向量表示,可以使用 One-of-N Encoding 或者是 Word hashing 等编码方法,输出预测槽位的概率分布。

词汇的编码方式

既然要做语句处理任务,那么输入就包括很多词,词怎么表示成特征向量,有以下几种方式:

1-of-N encoding
在这里插入图片描述
存在的问题就是不太好代表所有词汇,所以就有下面Beyond 1-of-N encoding

Beyond 1-of-N encoding
在这里插入图片描述
只是吧不需要不常用的词归为other
Word hashing
在这里插入图片描述
Word hashing更为灵活,可以表示所有词汇,这里说的词都是英文单词,汉语可能需要其他表示方式


前面提到使用前馈神经网络(Feedforward Neural Network)来解决上面Slot Filling任务

在这里插入图片描述
存在的问题就是,输入的是一个个词,比如上面的台北,一旦确定是目的地就不符合leave Taipei on November 2nd,同样一旦确定是出发地就不符合arrive Taipei on November 2nd,因为这种输入方式就没有考虑词与词的关系

如果网络有了记忆性,记录了Taipei前的词为arrive,那么就任务Taipei是目的地,记录了Taipei前的词为leave,那么就任务Taipei是出发地。

所以Recurrent Neural Network (RNN)循环神经网络就是这么一种有记忆性的网络,用来解决这种任务。

Recurrent Neural Network (RNN)

具体步骤:

  1. 初始化,输入 x 1 x^1 x1 a 1 = 0 a^1 = 0 a1=0
  2. 把hidden layer的weight存起来,记为 a k a^k ak(k表示第几个输入)
    在这里插入图片描述
  3. 下个输入为 x k x^k xk a k − 1 a^{k-1} ak1
    在这里插入图片描述
  4. 跳第2步直到输入结束

例如:
第1次输入[1, 1 ],取出[0, 0],最终输入[1, 1 ]
在这里插入图片描述
输出[4, 4],权重存储的为[2, 2]


第2次输入[1, 1 ],取出[2, 2],最终输入[3, 3 ]
在这里插入图片描述
输出[12, 12],权重存储的为[6, 6]


第3次输入[2, 2 ],取出[6, 6],最终输入[8, 8]在这里插入图片描述
输出[32, 32,权重存储的为[16, 16]


输入结束则输出最后的y,可以看到第1次的[1, 1]和第2次的[1, 1],输出是不同的。
如果先输入[2, 2],然后[1, 1], [1, 1],最后输出的结果也是不一样,为[8, 8]、 [20, 20]、[44, 44]

RNN框架

一般就是上面那种:
在这里插入图片描述
当然也可以是DRNN
在这里插入图片描述
输出存起来的Jordan Network,Jordan Network会比一般的Elman Network效果更好
在这里插入图片描述
还有这种双向的,视野更大,不仅考虑正向同时考虑了逆向信息,注意有2个hidden layer
在这里插入图片描述
上面提到的结构是RNN基本的结构模型,更经常使用的是LSTM,LSTM其实也是RNN一种,但是有专有叫法LSTM,而RNN一般指上面这种结构。

RNN也有缺点,一个明显限制是其在时间上严格整合状态信息,也就是“梯度消失/爆炸”效应:在实践中,通过一个长时间间隔去反向传播误差信号的能力变得逐渐困难。动作识别概要

LSTM单元有隐状态增强和非线性机制,通过利用一个简单的学习过的门限函数,可以不修改、不更新、不复位地对状态进行传播.说白了就是LSTM可以通过门控制是否需要更新或使用存储的内容

Long Short-term Memory (LSTM)

RNN和LSTM对比

在这里插入图片描述

在这里插入图片描述
RNN只是在tanh 层(隐藏层)把上一次的权重也当做输入

注意哦,RNN的cell(即h)一直传递,而h是经过w得到的,所以RNN是累乘了w,我对输出影响很大。
而LSTM的cell是只叠加,没有经过w,而h是有选择的经过w,所以w对输出影响较小
这个在后面求梯度是有差别,后面会具体说明
在这里插入图片描述
在这里插入图片描述
黄色的矩形是学习得到的神经网络层
粉色的圆形表示一些运算操作,诸如加法乘法
黑色的单箭头表示向量的传输
两个箭头合成一个表示向量的连接
一个箭头分开表示向量的复制

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

上面都是LSTM的表示

LSTM就比较复杂了, 拥有三个门,分别是遗忘门(Forget Gate)、输入门(Input Gate)和输出门(Output Gate)来保护和控制细胞状态.

LSTM 的核心思想

在这里插入图片描述
LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。

门Gate

在这里插入图片描述
包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作
Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!
LSTM 拥有三个门,来保护和控制细胞状态。

遗忘门(Forget Gate)

在这里插入图片描述
W f ⋅ [ h t − 1 , x t ] + b f W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f} Wf[ht1,xt]+bf对应李老师上PPt就是 z f z_f zf,然后经过sigmoid函数,李老师上PPt就是 f f f函数,越接近0,表示越遗忘之前的。

输入门(Input Gate)

在这里插入图片描述
W i ⋅ [ h t − 1 , x t ] + b i W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i} Wi[ht1,xt]+bi对应李老师上PPt就是 z i z_i zi,然后经过sigmoid函数,李老师上PPt就是 f f f函数,越接近1,表示越接收新输入。 W C ⋅ [ h t − 1 , x t ] + b C W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C} WC[ht1,xt]+bC对应李老师上PPt就是 z z z,然后经过tanh激活函数,李老师上PPt就是 g g g函数。

根据遗忘门和输入门更新新的细胞状态
在这里插入图片描述

输出门(Output Gate)

在这里插入图片描述
W o [ h t − 1 , x t ] + b o W_{o}\left[h_{t-1}, x_{t}\right]+b_{o} Wo[ht1,xt]+bo对应李老师上PPt就是 z o z_o zo,然后经过sigmoid函数,李老师上PPt就是 f f f函数,越接近1,表示越多要输出,注意这个输出和cell没关系了
C t C_t Ct是最新的细胞状态,然后经过tanh激活函数,李老师上PPt就是 h h h函数。

综合表达式

h t = o t ∗ tanh ⁡ ( f t ∗ C t − 1 + i t ∗ tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) ) h_{t}=o_t * \tanh \left(f_t * C_{t-1}+ i_t * \tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)\right) ht=ottanh(ftCt1+ittanh(WC[ht1,xt]+bC))

h t = σ ( W o [ h t − 1 , x t ] + b o ) ∗ tanh ⁡ ( σ ( W f ⋅ [ h t − 1 , x t ] + b f ) ∗ C t − 1 + σ ( W i ⋅ [ h t − 1 , x t ] + b i ) ∗ tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) ) h_{t}=\sigma\left(W_{o}\left[h_{t-1}, x_{t}\right]+b_{o}\right) * \tanh \left(\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right) * C_{t-1}+\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right) * \tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)\right) ht=σ(Wo[ht1,xt]+bo)tanh(σ(Wf[ht1,xt]+bf)Ct1+σ(Wi[ht1,xt]+bi)tanh(WC[ht1,xt]+bC))

可以看到需要4个W,说明LSTM的参数量是RNN的4倍。LSTM单元输入为 x t x_t xt, h t − 1 h_{t-1} ht1, C t − 1 C_{t-1} Ct1,而 h t h_t ht的输出由 x t x_t xt, o t o_t ot, f t f_t ft, i t i_t it控制

GRU(Gated Recurrent Unit)

GRU只有2个门,参数也是LSTM的2/3。所以GRU是更鲁棒的,如果在LSTM上过拟合了,可以尝试使用GRU,而且性能也不会比LSTM差很多。

GRU的核心思想就是旧的不去新的不来,吧输入门和遗忘门联动起来,当输入门开,则遗忘门开。输入门关,则遗忘门也关。

RNN训练

通过Backpropagation through time (BPTT),这里没有详细介绍
在这里插入图片描述
RNN的很难训练好,如上图,这是因为RNN的梯度时非常陡峭的
在这里插入图片描述
为什么会这样呢?

假设有下方这种训练好的权重在这里插入图片描述
如果w发生改变
在这里插入图片描述
RNN缺点:
可以看到w(>0)发生很小的改变,最后y会发生很大变化。但是w(<0)改变,则y都会趋于0。
所以从1.01到0.99,y变换了20000。RNN难训练的根本原因是w在时间上的连乘。

前面提到:
RNN的cell(即h)一直传递,而h是经过w得到的,所以RNN是累乘了w,我对输出影响很大。
而LSTM的cell是只叠加,没有经过w,而h是有选择的经过w,所以w对输出影响较小。所以假设w<0,LSTM靠cell的累加就不会造成梯度vanishing(遗忘门一般是关闭状态)。若w>1,LSTM就不会造成梯度explode。

以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用

参考

Slot Filling详细讲解
RNN到LSTM详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值