RNN系列:

聊聊RNN&LSTM

聊聊RNN与seq2seq

attention mechanism,称为注意力机制。基于Attention机制,seq2seq可以像我们人类一样,将“注意力”集中在必要的信息上。

Attention的结构

seq2seq存在的问题

seq2seq中使用编码器对时序数据进行编码,然后将编码信息传递给解码器。此时,编码器的输出是固定长度的向量。从正常的理解来看,固定长度的编码器输出迟早会有溢出上下文信息的情况。

编码器的改进

目前的seq2seq结构,只将LSTM层的最后的隐藏状态传递给解码器,但是编码器的输出的长度应该根据输入文本的长度相应地改变。因此我们可以使用LSTM各个时刻(各个单词)输出的隐藏状态向量,可以获得和输入的单词数相同数量的向量。使用编码器各个时刻(各个单词)的LSTM层的隐藏状态(这里表示为hs):

有一点可以确定的是,各个时刻的隐藏状态中包含了大量当前时刻的输入单词的信息。因此,最终编码器的输出hs具有和单词数相同数量的向量,各个向量中蕴含了各个单词对应的信息:

解码器的改进

改进一

由于编码器的输出包含了各个时刻的隐藏状态向量,因此解码器的输入,也需要增加这一层输入。因此解码器中就包含了某个时刻下,当前单词的主要信息,而如果可以找到这些主要信息并提取出来,对其做翻译,就能实现我们的目标。

从现在开始,我们的目标是找出与“翻译目标词”有对应关系的“翻译源词”的信息,然后利用这个信息进行翻译。也就是说,我们的目标是仅关注必要的信息,并根据该信息进行时序转换。这个机制称为Attention。

以上的逻辑流程其实就是在模仿人在翻译单词时的过程,尤其是中式翻译;逐字/成对的将中文汉字转换为对应的英语讲出来,我想这种例子在我们身边是很常见的。哈哈哈哈,很有画面感!

这个过程,也被称为 "对齐"。

改进二

增加一个表示各个单词重要度的权重(记为a)。此时,a像概率分布一样,各元素是0.0~1.0的标量,总和是1。然后,计算这个表示各个单词重要度的权重和单词向量hs的加权和,可以获得目标向量。其计算流程如下:

即 hs 向量 与 a 权重向量 的内积

计算单词向量的加权和,这里将结果称为上下文向量,并用符号c表示。

改进三

有了表示各个单词重要度的权重a,就可以通过加权和获得上下文向量,从而获取到主要信息。那么,怎么求这个a呢?

首先,从编码器的处理开始,到解码器第一个LSTM层输出隐藏状态向量的处理为止,流程如下



用h表示解码器的LSTM层的隐藏状态向量。此时,我们的目标是用数值表示这个h在多大程度上和hs的各个单词向量“相似”。

因此,可以直接将隐藏状态向量h 与编码器全时刻向量hs做点积



这里通过向量内积算出h和hs的各个单词向量之间的相似度,并将其结果表示为s。不过,这个s是正规化之前的值,也称为得分。再经过softmax函数对点积结果归一化



计算各个单词权重的计算图

hr向量只是扩大了h向量的部分,使其与hs向量行列一致。

汇总

如上,现在将单词权重的计算与权重加权两层逻辑合并起来,如下展示了获取上下文向量c的计算图的全貌



图中分为Weight Sum层和Attention Weight层进行了实现。

这里进行的计算是:Attention Weight层关注编码器输出的各个单词向量hs,并计算各个单词的权重a;

Weight Sum层计算a和hs的加权和,并输出上下文向量c。我们将进行这一系列计算的层称为Attention层。



以上就是Attention技术的核心内容。关注编码器传递的信息hs中的重要元素,基于它算出上下文向量,再继续流转传递。

编码器的输出hs被输入到各个时刻的Attention层,并输出当前时刻的上下文向量信息。最终,具有Attention层的解码器的层结构,如下所示,

总结

编码器层输出各个时刻的向量信息数据,不仅可以伸缩编码层的长度限制,更是存储了更重要的时序时刻数据信息。

而解码器层,根据Attention架构(注意力机制),增加权重矩阵a,计算出当前时刻的上下文向量信息,提取出对齐单词,进行翻译。

聊聊RNN与Attention的更多相关文章

  1. Attention and Augmented Recurrent Neural Networks

    Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...

  2. 论文笔记之:Attention For Fine-Grained Categorization

    Attention For Fine-Grained Categorization Google ICLR 2015 本文说是将Ba et al. 的基于RNN 的attention model 拓展 ...

  3. Tensorflow Seq2seq attention decode解析

    tensorflow基于 Grammar as a Foreign Language实现,这篇论文给出的公式也比较清楚. 这里关注seq2seq.attention_decode函数, 主要输入 de ...

  4. Attention is all you need 论文详解(转)

    一.背景 自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基于R ...

  5. seq2seq模型详解及对比(CNN,RNN,Transformer)

    一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...

  6. Transform详解(超详细) Attention is all you need论文

    一.背景 自从Attention机制在提出 之后,加入Attention的Seq2 Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基 ...

  7. Attention is all you need 详细解读

    自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基于RNN的Se ...

  8. 论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

    RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪. 其中模型的组成 ...

  9. 第十四章——循环神经网络(Recurrent Neural Networks)(第二部分)

    本章共两部分,这是第二部分: 第十四章--循环神经网络(Recurrent Neural Networks)(第一部分) 第十四章--循环神经网络(Recurrent Neural Networks) ...

  10. [深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88)

    [深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88) 个人主页--> https://xiaosongshine.github.io/ 项目g ...

随机推荐

  1. 剪切图片, 原文自https://blog.csdn.net/sinat_41104353/article/details/85209456

    因为在 OpenCV2 里面,所有的东西都是 numpy array 即 np.ndarray1,所以使用 opencv 剪切图像主要原理是用 ndarray 的切片.一张图片基本上都是三维数组:行, ...

  2. 解决:vue-loader was used without the corresponding plugin.

    原因 webpack经常出现版本不兼容问题,vue-loader在15以前的版本打包时候会自动生成VueLoaderPlugin,但是现在需要手动去wepack.config.js文件中去加入,如下图 ...

  3. AB实验遇到用户不均匀怎么办?—— vivo游戏中心业务实践经验分享

    作者:vivo 互联网数据分析团队 - Li Bingchao AB实验是业务不断迭代.更新时最高效的验证方法之一:但在进行AB实验效果评估时需要特别关注"用户不均匀"的问题,稍不 ...

  4. Cilium系列-12-启用 Pod 的 BBR 拥塞控制

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  5. 从redis未授权访问到获取服务器权限

    从redis未授权访问到获取服务器权限 好久没写博客了,博客园快荒芜了.赶紧再写一篇,算是一个关于自己学习的简要的记录把. 这里是关于redis未授权访问漏洞的一篇漏洞利用: 首先是redis,靶场搭 ...

  6. Git Cherry-pick使用

    概述 无论项目大小,当你和一群程序员一起工作时,处理多个 Git 分支之间的变更都会变得很困难.有时,与其把整个 Git 分支合并到另一个分支,不如选择并移动几个特定的提交.这个过程被称为 " ...

  7. [FlareOn4]login-buu ctf

    打开压缩包 是个html,我直接???? 这不是web弄的吗 离谱了,不过f12还是会的 不过其中的逻辑还是比较清楚的 先用伪代码确定加密逻辑,再直接写直接进行爆破解码 wo cao,wrong!fl ...

  8. 论文解读(MCADA)《Multicomponent Adversarial Domain Adaptation: A General Framework》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Multicomponent Adversarial Domain Adaptation: A Gener ...

  9. C#程序随系统启动例子 - 开源研究系列文章

    今天讲讲C#中应用程序随系统启动的例子. 我们知道,应用程序随系统启动,都是直接在操作系统注册表中写入程序的启动参数,这样操作系统在启动的时候就根据启动参数来启动应用程序,而我们要做的就是将程序启动参 ...

  10. 【故障公告】多年的故障老朋友又来了:数据库服务器 CPU 100%

    数据库服务器 CPU 100% 问题几乎每年都要来几次,从来都不事先打一声招呼,今年的第2次在我们正忙着会员救园的时候来了. 今天 13:35 首先收到我们自己的异常告警通知: Execution T ...