激活函数:GELU(Gaussian Error Linear Units)

news2024/11/25 23:37:46

激活函数:GELU(Gaussian Error Linear Units)

  • 前言
  • 相关介绍
  • GELU(Gaussian Error Linear Units)
    • 代码示例
  • 参考

在这里插入图片描述

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入人工智能知识点专栏、Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

相关介绍

激活函数在神经网络中起着至关重要的作用,它是神经网络模型中的非线性转换组件,用于引入非线性特性到模型中,使得神经网络能够学习和表达复杂的数据分布和模式。下面是几个常见的激活函数及其特点:

  1. sigmoid函数

    • 数学表达式:σ(x) = 1 / (1 + e^(-x))
    • 输出范围:(0, 1),将输入映射到0和1之间,常用于二元分类问题的输出层,因其输出可以解释为概率。
    • 缺点:sigmoid函数在两端饱和区的梯度几乎为0,这可能导致梯度消失问题,不利于网络的深层训练。
  2. tanh(双曲正切函数)

    • 数学表达式:tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
    • 输出范围:(-1, 1),与sigmoid类似,也是饱和函数,但输出中心位于0,更适合于数据标准化后的情况。
    • 同样存在饱和区梯度消失的问题。
  3. ReLU(Rectified Linear Unit)

    • 数学表达式:ReLU(x) = max(0, x)
    • 输出范围:(0, +∞),当输入大于0时,函数输出等于输入,输入小于0时,输出为0。
    • 优点:解决了sigmoid和tanh函数的梯度消失问题,大大加快了神经网络的训练速度。
    • 缺点:在负值区域的梯度为0,可能导致神经元死亡(dead ReLU问题)。
  4. Leaky ReLU(Leaky Rectified Linear Unit)

    • 改进了ReLU,对负值区域赋予一个小的非零斜率,如Leaky ReLU(x) = max(ax, x),其中a是常数,通常很小(如0.01)。
    • 解决了ReLU在负半轴无梯度的问题。
  5. ELU(Exponential Linear Units)

    • 数学表达式:ELU(x) = max(0, x) + min(0, α * (e^x - 1))
    • ELU在x>0时的行为与ReLU相似,而在x<0时具有连续的负梯度,有助于在网络中维持均值为0的激活值分布。
  6. Swish

    • Swish函数是由Google Brain团队提出的一种自门控激活函数,表达式为:swish(x) = x * sigmoid(x)。
    • Swish在很大程度上克服了ReLU家族存在的问题,具有更好的训练表现和理论优势。
  7. GELU(Gaussian Error Linear Units)

    • GELU函数尝试模拟自然神经元的行为,它结合了线性部分和非线性部分,具有较好的理论依据和实际效果。

激活函数的选择取决于具体的应用场景和模型需求,需考虑训练效率、模型表达能力、梯度流等因素。随着深度学习研究的发展,还出现了更多新型激活函数,如SELU、Mish等。
在这里插入图片描述

GELU(Gaussian Error Linear Units)

GELU(Gaussian Error Linear Units)是一种激活函数,由Hendrycks和Gimpel在2016年的论文《Gaussian Error Linear Units (GELUs)》中提出,它旨在改善现有激活函数如ReLU在神经网络中的表现,尤其是对于那些追求更好性能和收敛速度的深层网络。
在这里插入图片描述

GELU的基本概念:

GELU的设计灵感来自于随机神经网络和高斯误差函数,它试图模仿自然神经元的行为,即输入信号与噪声的交互。GELU的公式可以表示为:

G E L U ( x ) = x ⋅ Φ ( x ) = x ⋅ P ( X ≤ x ) , 其中 X ∼ N ( 0 , 1 ) GELU(x) = x \cdot \Phi(x) = x \cdot P(X \leq x), \text{其中} \quad X \sim \mathcal{N}(0, 1) GELU(x)=xΦ(x)=xP(Xx),其中XN(0,1)

其中,( Phi(x) ) 是标准正态分布的累积分布函数(CDF),( x ) 是神经网络中某个神经元的线性输入。这意味着GELU激活函数在输入值较小时给出较小的非线性响应,随着输入值增大,非线性响应逐渐增强,同时保持了负输入区域的部分响应,这一点不同于ReLU,后者在输入小于0时输出恒为0。

GELU的优势:

  1. 平滑性:相比于ReLU及其变种,GELU函数在整个实数域上是连续且光滑的,这有助于在训练过程中梯度更容易传播,进而提高模型的训练效率和收敛速度。

  2. 饱和度控制:GELU在较大输入时不会像sigmoid那样饱和,也不会像ReLU那样在大于0的区域产生恒定斜率,而是根据输入值的大小提供不同的非线性程度。

  3. 减少过拟合:GELU的随机性和对输入分布的适应性有助于减轻过拟合现象,使得模型在处理复杂任务时表现更好。

GELU缺点和挑战

  1. 计算效率:GELU函数不像ReLU那样易于计算,因为它不是简单的阈值函数。为了计算GELU,可以直接使用公式,但该公式涉及到误差函数(erf),在某些计算平台或硬件上可能没有直接的硬件支持,导致计算相对复杂和耗时。为此,常常需要使用近似方法来提高计算效率。

  2. 近似误差:在实际应用中,由于 erf 函数的复杂性,通常会使用近似公式替代,这可能导致某种程度上的精度损失。尽管这种损失在大多数情况下影响不大,但在极端情况下可能会有一定的影响。

  3. 初始化敏感性:GELU相对于ReLU等函数可能对模型权重的初始值更为敏感,不当的初始化可能会导致训练初期梯度消失或爆炸的问题。

  4. 理解和调试难度:由于GELU函数的复杂性,对于开发者和研究者来说,理解和调试网络中使用GELU的地方可能比使用简单函数(如ReLU)更具挑战性。

然而,尽管存在这些潜在的缺点,GELU仍然在很多深度学习模型中取得了良好的效果,特别是在大型预训练模型中,它的优势往往超过其带来的计算复杂性等挑战。随着计算资源和硬件优化的不断提升,这些问题的影响也在逐渐减弱。

实际应用
GELU在现代深度学习模型中,尤其是在BERT、RoBERTa、ALBERT等先进的自然语言处理模型以及图像处理和其他领域的一些深度神经网络中得到广泛应用。GELU的使用有助于提升模型的性能,尤其是在具有大量参数和深层结构的模型中。

代码示例

以下是一个使用PyTorch实现GELU激活函数的例子,包括如何定义一个带有GELU激活层的简单神经网络模型,并进行一次前向传播计算:

import torch
import torch.nn as nn
from torch.nn.functional import gelu

# 定义GELU激活函数
def custom_gelu(x):
    return x * torch.sigmoid(1.702 * x)

# 使用内置的GELU函数
# class CustomLayer(nn.Module):
#     def __init__(self):
#         super(CustomLayer, self).__init__()

#     def forward(self, x):
#         return gelu(x)

# 使用自定义的GELU实现
class CustomLayer(nn.Module):
    def __init__(self):
        super(CustomLayer, self).__init__()

    def forward(self, x):
        return custom_gelu(x)

# 创建一个简单的网络模型,包含一个线性层和一个GELU层
model = nn.Sequential(
    nn.Linear(10, 20),  # 输入维度为10,输出维度为20
    CustomLayer(),
)

# 创建一个随机输入张量
input_data = torch.randn(10, 10)  # 假设我们有10个样本,每个样本有10个特征

# 将输入数据传递给模型进行前向传播
output = model(input_data)

# 输出结果
print(output.shape) # torch.Size([10, 20])

在这个例子中,我们首先导入了所需的PyTorch库,然后定义了一个自定义的GELU函数。虽然PyTorch提供了内置的torch.nn.functional.gelu函数,但我们同样展示了如何自定义实现GELU激活函数。

接下来,我们定义了一个简单的神经网络模型,模型包含一个线性层(nn.Linear)和一个应用了GELU激活函数的层(CustomLayer)。然后,我们创建了一个随机张量作为输入数据,并将其通过模型进行前向传播计算,最后输出了经过GELU激活函数处理后的结果张量的形状。

参考

[1] Dan Hendrycks, Kevin Gimpel. Gaussian Error Linear Units (GELUs). 2016

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入人工智能知识点专栏、Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

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

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

相关文章

LUA脚本判断是否为空

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Lua是一个小巧的脚…

linux 的Jdk1.8详细安装部署教程

一、环境准备 1.下载安装包 下载地址&#xff0c;这是1.8的你也可以选择安装别的版本的 https://www.oracle.com/java/technologies/downloads/#java8-windows 选择想要的系统和对应的位数&#xff0c;点击下载即可 2.上传安装包 选择自己要安装的路径&#xff0c;&#x…

分步搭建HF区块链网络

一.搭建网络规划 采用容器环境&#xff0c;搭建1个排序节点(Orderer)、2个对等节点(Peer)&#xff0c;另外用 一个fabric-cli容器。实训中的绝大部分命令是通过该容器执行的。 容器名称设置 二. 配置HF网络证书 首先docker ps 检查镜像&#xff0c;确保镜像为空 1.生成crypto…

TDesign:腾讯的企业级前端框架,对标elementUI和ant-design

elementUI和ant-design在前端开发者中有了很高知名度了&#xff0c;组件和资源十分丰富了。本文介绍腾讯的一款B端框架&#xff1a;TDesign TDesign 是腾讯公司内部推出的企业级设计体系&#xff0c;旨在为腾讯旗下的各种产品提供一致、高效、优质的设计支持。这个设计体系是由…

今天给大家推荐36套404页面模板

404页面是网站必备的一个页面&#xff0c;它承载着用户体验与SEO优化的重任。当用户访问不存在的页面时&#xff0c;服务器会返回404错误代码&#xff0c;并显示404页面。一个好的404页面可以帮助用户快速找到所需信息&#xff0c;并提升网站的用户体验。 以下是一些演示下载资…

【每日一题】2007. 从双倍数组中还原原数组-2024.4.18

题目&#xff1a; 2007. 从双倍数组中还原原数组 一个整数数组 original 可以转变成一个 双倍 数组 changed &#xff0c;转变方式为将 original 中每个元素 值乘以 2 加入数组中&#xff0c;然后将所有元素 随机打乱 。 给你一个数组 changed &#xff0c;如果 change 是 双…

【ES】springboot集成ES

1. 去Spring官方文档确认版本兼容性 这一版的文档里没有给出springboot的版本对应&#xff0c;但我在一个博主的文章里看到的es8.0以前的官方文档中就有给出来&#xff0c;所以还需要再去寻找spring framework和springboot的对应关系&#xff1f;&#xff1f;&#xff1f; 还…

Java项目 苍穹外卖 黑马程序员

目录 day1一、项目效果展示二、项目开发整体介绍三、项目介绍3.1 定位3.2 功能架构3.3 产品原型3.4 技术选型 四、开发环境搭建4.1 前端环境4.2 后端环境 五、导入接口文档六、Swagger6.1 介绍6.2 使用方式6.3 常用注解 day2一、新增员工二、员工分页查询三、启用禁用员工账号四…

深度解析:基于隐马尔科夫模型的语音转文字技术

引言 语音转文字(Speech-to-Text, STT)技术作为人机交互的重要一环,在智能助手、自动字幕生成、语音命令识别等领域发挥着越来越重要的作用。隐马尔科夫模型(Hidden Markov Model, HMM)作为一种统计模型,因其在处理时间序列数据方面的优势,被广泛应用于语音识别系统中。…

蓝牙耳机推荐高性价比2024,运用六大实战技巧,精准捕获超值机型

​无论是通勤路上、健身房里&#xff0c;还是在家中放松时&#xff0c;蓝牙耳机都是我们享受音乐、提升生活品质的好帮手。随着蓝牙耳机技术的快速发展&#xff0c;各种款式层出不穷&#xff0c;选择起来确实不易。作为一名耳机发烧友&#xff0c;我认为是时候向大家推荐几款质…

Springboot+Vue项目-基于Java+MySQL的房屋租赁系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

Hive 解决数据倾斜方法

数据倾斜问题&#xff0c; 通常是指参与计算的数据分布不均&#xff0c; 即某个 key 或者某些 key 的数据量远超其他 key&#xff0c; 导致在 shuffle 阶段&#xff0c; 大量相同 key 的数据被发往同一个 Reduce&#xff0c; 进而导致该 Reduce 所需的时间远超其他 Reduce&…

深入探索生产者拦截器的使用以及源码设计

文章目录 一、介绍二、使用1. ProducerInterceptor接口2. 实现之统计3. 实现之二次处理4. 小结 三、实现原理1. 初始化流程2. 生效流程 四、总结 一、介绍 在软件设计中&#xff0c;为了方便能够应对不同的场景&#xff0c;一般在一些容易有差异的环节会考虑允许用户自定义逻辑…

数据结构(图)

定义 G (V, E) 图 (点&#xff0c;边) 图&#xff0c;Graph 点&#xff0c;Vertex 边&#xff0c;edge 有空表&#xff0c;空树&#xff0c;但没有空图 图可以没有边|E| 0&#xff0c;但不能没有一个点 稠密图 &稀疏图 是边的多少决定的 &#xff08;见Ex…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月19日,星期五

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年4月19日 星期五 农历三月十一 谷雨 1、 景海鹏获颁特级航天功勋奖章&#xff0c;朱杨柱、桂海潮被授予英雄航天员称号。 2、 工信部&#xff1a;加快6G、万兆光网研发力度&#xff0c;加速推进大数据、AI等研发应用。 3、…

NAND数据恢复的方案

NAND Flash是固态硬盘&#xff08;SSD&#xff09;的核心数据存储。然而&#xff0c;NAND Flash因其物理特性和工作原理&#xff0c;存在一定的内在脆弱性&#xff0c;尤其是在数据存储的长期可靠性方面。 比特错误是指在读取NAND Flash时&#xff0c;原本存储的二进制位&#…

单输入多输出(SIMO)和多输入多输出(MIMO)模型是什么?

当谈到单输入多输出&#xff08;SIMO&#xff09;和多输入多输出&#xff08;MIMO&#xff09;模型时&#xff0c;通常指的是工程和信号处理领域中的系统和算法。我列举了一些我研究过的实例&#xff1a; 单输入多输出&#xff08;SIMO&#xff09;&#xff1a; 多标签分类器&a…

RK3588 开发板的魅力所在!

处理器是计算机硬件系统的核心部件&#xff0c;其性能的提升对于设备功能和用户体验起着重要的作用。处理器也是开发板的核心&#xff0c;它决定了其计算性能和图形性能。那么&#xff0c;RK3588处理器属于什么档次&#xff1f;其性能和市场定位如何&#xff1f;市场上有哪些用…

C++信奥教学PPT:CSP_J_算法之双指针算法(中)

1、⼀个⻓度为 n-1 的递增排序数组中的所有数字都是唯⼀的&#xff0c;并且每个数字都在范围0&#xff5e;n-1 之内。在范围 0&#xff5e; n-1 内的 n 个数字中有且只有⼀个数字不在该数组中&#xff0c;请找出这个数字。 2、循环最大值&#xff08;Maximum in the Cycle of 1…

TSINGSEE青犀算法中台消防通道堵塞/占压AI检测算法的介绍及应用

消防通道是建筑物内用于紧急疏散的通道&#xff0c;其畅通无阻对于保障人员生命安全至关重要。然而&#xff0c;由于各种原因&#xff0c;消防通道经常会被杂物、车辆等堵塞&#xff0c;一旦发生火灾等紧急情况&#xff0c;后果不堪设想。为了有效解决这一问题&#xff0c;我们…