最近想增加一下自己的知识宽度,所以在了解各种模型的原理,想在了解之后,对他们进行总结归纳,加宽见识的同时可以让自己有更多灵感

XLnet是Auto-regressive model (自回归语言模型):

transformers有一段对它的常用范围的描述是这样的:

Note that this model is primarily aimed at being fine-tuned on tasks that use the whole sentence (potentially masked) to make decisions, such as sequence classification, token classification or question answering. For tasks such as text generation, you should look at models like GPT2.

他作为一个自回归模型,但是却有着自编码模型的特点,能很好的理解语义信息,在模型设计的原本意图里,是想让他作为一个全能模型的,但是实际上,它还是更多的起到一个改进型bert的作用。

In light of these pros and cons, we propose XLNet, a generalized autoregressive pretraining method that (1) enables learning bidirectional contexts by maximizing the expected likelihood over all permutations of the factorization order and (2) overcomes the limitations of BERT thanks to its autoregressive formulation. Furthermore, XLNet integrates ideas from Transformer-XL, the state-of-the-art autoregressive model, into pretraining. 

Tips:

  • The specific attention pattern can be controlled at training and test time using the perm_mask input.
  • Due to the difficulty of training a fully auto-regressive model over various factorization order, XLNet is pretrained using only a sub-set of the output tokens as target which are selected with the target_mapping input.
  • To use XLNet for sequential decoding (i.e. not in fully bi-directional setting), use the perm_mask and target_mapping inputs to control the attention span and outputs (see examples in examples/pytorch/text-generation/run_generation.py)
  • XLNet is one of the few models that has no sequence length limit.

以上是transformers里对XLnet的一些描述和提示

他的改进有一个PLM,目的是为了解决原来mask带来的问题,plm说白了就是把整个句子的词序打乱,然后预测最后两个句子,这样学到整个句子的信息。

他的那个双流注意力,就是在输入那里做了两个token相加,因为他是个自回归模型,还有PLM的训练模式,它本身就是像一个自回归一样,使用的是自身和自己前面的token信息。

原先我们熟悉的bert的那个token 是词本身的token加上位置信息,称之为内容信息流,这个也是双流注意力里面的一个,第二个叫位置信息流,简单理解一下就是,当前位置的token只要position embedding,后面就是正常的token,通过这种方式,可以解决PLM的问题,因为在PLM中,进行预测的时候,自己的token是不放进去的,而这种方法,可以在第一个流里面把自己的信息放进去,让信息不流失,又可以在第二个流严格按着PLM的掩码语言模型要求,让模型在预测的时候看不见自身的信息,只能看见位置。

transformer-XL解决的是bert不能兼容长文本问题,简单地说就是 之前是512截住,现在截住之后,是循环的一段段下去,把之前的信息放到后续的训练里,为了兼容,他就没有使用绝对位置编码 用了相对的。

因为这样没有解决MASK问题,所以还是在生成上不好用

以上是简单介绍,后续是一些更多的系列,首先,这网络叫XLnet 主要还是因为它使用了transformer-XL这个更新过的模型。他确实是一个自回归的模型,为什么叫他自回归呢,因为它使用了decoder,然后还是采用了生成式的任务去训练,就是通过前文去预测下文的方式(回归方式)去训练这个模型,所以它是一个自回归的模型。他那么做的初衷是认为用自编码方式去训练,类似于bert,会因为mask这个东西导致微调和训练出现偏差。所以它使用了自回归,但是使用自回归的问题在于,你没办法获得上下文的信息,因为你预测i位置的词的时候,你只能看到i前面的词信息,而不能去看到后面的,这就导致无法获得全局信息,而我们做完形填空这种任务的时候,很多时候是需要一个context信息的,那如何解决这个问题了,它的解决方式就是一个打乱的操作。

1,2,3,4模型去预测3的时候,正常的Auto-regressive模型是让1和2去预测3,如何得到4的信息呢?

将句子顺序进行重新的排列组合,例如可以得到3,2,4,1; 2,4,3,1; 1,4,2,3; 4,3,1,2。这样再去按照正常的Auto-regressive的思路进行预测就可以了。

思路很简单,但是实现的时候可不能打乱句子顺序去进行生成,因为在inference阶段,你喂入的都是正常顺序的语句,打乱训练正常顺序测试会导致训练和测试的不一致,会带来很大问题。所以,我们在训练的时候也是要喂入正常顺序的语句,但是要达到打乱(Permutation)的效果。

论文提出了Two-Stream Self-attention来达到这种效果。也就是双流注意力机制

这个双流机制我们暂且不谈,他是整个论文的重点,我们后面再说,除了双流注意力之外,还有其他的吗,有,一个是部分预测一个是段循环。

部分预测:也就是我做训练的时候,并不是从头把句子预测到位,因为优化过难难以收敛,他做的方式是只预测结尾的一部分,

这些预测位置如何选取呢,选当前排列的最后几个位置。举个例子,假如有 1234567,先随机挑一个排列,5427163,那么假设对最后两个位置预测,于是就需要依此对6和3进行预测。通过挑结尾的位置,在 AR 中,就能在预测时用到尽可能多的可知信息。

这里再谈一个有意思的点,挑选最后几个,那么到底该挑选几个呢,总得给个标准吧。于是作者这里设了一个超参数 K,K 等于总长度除以需要预测的个数。拿上面的例子,总长为 7 而需要预测为 2,于是 K = 7/2.

而论文中实验得出的最佳 K 值介于 6 和 7 (更好)之间,其实如果我们取 K 的倒数,然后转为百分比,就会发现最佳的比值介于 14.3% 到 16.7% 之间,还记得 BERT 论文的同学肯定就会开始觉得眼熟了。因为 BERT 里将 Token 遮掩成 “[MASK]” 的百分比就是 15%,正好介于它们之间,我想这并不只是偶然,肯定有更深层的联系。

段循环:​​​​​​​一般的transformer会截断,例如截断512,这样导致了部分信息缺失,那咋办呢,段循环,在前一段计算完后,将它计算出的隐状态(hidden states)都保存下来,放入一个 Memory 中去,之后在当前分段计算时,将之前存下来的隐状态和当前段的隐状态拼起来作为 Attention 机制的 K 和 V,从而获得更长的上下文信息

transformer-XL 双流注意力:

XLnet作者提出双流注意力就是为了解决前面说的那个问题,我做预训练的任务是自回归的,不停预测下文,但是自回归我没办法看见i前面的信息,我需要上下文信息,所以我把句子都打乱了,但是我其实并没有实际的把他的句子打乱,句子还是只有一条正常的输入,我只是通过一个矩阵,通过这个双流注意力,达到了打乱的效果。

论文中把Bert中的位置信息+内容信息的方式叫做 Content Stream, 论文自己提出了只有位置信息作为self-attention的query输入的流,被称作query stream。

​​​​​​​其实就是使用Query来当做mask来使,让模型看不到预测词之后的词,只能根据这个词之前的词去进行预测这个词,这就是Query stream的用处。

和 BERT 一样,XLNet 同样是将目标词 "我 1" 替换成一个特殊字符 "MASK1"。和 BERT 不同,"MASK" 不会纳入表征的地址向量 k 以及内容向量 v 的计算,"MASK" 自始至终只充当了查询向量 q 的角色,因此所有词的表征中都不会拿到 "MASK" 的信息。这也杜绝了 "MASK" 的引入带来的预训练-微调差异 (Pretrain-Finetune Discrepancy)。

而且,它因为在训练的时候这样引入了位置信息,所以他不需要位置嵌入。

XLnet和tranformer-XL的双流注意力机制相关推荐

  1. 动画详解Transformer模型注意力机制的概念与模型搭建

    多头注意力机制 通过上一期的分享,我们了解了transformer模型中的多头注意力机制的概念,且通过7个attention注意力机制的变形,彻底了解了tranformer模型的多头注意力机制,哪里重 ...

  2. 源码剖析transformer、self-attention(自注意力机制)原理!

    首先给大家引入一个github博客,这份代码是我在看了4份transformer的源码后选出来的,这位作者的写法非常易懂,代码质量比较高.https://github.com/Separius/BER ...

  3. 【ICML2021】计算机视觉中的自注意力机制教程,谷歌伯克利出品

    本教程将介绍自注意力机制在计算机视觉中的应用.Self-Attention在NLP中被广泛采用,完全注意的Transformer模型已经在很大程度上取代了RNN,现在被用于最先进的语言理解模型,如GP ...

  4. 2021综述:计算机视觉中的注意力机制(续四):分支注意力

    3.5 Branch Attention Branch attention 可以看成是一种动态的分支选择机制:要注意哪个,与多分支结构一起使用. 3.5.1 Highway networks 受长短期 ...

  5. 深度学习与自然语言处理教程(6) - 神经机器翻译、seq2seq与注意力机制(NLP通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...

  6. NLP-D30-自注意力机制Transformer

    -0526在啃黄瓜,已经看了一会沐沐叻. 1.Trandformer 看着看着简直要喷黄瓜了hhhhhhhh. Tranformer也挺简单的,我一张ppt就讲完了. 不过这张ppt做的挺好的hhhh ...

  7. Talk | 微软亚洲研究院宋恺涛南大余博涛:面向文本/音乐序列任务的Transformer注意力机制设计

    本期为TechBeat人工智能社区第456期线上Talk! 北京时间11月22日(周二)20:00,微软亚洲研究院研究员--宋恺涛与南京大学硕士研究生--余博涛的Talk将准时在TechBeat人工智 ...

  8. Attention 2 Transformer (注意力机制与各种注意力)

    Attention出自NMT(神经网络机器翻译)以处理文本对齐问题,目前已经在各个领域发光发彩,玩出各种花样带出多少文章.而Attention的本质其实就是–加权重. 通用的NMT的架构如上图所示,其 ...

  9. 各种注意力机制PyTorch实现

    给出了整个系列的PyTorch的代码实现,以及使用方法. 各种注意力机制 Pytorch implementation of "Beyond Self-attention: External ...

最新文章

  1. 重庆云宇宙数据中台:iwemeta.com
  2. SSM中实现分页与JUnit单元测试
  3. 苹果系统从零开始--MAC OS X 教程1 -- Finder
  4. Bfs++ open the lock
  5. Ubuntu中如何使用root用户
  6. oracle ora01732,一天一小步_2008.5.02: ora-01732错误
  7. 机器学习中为什么使用one-hot编码
  8. php mysql while循环,PHP_MySQL教程-第二天while循环与数据库操作第2/2页
  9. 为什么数字中台是企业应用新基建?
  10. Maximum Subarray leetcode java
  11. 深度学习 --- BP算法详解(BP算法的优化)
  12. 搭建php常用的集成软件包,常见php集成环境安装包_PHP
  13. python微信自动发消息_python实现给微信指定好友定时发消息
  14. Java POI word常用方法 在Cell插入子表格
  15. 基于xsh的vbs脚本的使用(语法)
  16. 微信小程序上传Excel文件并分析上传值数据库
  17. 华为认证HCIA的方向选择
  18. 权限管理系统(用户信息管理模块业务组件实现代码,带注解)
  19. Android小窗口模式,picture-in-picture(PIP画中画)的使用
  20. AES-GCM算法 Java与Python互相加解密

热门文章

  1. 帮粉丝脱单!1月份最佳人气小姐姐和小哥哥推荐
  2. 兰顿蚂蚁python实现
  3. linux 显示隐藏文件_Mac Finder中显示和隐藏文件的方法
  4. 学画画应该如何去临摹?画画临摹的方法有哪些?
  5. 担心电脑摄像头被监控 Win11电脑如何禁用摄像头
  6. Vue父子组件及mixins生命周期执行顺序
  7. 工业树莓派应用案例6:智能零售行业应用
  8. 撞击测试软件,哪些BIM软件有碰撞检测功能?这两款是常客
  9. HTTP与HTTPS的区别及SSL协议
  10. html表单位怎么设置,单位设置.html