首页 > 其他分享 >Transformer-Attention机制

Transformer-Attention机制

时间:2024-09-16 23:22:10浏览次数:11  
标签:编码器 RNN Attention Transformer state 序列 机制 hidden 向量

出现Attention机制的原因:基于循环神经网络(RNN)的seq2seq模型,在处理长文本时遇到了挑战,而对长文本中不同位置的信息进行attention有助于提升RNN的模型效果。

1 seq2seq框架

seq2seq:从一个文本序列得到一个新的文本序列。典型的seq2seq任务包括:机器翻译任务、文本摘要任务。简而言之就是输入了一个单词(字母或图像特征)序列,输出另一个单词(字母或图像特征)序列。

1.1 seq2seq细节

seq2seq模型由编码器(Encoder)和解码器(Decoder)组成,绿色的编码器会处理输入序列中的每个元素并获得输入信息,这些信息会被转换成为一个黄色的向量(称为context向量)。当我们处理完整个输入序列后,编码器把 context向量 发送给紫色的解码器,解码器通过context向量中的信息,逐个元素输出新的序列。

Transformer-Attention机制_Transformer

eq2seq模型中的编码器和解码器一般采用的是循环神经网络RNN(Transformer模型还没出现的过去时代)。编码器将输入的法语单词序列编码成context向量,然后解码器根据context向量解码出英语单词序列。

Transformer-Attention机制_Transformer_02

RNN处理Sequence的方法:

  1. 假设序列输入是一个句子,这个句子可以由Transformer-Attention机制_Transformer_03个词表示:Transformer-Attention机制_Transformer_04
  2. RNN首先将句子中的每一个词映射成为一个向量得到一个向量序列:Transformer-Attention机制_Transformer_05,每个单词映射得到的向量通常又叫做:word embedding。
  3. 然后在处理第个时间步的序列输入时,RNN网络的输入和输出可以表示为:
  • 输入:RNN在时间步Transformer-Attention机制_Transformer_06的输入之一为单词Transformer-Attention机制_Transformer_07经过映射得到的向量Transformer-Attention机制_Transformer_08
  • 输入:RNN另一个输入为上一个时间步Transformer-Attention机制_Transformer_09得到的hidden state向量Transformer-Attention机制_Transformer_10,同样是一个向量。
  • 输出:RNN在时间步Transformer-Attention机制_Transformer_06的输出为Transformer-Attention机制_Transformer_12 hidden state向量。

2 Attention机制

基于RNN的seq2seq模型编码器所有信息都编码到了一个context向量中,便是这类模型的瓶颈。一方面单个向量很难包含所有文本序列的信息,另一方面RNN递归地编码文本序列使得模型在处理长文本时面临非常大的挑战(比如RNN处理到第500个单词的时候,很难再包含1-499个单词中的所有信息了)。

attention注意力机制,使得seq2seq模型可以有区分度有重点地关注输入序列

Attention模型和seq2seq模型的两点区别:

  • 编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态) 传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态)。
  • 注意力模型的解码器在产生输出之前,做了一个额外的attention处理。
  1. 由于编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词,那么解码器要查看所有接收到的编码器的 hidden state(隐藏层状态)。
  2. 给每个 hidden state(隐藏层状态)计算出一个分数(我们先忽略这个分数的计算过程)。
  3. 所有hidden state(隐藏层状态)的分数经过softmax进行归一化。
  4. 将每个 hidden state(隐藏层状态)乘以所对应的分数,从而能够让高分对应的 hidden state(隐藏层状态)会被放大,而低分对应的 hidden state(隐藏层状态)会被缩小。
  5. 将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量。

Transformer-Attention机制_Transformer_13

3 Transformer结构

https://jalammar.github.io/illustrated-transformer/

Transformer一个巨大的优点是:模型在处理序列输入时,可以对整个序列输入进行并行计算,不需要按照时间步循环递归处理输入序列。

Transformer-Attention机制_Transformer_14

Transformer-Attention机制_Transformer_15

3.1 Transformer宏观结构

Transformer可以看作是seq2seq模型的一种,对比之前的RNN,只是将Encoder和Decoder的RNN模型替换为Transformer模型。

Transformer-Attention机制_Transformer_16

编码部分(encoders)由多层编码器(Encoder)组成。每层编码器网络结构是一样的,每层解码器网络结构也是一样的。不同层编码器和解码器网络结构不共享参数。

Transformer-Attention机制_Transformer_17

单层encoder主要由以下两部分组成:

  • Self-Attention Layer
  • Feed Forward Neural Network(前馈神经网络,缩写为 FFNN) 编码器的输入文本序列Transformer-Attention机制_Transformer_18最开始需要经过embedding转换,得到每个单词的向量表示Transformer-Attention机制_Transformer_19,其中Transformer-Attention机制_Transformer_20是维度为Transformer-Attention机制_Transformer_21的向量,然后所有向量经过一个Self-Attention神经网络层进行变换和信息交互得到Transformer-Attention机制_Transformer_22,其中Transformer-Attention机制_Transformer_23是维度为Transformer-Attention机制_Transformer_21的向量。self-attention层处理一个词向量的时候,不仅会使用这个词本身的信息,也会使用句子中其他词的信息(你可以类比为:当我们翻译一个词的时候,不仅会只关注当前的词,也会关注这个词的上下文的其他词的信息)。Self-Attention层的输出会经过前馈神经网络得到新的Transformer-Attention机制_Transformer_25,依旧是Transformer-Attention机制_Transformer_03个维度为Transformer-Attention机制_Transformer_21的向量。这些向量将被送入下一层encoder,继续相同的操作。

标签:编码器,RNN,Attention,Transformer,state,序列,机制,hidden,向量
From: https://blog.51cto.com/Laccoliths/12032545

相关文章

  • 嵌入式单片机程序运行机制,从helloworld说起
    1开篇学习任何一门编程语言,都会从helloworld开始。对于一门从未接触过的语言,在短时间内我们都能用这种语言写出它的helloworld。然而,对于helloworld这个简单程序的内部运行机制,相信还有很多人都不是很清楚。helloworld这些信息是如何通显示器过显示的?cpu执行的代码和......
  • 【Java】深入理解Java中的多线程同步机制
    一、多线程的数据不一致    当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。    这个时候,一个在单线程模型下不存在的问题就会发生:如果多个线程同时读写共享......
  • C语言中的GCC的优化和数组的存放方式、Cache机制、访问局部性
    “我们仍需共生命的慷慨与繁华相爱,即使岁月以刻薄和荒芜相欺”文章目录前言文章有误敬请斧正不胜感恩!第一题:***什么是gcc:***C语言中,“gcc-O2”是使用GCC编译器时的一个编译选项。第一部分:为什么程序一输出0,而程序二输出1?第二题:第二部分:为什么两个循环版本的性能......
  • ROS的通讯机制(一):常用命令
        一、rosnode:操作节点        rosnode是用于获取节点信息的命令。相关命令:rosnodeping测试到节点的连接状态rosnodelist列出活动节点rosnodeinfo打印节点信息rosnodemachine列出指定设备上节点rosnodekill......
  • 【负荷预测】基于CNN-GRU-Attention的负荷预测研究(Python代码实现)
         ......
  • Android HandlerThread Post后延迟7秒才执行的原因及解决方案|如何提高Android后台线程
    在Android开发中,HandlerThread是用于处理后台线程任务的常见工具。然而,有时我们会遇到这样的问题:当任务通过HandlerThread的post方法发送后,任务的执行时间会出现明显的延迟,比如7秒的延迟才执行任务。本文将深入分析这种问题的成因,探讨可能的影响因素,并提供多种优化方案,帮助开发者解......
  • 深入理解Redis锁与Backoff重试机制在Go中的实现
    目录Redis锁的深入实现Backoff重试策略的深入探讨结合Redis锁与Backoff策略的高级应用具体实现结论在构建分布式系统时,确保数据的一致性和操作的原子性是至关重要的。Redis锁作为一种高效且广泛使用的分布式锁机制,能够帮助我们在多进程或分布式环境中同步访问共享资源。本文将深......
  • 【加密社】Solidity 中的事件机制及其应用
    加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件......
  • 【弱监督时间动作定位】Weakly-Supervised Temporal Action Localization with Multi-
    Weakly-SupervisedTemporalActionLocalizationwithMulti-ModalPlateauTransformers论文阅读Abstract1.Introduction2.RelatedWork3.TheProposedMethod3.1.PreliminaryandMotivation3.2.BaseModel3.3.Multi-ModalPlateauTransformers3.3.1Multi-Mo......
  • MySQL锁机制揭秘:从行锁到表锁,共享锁到排他锁,悲观锁到乐观锁的全面解读
    MySQL有哪些锁1、按照锁的粒度划分行锁是最低粒度的的锁,锁住指定行的数据,加锁的开销较大,加锁较慢,可能会出现死锁的情况,锁的竞争度会较低,并发度相对较高。但是如果where条件里的字段没有加索引,则加的行锁会自动升级为表锁,因为行锁是基于索引去进行操作的,所以想要加行锁,就......