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

news2025/2/26 6:27:14

激活函数大汇总(二十五)(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.coloradmin.cn/o/1528758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OxyPlot 导出图片

在 OxyPlot 官方文档 https://oxyplot.readthedocs.io/en/latest/export/index.html 中查看 这里用到的是导出到 PNG 文件的方法,不过用的 NuGet 包最新版(2.1.0)中,PngExporter 中并没有 Background 属性: 所以如果图…

【No.13】蓝桥杯二分查找|整数二分|实数二分|跳石头|M次方根|分巧克力(C++)

二分查找算法 知识点 二分查找原理讲解在单调递增序列 a 中查找 x 或 x 的后继在单调递增序列 a 中查找 x 或 x 的前驱 二分查找算法讲解 枚举查找即顺序查找, 实现原理是逐个比较数组 a[0:n-1] 中的元素,直到找到元素 x 或搜索整个数组后确定 x 不在…

node核心模块之Process

核心模块, 是node中自带的模块,可以在node中直接使用 目录 1. process(对象)1.1process.exit()1.2process.nextTick(callback: Function, ...args: any[]) 2.宿主对象2.1浏览器宿主对象window2.2node宿主对象global2.3ES标准下,全局对象的标准名globalT…

CPU的核心数与线程数对性能的影响是什么

我们经常在CPU的配置参数中看到核心数和线程数,那你知道CPU的核心数与线程数对性能的影响是什么呢?核心数和线程数是越多越好吗?要弄清楚这个问题,我们必须先了解以下几个基础知识。 什么是CPU核心? CPU核心&#xf…

【苍穹外卖Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求

什么是同步和异步 同步 在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。也就是一旦调用开始,就必须等待其返回结果,程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…

redis实战-黑马点评-优惠卷秒杀

全局ID生成器: 全局ID生成器:是一种再分布式系统下生成全局唯一的ID的工具。唯一性,高可用,高性能,安全性,递增性。 封装工具类生成全局ID: Component public class RedisIDWorker {ResourceStringRedisTe…

深入了解 Postman 请求头的使用方法

当你在使用 Postman 发送请求时,请求头(Headers)是你可以包含在 HTTP 请求中的重要部分之一。请求头包含了关于请求的元数据信息,这些信息对于服务器来处理请求是非常重要的。下面是一份详细的图文介绍,说明了如何在 P…

电商行业的下一个风口是什么?2024的蝴蝶号平台,决不能错过

我是王路飞。 蝴蝶号或者说视频号小店项目,一定是2024年你不可错过的电商项目,也会是下一个电商风口,参考20年的抖音小店。 今天给你们详细聊下蝴蝶号/视频号小店这个项目,感兴趣的可以文末找我领取项目介绍。 内容来源于【醒醒…

达梦数据库SQL

达梦JSON函数技术文档 SQL中关键词处理 -- 必须要使用双引号包裹 select id,"comment" from t_cmp_rd_process;select id,"commit" from t_cmp_rd_gjj_eva;JSON_EXTRACT函数 -- party_sup_other_json 是包含JSON数据的列名。 -- $.content_abstract 是J…

Ubuntu双系统/home分区扩容

一、Windows系统中利用磁盘管理分出空闲区域,如果多就多分一些 二、插入安装Ubuntu的U盘启动盘,lenovo电脑F12(其他电脑可选择其他类似方式)选择U盘启动项,然后选择ubuntu,出现安装界面,再选择t…

什么是CPQ?CPQ报价管理软件面向制造企业快速报价解决方案

什么是CPQ? CPQ生产配置报价系统是面向生产加工企业,为企业市场部门提供快速报价的辅助系统,和配置报价系统不同的是生产报价系统成本的组成并不是标准的产品成本,其成本可能包含原材料成本、原材料损耗、制造成本、包装成本、运…

darkdown语法详解(readme语法)

1.简介 Markdown就是一种文档的格式,文件名的末尾是.md,是一种轻量级的标记语言,目前已经在Github、csdn等多个网站使用。 1.1.优点 排版语法简单可在任何支持markdown语法的地方无缝迁移,避免了 我们常见的迁移后需要重新排版…

【动态规划】算法例题

目录 一维动态规划: 137. 爬楼梯 ① 138. 打家劫舍 ② 139. 单词拆分 ② 140. 零钱兑换 ② 141. 最长递增子序列 ② 多维动态规划: 142. 三角形最小路径和 ② 143. 最小路径和 ② 144. 不同路径 II ② 145. 最长回文子串 ② 146. 交错字符串…

讯鹏智能边缘计算网关主机,支持MQTT协议主动上传上位机软件平台

随着科技的不断发展,智能化设备在我们的生活中扮演着越来越重要的角色。而智能边缘计算网关作为连接智能设备与互联网的重要纽带,其远程运维功能为管理者带来了极大的便利。特别是像OkEdge边缘计算网关这样的产品,不仅可以替代传统的Windows系…

Vmware虚拟机配置虚拟网卡

背景 今天同事咨询了我一个关于虚拟机的问题,关于内网用Vmware安装的虚拟机,无法通过本机访问虚拟上的Jenkins的服务。   验证多次后发现有如下几方面问题。 Jenkins程序包和JDK版本不兼容(JDK1.8对应Jenkins不要超过2.357)虚拟…

【Cesium】波纹圆效果

效果图: 代码: 需要扩展源码:circleRippleMaterialProperty.js /** Description: 波纹圆效果(和水波纹扩散类似,参考开源代码)* Version: 1.0*/ class CircleRippleMaterialProperty {constructor(option…

C语言例3-27:使用条件运算符的例子

条件运算符的优先级: 其他运算符 优先于 条件运算符 优先于 赋值和复合赋值运算符 优先于 逗号运算符条件运算符的结合性是从右至左 条件运算符的一般使用形式: 表达式1?表达式2:表达式3 条件表达式的执行过程是先表达式1&…

C++ Qt开发:QUdpSocket网络通信组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket组件实现基于UDP的网络通信…

Spring Bean的生命周期是怎么样的?

一、问题解析 一个Spring的Bean从出生到销毁的全过程就是他的整个生命周期,那么经历以下几个阶段: ​ 整个生命周期可以大致分为3个大的阶段,分别是:创建、使用、销毁。还可以进一步分为5个小的阶段:实例化、初始化、…

计算机生物科技在基因编辑中的应用及其前景

一、引言 基因编辑,作为一种能够精准修改生物体基因组的技术,近年来受到了广泛的关注。 而计算机生物科技作为连接计算机科学与生物学的桥梁,为基因编辑技术的快速发展提供了强大的支持。通过利用计算机算法和数据分析方法,研究人…