本节课介绍了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)
具体步骤:
- 初始化,输入 x 1 x^1 x1, a 1 = 0 a^1 = 0 a1=0
- 把hidden layer的weight存起来,记为
a
k
a^k
ak(k表示第几个输入)
- 下个输入为
x
k
x^k
xk和
a
k
−
1
a^{k-1}
ak−1
- 跳第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⋅[ht−1,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⋅[ht−1,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⋅[ht−1,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[ht−1,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=ot∗tanh(ft∗Ct−1+it∗tanh(WC⋅[ht−1,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[ht−1,xt]+bo)∗tanh(σ(Wf⋅[ht−1,xt]+bf)∗Ct−1+σ(Wi⋅[ht−1,xt]+bi)∗tanh(WC⋅[ht−1,xt]+bC))
可以看到需要4个W,说明LSTM的参数量是RNN的4倍。LSTM单元输入为 x t x_t xt, h t − 1 h_{t-1} ht−1, C t − 1 C_{t-1} Ct−1,而 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,仅作为学习笔记交流使用