《深度学习进阶 自然语言处理》学习笔记(2)

前篇链接 link

第五章 RNN

前面介绍的word2vec是前馈神经网路无法很好的处理时序信息,引入RNN来解决问题

语言模型

目标:求后验概率 P( w_t | w_1, W_2, …, W_t-1 ),从而求出语言模型的联合概率

RNN模型

模型架构

在这里插入图片描述

  1. 输入:将时序单词序列 { w0, w1, w2, …, wt } 在空间上展开,依次输入到对应的RNN单元中(即上图等号右侧的一个个RNN框
  2. 输出:对于输入单词 w_n,输出 w_n 接下来出现的一个单词的概率向量

一个典型RNN单元的计算图

在这里插入图片描述
h_prev为前一个RNN单元输出的隐藏状态,x为当前时序下输入的单词向量,tanh为激活函数

损失函数的设置

在这里插入图片描述

  1. 总结——基于时序序列输出的结果序列 { x0, x1, … , xT-1 } 与正确标签{ t0, t1, … , tT-1 }的逐元素二分类交叉熵损失的求和取均值

评价指标

  1. 困惑度

总结

  1. RNN 具有环路,可以记忆隐藏状态;

  2. 通过展开 RNN 的循环,可以将其解释为多个 RNN 单元水平方向上延伸的神经网络,可以通过基于时间的反向传播进行学习(BPTT);

  3. 在学习长时序数据时,要生成长度适中的数据块,进行以块为单位的截断 BPTT 学习(Truncated BPTT);

  4. Truncated BPTT 只截断反向传播的连接;

  5. 在 Truncated BPTT 中,为了维持正向传播的连接,需要按顺序输入数据;

  6. 语言模型将单词序列解释为概率;

  7. 理论上,使用 RNN 层的条件语言模型可以记忆所有已出现单词的信息;

第六章 Gated RNN

  1. 上一章的 RNN 存在环路,可以记忆过去的信息,其结构非常简单,易于实现。不过这个 RNN 的效果并不好。许多情况下它都无法很好地学习到时序数据的长期依赖关系
  2. 现在,上一章的简单 RNN 经常被 LSTM 层所代替。实际上RNN更多的是指 LSTM 层,而不是上一章的 RNN。
  3. LSTM 增加了一种名为 的结构。基于这个门,可以学习到时序数据的长期依赖关系。本章我们将指出上一章的 RNN 的问题,介绍代替它的 LSTM 等 “Gated RNN”
  4. 我们将花很多时间研究 LSTM 的结构,并揭示它实现“长期记忆”的机制。此外,我们将使用 LSTM 创建语言模型,并展示它可以在实际数据上很好地学习。

上一章RNN存在的问题

梯度爆炸与梯度消失

  • 原因:
  1. 激活函数 tanh 的值域 (-1, 1),累积运算使得梯度的传播在逐渐衰减)
  2. 计算图中 MatMul (矩阵乘积) ,矩阵的最大特征值的模(是否大于1)决定了这个矩阵的特性——累积运算中对于输入信号是放大还是衰减

LSTM

一个 LSTM 单元的结构

在这里插入图片描述

记忆单元c_t的引入
  • c_t / c_t-1:记忆单元,存储了t时刻LSTM的记忆,会在LSTM单元之间水平向右传播
  • 计算路径不包括tanh或MatMul,可以有效避免梯度爆炸或者梯度消失
3个门:遗忘门、输入门、输出门
  • f遗忘门,输入的 x_t 与 h_t-1 被sigmoid函数激活
  • g:h_t-1 与 x_t 向当前记忆单元添加的新信息,采用tanh函数激活
  • i输入门,判断新添信息 g 的权重意义
  • o输出门将当前时刻的记忆单元 c_t 与通过输出门的 h_t-1 , x_t 加权求和得到隐藏状态 h_t

tanh函数值域(-1,1),用于编码信息的强弱幅度sigmoid函数值域(0,1),用于控制输出数据的比例
通常,门使用sigmoid,包含实际数据的信息使用tanh。

计算图

在这里插入图片描述
在这里插入图片描述

LSTM的网络架构

在这里插入图片描述

  • 上图所示的是一个由两层LSTM层构成的RNNLM
改进
  1. 设置多个LSTM层
  2. 可以通过在层与层之间添加 Dropout 抑制过拟合
  3. 可以对上图的Embedding层和Affine层使用权值共享减少参数,抑制过拟合
    最终如下图:
    在这里插入图片描述

总结

  1. 在简单 RNN 的学习中,存在梯度消失和梯度爆炸问题;

  2. 梯度裁剪对解决梯度爆炸有效,LSTM、GRU 等 Gated RNN 对解决梯度消失有效;

  3. LSTM 中有 3 个门:输入门、遗忘门和输出门 ;

  4. 门有专门的权重,并使用 sigmoid 函数输出 0.0 ~ 1.0 的实数;

  5. LSTM 的多层化、Dropout 和权重共享等技巧可以有效改进语言模型;

  6. RNN 的正则化很重要,人们提出了各种基于 Dropout 的方法;

第七章 基于 RNN 生成文本

本章会介绍一种结构名为 seq2seq 的新神经网络。seq2seq 是 “(from) sequence to sequence”(从时序到时序)的意思,即将一个时序数据转换为另一个时序数据。
通过组合两个 RNN,可以轻松实现 seq2seq。seq2seq 可以应用于多个应用,比如机器翻译、聊天机器人和邮件自动回复等。

seq2seq

原理

  • Encoder-Decoder模型

  • Encoder示例:
    下图是对日语“我是一只猫”的编码,输出为最终的隐藏状态h
    在这里插入图片描述

  • Decoder示例:

  1. 下图是解码器对上图输出的h进行英文解码,解码器区别于译码器:LSTM层会得到一个由解码器输入的初始h
  2. 解码器第一个LSTM单元固定输入作为起始标识符
  3. 重复步骤:每个LSTM单元输出的概率分布中最大值代表的单词作为下一个LSTM的输入
    在这里插入图片描述

改进

Reverse
  • reverse输入的序列(似乎可以使梯度传播更平滑,玄学)
Peeky

在这里插入图片描述

  • 将编码器得到的h依次与解码器输入的单词进行concat,从而输入到所有LSTM单元中
  • 将编码器得到的h依次与每个LSTM输出的隐藏状态进行concat,从而输入到所有Affine单元中
自动图像描述
  • 对输入的图像,生成语言描述
  • 采用seq2seq结构,编码器是CNN,一维化CNN输出的特征图并输入到LSTM解码器中

总结

  1. 基于 RNN 的语言模型可以生成新的文本;

  2. 在进行文本生成时,重复【输入一个单词(字符),基于模型的输出 (概率分布)进行采样】这一过程;

  3. 通过组合两个 RNN,可以将一个时序数据转换为另一个时序数据(seq2seq);

  4. 在 seq2seq 中,编码器对输入语句进行编码,解码器接收并解码这个编码信息,获得目标输出语句;

  5. 反转输入语句(Reverse)和将编码信息分配给解码器的多个层(Peeky)可以有效提高 seq2seq 的精度;

  6. seq2seq 可以用在机器翻译、聊天机器人和自动图像描述等各种各样的应用中;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值