【王树森】RNN模型与NLP应用(3/9):Simple RNN模型(个人向笔记)

前言

现在RNN已经没有以前那么流行了。在数据量大的情况下不如Transformer,但是在小数据的情况下仍然表现良好。


How to model sequential data?

1. one to one模型

像MLP和CNN,还有前面两节课讲到的二分类问题,都是基于one to one模型,也就是把数据一股脑输入进去,然后得到一个输出。one to one 模型的特点(局限)如下:

  • 整段地处理数据
  • 固定大小的输入(如图片)
  • 固定大小的输出(如每个类别的概率)

2. many to one or many to many

在处理不固定长度的输入和输出的问题(即sequential data)的时候,显然one to one模型并不适合。而RNN就是可以处理sequential data的模型。RNN很适合文本,语音和时间序列等数据。

在这里插入图片描述

3. RNN

RNN和人的阅读习惯很类似,人在阅读时会一边看一边在大脑里面积累信息,而RNN则每次用一个状态向量 h t h_t ht 来记录阅读过的信息。每向RNN输入一个word embedding信息,RNN就会更新自身的状态向量。
如下所示: h 0 h_0 h0 包含了the的信息,而 h 2 h_2 h2 包含了the, cat, sat的信息,最后一个状态 h t h_t ht 包含了整句话的信息,其中:

  • RNN从始至终只有一个参数矩阵A,每次通过这个矩阵A来更新状态向量
  • 对A进行随机初始化,然后用训练数据来训练A
    在这里插入图片描述

Simple RNN

1. Simple 如何把输入的向量 x t x_t xt 结合到状态向量 h t h_t ht 里面?

  • 我们把上一个状态记作 h t − 1 h_{t-1} ht1,把输入的 x t x_t xt h t − 1 h_{t-1} ht1 做一个concatenation
  • 把concatenation后的向量与参数矩阵A相乘
  • 对相乘后得到的向量的每一个元素输入到一个激活函数(双曲正切函数tanh,输出范围为-1到1),把激活函数的输出作为新的状态向量
    在这里插入图片描述
    在这里插入图片描述
    我们这样来理解下面的结构图:对于 t 状态的特征向量,其取决于:①当前输入 x t x_t xt ②上一个状态的特征向量 h t − 1 h_{t-1} ht1 ③模型的参数矩阵A
    在这里插入图片描述

2. Question : Why do we need tanh function?

我们假设输入的词向量为0:那么A矩阵蓝色部分都会和0相乘,结果得到的就是 A ⋅ h t − 1 A·h_{t-1} Aht1 ,若经过多次输入,则结果就会如下图所示: h 100 = A 100 h 0 h_{100}=A^{100}h_0 h100=A100h0,这样:

  • 如果参数矩阵A里面的最大值为0.9(小于1),那么经过多次方,会使特征向量最后接近0,
  • 而若是最大值为1.2(大于1),则经过多次方后会变为一个很大的数,若轮数再多则会接近无穷,也就是NaN(爆炸)
  • 所以考虑到输入的多样性,我们会在每一个更新状态向量后做一个normalization,使其范围回到 [ − 1 , 1 ] [-1,1] [1,1]
    在这里插入图片描述
    在这里插入图片描述

3. 矩阵A的维度(即需要训练的参数数量)

  • 行:特征向量h的维度+输入向量的维度
  • 列:特征向量h的维度
  • 固总参数量为:(特征向量h的维度+输入向量的维度)* 特征向量h的维度
    在这里插入图片描述

4. 用RNN对前两节课的数据集IMDS进行处理

  • 特征向量的维度和词嵌入的维度都需要自己确定,需要使用交叉验证
  • 最后只使用 h t h_t ht 即可,因为 h t h_t ht 包含了整句话的信息
  • h t h_t ht 输入一个分类器,这个分类器就会输出一个从0到1的数值,0代表负面评价,1代表正面评价
    在这里插入图片描述
    代码: 其中变量的含义和上节课类似
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述参数总览:
    在这里插入图片描述
    最终结果:
    在这里插入图片描述
    如果我们不只是想用最后一个向量,而希望把每个状态向量都用到: 只需要把return_sequences改为True,然后加一个Flatten层展平就好了。
    在这里插入图片描述
    在这里插入图片描述
    改动后的参数总览:
    在这里插入图片描述
    改动后的结果: 跟之前比并没有提升
    在这里插入图片描述

5. Simple RNN的缺点

  • Simple RNN在短时的效果比较好,在下面那句话中,RNN只需要关注 clouds are in the 即可,并不需要关注很长的上文,因此可以做出比较好的预测
    在这里插入图片描述
  • Simple RNN在长时的效果较差, h t h_t ht 和前面的 t t t 个输入都有函数依赖关系。按道理说改动某一个前面的输入,后面的所有 h t h_t ht 都会受到影响,但是Simple RNN并没有这种性质,所以很不合理。例如: h 100 h_{100} h100 x 1 x_1 x1 求导,其导数几乎等于0!这表明改动 x 1 x_1 x1 几乎不会对 h 100 h_{100} h100 产生影响。所以 h 100 h_{100} h100 会遗忘很多以前的信息。
    在这里插入图片描述
  • 如下图所示,Simple RNN几乎很难做到对Chinese这个单词的准确预测,因为它很“健忘”
    在这里插入图片描述
  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值