【机器学习】激活函数:神经网络的灵魂


鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

    • 激活函数:神经网络的灵魂
      • 什么是激活函数?
      • 常见激活函数类型
        • 1. Sigmoid函数
        • 2. Tanh函数
        • 3. ReLU函数
        • 4. Leaky ReLU函数
        • 5. ELU函数
        • 6. Swish函数
        • 7. GELU函数
      • 激活函数的选择策略
      • 总结

激活函数:神经网络的灵魂

在神经网络中,激活函数(Activation Function)扮演着至关重要的角色。它赋予了神经网络非线性特性,使其能够拟合复杂的数据模式。选择合适的激活函数对于神经网络的性能和收敛性有着深远的影响。本文将深入探讨激活函数的基本概念、常见类型及其特性,以及激活函数的选择策略,帮助读者更好地理解和应用激活函数。
在这里插入图片描述

什么是激活函数?

在神经网络中,每个神经元会对输入信号进行加权求和,得到一个线性组合。然而,仅仅使用线性组合是无法拟合复杂的非线性函数的。为了赋予神经网络非线性特性,我们需要在线性组合之后引入一个非线性激活函数。

激活函数是一种数学函数,它将神经元的输入信号映射到输出信号。通过引入非线性激活函数,神经网络就能够学习复杂的非线性映射关系,从而拟合各种类型的数据。

数学上,我们可以将激活函数表示为:

y = f ( x ) y = f(x) y=f(x)

其中,x是神经元的输入信号,f是激活函数,y是神经元的输出信号。

不同的激活函数具有不同的数学特性,因此在不同的场景下会有不同的表现。选择合适的激活函数对于神经网络的性能至关重要。

常见激活函数类型

在深度学习的发展历程中,研究人员提出了各种不同的激活函数。以下是一些常见的激活函数类型:
在这里插入图片描述

1. Sigmoid函数

Sigmoid函数是最早被引入神经网络的激活函数之一,它的数学表达式如下:

f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1

Sigmoid函数将输入值映射到(0,1)范围内,具有平滑和可导的特性。然而,它也存在一些缺点,如梯度消失问题和输出不是以0为中心。

2. Tanh函数

Tanh函数是Sigmoid函数的变体,它的数学表达式如下:

f ( x ) = e x − e − x e x + e − x f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=ex+exexex

Tanh函数将输入值映射到(-1,1)范围内,解决了Sigmoid函数输出不是以0为中心的问题。但它仍然存在梯度消失的风险。

3. ReLU函数

ReLU(Rectified Linear Unit)函数是近年来最流行的激活函数之一,它的数学表达式如下:

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

ReLU函数的优点是计算简单高效,并且在正区间具有恒等映射特性,避免了梯度消失问题。然而,它也存在"死亡神经元"的问题,即当输入为负值时,神经元的梯度将永远为0,无法被更新。

4. Leaky ReLU函数

Leaky ReLU函数是ReLU函数的改进版本,它的数学表达式如下:

f ( x ) = { x , if  x ≥ 0 α x , if  x < 0 f(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha x, & \text{if } x < 0 \end{cases} f(x)={x,αx,if x0if x<0

其中, α \alpha α是一个小于1的常数,通常取值为0.01。Leaky ReLU函数在负区间也具有非零梯度,从而缓解了"死亡神经元"的问题。

5. ELU函数

ELU(Exponential Linear Unit)函数是另一种改进的ReLU函数,它的数学表达式如下:

f ( x ) = { x , if  x ≥ 0 α ( e x − 1 ) , if  x < 0 f(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha (e^x - 1), & \text{if } x < 0 \end{cases} f(x)={x,α(ex1),if x0if x<0

其中, α \alpha α是一个常数,通常取值为1。ELU函数在负区间具有更平滑的梯度,有助于加快收敛速度和提高模型性能。

6. Swish函数

Swish函数是谷歌大脑提出的一种新型激活函数,它的数学表达式如下:

f ( x ) = x ⋅ σ ( β x ) f(x) = x \cdot \sigma(\beta x) f(x)=xσ(βx)

其中, σ \sigma σ是Sigmoid函数, β \beta β是一个可学习的参数。Swish函数结合了ReLU函数和Sigmoid函数的优点,在某些任务上表现出色。

7. GELU函数

GELU(Gaussian Error Linear Unit)函数是另一种新型激活函数,它的数学表达式如下:

f ( x ) = x ⋅ Φ ( x ) f(x) = x \cdot \Phi(x) f(x)=xΦ(x)

其中, Φ ( x ) \Phi(x) Φ(x)是标准高斯累积分布函数。GELU函数具有更平滑的梯度,在自然语言处理和计算机视觉等任务中表现不错。

除了上述常见的激活函数,还有一些其他的激活函数,如Softplus函数、Mish函数等。每种激活函数都有其独特的特性和适用场景,选择合适的激活函数对于神经网络的性能至关重要。

激活函数的选择策略

在这里插入图片描述

在实际应用中,如何选择合适的激活函数呢?以下是一些常见的选择策略:

  1. 任务类型:不同的任务类型可能需要不同的激活函数。例如,对于分类任务,通常使用Sigmoid或Softmax函数作为输出层的激活函数;对于回归任务,可以使用线性激活函数或ReLU函数。

  2. 网络结构:激活函数的选择也与网络结构有关。例如,在卷积神经网络中,通常使用ReLU或Leaky ReLU作为隐藏层的激活函数;在循环神经网络中,常用的激活函数是Tanh或GELU。

  3. 数据分布:如果输入数据的分布范围较大或存在异常值,可以考虑使用ReLU或Leaky ReLU等具有稳定性的激活函数。

  4. 实验对比:在实际应用中,可以尝试不同的激活函数,并通过实验对比选择性能最佳的激活函数。

  5. 组合使用:在某些情况下,可以考虑在不同层或不同路径中使用不同的激活函数,以获得更好的性能。

总的来说,选择合适的激活函数需要结合任务特点、网络结构、数据分布等多方面因素进行综合考虑。同时,也可以通过实验对比和组合使用的方式,探索更优秀的激活函数组合。

总结

激活函数是神经网络中不可或缺的组成部分,它们赋予了神经网络非线性特性,并控制了神经元的输出范围。本文介绍了激活函数的基本概念、常见类型及其特性,以及激活函数的选择策略。希望通过这篇文章,读者能够更好地理解和应用激活函数,进一步提高神经网络模型的性能。

如果您有任何疑问或建议,欢迎随时提出。激活函数的探索之路永无止境,让我们一起继续前行,揭开更多激活函数的奥秘!

End

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

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

相关文章

深入了解 JMeter 中的响应断言

JMeter 是一个强大的性能测试工具&#xff0c;能够模拟大量用户并发访问网站或应用程序&#xff0c;以便测试其性能和稳定性。在进行性能测试时&#xff0c;我们需要对响应结果进行断言&#xff0c;以确保应用程序或网站的功能和性能符合预期。 JMeter 提供了一套丰富的响应断…

VINS-FUSION 优化-IMU预积分因子(二)

VINS-FUSION 优化-IMU预积分因子(一)完成了IMU预积分及对于优化变量的全部雅克比矩阵的推导,本文结合VINS-FUSION源码,完成优化-IMU预积分因子的使用。 一、IMU预积分因子雅克比 VINS-FUSION源码中将优化变量分组如下: 1.对i时刻优化变量的雅可比

mysql中where与on区别

WHERE子句 作用范围&#xff1a;WHERE子句主要用于过滤FROM子句返回的结果集。它可以在SELECT、UPDATE、DELETE语句中使用&#xff0c;以限制哪些行被包含在最终的查询结果中&#xff0c;或者哪些行被更新或删除。应用场景&#xff1a;当需要基于某些条件过滤结果集时&#xf…

8.0.32 mysql 配置主从数据库

配置前提&#xff1a; 两台服务器都需要安装同一版本的mysql数据库 我的版本是8.0.32 数据库参数修改 主数据库my.cnf(linux)或my.ini(win)配置&#xff1a; 这里需要注意&#xff1a;server-id必须唯一主从两个库必须要不一样 log_binmysql-bin server-id24 gtid-modeON …

chapter08-面相对象编程的三大特征——封装

1、基础介绍 对电视机的操作就是典型封装 封装的好处&#xff1a;隐藏实现细节&#xff1b;可以对数据进行验证 2、封装的实现 3、入门案例 altinsert&#xff0c;getter and setter&#xff0c;自动插入

生成式人工智能的未来之路:对话系统与自主代理的交汇与展望

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

RAS--APEI 报错解析流程(2)

RAS--APEI 报错解析流程(1) 除了APEI 中除了GHES会记录错误&#xff0c;在Post过程中的错误通常是通过BERT Table汇报 1.BERT Boot Error Record Table is used to report unhandled errors that occurred in a previous boot&#xff0c;it is reported as a ‘one-time polle…

java根父类Object.clone()是深克隆还是浅克隆

在Java中&#xff0c;Object.clone() 方法实现的是浅克隆&#xff08;Shallow Clone&#xff09;。这意味着&#xff0c;当你对一个对象调用 clone() 方法时&#xff0c;它会创建一个该对象的新实例&#xff0c;但是新实例中的非静态字段是原始对象对应字段的引用拷贝&#xff…

Python学习计划——3.3作用域(局部和全局变量)

Python 中的变量作用域决定了变量的可访问性和生命周期。作用域分为局部作用域和全局作用域。 1. 局部变量 局部变量是在函数内部定义的变量&#xff0c;其作用范围仅限于函数内部。函数执行结束后&#xff0c;局部变量会被销毁。 示例&#xff1a; def my_function():x 1…

HarmonyOS Next 省市区级联(三级联动)筛选框

效果图 完整代码 实例对象 export class ProvinceBean {id?: stringpid?: stringisSelect?: booleandeep?: objectextName?: stringchildren?: ProvinceBean[] }级联代码 import { MMKV } from tencent/mmkv/src/main/ets/utils/MMKV import { ProvinceBean } from ..…

【Rust光年纪】从虚拟机到数据库:探索Rust语言的重要库与框架

Rust语言重要库大揭秘&#xff1a;虚拟机管理、数据库驱动、数据序列化、Redis客户端一网打尽 前言 随着Rust语言的不断发展&#xff0c;越来越多的优秀库和框架涌现出来&#xff0c;为开发者提供了丰富的工具和资源。本文将介绍一些用于Rust语言的重要库和客户端&#xff0c…

通过Faiss和DINOv2进行场景识别

目标&#xff1a;通过Faiss和DINOv2进行场景识别&#xff0c;确保输入的照片和注册的图片&#xff0c;保持内容一致。 MetaAI 通过开源 DINOv2&#xff0c;在计算机视觉领域取得了一个显着的里程碑&#xff0c;这是一个在包含1.42 亿张图像的令人印象深刻的数据集上训练的模型…

基于 HTML+ECharts 实现智慧运维数据可视化大屏(含源码)

智慧运维数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 在现代企业中&#xff0c;运维管理是确保系统稳定运行的关键环节。随着数据量的激增&#xff0c;如何高效地监控和分析运维数据成为了一个重要课题。本文将介绍如何利用 HTML 和 ECharts 实现一个智慧运维数据可…

深入理解 Java NIO:ByteBuffer和MappedByteBuffer的特性与使用

目录 前言 ByteBuffer是什么 重要特点 分配缓冲区 读写模式切换 操作文本数据 操作基本数据类型 案例解析-循环输出数据 MappedByteBuffer是什么 MappedByteBuffer 的工作机制 刷盘时机 总结 前言 在深入学习 RocketMQ 这款高性能消息队列框架的源码时&#xff0c…

醒醒,别睡了...讲《数据分析pandas库》了—/—<1>

一、了解pandas No.1 Pandas 是 Python 语言的一个扩展程序库&#xff0c;用于数据分析&#xff0c;是一个强大的分析结构化数据的工具集&#xff0c;基础是Numpy库&#xff0c;可以去参考前面所讲的课。&#xff08;提供高性能的矩阵运算&#xff09; No.2 应用 &#xff1a;P…

Kylin Cube的灵动更新:部分刷新策略全解析

Kylin Cube的灵动更新&#xff1a;部分刷新策略全解析 Apache Kylin是一个高性能的分布式分析引擎&#xff0c;它通过预计算和存储多维数据模型&#xff08;Cube&#xff09;来加速对大数据集的查询。在实际应用中&#xff0c;数据经常发生变化&#xff0c;这就引出了一个问题…

vue上传Excel文件并直接点击文件列表进行预览

本文主要内容&#xff1a;用elementui的Upload 组件上传Excel文件&#xff0c;上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求&#xff0c;有很多种方法实现。但是不想要跳转外部地址&#xff0c;所以用了xlsx插件来解析表格&#xff0c;并展…

【数据集处理】Polars库、Parquet 文件

一、Polars 库 Polars 库在数据处理和分析方面具有显著的优势&#xff0c;特别是在性能和效率上。 1. 高性能 Polars 设计的核心目标之一是性能优化&#xff0c;尤其是针对大数据集的处理&#xff1a; 多线程执行&#xff1a;Polars 利用 Rust 编写&#xff0c;并且默认使用…

Docker安装kkFileView实现在线文件预览

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 官方文档地址:https://kkview.cn/zh-cn/docs/production.html 一、拉取镜像 do…

1 深度学习网络DNN

代码来自B站up爆肝杰哥 测试版本 import torch import torchvisiondef print_hi(name):print(fHi, {name}) if __name__ __main__:print_hi(陀思妥耶夫斯基)print("HELLO pytorch {}".format(torch.__version__))print("torchvision.version:", torchvi…