Lecture 4_Extra Recurrent Neural Network (RNN)
RNN
Example Application
Slot Filling
如上图所示,一些智能客服能够将一句话中的 “词语” 对应到相应的 slot 中。
要怎么做呢?可以将词语向量化后输入到一个网络中。
怎么将词语向量化呢?
1-of-N encoding
Beyond 1-of-N encoding
如下图所示,对于 feed forward 的网络来说,input 相同的东西,那么输出也会是相同的东西,而不会与上下文信息(比如,时间)相关联。—— 我们期待 neural network 有 “记忆” 的功能,能够记住不同的上下文,从而对相同的输入产生不同的输出。—— 引入 Reccurrent Neural Network (RNN)。
Recurrent Neural Network
Example
如上图所示,处理接收到的序列,先处理 [ 1 1 ] \begin{bmatrix}1\\1\end{bmatrix} [11]。
① 一些前提与基本假设;
② 处理 [ 1 1 ] \begin{bmatrix}1\\1\end{bmatrix} [11];
③ 对 m e m o r y memory memory 设置处置 0 0 0;
④ 输入 [ 1 1 ] \begin{bmatrix}1\\1\end{bmatrix} [11],经过处理得到 2 2 2,并存入 m e m o r y memory memory;
⑤ 得到输出序列 [ 4 4 ] \begin{bmatrix}4\\4\end{bmatrix} [44]。
接下来,处理下一个 [ 1 1 ] \begin{bmatrix}1\\1\end{bmatrix} [11]。
( 1 + 2 ) + ( 1 + 2 ) = 6 (1+2)+(1+2)=6 (1+2)+(1+2)=6;将 6 6 6 存入 m e m o r y memory memory; 6 + 6 = 12 6+6=12 6+6=12;输出 [ 12 12 ] \begin{bmatrix}12\\12\end{bmatrix} [1212]。
由此可见,即使 RNN 有相同的输入,也会得到不同的输出。改变输入顺序也会改变输出(这是显然的, m e m o r y memory memory 中的内容会改变)。
上文提到的[问题](#Slot Filling),用 RNN 处理起来如下图所示。
Elman Network & Jordan Network
Bidirectional RNN
网络看过的范围更广。
Long Short-Term Memory (LSTM)
四个输入:操控 Input Gate、Output Gate、Forget Gate 和 是否存入 Memory Cell 的信号;
只会有一个输出。
更新 Memory Cell 中的值 c c c:
可以看出, g ( z ) g(z) g(z) 是控制输入 f ( z i ) f(z_i) f(zi) 是否有效的 “gate”(当 g ( z ) g(z) g(z) 等于 0 0 0 时,就相当于没有输入)。
f ( z f ) f(z_f) f(zf) 决定了是否更新 memory cell 中的数值。当 f ( z f ) = 1 f(z_f)=1 f(zf)=1,forget gate 开启, c c c 直接通过,不更新 c c c(也就是不遗忘 memory cell 中的内容);当 f ( z f ) = 0 f(z_f)=0 f(zf)=0,forget gate 关闭, c f ( z f ) = 0 cf(z_f)=0 cf(zf)=0, c ′ = g ( z ) f ( z i ) + c f ( z f ) c'=g(z)f(z_i)+cf(z_f) c′=g(z)f(zi)+cf(zf),进行更新(也就是遗忘了原 memory cell 中的内容)。
f ( z 0 ) f(z_0) f(z0) 控制 Output Gate 的输出。
LSTM-Example
如上图所示,是一个模拟 LSTM 的简单例子。列出了一些规则(假设),并进行相应的 memory cell 和 output 的计算。
Learning Target
输入训练的语句,每个词语对应一个 slot(arrive、on 对应到 other,Taipei 对应到 destination,November、2nd 对应到 time);经过 RNN 后得到输出 y i y^{i} yi 与 reference vector \text{reference vector} reference vector(长度为不同 slot 的个数,词语属于哪一个 slot,该 slot 的值就是 1 1 1)计算交叉熵损失(Cross-Entropy)。需要最小化的对象就是所有的交叉熵损失函数之和。
RNN 是可以利用 Gradient Descend 训练的,但训练过程较为困难。
我们期待训练过程如上图蓝线所示,但有时候会像绿线所示。RNN 的 error surface \text{error surface} error surface 较为复杂:
当 g r a d i e n t gradient gradient 超过某 t h r e s h o l d threshold threshold 时,就不让 g r a d i e n t gradient gradient 继续增加,而让 g r a d i e n t gradient gradient 等于一个固定的(fixed)值(这就是所谓的 c l i p p i n g clipping clipping)。
为什么训练 RNN 会存在如此大的波动呢?有人认为是 activation funciotn \text{activation funciotn} activation funciotn 的问题,通常用 R e L U ReLU ReLU 的效果不会很好,个人感觉李宏毅老师认为是梯度带来的问题🤔。下面是一个简单的例子,假设 input、output 的权重都是 1 1 1,memory cell 值传输到下个 neuron 的权重为 w w w,当 1000 1000 1000 个 neuron 叠加后,对 w w w 取值的简单讨论如下图所示,可以看出 g r a d i e n t gradient gradient 的变化程度是非常大的。
如何缓解这种问题呢?
LSTM 能够解决梯度消失(而不能解决梯度爆炸)。—— 这又是为什么呢?如下图 ①② 所示。
GRU 的参数量较 LSTM 少,在 LSTM 过拟合时,可以考虑使用 GRU。
More Applications
Many to one
输入是向量序列,而输出只是一个向量。
Sentiment Analysis
Key Term Extraction
Many to Many (Output is shorter)
输入输出都是序列,但输出更短。
Speech Recognition
Many to Many (No Limitation)
输入输出都是序列,对长度没有限制 → Sequence to sequence learning