一:RNN的种类结构
RNN:每个神经元的输入包括两个方面,一个是前一个神经元的隐藏层状态 h (用于记忆,之前的信息) ,一个是当前的输入 x (当前信息)。神经元得到输入之后经过内部结构的运算,可能是普通RNN,LSTM,GRU等单元的计算,会得到新的隐藏状态 h 和输出 y,然后再传递到下一个神经元。正是因为保存了隐藏状态 h 的计算,这才使得 RNN 具有一定的记忆功能。

我们先来回顾下之前学习的循环神经网络的一些种类。根据任务的类别不同,有一些比较常见的是many-to-many,one-to-many,many-to-one。
分别如下:
1) many-to-many

一般就是某个序列对某个序列的形式,比如:
词性标注,语言模型等等。

1) one-to-many

或者

这个用于一些构造类生成类的应用,比如我们之前学习的那个RNN语言模型搭建好了之后的模型探测,就是自动生成句子和文本,文章,那些。比如还有生成音乐,图片等

1) many-to-one

场景比如有,文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感,或者是打几颗星。

二:Seq-2-seq的种类结构,以及数学运算式。
它也是一种循环神经网络结构,只不过略微不太一样。包含了编码器encoder和解码器decoder两个部分。上述的那些模型一般是长度需要固定的,seq-2-seq可以允许输入输出的长度不一样,比如用在机器翻译和问答系统,需要翻译的句子,输出的句子,问题和答案的句子都是任意长度的。

Encoder 的 RNN 接受输入 x,最终输出一个编码所有信息的上下文向量 c,中间的神经元没有输出。Decoder 主要传入的是上下文向量 c,然后解码出需要的信息。

Seq2seq也有一些不同的种类,基本都是encoder一样,只有decoder的结构不一样,如下所示:

1:第一种模型

Encoder:就是标准的RNN结构,只不过是任意长度的。式子也很容易理解。encoder最后的的结果会被被映射到一个向量C,C也有很多方式得到。

Decoder:将C作为decoder的预置隐藏层直接输入,其他的隐藏层仅仅接受上层传入的隐藏层值。计算公式如下:

2:第二种模型

Encoder:如同第一种模型的Encoder
Decoder:Decoder 结构有了自己的初始隐藏层状态 h’0,不再把上下文向量 c 当成是 RNN 的初始隐藏状态,而是当成 RNN 每一个神经元的输入。可以看到在 Decoder 的每一个神经元都拥有相同的输入 c,计算公式如下:

3:第仨种模型

Encoder:如同第一种模型的Encoder
Decoder:Decoder 结构和第二种类似,但是在输入的部分多了上一个神经元的输出 y’。即每一个神经元的输入包括:上一个神经元的隐藏层向量 h’,上一个神经元的输出 y’,当前的输入 c (Encoder 编码的上下文向量)。对于第一个神经元的输入 y’0,通常是句子其实标志位的 embedding 向量。计算公式如下:

这里仅仅列举集中常见的额模型即可。

三:attention的结构
上述的seq2seq看似没有什么问题,其实有一个很大的问题就是,使用的是encoder-decoder的结构,我们希望能把不论多长的句子的信息都包含在一个固定的向量C里面去表达,这。。。。。。想想有点艰难不是么?语言那么丰富,长度还不一定,怎么包含的下呢?
1:对于较长的句子,根本没办法包含所有有用的信息。
2:序列较长的时候,梯度消失就会变得明显。

尤其是RNN机制实际中存在长程梯度消失的问题,对于较长的句子,我们很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息,所以随着所需翻译句子的长度的增加,这种结构的效果会显著下降。

如果我们想翻译一个段落,一篇文章,难道我们需要将所有段落都运行encoder到一个常量C,再去翻译这个常量?很明显不是,我们会一句句地去翻译,我们每次都是注意力集中在一部分去翻译,而且翻译每一句话,也是注意力集中在某几个词汇上的。这才符合我们人的对翻译的理解。

接下来就是大名鼎鼎的attention模型了,什么是attention?就跟人的注意力一样。
Attention机制跟人类翻译文章时候的思路有些类似,即将注意力关注于我们翻译部分对应的上下文。同样的,Attention模型中,当我们翻译当前词语时,我们会寻找源语句中相对应的几个词语,并结合之前的已经翻译的部分作出相应的翻译,如下图所示,当我们翻译“knowledge”时,只需将注意力放在源句中“知识”的部分,当翻译“power”时,只需将注意力集中在"力量“。这样,当我们decoder预测目标翻译的时候就可以看到encoder的所有信息,而不仅局限于原来模型中定长的隐藏向量,并且不会丧失长程的信息。

现在呢,我们来看看attention怎么计算的哈。
X是encoder的输出,h是encoder的隐层值
S是decoder的隐层值,y是decoder的输出。
是当前第 t 个输出在第 j 个输入的注意力大小的归一化权值。

1:正常的特征提取流程,得到encoder的各个单元的hidden values

2:假设当前decoder的hidden state 是st-1,我们可以计算每一个输入j位置hj与当前输出位置的关联性,也就是对各个注意力的大小,也就是当前输出呢我全部都去关心一下当前输入,只是有的关心在意的多,有的在意的少。
当前第 t 个输出在第 j 个输入的注意力大小形式是:

转成向量形式为:

a是关联性函数,使用h和之前的输出也是考虑到信息,目前只能到这些信息,也是比较合理的。一般取一下集中形式吧。最简单的就点积了。或者是一个小型的神经网络,进行一个线性变换啥的。比如如下形式:

3:利用softmax计算归一化运算,将相关程度归一化,免得出现负值,归一化也符合正常理解,注意力资源就那么点,怎么分配,概率和都是为1 的。当前第t个输出在第j个输入的注意力大小是如下,

4:利用对每一个encoder的输入h的注意力权值得到当前的ct值,C此时就不是固定大小的了,而是T维度的了(T是序列长度)。有多少T就多少C向量。

5:由此,我们可以计算decoder的下一个hidden state 和当前位置的输出。

关键的变化是计算encoder与decoder state之间的关联性的权重,得到Attention分布,从而对于当前输出位置得到比较重要的输入位置的权重,在预测输出时相应的会占较大的比重,这种是比较符合人类注意力的。

通过Attention机制的引入,我们不再只能利用encoder最终单一向量结果的限制,前面也说了,单一固定的向量是无法表达丰富的信息,attention可以使模型可以集中在所有对于下一个目标单词重要的输入信息上,使模型效果得到极大的改善。还有一个优点是,我们通过观察attention 权重矩阵的变化,可以更好地知道哪部分翻译对应哪部分源文字,有助于更好的理解模型工作机制,如下图所示。

上图展示的是,一些单词在翻译中重点关注哪些词汇,越亮就代表关注度越高。所以啊,在attention中就是关注部分有用信息。也能避免长句子由于的信息丢失。

attention解决了信息提取的问题,既关注全局信息,也正确把握关键信息。这其实也是一种方法论。对于原信息,我关注全部,但是每一部分我关注多少?

时间有限,我也懒得画图了,图都是思拼八凑的,能明白原理即可。

NLP 《seq2seq》相关推荐

  1. NLP《Tranformer和Self-Attention》

    一:自注意力模型 上一篇文章<seq2seq>中我们学习到了attention机制,它可以看到全局的信息,并且它也可以正确地去关注到相关的有用的信息. 原始的encoder是以RNN为基础 ...

  2. NLP:以周杰伦的《Mojito》歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号

    NLP:以周杰伦的<Mojito>歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号 目录 以周杰伦的<Mojito>歌词为例字符串切分之清除一段由列表组成的字 ...

  3. NLP《词汇表示方法(六)ELMO》

    我们已经学习了多种词向量的表示方法,嵌入词向量,基本上都是通过学习语言模型LM学习来的副产品. 但是都有一个很大的缺点就是,每一个单词都假设只有一个特定的嵌入向量表示,这显然还是不太符合我们的语言习惯 ...

  4. 从NLP视角看电视剧《狂飙》,会有什么发现?

    文章目录 1.背景 2.数据获取 3.文本分析与可视化 3.1 短评数据预处理 3.2 词云图可视化 3.3 top关键词共现矩阵网络 3.4 <狂飙>演职员图谱构建 4.短评相关数据分析 ...

  5. 用文本挖掘剖析近5万首《全唐诗》-- 一文学会NLP数种基础任务

    作者:苏格兰折耳猫 原文链接:https://zhuanlan.zhihu.com/p/52155493 已获 之乎者也V 授权 楔子 近些年来,弘扬中华传统文化的现象级综艺节目不断涌现,如<中 ...

  6. AI 改写《权力的游戏》结局,和编剧比谁更烂?

    作者 | Chintan Trivedi 译者 | 刘畅,责编 | Jane 出品 | AI科技大本营(ID:rgznai100) 前言 <权力的游戏>结局烂尾? <权力的游戏> ...

  7. ktt算法 约化_答:那些深度学习《面试》你可能需要知道的

    本文是问题"那些深度学习<面试>你可能需要知道的"的回答,答案均以英文版Deep Learning页标标记. 1.列举常见的一些范数及其应用场景,如L0,L1,L2,L ...

  8. 李宏毅老师《机器学习》课程笔记-5 Transformer

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除一张来自 transformer论文,其余均来自课程 PPT.欢迎交流和多多指教,谢谢! L ...

  9. 李宏毅老师《机器学习》课程笔记-4.1 Self-attention

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中有一张图片来自于 The Illustrated Transformer ,其余图片均来自课程 P ...

最新文章

  1. 【Matlab 图像】滤波器原理使用及测试效果
  2. 前端优秀博客网站收集
  3. cpp加密php,常用的数据加密规则算法(php包含MD5和RSA)
  4. 阅读王概凯老师架构漫谈系列总结
  5. PAT乙级——1001害死人不偿命的(3n+1)猜想(太简单)
  6. Android binder 框架和学习资料
  7. 为什么你买不到一台好用的机器人?因为没有你的代码
  8. 数据库课程设计-题库管理系统
  9. numpy python安装_安装numpy
  10. 区块链钱包之ETH钱包生成
  11. 麒麟 mips mysql_中标麒麟(龙芯CPU)--docker基础镜像制作
  12. 深造分布式 打败面试官 招式一 小试牛刀
  13. 微信小程序和微信小游戏的区别体现在哪?
  14. PostgreSQL嵌套事务提交流程研究
  15. win7上安装microsoft edge浏览器, 模拟ie11模式
  16. 大数据分析python r matlab_大数据分析之如何让 Python, R, Matlab 与 Tableau 红尘作伴,玩的潇潇洒洒...
  17. 福利:亲测腾讯云轻服务器248可以免费升级到448配置了
  18. 关于SNR和EbN0转换关系
  19. 【STM32H7】第4章 ThreadX FileX文件系统移植到STM32H7(SD卡)
  20. TensorFlow-GPU框架详细安装

热门文章

  1. Windows Serivce服务实现过程和打包安装
  2. OAuth和OpenID的区别(转)
  3. 惠普HP1280墨盒型号
  4. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 线性回归
  5. 容器编排技术 -- Kubernetes kubectl create service loadbalancer 命令详解
  6. MiniO纠删码快速入门
  7. Docker安装ActiveMQ(docker-compose.yml)
  8. Spring-Cloud的版本是如何定义的
  9. Docker上部署WebERP系统,开源ERP框架
  10. sql语句执行步骤详解