LLM主流框架:Causal Decoder、Prefix Decoder和Encoder-Decoder

本文将介绍如下内容:

  • transformer中的mask机制
  • Causal Decoder
  • Prefix Decoder
  • Encoder Decoder
  • 总结

一、transformer中的mask机制

在Transformer模型中,mask机制是一种用于在self-attention中的技术,用以控制不同token之间的注意力交互。具体来说,Transformer中使用两种类型的mask:padding masksequence mask**。**

1、Padding mask(填充掩码)

Padding mask(填充掩码):在自注意力机制中,句子中的所有单词都会参与计算。但是,在实际的句子中,往往会存在填充符(比如-1),用来填充句子长度不够的情况。Padding mask就是将这些填充符对应的位置标记为0,以便在计算中将这些位置的单词忽略掉。
例如,假设我们有一个batch_size为3、句子长度为5的输入序列:

[
    [1, 2, 3, -1, -1], 
    [2, 3, -1, -1, -1], 
    [1, -1, -1, -1, -1]
]

其中-1表示填充符,用于填充长度不到5的位置。则padding mask为:

[
    [1, 1, 1, 0, 0], 
    [1, 1, 0, 0, 0], 
    [1, 0, 0, 0, 0]
]

其中1表示可以参与计算的位置,0表示需要被忽略的位置。例如,第一句话前三个位置有具体的词,对应设为1;而最后两个位置是padding,对应设为0。huggingface的BertTokenizer分词所返回的attention mask指的就是padding mask:https://huggingface.co/docs/transformers/glossary#attention-mask

2、Sequence mask(序列掩码)

sequence mask用于在Decoder端的self-attention中,以保证在生成序列时不会将未来的信息泄露给当前位置的单词。

例如,假设我们要生成一个长度为5的序列。在第i个位置上生成的单词,需要将前i-1个单词作为输入,但是不能将第i个位置以后的单词作为输入。这就需要使用sequence mask将第i个位置以后的单词掩盖掉。具体而言,sequence mask会将第i个位置以后的所有位置标记为0,表示在计算中需要忽略这些位置的信息。

本文要比较不同LLM架构,其实是在比较sequence mask。事实上,用户所使用的LLM所做的都是seq2seq任务,用户输入一个文本prompt,LLM对应输出一个文本completion。为了方便以后的讨论,采用A Survey of Large Language Models这篇综述中的例子,用户输入的prompt为A Survey of,期望语言模型的输出为Large Language Models。

二、Causal Decoder

Causal LM是因果语言模型,目前流行的大多数模型都是这种结构,别无他因,因为GPT系列模型内部结构就是它,还有开源界的LLaMa也是。Causal Decoder架构的典型代表就是GPT系列模型,**使用的是单向注意力掩码,**以确保每个输入token只能注意到过去的token和它本身,输入和输出的token通过Decoder以相同的方式进行处理。在下图中,灰色代表对应的两个token互相之间看不到,否则就代表可以看到。例如,”Survery”可以看到前面的“A”,但是看不到后面的“of”。Causal Decoder的sequence mask矩阵是一种典型的下三角矩阵。
在这里插入图片描述
Causal LM只涉及到Encoder-Decoder中的Decoder部分,采用Auto Regressive模式,直白地说,就是根据历史的token来预测下一个token,也是在Attention Mask这里做的手脚。

参照着Prefix LM,可以看下Causal LM的Attention Mask机制(左)及流转过程(右)。
在这里插入图片描述

三、Prefix Decoder

Prefix LM,即前缀语言模型,Prefix Decoder架构也被称为non-causal Decoder架构,该结构是Google的T5模型论文起的名字,望文知义来说,这个模型的”前缀”有些内容,但继续向前追溯的话,微软的UniLM已经提及到了。

Prefix LM其实是Encoder-Decoder模型变体,为什么这样说?解释如下:

(1) 在标准的Encoder-Decoder模型中,Encoder和Decoder各自使用一个独立的Transformer

( 2) 而在Prefix LM,Encoder和Decoder则共享了同一个Transformer结构,在Transformer内部通过Attention Mask机制来实现。

Prefix LM是输入部分采用双向注意力,而输出部分采用单向注意力;和Encoder-Decoder不同的是,处理输入和输出的模型参数是完全共享的,从这一点看,它又和causal Decoder比较接近,都属于Decoder-Only架构:
在这里插入图片描述
与标准Encoder-Decoder类似,Prefix LM在Encoder部分采用Auto Encoding (AE-自编码)模式,即前缀序列中任意两个token都相互可见,而Decoder部分采用Auto Regressive (AR-自回归)模式,即待生成的token可以看到Encoder侧所有token(包括上下文)和Decoder侧已经生成的token,但不能看未来尚未产生的token。

下面的图很形象地解释了Prefix LM的Attention Mask机制(左)及流转过程(右)。
在这里插入图片描述
Prefix LM的代表模型有UniLM、T5、GLM(清华滴~)

四、Encoder Decoder

Transformer最初被提出来的时候采用的就是Encoder-Decoder架构,模型包含两部分Encoder和Decoder,两部分参数独立。其中Encoder将输入序列处理为一种中间表示,而Decoder则基于中间表示自回归地生成目标序列,典型的LLM是Flan-T5。Encoder部分采用双向注意力,对应的prompt的每个token都可以互相看到;而Decoder部分仍然采用单向注意力,对应的completion仍然保证前面的token看不到后面的token:
在这里插入图片描述

五、总结

前缀语言模型可以根据给定的前缀生成后续的文本,而因果语言模型只能根据之前的文本生成后续的文本。
在这里插入图片描述

A Survey of Large Language Models 中有几种LLM更详细的对比:
在这里插入图片描述
注意力机制相关的对比如下:

模型架构代表LLM注意力机制是否属于Decoder-Only
Causal DecoderGPT3/ChatGPT纯单向YES
Encoder-DecoderFlan-T5输入双向NO
Prefix DecoderGLM-130B/ChatGLM-6B输入双向,输出单向YES

参考:

  • LLM面面观之Prefix LM vs Causal LM
  • 管中窥豹:从mask入手对比不同大语言模型的架构

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Debezium发布历史64

原文地址: https://debezium.io/blog/2019/07/12/streaming-cassandra-at-wepay-part-1/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 在 WePay 上流式传输 Cassandra - 第 1 部分 七月 12, 2019 …

HackTheBox - Medium - Linux - Faculty

Faculty Faculty 是一台中型 Linux 机器,具有 PHP Web 应用程序,该应用程序使用的库容易受到本地文件包含的影响。利用该库中的 LFi 会泄露一个密码,该密码可用于通过 SSH 以名为“gbyolo”的低级用户身份登录。用户“gbyolo”有权作为“dev…

Leetcode 剑指 Offer II 061. 查找和最小的 K 对数字

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k…

【GNN2】PyG完成图分类任务,新手入门,保姆级教程

上次讲了如何给节点分类,这次我们来看如何用GNN完成图分类任务,也就是Graph-level的任务。 【GNN 1】PyG实现图神经网络,完成节点分类任务,人话、保姆级教程-CSDN博客 图分类就是以图为单位的分类,举个例子&#xff1…

服务器管理平台开发(3)- Web后端

Web服务端 整体架构采用前后端分离形式,后端使用Golang实现,参考Gin框架 1、后端服务 1.1、服务端架构 代码可参考Github开源项目:https://github.com/pbrong/hrms 1.2、服务地址 http://x.x.x.x:8000/api/v1/meta/info http://x.x.x.x:800…

算法第十七天-构造有效字符串的最少插入数

构造有效字符串的最少插入数 题目要求 解题思路 考虑abc的个数 假设答案有n个"abc"组成,那么需要插入的字符个数为 3 ∗ n − l e n ( s ) 3*n - len(s) 3∗n−len(s)。 对于相邻的两个字符x和y(x在y左侧): 如果 x…

anaconda创建虚拟环境启动jupyter notebook

1.进入虚拟环境 (以环境名为py37_pytorch1.9为例) 创建虚拟环境: conda create -n py37_pytorch1.9 python3.7 查看已经创建的虚拟环境: ​​​​​​​conda env list 切换/进入环境: conda activate py37_pytorch1.9 删除环…

MathType绝对是我数学编辑的首选工具!

去年,微软曾说,要去掉Office里的公式编辑器,建议用户使用MathType编辑公式。目前Office用户可以到微软官网安装MathType的插件,现在免费使用,以后要收费。Word里安装这个插件以后,就会出现MathType的菜单。…

最好的 8 个解锁 Android 手机的应用程序分析

如何解锁我的 Android 手机是一个困扰全球数百万人的问题。有多种Android解锁器可用于解锁手机。用户应确保选择最好的应用程序以轻松满意地完成工作。必须注意的是,数据在解锁手机的整个过程中都是安全可靠的。此类应用程序还应该能够在所有情况下检索数据。 锁屏移…

论文阅读:Feature Refinement to Improve High Resolution Image Inpainting

项目地址:https://github.com/geomagical/lama-with-refiner 论文地址:https://arxiv.org/abs/2109.07161 发表时间:2022年6月29日 项目体验地址:https://colab.research.google.com/github/advimman/lama/blob/master/colab/LaMa…

设计模式之访问者模式【行为型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

Redis重点总结补充

Redis重点总结 1.redis分布式锁 2.redission实现分布式锁 注意:加锁、设置过期时间等操作都是基于lua脚本完成. redisson分布式锁,实现可重入(前提是同一个线程下 3.redis主从集群 实现主从复制 ( Master-slave Replication)的工作原理 : …

Vulnhub靶机:driftingblues 1

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:driftingblues1(10.0.2.17) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entr…

redis夯实之路-主从复制详解

Redis中可以通过执行slaveof命令或者设置slaveof选项,让一个服务器区复制另一个服务器,被复制的为主服务器,复制的为从服务器。 复制 Redis中可以通过执行slaveof命令或者设置slaveof选项,让一个服务器区复制另一个服务器&#…

实录分享 | 央企大数据平台架构发展趋势与应用场景的介绍

分享嘉宾: 孟子涵-中国华能集团信息中心平台架构师 2021年华能就与Alluxio建立了合作,共同写了整个华能统一纳管的架构方案。这个方案我认为是现在我们在央企里边比较核心的一套体系,能让全集团所有我们认为重要的数字化资源实现真正的统一集…

什么是网络数据抓取?有什么好用的数据抓取工具?

一、什么是网络数据抓取 网络数据抓取(Web Scraping)是指采用技术手段从大量网页中提取结构化和非结构化信息,按照一定规则和筛选标准进行数据处理,并保存到结构化数据库中的过程。目前网络数据抓取采用的技术主要是对垂直搜索引…

U盘用完到底能不能直接拔?一篇搞懂

有没有人懂这种情况!! 传输完文件之后,觉得大功告成 以十分帅气的姿势 and 迅雷不及掩耳之势 “咻”地一下把U盘直接给……拔掉了…… 然后瞬间想起没有安全退出,陷入深深的懊悔…… (甚至还要再花时间&#xff0…

使用 EmbeddingBag 和 Embedding 完成词嵌入

🍨 本文为[🔗365天深度学习训练营学习记录博客\n🍦 参考文章:365天深度学习训练营\n🍖 原作者:[K同学啊 | 接辅导、项目定制]\n🚀 文章来源:[K同学的学习圈子](https://www.yuque.co…

【开源】基于JAVA语言的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

Sectigo有几种泛域名SSL证书买一年送一个月

Sectigo是一家知名的数字证书颁发机构,提供了很多种类型的SSL证书,可以满足不同用户的需求。其中,泛域名SSL证书是一种常见的证书类型,可以同时保护主域名以及主域名下所有子域名。今天就随SSL盾小编了解Sectigo旗下有几种泛域名S…