激活函数总结(八):基于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

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数