聊聊RNN与Attention
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的更多相关文章
- Attention and Augmented Recurrent Neural Networks
Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...
- 论文笔记之:Attention For Fine-Grained Categorization
Attention For Fine-Grained Categorization Google ICLR 2015 本文说是将Ba et al. 的基于RNN 的attention model 拓展 ...
- Tensorflow Seq2seq attention decode解析
tensorflow基于 Grammar as a Foreign Language实现,这篇论文给出的公式也比较清楚. 这里关注seq2seq.attention_decode函数, 主要输入 de ...
- Attention is all you need 论文详解(转)
一.背景 自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基于R ...
- seq2seq模型详解及对比(CNN,RNN,Transformer)
一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...
- Transform详解(超详细) Attention is all you need论文
一.背景 自从Attention机制在提出 之后,加入Attention的Seq2 Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基 ...
- Attention is all you need 详细解读
自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基于RNN的Se ...
- 论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL
RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪. 其中模型的组成 ...
- 第十四章——循环神经网络(Recurrent Neural Networks)(第二部分)
本章共两部分,这是第二部分: 第十四章--循环神经网络(Recurrent Neural Networks)(第一部分) 第十四章--循环神经网络(Recurrent Neural Networks) ...
- [深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88)
[深度应用]·首届中国心电智能大赛初赛开源Baseline(基于Keras val_acc: 0.88) 个人主页--> https://xiaosongshine.github.io/ 项目g ...
随机推荐
- 在行情一般的情况下,就说说23级应届生如何找java工作
Java应届生找工作,不能单靠背面试题,更不能在简历中堆砌和找工作关系不大的校园实践经历,而是更要在面试中能证明自己的java相关商业项目经验.其实不少应届生Java求职者不是说没真实Java项目经验 ...
- Nginx之数据流代理stream模块简介和使用 ---九五小庞
一.stream模块简介 stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文.ngx_stream_core_module模块从1.9.0 ...
- 10/28-29_String类_SrtingBuffer类_Interger类_笔记
API:应用程序编程接口 String功能 public String replace (char oldchar ,char newchar); //符串中某一字符被一新字符替换 public St ...
- 使用LaTex添加公式到Hexo博客里
代码编辑器,强烈推荐使用微软的 VS code,相比Atom开启迅速,使用方便,扩展丰富 第一步: 安装Kramed hexo 默认的渲染引擎是 marked,但是 marked 不支持 mathja ...
- pycharm: 注释自动生成
解决方案如下
- VMware 备份操作系统
在VMware 中备份方式有两种:快照和克隆. 快照:又称还原点,就是保存在拍快照时系统的状态,包含所有内容.在之后的使用中,随时都可以恢复.[短期备份,需要频繁备份时,使用该方法.操作的虚拟系统一般 ...
- PowerShell:因为在此系统上禁止运行脚本,解决方法
解决方案 get-executionpolicy set-executionpolicy remotesigned 输入Y 至此问题解决
- CoaXPress 2.0 FPGA HOST IP Core Linux Demo
目录 Hello-FPGA CoaXPress 2.0 Host FPGA IP Core Linux Demo 4 1 说明 4 2 设备连接 7 3 VIVADO FPGA工程 7 4 调试说明 ...
- 线上问题排查--进程重启失败,最后发现是忘了cd
背景 我前面写了几篇文章,讲c3p0数据库连接池发生了连接泄露,但是随机出现,难以确定根因,最终呢,为了快速解决问题,我是先写了个shell脚本,脚本主要是检测服务的接口访问日志,看看过去的30s内是 ...
- 五 Android Capabilities讲解(转)
1.Capabilities介绍 可以看下之前代码里面设置的capabilities DesiredCapabilities capabilities = new DesiredCapabilitie ...