Example Application
Slot Filling
可以使用前馈神经网络来实现,需要把每个词用向量来表示。
把词用向量来表示的方法
1-of-N encoding / one-hot
Beyond 1-of-N encoding
多一个纬度other,不在词典中的词汇归类入other
存在的问题
词汇表示为一个向量,输入是这个向量,输出是一个概率分布,属于某种的概率
神经网络在输入同一个词输出的概率分布是一样的,但是这样是不对的(如下图例子),所以我们希望神经网络是有记忆的。
Recurrent Neural Network(RNN)
有记忆的神经网络,叫做RNN。
每次hidden layer里的neural产生输出的时候都会存到内存中,在下一次有input的时候,hidden layer的neural不止会考虑input还会考虑内存中的值。
Example
假设weight都是1,没有bias,激活函数都是线性的。
输入和输出都是一个序列。
第一次:内存中还没存过东西,都是0,输入为1,计算后存入内存
第二次:考虑输入和内存,得到新的结果并且保存
(哪怕两次输入是一样的,输出结果是不一样的,因为内存中的值是不一样的)
第三次:重复上述步骤。。。
在RNN中,改变输入序列的顺序,将会改变输出。
RNN 处理slots filling问题
RNN处理的流程:
ps:并不是有三个神经网络,而是同一个神经网络在三个不同的时间点,被使用了三次
Of course it can be deep…
RNN 的变形
Elman Network 和 Jordan Network
Elman Network:把hidden layer的值存起来,在下一个时间点读出来,如前面的例子
Jordan Network:存的是整个网络的output的值,在下一个时间点再读出来。
Bidirectional RNN
RNN还可以是双向的。可以看到更多的东西,得到更好的performance。
Long Short-term Memory(LSTM)
neutral的output想要写入内存前需要经过一系列的闸门。
input gate:打开的时候neutral的output才可以被写入内存
output gate:外界其他的neutral是否可以通过内存读出值。
forget gate(遗忘门):什么时候内存要把过去的东西忘掉
以上三个都是需要网络自己学习。
LSTM可以看作有四个input,一个output
input :
- 想要被存到内存的值
- 操控input gate的信号
- 操控output gate的信号
- 操控forget gate的信号
LSTM - Example
图上标记出来的权重假设是已经训练好的参数
完整流程:(假想已知参数,不用梯度下降了)
输入310
输入410
输入200
输入101
输入3 -1 0
传统神经网络和LSTM的区别
四倍参数。
LSTM
还没结束,进一步的:
加上前一个时间点的output h
把存在内存中的值也加进去
Multiple-layer LSTM
哭了