神经网络 - 激活函数(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 互相转换。

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

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

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

相关文章

学习笔记08——ConcurrentHashMap实现原理及源码解析

1. 概述 为什么需要ConcurrentHashMap&#xff1f; 解决HashMap线程不安全问题&#xff1a;多线程put可能导致死循环&#xff08;JDK7&#xff09;、数据覆盖&#xff08;JDK8&#xff09; 优化HashTable性能&#xff1a;通过细粒度锁替代全局锁&#xff0c;提高并发度 对比…

算法之排序算法

排序算法 ♥常见排序算法知识体系详解♥ | Java 全栈知识体系 算法 - 排序 | CS-Notes 面试笔记 十大经典排序算法总结 | JavaGuide

C#释放内存空间的方法

目录 前言释放 C# 对象内存的六种方法1、手动释放内存空间2、使用 Using 语句3、使用 垃圾回收器4、GC.Collect() 方法5、GC.WaitForPendingFinalizers() 方法6、WeakReference 类 注意 前言 当不再需要对象时释放内存空间对于防止内存泄漏和提高应用程序性能至关重要。C# 提供…

pg pg_prewarm用法

按照插件 > create extension pg_prewarm ;缓存表 > test# select pg_prewarm(weather,buffer ) ; pg_prewarm > ------------ > 1缓存表部分内容 test# select pg_prewarm(weather,buffer,main,0,0) ;pg_prewarm ------------1 (1 row)表大小只有0号…

C语言总结目录

一、数据类型【文章链接】 二、标识符【文章链接】​​​​​​​ #编译GCC 三、程序结构语句 四、输入输出函数 五、数组 六、指针 七、数组指针&&指针数组 八、排序算法 九、结构体 十、链表 十一、宏定义 十二、文件读写 十三、静态库&&动态库…

Lua | 每日一练 (5)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (5)题目参考答案浅拷贝深拷贝使用场景…

HOW - 在Windows浏览器中模拟MacOS的滚动条

目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、Antd table中的滚动条场景三、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果&#xff08;细窄、圆角、隐藏默认轨道&#xff09;。 可以使用以下几种方案&#xff1a; 一…

服务器租用:静态BGP和动态BGP分别指什么?

今天小编主要来带大家一起了解一下静态BGP和动态BGP分别是指什么&#xff1f; BGP主要是用在不同网络之间进行交换路由信息的协议&#xff0c;通常是用在互联网当中&#xff0c;而静态BGP和动态BGP是两种不同的方法来配置BGP路由&#xff0c;静态BGP路由是由手动配置的&#xf…

版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点

版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点 引言正文引言 必读文章 ------ 版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点。 此处,我们对给定点的坐标进行一下限制,因为是只添加一个点,因…

JavaEE--计算机是如何工作的

一、一台计算机的组成部分 1.CPU&#xff08;中央处理器&#xff09; 2.主板&#xff08;一个大插座&#xff09; 3.内存&#xff08;存储数据的主要模板&#xff09; 4.硬盘&#xff08;存储数据的主要模板&#xff09; 内存和硬盘对比&#xff1a; 内存硬盘读写速度快慢存…

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

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

React 之 Redux 第二十八节 学习目标与规划大纲及概要讲述

接下来 开始Redux 全面详细的文档输出&#xff0c;主要基于一下几个方面&#xff0c;欢迎大家补充指正 一、Redux 基础概念 为什么需要 Redux&#xff1f; 前端状态管理的挑战&#xff08;组件间通信、状态共享&#xff09; Redux 解决的问题&#xff1a;集中式、可预测的状态…

通过多线程同时获取H264和H265码流

目录 一.RV1126 VI采集摄像头数据并同时编码H264、H265的大概流程​编辑​编辑 1.1初始化VI模块&#xff1a; 1.2H264、H265的VENC模块初始化&#xff1a; 1.3VI分别绑定H264的VENC层和H265的VENC层&#xff1a; ​​​​​​​1.4开启H264线程采集H264的VENC数据&#xff…

unity lua属性绑定刷新

我们现在有一个 角色属性类叫heroModel,内容如下,当heroModel中的等级发生变化的时候&#xff0c;我们需要刷新界面显示等级信息&#xff0c;通常我们是在收到等级升级成功的协议的时候&#xff0c;发送一个事件&#xff0c;UI界面接受到这个事件的时候&#xff0c;刷新一下等级…

vscode+vue前端开发环境配置

目录 一、安装Vue二、使用vue新建项目 一、安装Vue 在node.js安装好之后&#xff0c; npm config set registry https://registry.npmmirror.com# 安装vue相关工具&#xff0c;webpack用来项目构建、打包、资源整合等。 npm install webpack -g# 安装vue-cli脚手架 npm insta…

《白帽子讲 Web 安全》之文件操作安全

目录 引言 &#xff08;一&#xff09;文件上传与下载漏洞概述 1.文件上传的常见安全隐患 1.1前端校验的脆弱性与服务端脚本执行危机在文件上传流程中&#xff0c;部分开发者可能会在前端使用 JavaScript 代码对文件后缀名进行简单校验&#xff0c;试图以此阻止非法文件上传…

vector习题

完数和盈数 题目 完数VS盈数_牛客题霸_牛客网 一个数如果恰好等于它的各因子(该数本身除外)之和&#xff0c;如&#xff1a;6321。则称其为“完数”&#xff1b;若因子之和大于该数&#xff0c;则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述&#xff…

cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼

一、基础使用&#xff1a;Cesium.js基础使用&#xff08;vue&#xff09;-CSDN博客 1、基础路径 为 Cesium 库设置一个全局变量 CESIUM_BASE_URL&#xff0c;用于指定 Cesium 的资源文件&#xff08;如 WebGL shaders、纹理、字体等&#xff09;的 示例场景&#xff1a;假设你…

安全运营的“黄金4小时“:如何突破告警疲劳困局

在当今复杂多变的网络安全环境中&#xff0c;安全团队面临着前所未有的挑战。尤其是面对高级持续性威胁&#xff08;APT&#xff09;时&#xff0c;最初的“黄金4小时”成为决定成败的关键窗口。在这段时间内&#xff0c;快速而准确地响应可以极大地降低损失&#xff0c;然而&a…

HTML AI 编程助手

HTML AI 编程助手 引言 随着人工智能技术的飞速发展&#xff0c;编程领域也迎来了新的变革。HTML&#xff0c;作为网页制作的基础语言&#xff0c;与AI技术的结合&#xff0c;为开发者带来了前所未有的便利。本文将探讨HTML AI编程助手的功能、应用场景以及如何利用它提高编程…