【DL经典回顾】激活函数大汇总(二十五)(GEGLU附代码和详细公式)

激活函数大汇总(二十五)(GEGLU附代码和详细公式)

更多激活函数见激活函数大汇总列表

一、引言

欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能力与表现力。鉴于激活函数的重要性和多样性,我们将通过几篇文章的形式,本篇详细介绍两种激活函数,旨在帮助读者深入了解各种激活函数的特点、应用场景及其对模型性能的影响。

在接下来的文章中,我们将逐一探讨各种激活函数,从经典到最新的研究成果。

限于笔者水平,对于本博客存在的纰漏和错误,欢迎大家留言指正,我将不断更新。

二、GEGLU

GEGLU (Gated Exponential Linear Unit) 是一个结合了GELU (Gaussian Error Linear Unit) 和GLU (Gated Linear Unit) 特性的激活函数。它利用了GELU提供的非线性以及GLU的门控机制,旨在通过动态调节神经元的激活程度来提高模型的表现力和灵活性。虽然GEGLU的直接文献可能较少,但可以通过分析GELU和GLU的结合来理解其特性。

1. 数学定义

假设我们有两个输入 a a a b b b,则GEGLU的数学表达式可以定义为:

GEGLU ⁡ ( a , b ) = a ⊗ GELU ⁡ ( b ) \operatorname{GEGLU}(a, b)=a \otimes \operatorname{GELU}(b) GEGLU(a,b)=aGELU(b)
这里, a a a b b b是同形状的输入向量或张量, ⊗ \otimes 表示逐元素乘法,而 GELU ⁡ ( b ) \operatorname{GELU}(b) GELU(b)是应用在 b b b上的GELU函数。
在这里插入图片描述

2. 函数特性

  • 门控机制:类似于GLU,GEGLU使用一个输入 b b b来控制另一个输入 a a a的激活强度,提供了动态的激活能力。
  • 非线性:通过GELU部分,GEGLU引入了基于Gaussian分布的非线性,有助于模型捕获更复杂的数据模式。
  • 自适应激活:GEGLU能够根据 b b b的值自适应地调整 a a a的激活程度,这种自适应能力使得模型可以根据数据特征动态调整其行为。

3. 导数

GEGLU的导数涉及到GELU函数的导数,具体形式依赖于GELU的定义。GELU的导数本身涉及到标准正态分布的累积分布函数和概率密度函数,因而GEGLU的导数计算较为复杂。

4. 使用场景与局限性

使用场景

  • 自然语言处理和图像处理:GEGLU的动态激活特性特别适合于处理序列数据和高维度特征的任务,如自然语言处理和图像处理领域。
  • 深层网络:在深层网络中,GEGLU的自适应激活能力有助于改善信息流和梯度传播,可能减少梯度消失或梯度爆炸问题。

局限性

  • 计算复杂度:由于GELU函数的计算相对复杂,GEGLU可能增加模型的计算负担。
  • 优化难度:GEGLU引入的动态激活机制可能使得模型训练的优化过程更加复杂,需要更细致的调参。

GEGLU通过结合GELU的高级非线性和GLU的门控机制,为深度学习模型提供了一种强大的激活函数选项。然而,其使用需要在模型设计和训练策略上进行仔细考虑,以充分利用其特性并应对其挑战。

5.代码实现

代码

这段代码定义了GEGLU (Gated Exponential Gaussian Linear Unit) 激活函数,并提供了一个示例应用:

import numpy as np

def gelu(x):
    """
    实现Gaussian Error Linear Unit (GELU) 激活函数。
    """
    return 0.5 * x * (1 + np.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * x**3)))

def geglu(a, b):
    """
    实现Gated Exponential Gaussian Linear Unit (GEGLU) 激活函数。
    
    参数:
    a, b -- 输入的数值或NumPy数组,形状相同。
    
    返回:
    GEGLU激活后的输出。
    """
    # 计算GELU激活
    gelu_b = gelu(b)
    # 应用门控机制
    output = a * gelu_b
    
    return output

# 示例输入
a = np.array([1, -1, 0.5, -0.5])
b = np.array([0.5, -0.5, 1, -1])

# 应用GEGLU激活函数
output = geglu(a, b)

print("GEGLU Output:", output)
解释
  • GELU激活函数:首先,定义了GELU激活函数gelu(x),这是GEGLU的核心部分之一。GELU使用了一个基于高斯分布的公式,为输入x提供非线性变换。

  • GEGLU激活函数:随后,定义了GEGLU激活函数geglu(a, b),它接受两个输入abb输入经过GELU激活,然后该激活结果与a逐元素相乘,实现了门控机制。

  • 示例应用:在示例中,ab是两个形状相同的NumPy数组。它们分别通过GEGLU函数处理,展示了如何在实践中应用GEGLU激活函数。

  • 输出:示例输出展示了GEGLU激活后的结果。通过GELU门控的方式,a的每个元素根据b的相应元素经过GELU处理的结果进行调整。

  • 优化挑战:引入门控机制可能增加模型训练过程中的优化挑战,需要精细的参数调整和优化策略。

三、参考文献

  • Shazeer N. Glu variants improve transformer[J]. arXiv preprint arXiv:2002.05202, 2020.
  • GELU激活函数的原始文献Hendrycks, D., & Gimpel, K. (2016). “Gaussian Error Linear Units (GELUs)”. arXiv preprint arXiv:1606.08415. 这篇论文首次提出了GELU激活函数,提供了关于它是如何被设计出来的详细信息,以及为何它在某些情况下优于其他激活函数。
  • 门控线性单元(GLU)相关文献Dauphin, Y. N., Fan, A., Auli, M., & Grangier, D. (2017). “Language Modeling with Gated Convolutional Networks”. In Proceedings of the 34th International Conference on Machine Learning-Volume 70 (pp. 933-941). GLU激活函数在这篇论文中被提出,用于构建更复杂的神经网络结构。

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

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

相关文章

金蝶云星空——插件dll重新发布报错:鏃犳硶鏄剧ず椤甸潰锛屽洜涓哄彂鐢熷唴閮ㄦ湇鍔″櫒閿欒銆�

项目场景: 金蝶插件开发 问题描述 今天更新了插件dll然后重启IIS金蝶就报如下错误: 解决方案: 折腾了一天结果发现是给自己挖坑了,这次更新我担心插件代码有问题就把原dll重命名了然后把最新dll更新到金蝶bin文件中&#xff0c…

使用Java JDBC连接数据库

在Java应用程序中,与数据库交互是一个常见的任务。Java数据库连接(JDBC)是一种用于在Java应用程序和数据库之间建立连接并执行SQL查询的标准API。通过JDBC,您可以轻松地执行各种数据库操作,如插入、更新、删除和查询数…

c语言指针(二)

c语言指针(二) 1.数组名的理解 2.使用指针访问数组 3.一维数组的传参本质 1.数组名的理解 int arr[10] { 1,2,3,4,5,6,7,8,9,10 }; int* p &arr[0]这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是…

在线教育平台帮助教培机构打造线上

随着互联网的迅猛发展,在线教育逐渐成为了教育行业的主流趋势。为了满足教育机构和学生对高效、便捷在线教育的需求,乔拓云教育系统应运而生。该系统以学员端展示课程和后台管理教务为核心功能,为教育机构提供了一站式解决方案,助…

IText5填充PDF表单使用自定义字体中文生效而英文和数字不生效?

为什么使用IText5填充PDF时,使用自定义字体(特别是某些新兴的字体)时中文生效,英文和数字不生效? 查了相关资料,发现无果,或者都不生效。 看了api接口文档,发现有解决方案&#xf…

(008)Unity StateMachineBehaviour的坑

文章目录 StateMachineBehaviour同名函数的调用问题StateMachineBehaviour 的 OnState*、OnStateMachine* 的区别 StateMachineBehaviour同名函数的调用问题 1.如果脚本中,两个同名的函数都存在,那么两个函数都会被调用;如果只有其中一个同名…

自动驾驶决策 - 规划 - 控制 (持续更新!!!)

总目录 Frenet与Cartesian坐标系 Apollo基础 - Frenet坐标系 车辆模型 车辆运动学和动力学模型 控制算法 PID控制器轨迹跟随实现 Pure Pursuit控制器路径跟随 路径跟踪算法Stanley 实现 c 无人驾驶LQR控制算法 c 实现 MPC自动驾驶横向控制算法实现 c 双环PID控制详细讲解 …

人外周血单核细胞来源树突状细胞(MoDC)的制备(一)

MoDC制备方法简图 背景 DC是“Dendritic Cells”的缩写,中文全称为“树突状细胞”,因其成熟时伸出许多树突样或伪足样突起而得名。DC 是由 2011 年诺贝尔奖获得者、加拿大籍科学家 Ralph M. Steinman 于1973 年发现的,是目前发现的功能最强的…

下拉树级带搜索功能

可以直接复制粘贴到自己的项目里,方法处把接口替换一下 <template><div><el-popoverplacement"bottom"width"200"trigger"click"><el-inputslot"reference"class"mrInput":placeholder"placehol…

虚拟机VMware上 centos7 的网络配置

第一步&#xff1a;权限的切换 由普通用户切换到管理者/超级用户 用户名为&#xff1a;root 密码为&#xff1a;自己安装 linux 时第一次设置的密码 su -root管理者/超级用户的命令提示符是“#”&#xff0c;普通用户的命令提示符是“$”。当看到你的命令提示符为“$”时&…

2、鸿蒙学习-申请调试证书和调试Profile文件

申请发布证书 发布证书由AGC颁发的、为HarmonyOS应用配置签名信息的数字证书&#xff0c;可保障软件代码完整性和发布者身份真实性。证书格式为.cer&#xff0c;包含公钥、证书指纹等信息。 说明 请确保您的开发者帐号已实名认证。每个帐号最多申请1个发布证书。 1、登录AppGa…

0基础学习VR全景平台篇第145篇:图层控件功能

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01;这期&#xff0c;我们将为大家介绍如何使用图层控件功能。 一.如何使用图层控件功能&#xff1f; 进入作品编辑页面&#xff0c;点击左边的控件后就可以在右边进行相应设置。 二.图层控件有哪些功能&am…

综合练习(python)

前言 有了前面的知识积累&#xff0c;我们这里做两个小练习&#xff0c;都要灵活运用前面的知识。 First 需求 根据美国/英国各自YouTube的数据&#xff0c;绘制出各自的评论数量的直方图 第一版 import numpy as np from matplotlib import pyplot as plt import matplo…

GAMES101 学习3

Lecture 13 ~ 16 Shadow mapping 一种图像空间算法生成阴影时不需要知道场景中的几何信息会产生走样现象 最重要的思想&#xff1a;如果有的点不在阴影里你又能看到这个点&#xff0c;那么说明摄像机可以看到这个点&#xff0c;光源也可以看到这个点 经典的Shadow mapping …

【计算机考研】408全年复习保姆级规划+资料

基础阶段 408一共只分为选择题和大题&#xff0c;选择题80分&#xff0c;大题70分。 基础阶段应该要形成相对完整的知识体系&#xff0c;基础知识大概都需要有印象。 在基础阶段&#xff0c;建议不做大题&#xff0c;把课后选择题都好好的做一遍 第一遍的正确率无需过于关注…

.Net Core 中间件验签

文章目录 为什么是用中间件而不是筛选器&#xff1f;代码实现技术要点context.Request.EnableBuffering()指针问题 小结 为什么是用中间件而不是筛选器&#xff1f; 为什么要用中间件验签&#xff0c;而不是筛选器去验签? 1、根据上图我们可以看到&#xff0c;中间件在筛选器之…

华为组网:核心交换机旁挂防火墙,基于ACL重定向配置实验

如图所示&#xff0c;由于业务需要&#xff0c;用户有访问Internet的需求。 用户通过接入层交换机SwitchB和核心层交换机SwitchA以及接入网关Router与Internet进行通信。为了保证数据和网络的安全性&#xff0c;用户希望保证Internet到服务器全部流量的安全性&#xff0c;配置重…

Maven项目如何导入依赖包

一、导入依赖包 导入mysql依赖包 第一步&#xff1a;登录Maven官网 Maven官网&#xff1a;https://mvnrepository.com/search?qmysql 第二步&#xff1a;点击MySql Connector Java 第三步&#xff1a;点击任意一个版本 第四步&#xff1a;将以下内容复制到pom.xml中 导入j…

Springboot+Redis:实现缓存 减少对数据库的压力

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 …

fastjson反序列化攻略

漏洞原理 Json.parseObject(json, User.class)方法中&#xff0c;通过指定type的值实现定位某类&#xff0c;会执行User类的构造方法和属性中的get&#xff0c;set方法 判断是否是fastjson/&#xff08;jackson&#xff09; 1.2.24-1.2.83都会有dnslog的payload {"zer…
最新文章