Transformer Encoder-Decoer 结构回顾

news2024/11/22 18:23:23

有关于Transformer、BERT及其各种变体的详细介绍请参照笔者另一篇博客:最火的几个全网络预训练模型梳理整合(BERT、ALBERT、XLNet详解)。

本文基于对T5一文的理解,再重新回顾一下有关于auto-encoder、auto-regressive等常见概念,以及Transformer-based model的decoder结构。

1. Auto-encoder & Auto-regressive Language model

1.1 Auto-encoder

类似于BERTALBERTRoBERTa这类,encoder-only的language model。

优点:

  • 能够保证同时上下文。

缺点:

  • token之间的条件独立假设。违反自然语言生成的直觉性。
  • encoder-only的时候,预训练目标不能和很多生成任务一致。

而结合预训练的时候的objective,像BERT这类Masked Language Model (MLM)又可以叫做denoised Auto-encoder(去噪自编码)。

1.2 Auto-regressive

类似于ELMOGPT这类,时序LM和decoder-only LM。

传统的时序Language Model ,类似于RNN、ELMO,严格意义上不能叫做decoder;只是后来出现了大量基于transformer的auto-regressive LM,比方说GPT等,它们都是用作文本生成直接解码输出结果。所以在”transformer时代“下,Auto-regressive现在很多时候也被简单地理解为decoder-only。大致概念可以按下图理解:
在这里插入图片描述

优点:

  • 无条件独立假设。
  • 预训练可以直接做生成任务,符合下游生成任务的objective。

缺点:

  • 不能同时双向编码信息(像ELMO这种是”伪双向“,而且容易“透露答案”)。

而目前自然语言处理的auto-regressive结构,大多基于Transformer;像传统时序LM,ELMO这种也已经快被遗忘了。

2. Transformer-based model 结构概览

如前文所述,我们目前理解LM (autoencoder & autoregressive),大多是基于transformer的结构的。所以这一节暂时不讨论传统时序LM,ELMO这种

T5一文1曾对Transformer的经典结构进行过概述,主要分为以下三种:

在这里插入图片描述

  1. Encoder-only Language Model:也即Auto-encoder。如第一节所述,特点是,能同时双向编码。代表有:BERTRoBERTa等。
  2. Decoder-only Language Model(上图,中):也即Auto Regressive (不包括传统的时序模型),可以简单理解成只有Decoder。特点是,只能看到前文信息(因为decoder-only)。代表有:GPT等。
  3. Encoder-Decoder:也即Auto-encoder + Auto regressive(上图,左)。最原始的Transformer结构,encoder和decoder都有self-attentino支持,decoder还有额外的cross-attention用来结合encoder的输出信息。特点是,encoder能够同时看到上下文双向信息,而decoder只能看到前文信息。代表有:BARTT5等,这也使得这类模型特别适合生成式任务。
  4. Prefix LM:可以简单地理解为Encoder-Decoder结构的变形(上图,右)。特点是,一部分像 Encoder 一样,能看到上下文信息;而其余部分则和 Decoder 一样,只能看到过去信息。代表有UniLM等·。

而Transformer结构,如果想要实现所谓的,“同时上下文信息”、“只看到前文信息”,则需要依赖masked attention,因为transformer的self-attention,默认是全文计算attention,想要部分不可见,就得mask。这一点和传统时序LM不一样,像RNN这种,下一个token依赖于前文的hidden state,天然地就只能看到前文信息。

下面就以Encoder-Decoder LM为例,讲一下如何使用attention,实现encoder看到全文,而decoder只看到前文。

3. Encoder-Decoder的masked attention机制

这里以T5的代码为例。Transformer中的mask其实分为两种:1)padding mask;2)sequence mask。

3.1 Padding mask vs. Sequence mask

padding mask很简单,就是我们常用的同一个batch里面,把那些较短的样本,补至最长的样本长度。因为这些填充的位置,其实是没什么意义的,所以Attention机制不应该把注意力放在这些位置上,自然会在padding 位置进行attention mask。这个操作在encoder和decoder中都有用到,只是一个简单的tensor批量运算操作。

sequence mask是为了使得Decoder只能看见上文信息。所以当前step之后的文本信息,都会被mask掉。这个操作仅在decoder中使用

总而言之,上述两种mask方式中,sequence mask是用于实现模型是否可见后文信息的关键

3.2 Encoder

Encoder用的是全部的上下文信息,所以这边的sequence mask全部为0,形状为【batch_size, 1,1, seq_len】:
在这里插入图片描述

3.3 Decoder

Dncoder用的是前文的信息,所以这边的attention mask是一个矩阵 (seq_len * seq_len),其中下三角全0,迫使模型只能看到输入中的前文信息。如下图所示,sequence mask的实际形状为【batch_size, 1, seq_len, seq_len】

在这里插入图片描述

3.4 Encoder 和Decoder的区别

这里最后再简单总结一下Encoder-Decoder结构的LM,其Encoder和Decoder之间的区别。

首先,decoder有三层,sub-layer[1]计算self-attention,sub-layer[2]计算cross- attention,sub-layer[3]则是Linear层把最终hidden印射为vocab_size的logits。

所以decoder相较于encoder,其大部分结构和计算都是一样的,只不过多出这三个部分:

  1. sequence mask:Decoder在计算sub-layer[1]的self-attention时,有sequence mask机制,确保只看到前文信息;而Encoder没有,计算self-attention时默认看到全文。
  2. cross-attention:Decoder的sub_layer[2]会计算cross-attention。具体来讲,这一层会使用encoder的output hidden作为k,v,而sub-layer[1]的self-attention的output作为q,来进行self-attention的计算。这是为了让decoder充分融合encoder端的信息,所以名为“cross-attention”。
  3. linear+softmax:最后sub_layer[3]会有一个映射层,输出每个token的词表概率预测。

参考

  • [1] Raffel C, Shazeer N, Roberts A, et al. Exploring the limits of transfer learning with a unified text-to-text transformer[J]. J. Mach. Learn. Res., 2020, 21(140): 1-67.;paper
  • [2] 知乎——T5 模型:NLP Text-to-Text 预训练模型超大规模探索
  • [3] 知乎——【精华】BERT,Transformer,Attention(中)
  • [4] CSDN——最火的几个全网络预训练模型梳理整合(BERT、ALBERT、XLNet详解)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch 安装及启动【Windows】

一、下载 Elasticsearch 官网下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 选择自己所需版本进行下载,这里以Elasticsearch 8.2.2 为例 点击 Download,选择 Windows 版本 二、使用步骤 1.安装 Elasticse…

大数据培训课程WordCount案例实操

WordCount案例实操 1.需求 在给定的文本文件中统计输出每一个单词出现的总次数 (1)输入数据 (2)期望输出数据 atguigu 2 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 2.需求分析 …

如何看待越来越多人报名参加软考?

可以肯定的告诉你软考证书是有用的。 但是软考证书如果对于自己今后的职业生涯规划也有帮助,和你的职业发展和需求相匹配,那才能发挥软考证书最大的优势。 软考证书的用处体现在哪里? 1、证书认可度高 软考是一种简称,全称是计…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中,xxx为一组观测变量,zzz为一组隐变量(参数也看做随机变量,包含在zzz中),则推断问题为计算后验概率密度P(z∣x)P(z|x)P(z∣x)。根据贝叶斯公式,有&am…

如何使用向导创建Openflow 流表-网络测试仪实操

使用向导创建Openflow中的FlowTable,按照下面的步骤: 1、打开Renix软件,连接机框并预约测试端口; 2、配置一个IPv4接口 3、配置一个OpenFlowController绑定步骤二中的IPv4接口 4、创建一条RAW流(这条流中包含FlowTabl…

虹科QA | SWCF2022 11月29日演讲笔记:卫星传输链路中的关键技术分享

虹科2022年度SWCF卫星通信与仿真测试研讨会正在进行中。昨日精彩演讲:卫星传输链路中的关键技术分享,感谢大家的观看与支持! 昨晚的直播间收到一些粉丝的技术问题,我们汇总了热点问题并请讲师详细解答,在此整理分享给…

2022年十一届认证杯(小美赛)C题思路新鲜出炉

对人类活动进行分类 人类行为理解的一个重要方面是对日常活动的识别和监控。一个可穿戴的活动识别 系统可以提高许多关键领域的生活质量,如动态监测、家庭康复和跌倒检测。基于 惯性传感器的活动识别系统用于监测和观察老年人远程个人报警系统[1],检测和…

结合RocketMQ 源码,带你了解并发编程的三大神器

摘要:本文结合 RocketMQ 源码,分享并发编程三大神器的相关知识点。本文分享自华为云社区《读 RocketMQ 源码,学习并发编程三大神器》,作者:勇哥java实战分享。 这篇文章,笔者结合 RocketMQ 源码&#xff0…

WRF模式行业应用问题解析及辅助学习

>>> 高精度气象模拟软件WRF(Weather Research Forecasting)技术及案例应用 今天小编给大家整理了WRF模式行业应用问题解析,不管是正在应用WRF还是入门小白,都建议多听一些行业问题,借鉴及深入了解,以下摘抄了个别问题&a…

5. 线性回归的从零开始实现

1.生成数据集 # num_examples 表示样本数量,也就是房屋数量 # w是权重向量 def synthetic_data(w, b, num_examples): #save"""生成yXwb噪声"""# X是一个从独立的正态分布中抽取的随机数的张量,正态分布的平均值为0、标…

双十二怎么入手,几款性能好物分享

过完了双十一,接下来就应该面临今年最后一个大优惠力度的双十二了,而且双十二的时间刚好靠近在过年,所以在这期间相信很多人购买的物品是更加偏向于家居用品方面,那么就不能够错过本篇文章了,本篇文章将为你们分享一些…

[附源码]计算机毕业设计springboot松林小区疫情防控信息管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

sonarqube安装

Sonarqube安装文档 1. 环境准备 参照官方文档Prerequisites and Overview | SonarQube Docs 安装符合sonarqube版本的JDK和数据库 目前服务器上JDK版本为11.0.2 sonarqube版本为9.1.0 postgresql版本为13.7 2. 安装JDK11.0.2 将openjdk-11.0.2_linux-x64_bin.tar.gz放到/usr/…

spring详解(一)

今天我们来学习一个新的框架spring!!! spring是什么呢? spring是2003年兴起的,是一款轻量级、非侵入式的IOC和AOP的一站式的java开发框架,为简化企业即开发而生。 轻量级:spring核心功能的jar包不大 非侵入式:我们的业务代码不需要继承或…

linux parted 方式挂盘,支持大于4T盘扩容

此 内容与之前的linux mbr转gpt格式有些重复,但为了便于查询,还是单抽出相关内容,进行操作: 1.查询要挂的有磁盘路径, 输入 parted -l 。 2 . 进入parted对/dev/vdb盘的交互方式:输入: parted /dev/vdb&am…

Spring Cloud Gateway 网关组件及搭建实例

Spring Cloud Gateway 是 Spring Cloud 团队基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技术开发的高性能 API 网关组件。Spring Cloud Gateway 旨在提供一种简单而有效的途径来发送 API,并为它们提供横切关注点,例如:安全性&am…

Linux 线程控制 —— 线程取消 pthread_cancel

线程退出pthread_exit只能终止当前线程,也就是哪个线程调用了pthread_exit,哪个线程就会退出;但是线程取消pthread_cancel ,不光可以终止自己,还可以终止其他线程。 》自己终止自己,没问题! 》…

Android ViewPager2 + TabLayout + BottomNavigationView

Android ViewPager2 TabLayout BottomNavigationView 实际案例 本篇主要介绍一下 ViewPager2 TabLayout BottomNavigationView 的结合操作 概述 相信大家都看过今日头条的的样式 如下: 顶部有这种tab 并且是可以滑动的, 这就是本篇所介绍的 ViewPager2 TabLayout 的组合…

【C++】C++实战项目机房预约管理系统

前言 这是C总结性练习,主要以一个综合案例对以前学过的知识进行复习巩固,为以后编程打下基础。 1. 机房预约系统需求 1.1 系统简介 学校有几个规格不同的机房, 由于使用时经常出现“撞车”现象,现开发一套机房预约系统&#x…

[附源码]JAVA毕业设计会议室租赁管理系统(系统+LW)

[附源码]JAVA毕业设计会议室租赁管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技…