当前位置: 首页 > news >正文

神经网络 - 激活函数(Swish函数、GELU函数)

一、Swish 函数

Swish 函数是一种较新的激活函数,由 Ramachandran 等人在 2017 年提出,其数学表达式通常为

其中 σ(x) 是 Sigmoid 函数(Logistic 函数)。

如何理解 Swish 函数

  1. 自门控特性

    • Swish 函数可以看作是对输入 x 进行“自门控”的机制:输入 x 乘以其经过 Sigmoid 函数的值,相当于让 x 自己决定通过的比例。
    • 当 x 较大时,σ(x) 趋近于1,此时 Swish 函数近似为 x;当 x 较小时,σ(x) 会使 x 被适当缩放,从而调整激活值。
  2. 平滑与非单调性

    • Swish 函数是一条平滑、连续且处处可微的曲线。与 ReLU 等激活函数相比,它没有突然的断点。
    • 同时,Swish 函数是非单调的,即在某些区间内函数值可能先增加后减少,这种非单调性有时能够让网络学习到更复杂的特征表示。
  3. 改进训练效果

    • 研究表明,在某些深度学习任务中,使用 Swish 作为激活函数可以比使用 ReLU 带来更好的训练性能和泛化效果。
    • 这种性能提升可能归因于其平滑和非单调的特性,使得梯度传播更加稳定,降低梯度消失或爆炸的风险(参考下面对应的解释)
  4. 扩展形式

    • Swish 函数有一个扩展形式: Swish(x)=x⋅σ(βx), 其中 β是一个可调参数,甚至可以作为可学习参数。不同的 β值会影响激活函数在负区间和正区间的斜率,从而让模型更灵活地适应不同的数据分布。
    • 其中 𝜎(⋅) 为 Logistic 函数,𝛽 为可学习的参数或一个固定超参数。𝜎(⋅) ∈ (0, 1) 可 以看作一种软性的门控机制。当 𝜎(𝛽𝑥) 接近于 1 时,门处于“开”状态,激活函数的 输出近似于 𝑥 本身;当 𝜎(𝛽𝑥) 接近于 0 时,门的状态为“关”,激活函数的输出近似 于0。

      Swish 函数的图示如下:

当𝛽 = 0时,Swish函数变成线性函数𝑥/2;

当𝛽 = 1时,Swish函数在𝑥 > 0 时近似线性,在𝑥 < 0时近似饱和,同时具有一定的非单调性;

当𝛽 → +∞时,𝜎(𝛽𝑥) 趋向于离散的 0-1 函数,Swish 函数近似为 ReLU 函数。

因此,Swish 函数可以看作线性函数和 ReLU 函数之间的非线性插值函数,其程度由参数 𝛽 控制。

举例说明

例子:比较 Swish 与 ReLU 在激活上的差异
假设某神经元计算出的线性组合 x 为 -2, -1, 0, 1, 2。

  • ReLU 的输出:

    • 当 x = -2 或 -1 时,输出0;
    • 当 x = 0 时,输出0;
    • 当 x = 1 时,输出1;
    • 当 x = 2 时,输出2。
  • Swish 的输出(假设 β=1):

    • 当 x = -2 时,σ(−2)≈0.12,输出 −2×0.12≈−0.24;
    • 当 x = -1 时,σ(−1)≈0.27,输出 −1×0.27≈−0.27;
    • 当 x = 0 时,σ(0)=0.5,输出 0×0.5=0;
    • 当 x = 1 时,σ(1)≈0.73,输出 1×0.73≈0.731;
    • 当 x = 2 时,σ(2)≈0.88,输出 2×0.88≈1.762 。

从上面可以看出,与 ReLU 相比,Swish 函数在负数区域并不是完全为0,而是保留了负值(尽管较小),而在正数区域输出接近于线性。这样的行为使得网络在训练过程中能保留更多信息,梯度传播更平滑。

Swish 函数将输入 x 与 Sigmoid 函数 σ(x) 的输出相乘,实现了一个平滑且非单调的激活函数。这种设计不仅允许网络在负区域保留部分信息,还提供了平滑的梯度,有助于稳定训练过程并提高模型的泛化能力。其扩展形式中引入的参数 β 进一步增强了模型适应数据的灵活性。

梯度消失或爆炸的风险

梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)是深度神经网络训练中常见的两大问题,主要与反向传播过程中的梯度计算方式(链式法则)有关。它们会导致模型无法有效学习或训练不稳定。以下是它们的定义、原因及影响:

1. 梯度消失(Vanishing Gradient)

  • 定义:在反向传播过程中,梯度(损失函数对参数的导数)逐层传递时逐渐减小,甚至趋近于零,导致浅层网络的权重几乎无法更新。

  • 原因

    • 链式法则的连乘效应:梯度通过反向传播逐层计算时,每一层的梯度都会被前一层的梯度相乘。如果每层的梯度值小于1,多次连乘后会指数级趋近于零。

    • 激活函数的选择:例如 Sigmoid 或 Tanh 函数在输入较大时导数接近零(饱和区),导致梯度消失。

  • 后果

    • 浅层网络参数几乎不更新,模型无法学习底层特征。

    • 模型收敛缓慢或完全停止训练,性能显著下降。

2. 梯度爆炸(Exploding Gradient)

  • 定义:梯度在反向传播过程中逐层增大,最终导致权重更新幅度过大,甚至数值溢出(如 NaN)。

  • 原因

    • 链式法则的连乘效应:如果每层的梯度值大于1,多次连乘后会指数级增长。

    • 权重初始化不当:例如初始权重过大,或网络层数过深。

  • 后果

    • 参数更新不稳定,损失剧烈震荡甚至发散。

    • 权重值变为 NaN,训练完全失败。

3. 为什么梯度问题危害大?

  • 深层网络更脆弱:网络层数越多,梯度连乘的效应越明显,问题越严重。

  • 影响模型表达能力:梯度消失导致浅层无法学习,深层网络退化为浅层网络。

  • 训练效率低下:需要更复杂的调参(如学习率调整)或更长的训练时间。

4. 常见解决方案

  1. 激活函数改进

    • 使用 ReLU、Leaky ReLU 等非饱和激活函数,避免梯度消失。

  2. 权重初始化

    • 使用 Xavier初始化 或 He初始化,根据激活函数调整初始权重的分布。

  3. 归一化技术

    • 批量归一化(Batch Normalization):缓解梯度对参数尺度的依赖。

  4. 残差结构(ResNet)

    • 通过跳跃连接(Skip Connection)绕过梯度消失的层,直接传递梯度。

  5. 梯度裁剪(Gradient Clipping)

    • 对过大的梯度设定阈值,防止梯度爆炸(常用于RNN)。

  6. 优化算法

    • 使用 Adam、RMSProp 等自适应优化器,动态调整学习率。

  7. 网络结构设计

    • 在RNN中使用 LSTM 或 GRU,通过门控机制缓解梯度问题。

5.示例说明

  • 梯度消失:一个10层的全连接网络使用 Sigmoid 激活函数,反向传播时梯度可能在第5层之后趋近于零,导致前5层无法更新。

  • 梯度爆炸:一个未做梯度裁剪的RNN模型,在长序列训练时梯度可能迅速增大,导致参数溢出。

二、GELU 函数

GELU(Gaussian Error Linear Unit,高斯误差线性单元)也是一种通过门控机制来调整其输出值的激活函数,和 Swish 函数比较类似。

GELU(Gaussian Error Linear Unit,正态误差线性单元)是一种激活函数,它将输入值 x 与 x 取正态累积分布函数(CDF)的值相乘,从而实现非线性变换。其数学表达式通常写为:

其中,Φ(x) 是标准正态分布的累积分布函数,表示一个标准正态随机变量小于 x 的概率。

𝜇, 𝜎 为超参数,一般设 𝜇 = 0, 𝜎 = 1 即可。由于高斯分布的累积分布函数为 S 型函数,因此 GELU 函数可 以用 Tanh 函数或 Logistic 函数来近似,

为了便于计算,实际应用中常使用以下近似公式:

或                         GELU(𝑥) ≈ 𝑥𝜎(1.702𝑥).

当使用 Logistic 函数来近似时,GELU 相当于一种特殊的 Swish 函数。

(参考下面第三部分,概率密度函数和累积分布函数的概念)

如何理解 GELU 函数

  1. 概率视角

    • GELU 函数的核心思想是“概率性激活”:将输入 x 与其“被激活”的概率(由正态累积分布 Φ(x) 表示)相乘。这意味着,一个神经元的激活不仅依赖于输入的大小,还依赖于该输入在统计意义上有多大可能被视为“正向贡献”。
  2. 平滑性和非线性

    • 与 ReLU 相比,GELU 是一种平滑且处处可微的函数,没有硬性截断,从而有助于梯度更平稳地传递,降低梯度消失的风险。
    • 同时,GELU 是非单调的(在某些区间内可能出现非单调性),这种特性使得网络可以捕捉更复杂的模式。
  3. 实际应用中的优势

    • 在许多自然语言处理和计算机视觉任务中,GELU 函数表现出比 ReLU 更好的性能。例如,BERT 和其他 Transformer 模型中就使用了 GELU 作为激活函数,因为它能更细腻地调节信息流。

举例说明

例子:Transformer 中的 GELU
在 Transformer 模型中,隐藏层通常使用 GELU 激活函数来处理输入。假设某层神经元计算得到一个值 x:

  • 当 x 较大时,Φ(x) 接近于1,因此 GELU 输出近似于 x;
  • 当 x 较小或为负时,Φ(x) 会相应较小,从而使输出趋于较小的值或接近于0。

这种设计允许模型在处理不同尺度的输入时,能根据统计概率自动调节激活程度,从而捕捉更多细微特征,提高模型的表现。

GELU 函数通过将输入与正态累积分布的概率相乘,实现了一种基于概率视角的平滑激活机制。它既能保留输入的线性特性,又能通过平滑非线性变换提供更稳定的梯度传递和更强的表达能力,这使得它在现代深度学习模型中(如 Transformer)得到广泛应用。

三、附加:概率密度函数、累积分布函数的区别和联系

概率密度函数(PDF)累积分布函数(CDF)是描述随机变量分布的重要工具,它们既有区别又密切相关:

区别

  1. 定义不同

    • 概率密度函数(PDF)
      适用于连续随机变量。它描述了随机变量在某个取值附近出现的“相对可能性”。注意,单个点的 PDF 值本身不是概率,必须通过积分计算某个区间内的概率。例如,对于连续随机变量 X,其 PDF 表示为 f(x),某个区间 [a, b] 内的概率为

    • 累积分布函数(CDF)
      表示随机变量小于或等于某个特定值的概率。对于随机变量 X,其 CDF 表示为 F(x),定义为

      CDF 对于连续和离散随机变量都适用,且其取值范围在 [0, 1]。

  2. 数值与物理意义

    • PDF
      描述的是相对密度,给出的是“密度”而不是直接的概率值。比如,f(x) 的值可能大于1,但只要积分结果在某个区间内小于1,就表示该区间内的概率。

    • CDF
      直接反映概率。它是一个从 −∞到 +∞单调非减的函数,且满足 F(−∞)=0 和 F(+∞)=1。

联系

  1. 数学关系
    对于连续随机变量,CDF 和 PDF 之间存在密切联系:

    • 积分关系
      CDF 是 PDF 的积分,即
    • 微分关系
      如果 CDF F(x) 在 x 处可导,那么其导数就是 PDF:
  2. 用途上的互补

    • 使用 PDF,我们可以分析随机变量在某个区间的“密度”或“强度”,并通过积分得到区间概率。
    • 使用 CDF,我们可以直接了解随机变量在某个值以下的累积概率,这在统计推断和概率计算中非常直接和方便。

举例说明

例子:标准正态分布

从这个例子可以看出,CDF 给出了累积概率,而 PDF 则描述了概率“分布的浓度”。

总结

  • 概率密度函数(PDF):描述连续随机变量在各个点附近的相对概率密度,需要通过积分才能得到具体区间的概率。
  • 累积分布函数(CDF):直接表示随机变量小于或等于某个值的累计概率,具有直观的概率意义,并且可以通过积分(或求导)与 PDF 互相转换。

理解这两者的区别和联系对于掌握概率分布、进行概率计算以及进行统计推断非常重要。

相关文章:

神经网络 - 激活函数(Swish函数、GELU函数)

一、Swish 函数 Swish 函数是一种较新的激活函数&#xff0c;由 Ramachandran 等人在 2017 年提出&#xff0c;其数学表达式通常为 其中 σ(x) 是 Sigmoid 函数&#xff08;Logistic 函数&#xff09;。 如何理解 Swish 函数 自门控特性 Swish 函数可以看作是对输入 x 进行“…...

关于后端使用Boolean或boolean时前端收到的参数的区别

当后端使用的是Boolean时&#xff0c;调用的方法是setIsLoginUser&#xff0c;前端收到的参数的参数名是isLoginUser 而当后端使用的是boolean时&#xff0c;调用的方法是setLoginUser&#xff0c;前端收到的参数的参数名是loginUser 封装类和基本数据类型在使用时需要注意这…...

笔记:代码随想录算法训练营第35天: 01背包问题 二维、 01背包问题 一维 、LeetCode416. 分割等和子集

学习资料&#xff1a;代码随想录 这一块儿学得挺痛苦 注&#xff1a;文中含大模型生成内容 动态规划&#xff1a;01背包理论基础 卡码网第46题 思路&#xff1a;五部曲 定义&#xff1a;dp[i][j]为第i个物品背包容量为j&#xff0c;能装下的最大价值 递推公式&#xff1…...

安装 Windows Docker Desktop - WSL问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Desktop - WSL update failed An error o…...

Spring MVC 返回数据

目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么&#xff1f;有什么关系&#xff1f; Servlet 是 java 官方定义的 web 开发的标准规范&#xff1b;Tomcat 是…...

QT-信号与槽

1.在注册登录的练习里面&#xff0c;追加一个QListWidget项目列表 要求:点击注册之后&#xff0c;将账号显示到列表窗口小部件上面去 以及&#xff0c;在列表窗口小部件中双击某个账号的时候&#xff0c;将该账号删除 头文件 #ifndef WIDGET_H #define WIDGET_H #include <…...

版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点

版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点 引言正文定义坐标点的类绘图显示代码直接连接两个坐标点引言 由于人工智能的加速普及,每次手动绘制版图都会觉得特别繁琐,作者本人在想可否搞一个自动化连接器件端口的算法,后期可以根据一些设定的限制进行避…...

迷你世界脚本方块接口:Block

方块接口&#xff1a;Block 彼得兔 更新时间: 2024-08-27 11:04:56 具体函数名及描述如下&#xff1a; 序号 函数名 函数描述 1 isSolidBlock(...) 是否是固体方块 2 isLiquidBlock(...) 是否是液体方块 3 isAirBlock(...) 是否是气体方块 4 getBl…...

打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第一天)

打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线&#xff08;第一天&#xff09; 前言最后 前言 说真的&#xff0c;用Unity工作这几年&#xff0c;经历的项目大大小小&#xff0c;对于场景的渲染算是有一定的经验&#xff0c;但涉及到HDRP高清渲染管线的了解&#xff0…...

Docker项目部署-部署前端

nginx.conf文件内容如下。 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 18080;# 指定前端项目所在的位置location / {root /usr/…...

【向量数据库Weaviate】与ChromaDB的差异、优劣

以下是 Weaviate 和 ChromaDB 的详细对比&#xff0c;涵盖设计目标、核心功能、性能、适用场景及优劣势分析&#xff1a; 1. 核心定位与设计目标 维度WeaviateChromaDB类型向量数据库 图数据库&#xff08;支持混合搜索&#xff09;轻量级纯向量数据库&#xff08;专注嵌入存…...

2024华为OD机试真题-热点网站统计(C++)-E卷-100分

2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 用例2 考点 题目解析 代码 c++ 题目描述 企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页 URL top N。 请设计一个算法,可以高效动态统计 …...

【大模型】大模型分类

大模型&#xff08;Large Models&#xff09;通常指参数量巨大、计算能力强大的机器学习模型&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;等领域表现突出。以下是大模型的常见分类方式&#xff1a; 1. 按应用领域分类 …...

Redis 的几个热点知识

前言 Redis 是一款内存级的数据库&#xff0c;凭借其卓越的性能&#xff0c;几乎成为每位开发者的标配工具。 虽然 Redis 包含大量需要掌握的知识&#xff0c;但其中的热点知识并不多。今天&#xff0c;『知行』就和大家分享一些 Redis 中的热点知识。 Redis 数据结构 Redis…...

【新手入门】SQL注入之getshell(木马)

木马介绍 木马其实就是一段程序&#xff0c;这个程序运行到目标主机上时&#xff0c;主要可以对目标进行远程控制、盗取信息等功能&#xff0c;一般不会破坏目标主机&#xff0c;当然&#xff0c;这也看黑客是否想要搞破坏。 按照功能分类:远控型、破坏型、流氓软件型、盗取信…...

【pytest框架源码分析二】pluggy源码分析之add_hookspecs和register

这里我们看一下_manager.py里的类和方法&#xff0c;最主要的是PluginManager类&#xff0c;类的初始化函数如下&#xff1a; class PluginManager:"""Core class which manages registration of plugin objects and 1:N hookcalling.You can register new hoo…...

四、数据存储

在爬虫项目中&#xff0c;我们需要将目标站点数据进行持久化保存&#xff0c;一般数据保存的方式有两种&#xff1a; 文件保存数据库保存 在数据保存的过程中需要对数据完成去重操作&#xff0c;所有需要使用 redis 中的 set 数据类型完成去重。 1.CSV文件存储 1.1 什么是c…...

【原创】Ollama Test API For Linux/MacOS/Unix

安装Json解析工具 Linux/Unix sudo apt-get install jq -yMacOS brew install jq -y设置环境变量 export IP"192.168.250.229" export PORT"8080" export MODEL"deepseek-r1:7b"检查Ollama版本 curl http://"$IP":"$PORT&qu…...

LeetCode-Hot100-005盛最多水的容器

不懂的可以在评论区问我。 代码 双指针&#xff0c;开始的时候一个在最左边&#xff0c;一个在最右边。每次移动矮的那头&#xff0c;因为这是矮柱子作为容器能装的水的极限了。 class Solution { public:int maxArea(vector<int>& height) {int left 0; int rig…...

电源测试系统有哪些可以利用AI工具的科技??

AI技术的发展对电源模块测试系统的影响是深远的&#xff0c;不仅协助系统提升了测试效率和精度&#xff0c;还推动了测试方法的创新和智能化。那么在电源测试系统中哪些模块可以利用AI工具实现自动化测试? 1. 自动化测试与效率提升 智能测试流程优化 AI算法可以自动优化测试…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...