[论文翻译]GLU Variants Improve Transformer

引言

今天带来一篇短小精悍的论文GLU Variants Improve Transformer笔记,作者提出了GLU1的一种变体。

GLU(Gated Linear Units,门控线性单元)由两个线性投影的逐元素乘积组成,其中一个首先经过sigmoid函数。GLU的变体是可能生效的,可以使用不同的非线性(甚至线性)函数来替代sigmoid。作者在Transformer序列到序列模型的前馈子层中测试了这些变体,并发现其中一些相对于通常使用的ReLU或GELU激活函数会带来质量改进。

总体介绍

Transformer序列到序列模型在多头注意力和位置感知前馈网络之间交替进行。FFN接受一个向量 x x x​,并通过两个学习得到的线性变换进行传递。在两个线性变换之间应用了ReLU激活函数。
FFN ( x , W 1 , W 2 , b 1 , b 2 ) = max ⁡ ( 0 , x W 1 + b 1 ) W 2 + b 2 (1) \text{FFN}(x,W_1,W_2,b_1,b_2) =\max(0,xW_1 +b_1)W_2 +b_2 \tag 1 FFN(x,W1,W2,b1,b2)=max(0,xW1+b1)W2+b2(1)
沿用T5 codebase的设定,作者使用无偏置的版本
FFN ( x , W 1 , W 2 ) = max ⁡ ( 0 , x W 1 ) W 2 (2) \text{FFN}(x,W_1,W_2) =\max(0,xW_1 )W_2 \tag 2 FFN(x,W1,W2)=max(0,xW1)W2(2)
后续的研究提出了将ReLU替换为其他非线性激活函数,例如GELU(Gaussian Error Linear Units)2 GELU ( x ) = x Φ ( x ) \text{GELU}(x) = x\Phi(x) GELU(x)=xΦ(x) Swish β ( x ) = x σ ( β x ) \text{Swish}_β(x) = xσ(βx) Swishβ(x)=xσ(βx)3
FFN GELU ( x , W 1 , W 2 ) = GELU ( x W 1 ) W 2 FFN Swish ( x , W 1 , W 2 ) = Swish 1 ( x W 1 ) W 2 (3) \text{FFN}_{\text{GELU}}(x,W_1,W_2) =\text{GELU}(xW_1 )W_2 \\ \text{FFN}_{\text{Swish}}(x,W_1,W_2) =\text{Swish}_1(xW_1 )W_2 \tag{3} FFNGELU(x,W1,W2)=GELU(xW1)W2FFNSwish(x,W1,W2)=Swish1(xW1)W2(3)

Swish 1 = x σ ( x ) \text{Swish}_1 = xσ(x) Swish1=xσ(x),即 β = 1 \beta=1 β=1

GLU及其变体

Dauphin等人1引入了GLU,一种神经网络层,被定义为输入的两个线性变换的逐元素乘积,其中一个经过了sigmoid激活。其作者还建议省略激活函数,称之为双线性(bilinear)层:
GLU ( x , W , V , b , c ) = σ ( x W + b ) ⊗ ( x V + c ) Bilinear ( x , W , V , b , c ) = ( x W + b ) ⊗ ( x V + c ) (4) \begin{aligned} \text{GLU}(x,W,V,b,c) &= \sigma(xW+b) \otimes (xV +c) \\ \text{Bilinear}(x,W,V,b,c) &= (xW+b) \otimes (xV +c) \end{aligned} \tag 4 GLU(x,W,V,b,c)Bilinear(x,W,V,b,c)=σ(xW+b)(xV+c)=(xW+b)(xV+c)(4)
我们也可以使用其他激活函数来定义GLU的变体:
ReGLU ( x , W , V , b , c ) = max ⁡ ( 0 , x W + b ) ⊗ ( x V + c ) GeGLU ( x , W , V , b , c ) = GELU ( x W + b ) ⊗ ( x V + c ) SwiGLU ( x , W , V , b , c ) = Swish β ( x W + b ) ⊗ ( x V + c ) (5) \begin{aligned} \text{ReGLU}(x,W,V,b,c) &= \max(0,xW+b) \otimes (xV +c) \\ \text{GeGLU}(x,W,V,b,c) &= \text{GELU}(xW+b) \otimes (xV +c) \\ \text{SwiGLU}(x,W,V,b,c) &= \text{Swish}_\beta(xW+b) \otimes (xV +c) \\ \end{aligned} \tag 5 ReGLU(x,W,V,b,c)GeGLU(x,W,V,b,c)SwiGLU(x,W,V,b,c)=max(0,xW+b)(xV+c)=GELU(xW+b)(xV+c)=Swishβ(xW+b)(xV+c)(5)

这几个激活函数的图像如下所示:
在这里插入图片描述

在本篇工作中,作提出了对Transformer FFN层的额外变种,其中使用GLU或其变种代替第一个线性变换和激活函数。同样,省略了偏置项。
FFN GLU ( x , W , V , W 2 ) = ( σ ( x W ) ⊗ x V ) W 2 FFN Bilinear ( x , W , V , W 2 ) = ( x W ⊗ x V ) W 2 FFN ReGLU ( x , W , V , W 2 ) = ( max ⁡ ( 0 , x W ) ⊗ x V ) W 2 FFN GEGLU ( x , W , V , W 2 ) = ( GELU ( x W ) ⊗ x V ) W 2 FFN SwiGLU ( x , W , V , W 2 ) = ( Swish 1 ( x W ) ⊗ x V ) W 2 (6) \begin{aligned} \text{FFN}_{\text{GLU}}(x,W,V,W_2) &= (\sigma(xW) \otimes xV)W_2 \\ \text{FFN}_{\text{Bilinear}}(x,W,V,W_2) &= (xW \otimes xV)W_2 \\ \text{FFN}_{\text{ReGLU}}(x,W,V,W_2) &= (\max(0,xW) \otimes xV)W_2 \\ \text{FFN}_{\text{GEGLU}}(x,W,V,W_2) &= (\text{GELU}(xW) \otimes xV)W_2 \\ \text{FFN}_{\text{SwiGLU}}(x,W,V,W_2) &= (\text{Swish}_1(xW) \otimes xV)W_2 \\ \end{aligned} \tag 6 FFNGLU(x,W,V,W2)FFNBilinear(x,W,V,W2)FFNReGLU(x,W,V,W2)FFNGEGLU(x,W,V,W2)FFNSwiGLU(x,W,V,W2)=(σ(xW)xV)W2=(xWxV)W2=(max(0,xW)xV)W2=(GELU(xW)xV)W2=(Swish1(xW)xV)W2(6)
与原始的FFN层相比,所有这些层都有三个权重矩阵,而不是两个。为了保持参数量和计算量的恒定,当将这些层与原始的双矩阵版本进行比较时,作者将隐藏单元的数量 d f f d_{ff} dff W W W V V V的第二个维度以及 W 2 2 W_22 W22的第一个维度)减少了 2 3 \frac{2}{3} 32

实验

作者在T5的迁移学习设置上对所描述的FFN变种进行了测试。使用了一个编码器-解码器的Transformer模型,在预测缺失文本段的去噪目标上进行训练,并随后在各种语言理解任务上进行了微调。

模型架构

image-20240413211104044

使用与T5的基准模型相同的代码库、模型架构和训练任务。编码器和解码器各由12个层组成, d m o d e l = 768 d_{model} = 768 dmodel=768。对于注意力层, h = 12 , d k = d v = 64 h = 12,d_k = d_v = 64 h=12,dk=dv=64。FFN层的隐藏大小为 d f f = 3072 d_{ff} = 3072 dff=3072。如上所述,对于基于GLU变种的FFN层,它们具有三个权重矩阵而不是两个,将隐藏层减少到 d f f = 2048 d_{ff} = 2048 dff=2048,以保持与基准模型相同的参数和操作数量。

预训练和困惑度

与T5完全一致,在C4数据集上使用填充跨度任务进行了524288步的预训练。每个训练批次包含128个示例,每个示例的输入为512个标记,输出为114个标记,输出中包含从输入中删除的多个标记跨度。

类似于T5,使用Adafactor优化器和反平方根学习率调度。还在线性方式下在训练最后10%的步骤中衰减学习率。与T5的主要不同之处在于,在预训练期间不使用dropout。作者发现这样可以产生更好的结果。使用C4数据集中的一个保留分片计算训练目标的对数困惑度,祖宗认为这是模型质量的一个很好的指标。对于每个模型架构,还训练了四个模型进行较短的时间65536步的训练,以衡量不同运行之间的可变性。结果列在表1中。GEGLU和SwiGLU变种产生了最佳的困惑度。

微调

image-20240413211440445

然后,作者对每个完全训练的模型进行了一次微调,使用的是SQuAD和GLUE以及SuperGlue基准测试中的所有语言理解任务的例子按比例混合而成。微调共包含131072步,学习率为 1 0 − 3 10^{-3} 103​​。与训练过程类似,每一步的输入序列的总长度约为65536个标记。根据T5的建议,作者在层输出、前馈隐藏层和注意力权重上使用了0.1的dropout率。在微调期间,嵌入矩阵将被固定。

image-20240413211609348

表2、表3和表4显示了在开发集上的结果。对于每个任务,作者报告了在微调过程中记录的任何检查点中的最佳得分。尽管结果有些噪音,但新的GLU变种在大多数任务上表现最佳。为了比较,在每个表的底部,作者列出了T5的结果。他们的模型与 FFN ReLU \text{FFN}_{\text{ReLU}} FFNReLU模型完全相同。值得注意的是,他们的结果明显较差,作者认为这是由于他们在预训练期间使用了dropout所导致的。还列出了由T5测量的运行间标准偏差。

image-20240413211617037

结论

作者扩展了GLU家族并将它们应用于Transformer模型中。在迁移学习的设置中,新的变种似乎在预训练中用于去噪目标的困惑度上表现更好,并在许多下游语言理解任务上取得了更好的结果。

总结

⭐ 作者用流行的激活函数(Swish,GeLU和ReLU等)替换GLU中的激活函数,得到了一个困惑度比较好的GLU变体——SwiGLU,但作者也无法解释效果好的原因。

参考


  1. GLU Variants Improve Transformer ↩︎ ↩︎

  2. GAUSSIAN ERROR LINEAR UNITS (GELUS) ↩︎

  3. SEARCHING FOR ACTIVATION FUNCTIONS ↩︎

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

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

相关文章

Leetcode刷题之删除有序数组的重复项

一、题目描述 删除有序数组的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums…

【计算机网络】ip子网划分--超详细例题解析

Hello!这一篇主要是计算机网络中的ip地址子网划分的例题,这里例举了四个题型。保证即便从0也可以掌握!(前面是一些预备知识,不熟悉的小伙伴一定要看下学习下哦~) 这也是博主的学习过程,做题中仅仅我的理解哦。若文章中…

1.Hexo安装和环境搭建引导

Hexo是一个依赖于一个名为nodejs的程序 因此安装它的方式在Mac和Windows上实际上是一样的 为了在电脑上安装Hexo 需要做两件事 nodejs,基本上是hexo依赖运行的JavaScript框架 Node.js — Run JavaScript Everywheregit,是一个程序,用来管理电…

前端知识学习笔记-六(vue)

简介 Vue是前端优秀框架是一套用于构建用户界面的渐进式框架 Vue优点 Vue是目前前端最火的框架之一 Vue是目前企业技术栈中要求的知识点 vue可以提升开发体验 Vue学习难度较低 Vue开发前准备 一、nodejs环境 Nodejs简介 Nodejs诞生于2009年,主攻服务器方向&#x…

IDEA中sql语句智能提示设置

选中一句sql语句,点击鼠标右键 指定数据库

机器学习入门实战1:鸢尾花分类

花名:鸢尾花 别名:爱丽丝、蓝蝴蝶、紫蝴蝶 花语:爱的使者、长久思念 花期:5-6月 颜色:蓝色、紫色、白色、粉色等 鸢尾花主要色彩为蓝紫色,有“蓝色妖姬”的美誉,因花瓣形如鸢鸟尾巴而得名&#…

vi编辑器

目录 一、文本编辑器vi命令 1.作用: 2.vi和vim 二、vi编辑器的三种模式 三、输入模式 四、命令模式 五、末行模式 一、文本编辑器vi命令 1.作用: 创建或修改文本文件 维护Linux系统中的各种配置文件 2.vi和vim vi:类UNIX操作系统的默认文本编辑器…

揭示空间依赖性:运用先进自相关技术挖掘地理数据中的规律

原文地址:deciphering-spatial-dependence-unlocking-patterns-in-geographical-data-through-advanced 2024 年 4 月 9 日 简介 空间自相关分析是用于衡量和分析一组空间数据点在地理空间中相关程度的统计方法。该技术是空间分析和地理信息系统 (GIS) 的组成部分…

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了,分数一百分可能,感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204,纯手写 第二题是 物理题 纯蒙,随便猜了个轨迹,答案具体忘了,最后是 .45 第三题暴力 第四题 我是傻逼…

分布式技术--------------ELK大规模日志实时收集分析系统

目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.…

【C++】详解类的--封装思想(让你丝滑的从C语言过度到C++!!)

目录 一、前言 二、【面向过程】 与 【面向对象】 三、结构体 与 类 🍎C中结构体的变化 🍉C中结构体的具体使用 🍐结构体 --> 类 ✨类-----语法格式: ✨类的两种定义方式: 四、类的访问限定符及封装【⭐】 …

python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归

学习目标: 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归 学习内容: 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归 目录 学习目标&…

【零基础学鸿蒙】ArkTS开发语言介绍

在之前的教学中,我们学习了下载安装DevEco Studio等相关知识。今天开始讲ArkTS 1.1 TypeScrip快速入门 学习TypeScript对于HarmonyOS应用开发至关重要。在HarmonyOS中,主力编程语言为ArKTS,它是基于TypeScript的一种语言,其通过…

Vue 3 项目中如何使用 TypeScript 类型来优化 Vuex 的状态管理?

在 Vue 3 项目中,使用 TypeScript 可以极大地优化 Vuex 的状态管理,提供更强的类型检查和更好的开发体验。以下是一些使用 TypeScript 来优化 Vuex 状态管理的方法: 定义状态类型: 使用 TypeScript 的接口(Interfaces&…

spring 集成 mybatis

spring 集成 mybatis 1、spring对junit的支持1.1、对junit4的支持1.2 对junit5的支持 2、Spring6集成MyBatis3.52.1 实现步骤2.2 实现 1、spring对junit的支持 1.1、对junit4的支持 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…

Oracle获取对象的DDL创建语句

1.命令行方式&#xff08;如&#xff1a;sqlplus&#xff09; ## 用户 select dbms_metadata.get_ddl(USER,TEST) from dual;## 表 select dbms_metadata.get_ddl(TABLE,TEST,T1) from dual;## 表空间 select dbms_metadata.get_ddl(TABLESPACE,TBS_NAME) from dual;## 索引 s…

NetSuite 销售订单页面选择客户后停滞问题研究

随着用户环境中定制内容的增加&#xff0c;用户会发现Sales Order中选择Customer时的页面停滞时间会变长。这让用户感到很疑惑。 我们初步研究了一下这个问题&#xff0c;两个变量比较显著&#xff1a; •Form的页签数量•脚本的挂载数量 试验数据 1. 多页签&#xff0c;无…

prompt 工程整理(未完、持续更新)

工作期间会将阅读的论文、一些个人的理解整理到个人的文档中&#xff0c;久而久之就积累了不少“个人”能够看懂的脉络和提纲&#xff0c;于是近几日准备将这部分略显杂乱的内容重新进行梳理。论文部分以我个人的理解对其做了一些分类&#xff0c;并附上一些简短的理解&#xf…

【JavaEE多线程】理解和管理线程生命周期

目录 ThreadThread类的常用构造方法Thread类的常见属性启动一个线程-start()终止一个线程等待一个线程-join()线程的状态 Thread Thread 就是在 Java 中&#xff0c;线程的代言人。系统中的一个线程&#xff0c;就对应到 Java 中的一个 Thread 对象。围绕线程的各种操作&#…

Windows下安装myBase Desktop 8

下载 官网下载&#xff1a; Latest Version Downloads 安装 1.下载好安装包后&#xff0c;直接解压用鼠标双击安装文件“Mybase-Desktop-Ver8218-Win64.exe”进入安装向导 2.点击选择“Iaccept the agreement”同意相关协议,随后点击“next” 3.点击“next” 4.选择安装位置&am…