Simple RNN 模型

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)]

参考:王树森深度学习

おすすめ

転載: blog.csdn.net/qq_42899028/article/details/121539787