How to model sequential data?
Sequential data: 文本、语音等
one to one 模型
一个输入对应一个输出。例如输入一张图片,输出每一类的概率值。全连接网络和卷积神经网络都是One to One Model。
- Limitations of FC Nets and ConvNets:
- 把处理一段文本作为整体
- 固定长度的输入,例如图片
- 固定长度的输出,例如概率值
RNNs
对于文本问题,一句话可长可短,所以其输入输出并不固定,因此one to one model 并不适用文本问题。
对于时序数据,更好的模型是many to one 或 many to many model. RNNs就是这样的模型,其输入输出的长度都不需要固定,所以RNNs很适合文本、语音等时序数据。
RNN 每看一个词,就用状态向量 h 来积累看过的信息。
把输入的词用Word embedding变成一个词向量 x,每次把一个词向量输入RNN,然后 RNN 就会更新向量 h,把新的输入积累到状态 h。
state
h
0
h_0
h0 包含了第一个词 the 的信息,
h
1
h_1
h1里包含了前两个词 the、cat 的信息,依次类推,最后一个状态
h
t
h_t
ht 包含了整句话的信息。
可以把
h
t
h_t
ht 看成这句话抽取的特征向量,更新状态 h 的时候,需要用到参数矩阵A,整个RNN只有一个参数A,无论这条链有多长。
A随机初始化,然后利用训练数据来学习A。
Simple RNN
Q: Why do we need the tanh function?
SimpleRNN 的缺陷
Simple RNN擅长于短期依赖关系。例子:给定半句话,要求预测下一个单词。
在大量的数据训练下,RNN是有这种能力正确预测出下个单词是sky的。RNN只需要看最近的几个词,如clouds are,RNN不需要更多的上下文。这个例子是对SimpleRNN有利的。
不擅长于长期依赖关系,即遗忘问题。
RNN中的状态h跟之前所有输入的向量x都有函数依赖关系,照理来说,改变输入向量x1,那之后所有的状态h都会发生变化。但SimpleRNN并没有这种性质, 它会遗忘掉之前的内容,所以很不合理。
总结
- RNN 适用于处理文本、语音等时序数据
- 隐状态 h t h_t ht 聚合输入向量 x 0 , . . . , x t x_0, ..., x_t x0,...,xt 的信息
- RNNs 会遗忘早期的输入信息
- 它忘记了它早期所见过的东西
- 如果 t 很大,
h
t
h_t
ht 几乎和
x
0
x_0
x0 无关
- SimpleRnn 有一个参数矩阵(也有一个偏置向量)
- 参数矩阵的Shape = Shape(h) * [Shape(h) + Shape(x)]
参考:王树森深度学习