©PaperWeekly 原创 · 作者 | 苏剑林

单位 | 追一科技

研究方向 | NLP、神经网络

不知道大家留意到一个细节没有,就是当前 NLP 主流的预训练模式都是在一个固定长度(比如 512)上进行,然后直接将预训练好的模型用于不同长度的任务中。大家似乎也没有对这种模式有过怀疑,仿佛模型可以自动泛化到不同长度是一个“理所应当”的能力。

当然,笔者此前同样也没有过类似的质疑,直到前几天笔者做了 Base 版的 GAU 实验后才发现 GAU 的长度泛化能力并不如想象中好。经过进一步分析后,笔者才明白原来这种长度泛化的能力并不是“理所当然”的......

模型回顾 

在FLASH:可能是近来最有意思的高效Transformer设计中,我们介绍了“门控注意力单元 GAU”,它是一种融合了 GLU 和 Attention 的新设计。

除了效果,GAU 在设计上给我们带来的冲击主要有两点:一是它显示了单头注意力未必就逊色于多头注意力,这奠定了它“快”、“省”的地位;二是它是显示了注意力未必需要 Softmax 归一化,可以换成简单的 除以序列长度:

这个形式导致了一个有意思的问题:如果我们预训练的时候尽量将样本整理成同一长度(比如 512),那么在预训练阶段 n 几乎一直就是 512,也就是说 n 相当于一个常数,如果我们将它用于其他长度(比如 64、128)微调,那么这个 n 究竟要自动改为样本长度,还是保持为 512 呢?

直觉应该是等于样本长度更加自适应一些,但答案很反直觉:n 固定为 512 的微调效果比 n 取样本长度的效果要明显好!这就引人深思了......

问题定位

如果单看 GAU 的预训练效果,它是优于标准 Attention 的,所以 GAU 本身的拟合能力应该是没问题的,只是 在样本长度方面的迁移能力不好。为了确认这一点,笔者也尝试了混合不同长度的样本来做 GAU 的预训练,发现结果会有明显的改善。

那么,可能是 GAU 的什么地方出了问题呢?其实这不难猜测,GAU 的整体运算可以简写成 ,其中 都是 token-wise 的,也就是说它们根本不会受到长度变化的影响,所以问题只能是出现在 中。

以前我们用标准的 Attention 时,并没有出现类似的问题,以至于我们以前都无意识地觉得这是一个“理所当然”的性质。所以,我们需要从 GAU 的 Attention 与标准 Attention 的差异中发现问题。前面说了,两者不同的地方有两点,其一是多头 Attention 变成单头 Attention,但是这顶多会让效果有一定波动,而我们测出来的结果是大幅下降,所以问题就只能出现在另一点,也就是归一化方式上,即 Attention 的 softmax 换成 所带来的。

验证这个猜测很简单,笔者将 GAU 中 Attention 的归一化方式换回 Softmax 后重新训练一个 GAU 模型,然后微调测试不同长度的任务,发现其效果比 时明显要好。所以,我们得出结论:Attention 还是与 Softmax 更配~

原因分析 

为什么更符合直觉的、自适应长度的 n 反而表现不如固定的 n 呢?既然我们已经以往用 Softmax 是没有这个问题的,所以我们不妨从 Softmax 出发找找灵感。Softmax 的操作是:

一个直接的问题就是: 跟 n 的关系是怎样的呢?如果真有 ,那么理论上将 换成 n 应该能取得相近的效果,至少不会是特别差的那种。

然而,我们知道注意力的重点是“注意”,它应该有能力“聚焦”到它认为比较重要的几个 token 上。同时,以往关于高效 Transformer 的一些实验结果显示,把标准 Attention 换成 Local Attention 后结果并不会明显下降,所以我们可以预计位置为 i 的 Attention 基本上就聚焦在 i 附近的若干 token 上,超出一定距离后就基本为 0 了。事实上,也有很多事后的可视化结果显示训练好的 Attention 矩阵其实是很稀疏的。

综合这些结果,我们可以得出,存在某个常数 k,使得 时 都相当接近于 0,这样一来 应该更接近 而不是 ,这就意味着 很可能跟 n 是无关的,或者说跟 n 的数量级关系至少是小于 的!因此,我们如果要将 替换成别的东西,那应该是一个比 n 的一次方更低阶的函数,甚至是一个常数。

现在回看 GAU,它的激活函数换成了 时,其 Attention 情况是类似的,甚至会更稀疏。这是因为 操作有直接置零的作用,不像 总是正的,同时 GAU“标配”旋转位置编码 RoPE,在Transformer升级之路:博采众长的旋转式位置编码中我们就推导过,RoPE 本身自带一定的远程衰减的能力。综合这些条件,GAU 的归一化因子也应该是低于 的阶甚至是常数级别的。

熵不变性

由此,我们可以总结出 GAU 的三个解决方案,一是预训练和微调都用同一个固定的 n;二是依然使用动态的样本长度 n,但是预训练时需要用不同长度的样本来混合训练,不能只使用单一长度的样本;三就是像 Softmax 那样补充上一个归一化因子,让模型自己去学:

既然存在这些解决方案,那为什么我们还说“Attention 与 Softmax 更配”呢?GAU 的 哪里不够配呢?首先,我们看 GAU 原论文的消融实验,显示出 换成 Softmax,效果基本是一致的:

▲ GAU的squared_relu换成softmax效果是相近的

有了这个基本保证之后,我们就可以看 Softmax 比 好在哪里了。我们看刚才提到的 GAU 三个解决方案,方案一总让人感觉不够自适应,方案二必须用多种长度训练显得不够优雅,至于方案三补充了归一化因子后形式上相比 Softmax 反而显得“臃肿”了。所以,总体来说还是用 Softmax 显得更为优雅有效。

此外,泛化能力可以简单分为“内插”和“外推”两种,在这里内插(外推)指的是测试长度小于(大于)训练长度。我们刚才说归一化因子是常数量级,更多是在内插范围内说的。对于外推来说,如果长度足够长, 都“挤”在一起,所以很难保持距离超过某个范围就很接近于 0 的特性。而如果我们用 Softmax 的话,就是它可以推导出一个“熵不变性”的版本,来增强模型的外推能力:

在从熵不变性看Attention的Scale操作中我们做过简单的对比实验,显示该版本确实能提高模型在超出训练长度外的效果。

那么, 能否推一个“熵不变性”的版本呢?答案是不能,因为它相当于是通过温度参数来调节分布的熵,这要求激活函数不能是具备正齐次性,比如对于幂函数有 ,归一化后 就抵消了,不起作用。激活函数最好比幂函数高一阶,才比较好实现这个调控,而比幂函数高阶的函数,最常见就是指数函数了,而指数归一化就是 Softmax 了。

实验结果 

本文分析了 GAU 在微调效果不佳的原因,发现 Attention 的归一化因子应该是接近常数量级的,所以 GAU 用 n 或者 做归一化因子会表现不佳。总的来说,笔者认为 Attention 还是跟 Softmax 更配,它是一个不错的基准,并且还可以通过“熵不变性”的拓展来进一步增强外推能力。

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

听说Attention与Softmax更配哦~相关推荐

  1. p8刷原生android,【EMUI3.1全局】原生Android M + IOS 7完美结合,听说跟P8更配哦

    下载主题放到Hwthemes文件夹内,打开[主题]--[我的]即可看到主题,应用即可. 无论是安卓M还是苹果IOS风格的主题,一直都备受追捧. 今天楼主给大家推荐一款别样的主题,原生Android M ...

  2. OSChina 周四乱弹 —— 听说圣诞节和单身狗更配哦

    2019独角兽企业重金招聘Python工程师标准>>> 周四,剩单快乐! 周三又是个不寻常的日子,西方节日总是充斥着各种故事 昨天由@叶秀兰  童鞋引发了众多 OSCer 对@红薯 ...

  3. 听说下雨天,子序列和孤单的你更配哦~

    一.\(DP\)的意义以及线性动规简介 动态规划自古以来是\(DALAO\)凌虐萌新的分水岭,但有些OIer认为并没有这么重要--会打暴力,大不了记忆化.但是其实,动态规划学得好不好,可以彰显出一个\ ...

  4. 听说redux和react-redux在写项目中更配哦

    最近,由于接触了React的项目,所以开始慢慢去学习关于React全家桶的一些内容,其中有一块内容用到的较为频繁,于是也开始恶补这方面的知识 如标题所示,这篇文章就是关于redux & rea ...

  5. uart串口通信_听说UART与STM32的HAL库更配哦

    摘要:HAL库(Hardware Abstraction Layer)是目前意法半导体公司主推的单片机开发方式,可以大大节省开发时间,实践来看,还是比较好用的.本文通过一个简单的UART收发程序,演示 ...

  6. Attention中softmax的梯度消失及scaled原因

    在bert模型中的attention构造中 Q:[batch, 12, seq, dk] K:[batch, 12, seq, dk] softmax中的梯度消失 x=(a,a,2a,4a)x=(a, ...

  7. 新时代,大数据战略和DevOps更配

    从大数据中获得有价值的洞察是每个企业的愿望,但是无奈理想很丰满,现实很骨感,再加上大数据软件开发人员和IT操作缺乏企业的协调,这也使得从大数据中获得洞察变得更加困难.还有的企业在其支持的其它项目中可能 ...

  8. GraphQL:和EntityFramework更配哦

    GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时.GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何 ...

  9. C#和NewSQL更配 —— TiDB入门

    一.背景 在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html)的过程中,发 ...

最新文章

  1. 【Matlab 图像】边缘检测算法及效果演示
  2. matlab符号函数绘图法_matlab制图—符号函数(显函数、隐函数和参数方程)画图
  3. MyBaits动态sql语句
  4. Sybase ASE15.7静默安装
  5. 【Android-混合开发】mPaas-多版本接入篇
  6. 拼多多破1000亿美金,黄峥自述:我的人生经历和创业理念
  7. 【opencv项目】物体检测——车牌字符模板匹配
  8. linux7.5有哪些版本,CentOS Linux 7.5正式发布,基于Red Hat Enterprise Linux 7.5
  9. html实现边下边播mp4,MP4Info: 不用流媒体也可以简单实现MP4等视频的边下边播功能。...
  10. Sparkplug规范-4.引用标准和资源
  11. 托福口语_新航道_刘莹_task 3 task5
  12. 山经·南山经:堂庭山
  13. 2019面试/笔试题(算法题)总结
  14. 唐读笔记-正则表达式必知必会
  15. vivo全球商城架构演进之路
  16. 常见的相似度计算方式
  17. elementUI table隐藏行
  18. 代理服务器有什么作用
  19. DV、LS路由算法Java编程实现
  20. 中国三大运营商支撑系统一览

热门文章

  1. 已经无法合并还报请合并git_Git不能自动合并怎么解决?
  2. java treemap 内存_Java中Map、HashMap、LinkedHashMap、TreeMap的区别
  3. (文末有福利)口罩检测覆盖公有云、私有化及SDK等形态,拿来即用精准高效
  4. java file取不到linux文件_Java中高级核心知识全面解析——Linux基本命令(切换、增删改查、压缩文件、权限命令)...
  5. cocos cr躲避类游戏的暂停、继续、重新开始_社团班级团建游戏活动安排
  6. php用rabbit可以干嘛,RabbitMQ能干什么,有什么用,RabbitMQ入门
  7. 【Java】Struts2配置默认Action和配置Action的默认处理类
  8. 标准C程序设计七---53
  9. 深入理解Java:内省(Introspector)
  10. cocos2d-x中集成protoc-gen-lua