激活函数总结(八):基于Gate mechanism机制的激活函数补充(GLU、SwiGLU、GTU、Bilinear、ReGLU、GEGLU)

本文主要是介绍激活函数总结(八):基于Gate mechanism机制的激活函数补充(GLU、SwiGLU、GTU、Bilinear、ReGLU、GEGLU),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

激活函数总结(八):基于Gate mechanism机制的激活函数补充

  • 1 引言
  • 2 激活函数
    • 2.1 GLU激活函数
    • 2.2 SwiGLU激活函数
    • 2.3 GTU激活函数
    • 2.4 Bilinear激活函数
    • 2.5 ReGLU激活函数
    • 2.6 GEGLU激活函数
  • 3. 总结

1 引言

在前面的文章中已经介绍了介绍了一系列激活函数 (SigmoidTanhReLULeaky ReLUPReLUSwishELUSELUGELUSoftmaxSoftplusMishMaxoutHardSigmoidHardTanhHardswishHardShrinkSoftShrinkTanhShrinkRReLUCELUReLU6)。在这篇文章中,会接着上文提到的众多激活函数继续进行介绍,给大家介绍关于最近大语言模型中较火的GLU模型。这里放一张激活函数的机理图:
在这里插入图片描述

最后,对于文章中没有提及到的激活函数,大家可以通过评论指出,作者会在后续的文章中进行添加补充。

2 激活函数

本章节主要介绍了基本结构GLU激活函数和最近特别火的SwiGLU激活函数,其余GLU变体激活函数只展示基本公式。

2.1 GLU激活函数

论文链接:Language Modeling with Gated Convolutional Networks

GLU是在语言建模论文中引入的,这是一个神经网络层,定义为输入的两个线性变换(矩阵乘法)的分量乘积,其中一个是Sigmoid激活的。这是在变压器出现之前,非循环方法第一次在一些大型语言任务上与强大的循环模型竞争。GLU的数学表达式如下所示:

G L U ( x ) = s i g m o i d ( x W + b ) ⊗ ( x V + c ) GLU(x) = sigmoid(xW+b) ⊗ (xV+c) GLU(x)=sigmoid(xW+b)(xV+c)

在这里,我们看到我们有两个可训练矩阵 W W W V V V,其中 V V V 用于计算门控单元。门在激活后提供了一个额外的过滤器,可以在训练期间学习,并取决于输入本身。 ⊗ ⊗ 运算是逐元素乘法。

根据矩阵运算可视化 GLU,而不使用偏置矩阵 b 和 c:
在这里插入图片描述
可以看到:上面最后一个操作中显示的重叠矩阵条目相乘,因此 x V + c xV+c xV+c 的输出充当另一半操作的过滤器。因此,根据过滤器中的矩阵值,这些相同的条目会变得突出或从 sigmoid 激活矩阵中减少

优点:

  • 稳定且高效:GLU比ReLU稳定得多,学习速度也比sigmoid快。
  • 缓解梯度消失:GLU还具有非线性功能,但具有梯度的线性路径,因此减少了梯度消失问题。

当前,GLU在自然语言处理架构中广泛使用,当然还有它的变体模型!!!!

2.2 SwiGLU激活函数

论文链接:GLU Variants Improve Transformer
SwiGLU是Swish和GLU激活函数的组合。在 SwiGLU 中,Swish 函数用于门控 GLU 的线性函数。这使得SwiGLU能够抓住Swish和GLU的优势,同时克服它们各自的缺点。SwiGLU已被证明在各种任务中优于Swish和GLU,包括图像分类语言建模机器翻译。SwiGLU的数学表达式如下所示:
S w i G L U ( x ) = S w i s h β ( x W + b ) ⊗ ( x V + c ) SwiGLU(x) = Swish_{\beta}(xW+b)⊗ (xV+c) SwiGLU(x)=Swishβ(xW+b)(xV+c)
其中 W W W V V V b b b c c c β \beta β 是可训练的参数。

优点:

  • 平滑度:SwiGLU比ReLU更平滑,可以带来更好的优化更快的收敛
  • 非单调性:SwiGLU是非单调性的,这使其能够捕获输入和输出之间的复杂非线性关系。
  • 门控机制:SwiGLU使用门控机制,允许它根据接收到的输入选择性地激活神经元。这有助于减少过度拟合并改善泛化。
  • 普遍性:SwiGLU已被证明在各种任务优于其他激活功能,包括SwishGLU

当前,SwiGLU是transformer领域的大火模型!!!!对于使用transformer的同学很适合进行尝试!!!!

2.3 GTU激活函数

论文链接:Language Modeling with Gated Convolutional Networks

GTU是一种GLU变体,它使用Tanh作为激活函数。GTU的数学表达式如下所示:
G T U ( x ) = T a n h ( x W + b ) ⊗ s i g m o i d ( x V + c ) GTU(x) = Tanh(xW+b)⊗ sigmoid(xV+c) GTU(x)=Tanh(xW+b)sigmoid(xV+c)

当前,虽然SwiGLU大火,但是GTU几乎没有使用环境。。。

2.4 Bilinear激活函数

论文链接:GLU Variants Improve Transformer

Bilinear激活函数是省略 sigmoid 函数的 GLU 变体。它是一个双线性变换,然后是逐元素乘积。Bilinear的数学表达式如下所示:
B i l i n e a r ( x ) = ( x W + b ) ⊗ ( x V + c ) Bilinear(x) = (xW+b)⊗ (xV+c) Bilinear(x)=(xW+b)(xV+c)

当前,虽然SwiGLU大火,但是Bilinear几乎没有使用环境。。。

2.5 ReGLU激活函数

论文链接:GLU Variants Improve Transformer

ReGLU是一种GLU变体,它使用ReLU作为激活函数。ReGLU的数学表达式如下所示:
R e G L U ( x ) = R e L U ( x W + b ) ⊗ ( x V + c ) ReGLU(x) = ReLU(xW+b)⊗ (xV+c) ReGLU(x)=ReLU(xW+b)(xV+c)

当前,虽然SwiGLU大火,但是ReGLU几乎没有使用环境。。。

2.6 GEGLU激活函数

论文链接:GLU Variants Improve Transformer

GEGLU是使用GELU作为激活函数的GLU变体。GEGLU的数学表达式如下所示:
G E G L U ( x ) = G E L U ( x W + b ) ⊗ ( x V + c ) GEGLU(x) = GELU(xW+b)⊗ (xV+c) GEGLU(x)=GELU(xW+b)(xV+c)

当前,虽然SwiGLU大火,但是GEGLU几乎没有使用环境。。。

3. 总结

到此,使用 激活函数总结(八) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的激活函数也可以在评论区提出,后续会对其进行添加!!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

这篇关于激活函数总结(八):基于Gate mechanism机制的激活函数补充(GLU、SwiGLU、GTU、Bilinear、ReGLU、GEGLU)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/471817

相关文章

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

Java中自旋锁与CAS机制的深层关系与区别

《Java中自旋锁与CAS机制的深层关系与区别》CAS算法即比较并替换,是一种实现并发编程时常用到的算法,Java并发包中的很多类都使用了CAS算法,:本文主要介绍Java中自旋锁与CAS机制深层... 目录1. 引言2. 比较并交换 (Compare-and-Swap, CAS) 核心原理2.1 CAS

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

Spring Boot 集成 mybatis核心机制

《SpringBoot集成mybatis核心机制》这篇文章给大家介绍SpringBoot集成mybatis核心机制,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值... 目录Spring Boot浅析1.依赖管理(Starter POMs)2.自动配置(AutoConfigu

pandas使用apply函数给表格同时添加多列

《pandas使用apply函数给表格同时添加多列》本文介绍了利用Pandas的apply函数在DataFrame中同时添加多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、Pandas使用apply函数给表格同时添加多列二、应用示例一、Pandas使用apply函

python3中正则表达式处理函数用法总结

《python3中正则表达式处理函数用法总结》Python中的正则表达式是一个强大的文本处理工具,用于匹配、查找、替换等操作,在Python中正则表达式的操作主要通过内置的re模块来实现,这篇文章主要... 目录前言re.match函数re.search方法re.match 与 re.search的区别检索