什么是XLNet中的双流自注意力

C/C++ 计算程序运行的时间 C/C++计算程序执行时间的方法,精度依次增加,推荐度也依次增加 1.#include <time.h> clock_t start, finish; double process_interval ; start=clock(); process(); //要计时的程序 finish=clock(); process_interval =(double)(finish-star... 阅读详情

作者:Xu LIANG

编译:ronghuaiyang

导读

理解XLNet中的双流自注意力机制。

在我之前的文章什么是XLNet,它为什么比BERT效果好?中,我主要讨论了XLNet (AR语言模型)和BERT (AE语言模型)之间的区别以及重排列语言建模。

我相信对XLNet有一个直观的理解远比实现细节重要,所以我只解释了重排列语言建模,而没有提到另一个重要的部分,双流自注意力架构。但正如陈家明在评论中提到的,双流自注意力是XLNet论文的另一个亮点,所以我写这篇文章是为了尽可能清楚地解释双流自注意力。

内容结构如下。

  • 重排列语言建模的快速回顾

  • 重排列带来了什么问题?

  • BERT有这样的问题吗?

  • XLNet如何解决这个问题?

  • 注意力mask:XLNet如何实现重排列?

重排列建模的快速回顾

特殊的术语:

  • AR语言模型:自回归语言建模

  • AE语言模型:自动编码器语言建模

为了使这篇文章更加独立,我在这里做一个简短的总结:什么是XLNet,为什么它的性能优于BERT。

XLNet提出使用重排列语言建模,使AR语言模型学习双向上下文。这样可以避免AE语言模型中MASK方法带来的弊端。

重排列方法是获取一个序列的重排列,并使用之前的t-1个tokens作为上下文来预测第t个位置的token。例如,我们有一个句子[x1, x2, x3, x4],而x3是我们要预测的第t个位置的token。首先,我们得到句子的排列。

[('x1', 'x2', 'x3', 'x4'),
 ('x1', 'x2', 'x4', 'x3'),
 ('x1', 'x3', 'x2', 'x4'),
 ('x1', 'x3', 'x4', 'x2'),
 ('x1', 'x4', 'x2', 'x3'),
 ('x1', 'x4', 'x3', 'x2'),
 ('x2', 'x1', 'x3', 'x4'),
 ('x2', 'x1', 'x4', 'x3'),
 ('x2', 'x3', 'x1', 'x4'),
 ('x2', 'x3', 'x4', 'x1'),
 ('x2', 'x4', 'x1', 'x3'),
 ('x2', 'x4', 'x3', 'x1'),
 ('x3', 'x1', 'x2', 'x4'),
 ('x3', 'x1', 'x4', 'x2'),
 ('x3', 'x2', 'x1', 'x4'),
 ('x3', 'x2', 'x4', 'x1'),
 ('x3', 'x4', 'x1', 'x2'),
 ('x3', 'x4', 'x2', 'x1'),
 ('x4', 'x1', 'x2', 'x3'),
 ('x4', 'x1', 'x3', 'x2'),
 ('x4', 'x2', 'x1', 'x3'),
 ('x4', 'x2', 'x3', 'x1'),
 ('x4', 'x3', 'x1', 'x2'),
 ('x4', 'x3', 'x2', 'x1')]

然后选取一些样本作为训练数据。(本文从排列中随机抽取样本)

('x1', 'x2', 'x4', 'x3'),
('x1', 'x4', 'x3', 'x2'),
('x2', 'x3', 'x4', 'x1'),
('x4', 'x2', 'x3', 'x1'),
('x3', 'x2', 'x4', 'x1'),

我们可以看到每个token都有机会出现在x3之前。因此,AR模型可以从这些上下文tokens中学习双向信息。如果你仍然不清楚重排列,你可以阅读前面的文章。

重排列带来了什么问题?

这种重排列可以使AR模型从两个方向看到上下文,但也带来了原transformer 无法解决的问题.

重排列语言建模目标:

  • Z:一种分解顺序

  • p_θ:似然函数

  • x_zt:分解顺序中的第t个token

  • x_z<t:第t个token之前的所有tokens

这是重排列语言建模的目标函数,即以t-1个tokens为上下文,预测第t个token。

有两个标准Transformer不能满足的要求:

  1. 为了预测token x_t,模型应该只看到x_t的位置,而不是x_t的content(我将在下一节解释什么是content)

  2. 为了预测token x_t,模型应该将x_t之前的所有token编码为content

特别是第一个要求,transformer将位置编码合并到token嵌入中。因此,它不能将位置信息与token嵌入分离开来。

BERT有这样的问题吗?

BERT是一个AE语言模型,它不像AR语言模型那样需要单独的位置信息。与XLNet需要位置信息来预测第t个token不同,BERT使用[MASK]来表示要预测哪个token(我们可以认为[MASK]只是一个占位符)。例如,如果BERT使用x2, x1, x4来预测x3,那么x2, x1, x4的嵌入包含了位置信息和其他与[MASK]相关的信息。因此,该模型很有可能预测[MASK]是x3。

在这里我将对信息做更详细的说明。BERT embedded (BERT所学的信息)包含两种信息:位置信息和内容信息(为简单起见,我将其分为两部分)。

位置信息很容易理解,因为它告诉模型当前token的位置。内容信息(语义和语法)包含当前标记的“意义”。一个直观的例子是kind — man + woman = queen。

XLNet怎么解决这个问题?

XLNet提出了双流自注意力来解决这个问题。

顾名思义,它包含两种自注意力。一个是content stream attention,它是Transformer中的标准自注意力。另一个是query stream attention。XLNet引入它来替换BERT中的[MASK] token。

例如,如果BERT想用上下文单词x1和x2的知识来预测x3,它可以使用[MASK]来表示x3 token。[MASK]只是一个占位符。x1和x2的嵌入包含位置信息,帮助模型“知道”[MASK]的是x3。

XLNet的情况有所不同。一个token x3将服务两种角色。当它被用作内容来预测其他标记时,我们可以使用内容表示(通过内容流注意力来学习)来表示x3。但是如果我们想要预测x3,我们应该只知道它的位置而不是它的内容。这就是为什么XLNet使用查询表示(通过查询流注意力来学习)来保留x3之前的上下文信息,只保存x3的位置信息。

为了直观地理解双流自注意力,我们可以认为XLNet用查询表示代替了BERT中的[MASK]。他们只是选择不同的方法做同一件事。

注意力mask:XLNet如何实现重排列?

当我第一次读到这篇文章的时候,我不禁对训练中重排列的实现细节产生了疑惑。如果你们感兴趣,我就简单讲一下。

在第一部分“重排排列语言建模的快速回顾”中,我给出了一个句子[x1, x2, x3, x4] 的排列示例,如下所示。

[('x1', 'x2', 'x3', 'x4'),
 ('x1', 'x2', 'x4', 'x3'),
 ('x1', 'x3', 'x2', 'x4'),
 ('x1', 'x3', 'x4', 'x2'),
 ('x1', 'x4', 'x2', 'x3'),
 ('x1', 'x4', 'x3', 'x2'),
 ('x2', 'x1', 'x3', 'x4'),
 ('x2', 'x1', 'x4', 'x3'),
 ('x2', 'x3', 'x1', 'x4'),
 ('x2', 'x3', 'x4', 'x1'),
 ('x2', 'x4', 'x1', 'x3'),
 ('x2', 'x4', 'x3', 'x1'),
 ('x3', 'x1', 'x2', 'x4'),
 ('x3', 'x1', 'x4', 'x2'),
 ('x3', 'x2', 'x1', 'x4'),
 ('x3', 'x2', 'x4', 'x1'),
 ('x3', 'x4', 'x1', 'x2'),
 ('x3', 'x4', 'x2', 'x1'),
 ('x4', 'x1', 'x2', 'x3'),
 ('x4', 'x1', 'x3', 'x2'),
 ('x4', 'x2', 'x1', 'x3'),
 ('x4', 'x2', 'x3', 'x1'),
 ('x4', 'x3', 'x1', 'x2'),
 ('x4', 'x3', 'x2', 'x1')]

我们很容易误解,我们需要获得一个句子的随机顺序并将其输入到模型中。但事实并非如此。输入语句的顺序是[x1, x2, x3, x4],XLNet使用注意力掩码来重排列分解因子的顺序。

这个句子的原始顺序是[x1, x2, x3, x4]。我们随机得到一个分解的顺序为[x3, x2, x4, x1]。

左上角是内容表示的计算。如果我们想要预测x1的内容表示,我们应该拥有所有4个token内容信息。KV = [h1, h2, h3, h4]和Q = h1。

左下角是查询表示的计算。如果我们想要预测x1的查询表示,我们不能看到x1本身的内容表示。KV = [h2, h3, h4],Q = g1。

右下角是整个计算过程。我把它从头到尾解释了一遍。首先,h和g被初始化为e(xi)和w。在内容掩码和查询掩码之后,双流注意力将输出第一层输出h^(1)和g^(1),然后计算第二层。

注意右边的内容掩码和查询掩码。它们都是矩阵。在内容mask中,第一行有4个红点。这意味着第一个token (x1)可以看到(注意到)所有其他tokens,包括它自己(x3->x2->x4->x1)。第二行有两个红点。这意味着第二个token (x2)可以看到(注意到)两个token(x3->x2)。等等。

内容掩码和查询掩码之间惟一的区别是,查询掩码中的对角元素为0,这意味着token不能看到它们自己。

让我们总结一下。输入的句子只有一个顺序。但是我们可以使用不同的注意力mask来实现不同的分解顺序。

总结

在这篇文章中,我主要解释了XLNet面临的问题是什么,以及如何使用双流自注意力来解决它。我还提到了有关排列注意里mask的一些实现细节。对于结果的比较,你可以从XLNet team中找到最新的发布,它比论文的比较更加公平。

英文原文:https://towardsdatascience.com/what-is-two-stream-self-attention-in-xlnet-ebfe013a0cf3

(完)


使用Dify搭建音频文件转文本工作流 阅读详情

相关推荐

【python】import pandas as pd用法

是 Python 里最常用的数据分析库之一。 的意思是:导入 pandas 库,并给它起个别名 。这样用起来更简洁: 下面总结 pandas 的常见用法(配例子)。目录🔹 1. 数据结构(1) Series(一维数据,类似于数组 + 标签)(2) DataFrame(二维数据表,类似于 Excel 表格)🔹 2. 数据读写🔹 3. 数据查看🔹 4. 数据选择与索引🔹 5. 数据清洗🔹 6. 数据运算🔹 7. 数据筛选(布尔索引)🔹 8. 分组与聚合🔹 9. 排序 Pandas 常用方

2401_86285609的博客 1533

ChatGLM学习

在传统的自注意力机制中,输入序列中的每个位置都会计算一个注意力权重,用于对其他位置的信息进行加权聚合。而在双流自注意力机制中,会引入两个注意力流,分别用于处理不同类型的信息。它是基于自注意力机制(self-attention)的扩展,通过引入两个独立的注意力流来处理不同类型的信息。,从其中采样文本span{s1,· · ·,sm},其中每个si表示连续令牌的跨度,并用单个掩码替换si,要求模型对它们进行自回归恢复。:条件独立性假设,预测每个mask的时候是并行的,没有考虑mask之间的关系。

银晗的学习博客 3655

UE5 Paper2D性能优化:GroupedSpriteSceneProxy合批渲染原理与实践

在游戏开发中,渲染性能优化是核心技术挑战之一,其核心原理在于减少CPU与GPU之间的通信开销,特别是降低Draw Call数量。Draw Call是CPU向GPU提交绘制命令的指令,每次调用都涉及状态切换和数据传输,当场景中存在大量同质化对象时,频繁的Draw Call会成为主要性能瓶颈。为此,现代图形引擎普遍采用合批渲染技术,其技术价值在于将多个共享相同渲染状态(如材质、几何体)的物体数据合并提交,从而将多次Draw Call压缩为一次或少数几次,显著提升渲染效率。这一技术在2D游戏开发中尤为重要,例如在

weixin_34198453的博客 395

学习笔记九:BERT和它的小伙伴们

车万翔《基于预训练模型的自然语言处理》读书笔记 文章目录1.BERT的可解释性(7.5)1.2 自注意力可视化分析(不同注意力头的行为)1.3 探针实验二、模型优化1.1 XLNet1.1.2 排列语言模型的引入1.2 RoBERTa1.3 ALBERT(降低BERT参数+SOP)1.4 ELECTRA1.5 MacBERT2. 长文本处理 1.BERT的可解释性(7.5)   对很多实际应用而言,模型的性能和可解释性都很重要。BERT类的预训练模型体量庞大,参数众多,预测行为难以理解和不可控。   解释性

qq_56591814的博客 777

Codex 的 AGENTS.md 到底怎么写?前端、后端两套实战模板,照抄就能用

文件名是大写AGENTS.md,放在项目根目录构建、测试、类型检查命令都是可直接复制执行的只写了 Agent 从代码里推断不出来的约定红线规则用了明确的否定句式(禁止/不要/Never)标注了自动生成目录和禁止修改的模块写清了交付要求(改动清单 + 验证命令 + 风险说明)没有任何密钥、密码、连接串整体一页能看完,核心要点 10 条以内每一条都能通过"删掉会不会更容易犯错"的测试一份短小精准的 AGENTS.md,比一份充斥模糊规则的长文件有用得多。

篮球界最会写bug的人;程序猿中打球最菜的人。 618

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

平台:基本常用平台包括安卓,苹果(max和IOS),Windows64,Linux都行。10. 注意,如果从移动设备浏览器连接服务,信令服务器的SSL证书一定要先设好。想要在Unity中实现实时远程桌面,找到了Render Streaming这个手段,本篇介绍相应的使用方法和实例。8. 打开电脑浏览器,地址栏输入http://127.0.0.1,点击Receiver Sample。新建Unity项目,模板选Third Person,Project Name随意。启动App,控制台出现如下信息表示成功。

每日出拳老爷子的博客 2518

清华&美团提出:DABERT — 双流注意力增强型BERT,自适应融合提升模型效果 | COLING'22...

每天给你送来NLP技术干货!今天给大家分享一篇 COLING 2022 中关于语义匹配任务的工作,作者分别来自于清华大学和美团????COLING是国际计算语言学会议,是自然语言处理和计算语言学领域的顶级会议之一,于2022年10月12日至17日在韩国庆州举行Paper link:http://arxiv.org/abs/2210.03454文章大纲1. Abstract这篇paper主要是针对于传统的...

zenRRan的博客 2086

14、多级快速多极子算法(MLFMA)详解

多级快速多极子算法(MLFMA)是一种高效加速矩阵向量乘法(MVM)的数值方法,广泛应用于电磁场积分方程求解中。该算法通过构建多级树结构,将MVM分解为近场直接计算和远场分组计算两部分,利用递归聚类、聚合-平移-分解三阶段处理远场相互作用,并结合采样、模式计算与优化策略,将计算复杂度从O(N^2)降低至O(N log N)。博文详细阐述了MLFMA的核心步骤、数学推导、计算复杂度及实际应用中的优化技术,如伽辽金方案改进、对称性利用和反插值方法,为大规模电磁问题的高效求解提供了系统性指导。

t8u9v0w1x的博客 242

一年中所有节日的排列顺序_什么是XLNet中的双流自注意力

作者:Xu LIANG编译:ronghuaiyang导读理解XLNet中的双流自注意力机制。在我之前的文章什么是XLNet,它为什么比BERT效果好?中,我主要讨论了XLNet (AR语言模型)和BERT (AE语言模型)之间的区别以及重排列语言建模。我相信对XLNet有一个直观的理解远比实现细节重要,所以我只解释了重排列语言建模,而没有提到另一个重要的部分,双流自注意力架构。但正如陈家明在评论中...

weixin_39702316的博客 106

YOLOv11改进策略【Head】| AFPN渐进式自适应特征金字塔,增加针对小目标的检测头(附模块详解和完整配置步骤)

一、本文介绍 本文利用AFPN对YOLOv11的网络模型进行优化提升。AFPN采用渐近式融合及自适应空间融合操作。通过渐近式架构,逐步整合不同层级特征,有效避免非相邻层级间因语义差距过大导致的信息丢失或降级问题,确保在多尺度特征融合过程中既能保留高层语义信息,又能融入低层细节特征。本文将AFPN应用于YOLOv11中,并配置了针对小目标的检测头,能显著增强模型对不同尺度目标的检测能力,使其在复杂场景下更聚焦于目标物体特征,减少背景等无关信息的影响。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、

Limiiiing的博客 2718

YOLOv13全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 442

NLP中的XLNET

说一下值得注意的点,主要就是双流自注意力机制这里很有意思,在初看图的时候很容易看混。这么理解会更加的方便,对于同一个token,在预测自身的时候,它需要向外提供自己的位置信息,在预测别的单词的时候,它需要对外提供全部信息。所以一个好办法就是把内容信息和位置信息分隔开对外提供。

实力派,无需多言! 424

【DaVinci Developer专题】-36-创建一个“既读又写”的Sender Receiver Port(SR PR-Port)

有时会遇到SWC需要对一个Port进行“既可以读,也可以写”的操作。以下图为例,Test_A_SWC中Test_A_Port是P-Port;Test_B_SWC中Test_A_Port是R-Port。Test_C_SWC需要对Test_A_Port同时进行“读”和“写”。 该篇将详细介绍PR-Port的创建方法。 目录 1 创建一个S/R Port Interface 2 将一个PR-Port端口添加至Application Component 3 PR-Port端口初始化 4 Run.

「汽车电子助手」的博客 3014

XLNet理解

XLNet理解 XLNet是CMU和谷歌大脑在6月份,提出的一个新的预训练模型。在多个任务的性能超越 Bert.如果你学习过Bert、Transformer、Transformer XL, XLNet论文看起来会简单很多 自回归语言模型 Autoregressive language modeling 自回归语言模型通俗点讲,就是已知上文,预测上文的下一个单词。或者已知下文,预测下文 的上一个...

zycxnanwang的博客 1827

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【通览一百个大模型】XLNet(Google)

从宏观来看,XLNet 实现了站在巨人 BERT 肩膀上的新的突破,将 AR 模型和双向训练有机地结合在一起。从微观来看,XLNet 引入的几个改进方法各有所长:Permutation LM 使得语言模型在训练时可以充分利用上下文的信息;Two-stream encoding 很好地区分了预测目标和非预测目标的 attention 的计算使结果更训练更加合理;

夏栀的博客 1194

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

一文看懂XLNet

XLNet论文推荐语:BERT本身很有效,但它也存在一些问题,比如不能用于生成、以及训练数据和测试数据的不一致(Discrepancy)。在本文中,我们重点介绍比BERT更强大的预训练模...

fengdu78的博客 1175

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【论文串讲】从GPT和BERT到XLNet

“本文是本专栏即将发表的文本预训练系列里面的一个章节,主要讲了XLNet的思路和具体实现细节,之所以叫XLNet是因为它以Transformer- XL为基础。XLNet是一种广义的自...

fengdu78的博客 693

使用MindStudio进行xlnet模型训练

先看第 1 行,因为在新的排列方式中 1 在最后一个,根据从左到右 AR 方式,1 就能看到 234 全部,于是第一行的 234 位置是红色的(没有遮盖掉,会用到),以此类推。具体实现方式是,通过随机取一句话的一种排列,然后将末尾一定量的词给“遮掩”(和 BERT 里的直接替换 “[MASK]” 有些不同)掉,最后用 AR 的方式来按照这种排列依次预测被“遮掩”掉的词。我们可以发现通过随机取排列(Permutation)中的一种,就能非常巧妙地通过 AR 的单向方式来习得双向信息了。

weixin_38239810的博客 272

最新语言表示方法——XLNet

Context Autoregressive vs Autoencoding XLNet: Best of both worlds Permutation Language model Two-Stream self-attention mechanism Recurrence mechanism

mr2zhang的博客 1200

bert和xlnet对关键词embedding

bert的原理我在第一篇论文介绍了,不赘述 下面写一下我对bert embedding 和XLNet embedding的理解与两者之间的不同 bert embedding 可选择的预,L表示的是transformer的层数,H表示输出的维度,A表示mutil-head attention的个数训练模型,每一层transformer的输出值,理论上来说都可以作为句向量,但是到底应该取哪一层呢,根据hanxiao大神的实验数据,最佳结果是取倒数第二层,最后一层的值太接近于目标,前面几层的值可能语义还未充分的学

qq_41824131的博客 798

XLNet: Generalized Autoregressive Pretraining for Language Understanding

XLNet: Generalized Autoregressive Pretraining for Language Understandingoriginmotivationproposed methoddiscuss and analysisexperiment for Language Understanding) origin Zhilin Yang∗1, Zihang Dai∗12, Y...

damuge2的博客 1316

自然语言处理预训练技术实践--XLNet 预训练模型及命名实体识别

自然语言处理预训练技术实践--XLNet 预训练模型及命名实体识别

学习中 1537

碾压Bert?“屠榜”的XLnet对NLP任务意味着什么

作者张俊林,中国中文信息学会理事,中科院软件所博士。目前担任新浪微博机器学习团队AILab负责人。在此之前,张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队,以及...

AI科技大本营 2430

Pytorch——XLNet 预训练模型及命名实体识别

介绍 在之前我们介绍和使用了 BERT 预训练模型和 GPT-2 预训练模型,分别进行了文本分类和文本生成次。我们将介绍 XLNet 预训练模型,并使用其进行命名实体识别次。 知识点 XLNet 在 BERT 和 GPT-2 上的改进 XLNet 模型结构 使用 XLNet 进行命名实体识别次 谷歌的团队继 BERT 模型之后,在 2019 年中旬又提出了 XLNet 模型。XLNet 在多达 20 个任务上均取得了超越 BERT 的成绩,还在如问答系统、自然语言推理、情感分析、文本排序等任...

张伟的专栏 3007

[转载]XLNet运行机制

XLNet自回归语言模型自编码语言模型XLNet的改进 首先引入自回归语言模型以及自编码语言模型的概念。 自回归语言模型 自回归语言模型(Autoregressive LM),简单的来说就是,根据上文预测下文(或者根据下文预测上文)。重点是单方向。 缺点:仅仅可以利用上文或者下文的信息。 优点:符合逻辑,例如符合人类从左向右读文章的特点。 自编码语言模型 自编码语言模型(Autoencoder LM),简单来说根据上下文预测。例如Bert中Mask掉一部分单词,根据上下文预测被Mask掉单词是什么。 优点:

年年年的博客 257
上一篇: 【综述】Pytorch YOLO项目推荐 建议收藏学习
下一篇: 代码实操 | AI算法助力新冠肺炎疫情趋势预测!
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值