Seq2Seq模型与注意力机制

Seq2Seq模型

基本原理

  • 核心思想:将一个作为输入的序列映射为一个作为输出的序列

    • 编码输入
    • 解码输出
    • 解码第一步,解码器进入编码器的最终状态,生成第一个输出
    • 以后解码器读入上一步的输出,生成当前步输出
  • 组成部件:
    • Encoder
    • Decoder
    • 连接两者的固定大小的State Vector

解码方法

  • 最核心部分,大部分的改进
  • 贪心法
    • 选取一种度量标准后,在当前状态下选择最佳的一个结果,直到结束

      • 计算代价低
      • 局部最优解
  • 集束搜索(Beam Search)
    • 启发式算法
    • 保存beam size个当前较佳选择,决定了计算量,8~12最佳
    • 解码时每一步根据保存的结果选择下一步扩展和排序,选择前beam size个保存
    • 循环迭代,直到结束。选择最佳结果输出
  • 改进
    • 堆叠RNN
    • Dropout机制
    • 与编码器之间建立残差连接
    • 注意力机制
    • 记忆网络

注意力机制

Seq2Seq模型中的注意力机制

  • 在实际发现,随着输入序列增长,模型性能发生显著下降
  • 小技巧
    • 将源语言句子逆序输入,或者重复输入两遍,得到一定的性能提升
  • 解码时当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了
  • 引入注意力机制解决上述问题:
    • 解码时,每一个输出词都依赖于前一个隐状态以及输入序列每一个对应的隐状态
      \[s_i = f(s_{i-1}, y_{i-1},c_i)\]
      \[p(y_i|y_1,\cdots,y_{i-1})=g(y_{i-1},s_i,c_i)\]
      其中,\(y\)是输出词,\(s\)是当前隐状态,\(f,g\)是非线性变换,通常为神经网络
    • 语境向量\(c_i\)是输入序列全部隐状态\(h_1,\cdots,h_T\)的加权和
      \[c_i=\sum \limits_{j=1}^T a_{ij}h_j \]
      \[a_{ij} = \frac{\exp(e_{ij})}{\sum_k \exp(e_{ij})} \]
      \[e_{ij}=a(s_{i-1},h_j) \]
    • 神经网络\(a\)将上一个输出序列隐状态\(s_{i-1}\)和输入序列隐状态\(h_j\)作为输入,计算出一个\(x_j,y_i\)对齐的值\(e_{ij}\)
      • 考虑每个输入词与当前输出词的对齐关系,对齐越好的词,会有更大权重,对当前输出影响更大
    • 双向循环神经网络
      • 单方向:\(h_i\)只包含了\(x_0\)到\(x_i\)的信息,\(a_{ij}\)丢失了\(x_i\)后面的信息
      • 双方向:第\(i\)个输入词对应的隐状态包括了\(\overrightarrow{h}_i\)和\(\overleftarrow{h}_i\),前者编码了\(x_0\)到\(x_i\)的信息,后者编码了\(x_i\)及之后的信息,防止信息丢失

常见Attention形式

  • 本质:一个查询(query)到一系列(键key-值value)对的映射
  • 计算过程
    • 将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等
    • 使用一个softmax函数对这些权重进行归一化
    • 权重和相应的键值value进行加权求和得到最后的attention

原文地址:https://www.cnblogs.com/weilonghu/p/11923017.html

时间: 2024-10-29 15:04:22

Seq2Seq模型与注意力机制的相关文章

关于《注意力模型--Attention注意力机制》的学习

关于<注意力模型--Attention注意力机制>的学习 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客,不过添加了一些个人的思考与理解过程.在github上找到一份基于keras框架实现的可运行的注意模型代码:Attention_Network_With_Keras (对这个模型的详细理解可参考:<注意力模型的一个实例代码的实现与分析>) 注意力模型:对目标数据进行加权变化.人脑的注意力模型,说到底是一种资源分配模型,在某个特定时刻,你的注意力总是集中在画面中的

Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译

前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html 系列教程总目录传送门:我是一个传送门 本系列教程对应的 jupyter notebook 可以在我的Github仓库下载: 下载地址:https://github.com/Holy-Shine/Pytorch-notebook 本教程我们将会搭建一个网络来将法语翻译成英语. [KE

动手学pytorch-注意力机制和Seq2Seq模型

注意力机制和Seq2Seq模型 1.基本概念 2.两种常用的attention层 3.带注意力机制的Seq2Seq模型 4.实验 动手学pytorch-注意力机制和Seq2Seq模型 原文地址:https://www.cnblogs.com/54hys/p/12317068.html

pytorch seq2seq模型中加入teacher_forcing机制

在循环内加的teacher forcing机制,这种为目标确定的时候,可以这样加. 目标不确定,需要在循环外加. decoder.py 中的修改 """ 实现解码器 """ import torch.nn as nn import config import torch import torch.nn.functional as F import numpy as np import random class Decoder(nn.Module)

Hulu机器学习问题与解答系列 | 十二:注意力机制

几天不见想死你们啦~ 今儿的课题很好玩,跟上队伍一起来读! 今天的内容是 [注意力机制] 场景描述 作为生物体,我们的视觉和听觉会不断地获得带有序列的声音和图像信号,并交由大脑理解:同时我们在说话.打字.开车等过程中,也在不断地输出序列的声音.文字.操作等信号.在互联网公司日常要处理的数据中,也有很多是以序列形式存在的,例如文本.语音.视频.点击流等.因此如何更好的对序列进行建模,一向是研究的要点. 为了解决这些问题,注意力机制(attention mechanism)被引入Seq2Seq模型中

Attention注意力机制介绍

什么是Attention机制 Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素.其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有1000个哈姆雷特.根据应用场景的不同,Attention分为空间注意力和时间注意力,前者用于图像处理,后者用于自然语言处理.本文主要介绍Attention机制在Seq2seq中的应用. 为什么要用Attention机制 我们知道在Seq2seq模型中,原始编解码模型的encode过程会生成一个中间向量C

自注意力机制(Self-attention Mechanism)——自然语言处理(NLP)

近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中.随着注意力机制的深入研究,各式各样的attention被研究者们提出.在2017年6月google机器翻译团队在arXiv上放出的<Attention is all you need>论文受到了大家广泛关注,自注意力(self-attention)机制开始成为神经网络attention的研究热点,在各个任务上也取得了不错的效果.对这篇论文中的self-attention以及一些相关工作进行了学习

机器学习(ML)十二之编码解码器、束搜索与注意力机制

编码器—解码器(seq2seq) 在自然语言处理的很多应用中,输入和输出都可以是不定长序列.以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如 英语输入:“They”.“are”.“watching”.“.” 法语输出:“Ils”.“regardent”.“.” 当输入和输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)或者seq2seq模型.这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器.编码器用来分析

学习笔记CB014:TensorFlow seq2seq模型步步进阶

神经网络.<Make Your Own Neural Network>,用非常通俗易懂描述讲解人工神经网络原理用代码实现,试验效果非常好. 循环神经网络和LSTM.Christopher Olah http://colah.github.io/posts/2015-08-Understanding-LSTMs/ . seq2seq模型基于循环神经网络序列到序列模型,语言翻译.自动问答等序列到序列场景,都可用seq2seq模型,用seq2seq实现聊天机器人的原理 http://suriyade