Recurrent Neural Network
introduction
example application
Slot Filling
词汇要转化成vector,可以使用1-of-N编码,word hashing或者是word vector等方式,此外我们可以尝试使用Feedforward Neural Network来分析词汇,判断出它是属于时间或是目的地的概率
但这样做会有一个问题,该神经网络会先处理“arrive”和“leave”这两个词汇,然后再处理“Taipei”,这时对NN来说,输入是相同的,它没有办法区分出“Taipei”是出发地还是目的地
这个时候我们就希望神经网络是有记忆的,如果NN在看到“Taipei”的时候,还能记住之前已经看过的“arrive”或是“leave”,就可以根据上下文得到正确的答案
RNN basic concept
不同的变形
Elman Network & Jorddan Network
Bidirectional RNN
LSTM
前文提到的RNN只是最简单的版本,并没有对memory的管理多加约束,可以随时进行读取,而现在常用的memory管理方式叫做长短期记忆(Long Short-term Memory),简称LSTM
可以被理解为比较长的短期记忆,因此是short-term,而非是long-short term
Three-gate:
三个gate:
- 当某个neuron的输出想要被写进memory cell,它就必须要先经过一道叫做input gate的闸门,如果input gate关闭,则任何内容都无法被写入,而关闭与否、什么时候关闭,都是由神经网络自己学习到的
- output gate决定了外界是否可以从memory cell中读取值,当output gate关闭的时候,memory里面的内容同样无法被读取
- forget gate则决定了什么时候需要把memory cell里存放的内容忘记清空,什么时候依旧保存
4个input,1个output:
- 4个input=想要被存到memory cell里的值+操控input gate的信号+操控output gate的信号+操控forget gate的信号
- 1个output=想要从memory cell中被读取的值
LSTM Example:
假设目前我们的hidden layer只有两个neuron,则结构如下图所示: - 输入x 1、x 2 会分别乘上四组不同的weight,作为neuron的输入以及三个状态门的控制信号
- 在原来的neuron里,1个input对应1个output,而在LSTM里,4个input才产生1个output,并且所有的input都是不相同的
- 从中也可以看出LSTM所需要的参数量是一般NN的4倍
LSTM 和RNN联系
Learning Target
如此复杂的结构,我们应该如何训练呢?
Loss Function
Training
problem
why
因此RNN经常会遇到这两个问题:
- 梯度消失(gradient vanishing),一直在梯度平缓的地方停滞不前
- 梯度爆炸(gradient explode),梯度的更新步伐迈得太大导致直接飞出有效区间
Help Techniques
另一个版本GRU (Gated Recurrent Unit),只有两个gate,需要的参数量比LSTM少,鲁棒性比LSTM好,不容易过拟合,它的基本精神是旧的不去,新的不来,GRU会把input gate和forget gate连起来,当forget gate把memory里的值清空时,input gate才会打开,再放入新的值
此外,还有很多技术可以用来处理梯度消失的问题,比如Clockwise RNN、SCRN等
more application
在Slot Filling中,我们输入一个word vector输出它的label,除此之外RNN还可以做更复杂的事情
- 多对一
- 多对多
sentiment analysis
Key term Extraction
Many to Many (Output is shorter)
Sequence to Sequence Learning
Seq2Seq for Syntatic Parsing
Seq2Seq for Auto-encoder Text
…(还有非常多的应用和扩展)