深度学习中激活函数的演变与应用:一个综述

news2025/1/16 14:04:24

摘要

本文全面回顾了深度学习中激活函数的发展历程,从早期的Sigmoid和Tanh函数,到广泛应用的ReLU系列,再到近期提出的Swish、Mish和GeLU等新型激活函数。深入分析了各类激活函数的数学表达、特点优势、局限性以及在典型模型中的应用情况。通过系统的对比分析,本文探讨了激活函数的设计原则、性能评估标准以及未来可能的发展方向,为深度学习模型的优化和设计提供理论指导。

1. 引言

激活函数是神经网络中的关键组件,它在神经元的输出端引入非线性特性,使得神经网络能够学习和表示复杂的非线性映射。没有激活函数,无论多么深的神经网络本质上都只能表示线性变换,这大大限制了网络的表达能力。
随着深度学习的快速发展,激活函数的设计和选择已成为影响模型性能的重要因素。不同的激活函数具有不同的特性,如梯度流动性、计算复杂度、非线性程度等,这些特性直接影响着神经网络的训练效率、收敛速度和最终性能。
本文旨在全面回顾激活函数的演变历程,深入分析各类激活函数的特性,并探讨其在现代深度学习模型中的应用。我们将从以下几个方面展开讨论:

  1. 经典激活函数:包括Sigmoid、Tanh等早期常用的激活函数。
  2. ReLU及其变体:包括ReLU、Leaky ReLU、PReLU、ELU等。
  3. 新型激活函数:如Swish、Mish、GeLU等近期提出的函数。
  4. 特殊用途的激活函数:如Softmax、Maxout等。
  5. 激活函数的比较与选择:讨论不同场景下激活函数的选择策略。
  6. 未来展望:探讨激活函数研究的可能发展方向。

通过这一系统的回顾和分析,希望能为研究者和实践者提供一个全面的参考,帮助他们在深度学习模型设计中更好地选择和使用激活函数。

2. 经典激活函数

2.1 Sigmoid函数

Sigmoid函数是最早被广泛使用的激活函数之一,其数学表达式为:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
image.png

特点与优点:
  1. 输出范围有界:Sigmoid函数的输出范围在(0, 1)之间,这使其特别适合于处理概率问题。
  2. 平滑可导:函数在整个定义域内都是平滑且可导的,这有利于梯度下降算法的应用。
  3. 解释性强:输出可以被解释为概率,特别适用于二分类问题的输出层。
缺点与限制:
  1. 梯度消失问题:当输入值很大或很小时,梯度接近于零,这会导致深层网络中的梯度消失问题。
  2. 输出非零中心:Sigmoid的输出均为正值,这可能会导致后一层神经元的输入总是正的,影响模型的收敛速度。
  3. 计算复杂度:涉及指数运算,计算复杂度相对较高。
适用场景:
  1. 早期的浅层神经网络。
  2. 二分类问题的输出层。
  3. 需要将输出限制在(0, 1)范围内的场景。
与其他函数的对比:

相比于后来出现的ReLU等函数,Sigmoid在深度网络中的应用受到了很大限制,主要是因为其梯度消失问题。然而,在某些特定任务(如二分类)中,Sigmoid仍然是一个有效的选择。

2.2 Tanh函数

Tanh(双曲正切)函数可视为Sigmoid函数的改进版本,其数学表达式为:
tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex
image.png

特点与优点:
  1. 零中心输出:Tanh函数的输出范围在(-1, 1)之间,解决了Sigmoid的非零中心问题。
  2. 梯度更强:在输入接近零的区域,Tanh函数的梯度比Sigmoid函数更大,有助于加快学习速度。
  3. 平滑可导:与Sigmoid类似,Tanh也是平滑且可导的。
缺点与限制:
  1. 梯度消失问题:虽然比Sigmoid有所改善,但Tanh在输入值较大或较小时仍然存在梯度消失的问题。
  2. 计算复杂度:与Sigmoid类似,Tanh也涉及指数运算,计算复杂度较高。
适用场景:
  1. 在需要零中心化输出的场景中优于Sigmoid。
  2. 在循环神经网络(RNN)和长短时记忆网络(LSTM)中经常使用。
  3. 在一些归一化输出很重要的场景中使用。
改进与对比:

Tanh函数可以看作是Sigmoid函数的改进版本,主要改进在于输出的零中心化。这一特性使得Tanh在许多情况下比Sigmoid表现更好,特别是在深度网络中。然而,与后来出现的ReLU等函数相比,Tanh仍然存在梯度消失的问题,在非常深的网络中可能会影响模型的性能。
Sigmoid和Tanh这两个经典的激活函数在深度学习早期发挥了重要作用,它们的特性和局限性也推动了后续激活函数的发展。虽然在很多场景下已经被更新的激活函数所替代,但在特定的任务和网络结构中,它们仍然有其独特的应用价值。

3. ReLU及其变体

3.1 ReLU (Rectified Linear Unit)

ReLU函数的提出是激活函数发展的一个重要里程碑。其数学表达式简单:
ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
image.png

特点与优点:
  1. 计算简单:ReLU的计算复杂度远低于Sigmoid和Tanh,有利于加速网络训练。
  2. 缓解梯度消失:对于正输入,ReLU的梯度恒为1,有效缓解了深层网络中的梯度消失问题。
  3. 稀疏激活:ReLU可以使一部分神经元的输出为0,导致网络的稀疏表达,这在某些任务中是有益的。
  4. 生物学解释:ReLU的单侧抑制特性与生物神经元的行为相似。
缺点与限制:
  1. "死亡ReLU"问题:当输入为负时,梯度为零,可能导致神经元永久失活。
  2. 非零中心输出:ReLU的输出均为非负值,这可能会影响下一层的学习过程。
适用场景:
  1. 深度卷积神经网络(如ResNet, VGG)中广泛使用。
  2. 适用于大多数前馈神经网络。
与其他函数的对比:

相比Sigmoid和Tanh,ReLU在深度网络中表现出显著优势,主要体现在训练速度和缓解梯度消失方面。然而,"死亡ReLU"问题促使研究者们提出了多种改进版本。

3.2 Leaky ReLU

为了解决ReLU的"死亡"问题,Leaky ReLU被提出:
Leaky ReLU ( x ) = { x , if  x > 0 α x , if  x ≤ 0 \text{Leaky ReLU}(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha x, & \text{if } x \leq 0 \end{cases} Leaky ReLU(x)={ x,αx,if x>0if x0
其中, α \alpha α 是一个小的正常数,通常取0.01。
image.png

特点与优点:
  1. 缓解"死亡ReLU"问题:在输入为负时仍然保留一个小的梯度,避免神经元完全失活。
  2. 保留ReLU的优点:在正半轴保持线性,计算简单,有助于缓解梯度消失。
缺点与限制:
  1. 引入超参数 α \alpha α值的选择需要调优,增加了模型复杂度。
  2. 非零中心输出:与ReLU类似,输出仍然不是零中心的。
适用场景:
  1. 在ReLU表现不佳的场景中作为替代选择。
  2. 在需要保留一些负值信息的任务中使用。

3.3 PReLU (Parametric ReLU)

PReLU是Leaky ReLU的一个变体,其中负半轴的斜率是可学习的参数:
PReLU ( x ) = { x , if  x > 0 α x , if  x ≤ 0 \text{PReLU}(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha x, & \text{if } x \leq 0 \end{cases} PReLU(x)={ x,αx,if x>0if x0
这里的 α \alpha α 是通过反向传播学习得到的参数。
image.png

特点与优点:
  1. 自适应学习:可以根据数据自动学习最适合的负半轴斜率。
  2. 性能潜力:在某些任务中,PReLU可以获得比ReLU和Leaky ReLU更好的性能。
缺点与限制:
  1. 增加模型复杂度:引入额外的可学习参数,增加了模型的复杂度。
  2. 可能过拟合:在某些情况下,可能导致过拟合,特别是在小数据集上。
适用场景:
  1. 大规模数据集上的深度学习任务。
  2. 需要自适应激活函数的场景。

3.4 ELU (Exponential Linear Unit)

ELU试图结合ReLU的优点和负值输入的处理,其数学表达式为:
ELU ( x ) = { x , if  x > 0 α ( e x − 1 ) , if  x ≤ 0 \text{ELU}(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha(e^x - 1), & \text{if } x \leq 0 \end{cases} ELU(x)=

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

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

相关文章

从 Icelake 到 Iceberg Rust

本文作者丁皓是Databend 研发工程师,也是开源项目 OpenDAL 作者,主要研究领域包括存储、自动化与开源。 太长不看 Icelake 已经停止更新,请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目,所有 Icelake 的贡献者都已转…

Android 自动更新时间的数字时钟 TextClock

TextClock 继承 TextView &#xff0c;使用方法和 TextView 一样。 它专门用于显示数字时钟&#xff0c;可以自定义显示格式。 只要在布局文件里添加&#xff0c;它会自动更新时间&#xff0c;不需要添加刷新逻辑。 布局文件&#xff0c; <?xml version"1.0"…

计算机网络施工方案(非常详细)零基础入门到精通,收藏这一篇就够了

虽然弱电人平时接触网络工程项目比较多&#xff0c;但要系统的实施网络工程项目从施工、设备安装、验收这一套流程&#xff0c;很多朋友却感觉无从下手&#xff0c;计算机网络系统主要是一些网络设备&#xff0c;这样的系统施工方案如何写呢&#xff1f;在我们弱电vip技术中也经…

【Linux】任务管理

这个任务管理&#xff08;job control&#xff09;是用在bash环境下的&#xff0c;也就是说&#xff1a;【当我们登录系统获取bashshell之后&#xff0c;在单一终端下同时执行多个任务的操作管理】。 举例来说&#xff0c;我们在登录bash后&#xff0c;可以一边复制文件、一边查…

电脑硬盘里的文件能保存多久?电脑硬盘文件突然没了怎么办

在数字化时代&#xff0c;电脑硬盘作为我们存储和访问数据的重要设备&#xff0c;承载着无数珍贵的回忆、工作成果和创意灵感。然而&#xff0c;硬盘里的文件能保存多久&#xff1f;当这些文件突然消失时&#xff0c;我们又该如何应对&#xff1f;本文将深入探讨这两个问题&…

【JavaScript 报错】未捕获的模块错误:Uncaught ModuleError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 模块路径错误2. 模块不存在3. 模块命名错误 二、解决方案1. 检查模块路径2. 确保模块存在3. 检查模块名称 三、实例讲解四、总结 在JavaScript模块系统中&#xff0c;未捕获的模块错误&#xff08;Uncau…

前端面试题55(JavaScript前缀中缀后缀表达式)

在编程中&#xff0c;前缀、中缀和后缀表达式是用于描述算术表达式的不同表示方法&#xff0c;主要用于解析和计算数学公式。这些概念在算法设计&#xff08;尤其是表达式树和栈的应用&#xff09;中非常重要。下面我将分别解释这三种表达式&#xff0c;并用JavaScript代码示例…

html网页设计关于家乡-泰州

代码地址&#xff1a;https://pan.quark.cn/s/0f8659c712d0

逻辑运算及其基本概念,定理,算法,规律,卡诺图

逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图 文章目录 逻辑运算及其基本概念&#xff0c;定理&#xff0c;算法&#xff0c;规律&#xff0c;卡诺图开胃小菜运算1、与运算2、或运算3、非运算4、与非&#xff08;都1时为0&#xf…

解决GET请求中文乱码问题

解决GET请求中文乱码问题 1、乱码的根本原因2、解决方法方法一&#xff1a;修改Tomcat配置&#xff08;推荐&#xff09;方法二&#xff1a;使用URLEncoder和URLDecoder&#xff08;不推荐用于GET请求乱码&#xff09;方法三&#xff1a;String类编解码&#xff08;不直接解决乱…

Qt中实现让静态图片动起来,创建动画效果

在现代应用程序开发中&#xff0c;动画效果是提升用户体验的重要元素之一。Qt作为一个强大的跨平台应用程序框架&#xff0c;提供了丰富的工具和库来创建各种动画效果。本文将介绍如何在Qt中使用静态图片创建动画效果。 实现方法一 使用QTimer和QPixmap 1.准备图片资源&#…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表&#xff08;linear list&#xff09;是n…

【Python】Python Flask 和 gRPC 简单项目

Python Flask 和 gRPC 示例项目 本文将介绍如何在 Python 中使用 Flask 和 gRPC 创建一个简单的示例应用程序&#xff0c;并使用 requests 库进行测试。 环境设置 首先&#xff0c;确保您已经安装了 Python。然后&#xff0c;创建一个虚拟环境以管理您的依赖项。 python -m…

想要爬取第一条网页的数据但是失败了?如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

使用Python的Turtle模块绘制玫瑰

在本文中&#xff0c;我们将通过使用Python中的turtle模块来绘制一个精美的花朵图案&#xff0c;包括花蕊、花瓣和叶子。turtle模块是Python标准库的一部分&#xff0c;用于创建图形和动画&#xff0c;非常适合初学者学习编程基础和图形绘制。 初始设置 import turtle# 设置初…

简介Docker以及K8s

什么是Docker Docker 属于 Linux 容器的一种封装&#xff0c;提供简单易用的容器使用接口以及操作系统级别的虚拟化。 更为直白的叙述就是&#xff0c;Docker可以将程序和环境&#xff08;依赖库配置操作系统&#xff09;打包并运行的工具软件。 基础镜像 总所周知&#xf…

搜维尔科技:《Patchwork 3D 2024》现已推出,改善用户体验的同时添加了最受欢迎的功能

《Patchwork 3D 2024》现已推出!发现我们在改善用户体验的同时添加的最受欢迎的功能。 令人兴奋的消息值得分享&#xff01;Patchwork 3D 已经升级&#xff0c;并带来一些令人惊叹的新功能。 材料 镜面材质现在支持漫反射、镜面反射和凹凸特性&#xff0c;可实现精细调整的光…

防火墙安全策略练习

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置交换机&#xff0c;划分接口的vlan&#xff0c;配置ISP 2.配置防火墙 3.接下来在WEB界面进行所有安全策略操作 配置接口 创建安全区域&#xff1a; 创建地址&#xff1a; 时间段&#xff1a; 安全策略部分&#xff…

Java 常用的参数校验,简化参数校验,赶紧学起来!!

Java 常用的参数校验&#xff0c;简化参数校验&#xff0c;赶紧学起来&#xff01;&#xff01;Java中的参数校验注解主要用于简化数据验证的过程&#xff0c;它们允许开发者以声明式的方式指定参数的验证规则&#xff0c;而无需在业https://mp.weixin.qq.com/s?__bizMzkzMTY0…

LLM-向量数据库中的索引算法总结

文章目录 前言向量数据库介绍索引方法倒排索引KNN 搜索近似 KNN 搜索Product Quantization(PQ)NSW 算法搜索HNSW 前言 向量数据库是当今大模型知识库检索落地实践的核心组件&#xff0c;下图是构建知识库检索的架构图&#xff1a; 首先会将相关文档数据向量化嵌入到向量化数据…