【AI知识点】激活函数(Activation Function)

news2024/11/25 14:23:01

激活函数(Activation Function) 是神经网络中的一个关键组件,负责将输入的线性组合转化为非线性输出。它赋予神经网络模型以复杂的表达能力,使其能够处理非线性问题,比如分类、图像识别和自然语言处理等任务。


1. 激活函数的作用

激活函数的主要作用是引入非线性,让神经网络能够学习复杂的模式。如果没有激活函数,神经网络中的每一层都只做线性变换,最终网络只会是多个线性变换的组合,相当于一个单一的线性模型,无法解决复杂的非线性问题。

  • 非线性:激活函数将线性输出(加权和加偏置的输出)转化为非线性输出,使得神经网络可以拟合任意复杂的函数。
  • 归一化:有些激活函数还具有将输出值限制在某个固定区间的效果(如 Sigmoid,将输出限制在 ( 0 , 1 ) (0, 1) (0,1) 区间),这可以帮助模型稳定训练。

2. 常见的激活函数

a. Sigmoid 函数

Sigmoid 函数是深度学习中最早广泛使用的激活函数之一,它将输入值映射到 ( 0 , 1 ) (0, 1) (0,1) 的区间,输出为一个概率值。其公式为:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

  • 特点:输出值在 0 0 0 1 1 1 之间,因此常用于二分类问题。

  • 缺点梯度消失问题,在输入值较大或较小时,Sigmoid 函数的梯度(导数)接近零,这会导致反向传播过程中梯度逐渐减小(消失),影响权重的更新,特别是在深层网络中。

  • 图示


b. Tanh 函数

Tanh(双曲正切函数)是 Sigmoid 的扩展版本,输出范围为 ( − 1 , 1 ) (-1, 1) (1,1),可以解决 Sigmoid 在输出上的偏移问题。其公式为:
tanh ( x ) = e x − e − x e x + e − x \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex

  • 特点:输出范围为 ( − 1 , 1 ) (-1, 1) (1,1),相比 Sigmoid 更加居中,能够减少偏移(mean shift)问题。

  • 缺点:同样存在梯度消失问题,在输入值非常大或非常小时,Tanh 的梯度依然会变得很小。

  • 图示


c. ReLU(Rectified Linear Unit)函数

ReLU 是目前使用最为广泛的激活函数之一。ReLU 函数的输出在正数区域保持线性,在负数区域则为 0。其公式为:
ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)

  • 特点:当输入大于 0 时,ReLU 直接输出输入值;当输入小于 0 时,输出为 0。

  • 优点

    • 解决梯度消失问题:ReLU 的梯度为 1(当 x > 0 x > 0 x>0 时),不会像 Sigmoid 和 Tanh 那样使梯度变小,从而有效缓解梯度消失问题。
    • 计算效率高:ReLU 计算非常简单,只需要一个最大值操作,非常适合在深层网络中使用。
  • 缺点死亡 ReLU 问题,当输入的值小于 0 时,ReLU 的输出一直为 0,这意味着神经元可能会永远不再激活,这在某些情况下会导致网络性能下降。

  • 图示


d. Leaky ReLU

Leaky ReLU 是对 ReLU 的一种改进,解决了 ReLU 在负数区域输出为 0 时神经元“死亡”的问题。Leaky ReLU 在负数区域给予一个很小的正数斜率 α \alpha α(通常为 0.01)而不是完全为 0,其公式为:
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αxif x>0if x0

  • 优点:在负数区域仍然保持一个小的斜率,使得神经元不完全失活。减少了 ReLU 函数中的死亡 ReLU 问题,确保神经元即使在负值输入时也能有一定的梯度更新。

  • 图示


e. 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)={xα(ex1)if x>0if x0
其中 α \alpha α 是一个超参数,通常取值为 1。

  • 特点:在正数区域与 ReLU 类似,但在负数区域使用指数函数进行平滑,避免了死亡 ReLU 问题。

  • 优点:与 Leaky ReLU 相比,ELU 在负数区域提供的平滑曲线可以在一定程度上减少偏差。

  • 缺点:计算量比 ReLU 稍大,因为负数区域的计算涉及指数运算。

  • 图示


f. Swish

Swish 是一种新的激活函数,由 Google 提出,它结合了 ReLU 和 Sigmoid 的优势。其公式为:
Swish ( x ) = x ⋅ σ ( x ) = x ⋅ 1 1 + e − x \text{Swish}(x) = x \cdot \sigma(x) = x \cdot \frac{1}{1 + e^{-x}} Swish(x)=xσ(x)=x1+ex1

  • 特点:Swish 在小于 0 的输入值时逐渐趋近于 0,而在大于 0 时逐渐增大,因此它在负值区域不会像 ReLU 那样硬性截断。

  • 优点:Swish 的非线性变化更加平滑,能够捕获更多的复杂模式,特别适合用于深度神经网络中。

  • 缺点:计算量比 ReLU 更大,因为它涉及 Sigmoid 的计算。

  • 图示


3. 激活函数的选择

神经网络中的激活函数选择取决于具体任务和网络结构。以下是一些常见的经验法则:

  • ReLU 是目前最常用的激活函数,特别是在卷积神经网络(CNN)和全连接网络(FCN)中表现优异。对于大多数深度网络,ReLU 是一个很好的起点,因为它能有效避免梯度消失问题。

  • Leaky ReLUELU 是 ReLU 的改进版本,适合于有负输入的场景或避免神经元失活的场景。

  • SigmoidTanh 适用于一些特殊情况,特别是在需要输出概率或对称输出的情况下(例如,输出为 [ − 1 , 1 ] [-1, 1] [1,1])。不过它们通常会导致梯度消失,因此不推荐用于深层网络。

  • Swish 是一种更平滑的激活函数,在某些复杂任务(如超深网络)上可能表现优异。


4. 激活函数的数学属性

激活函数的选择不仅仅与模型的表现有关,还涉及其数学属性,如:

  • 可微性:大多数常见的激活函数(如 Sigmoid、Tanh、ReLU 等)都是可微的,尽管 ReLU 在 x = 0 x=0 x=0 处不可微,但通常在实际应用中表现良好。

  • 导数值的大小:激活函数的导数决定了梯度传播时的效率。像 ReLU 这样导数为常数的函数不会引发梯度消失,而 Sigmoid 和 Tanh 由于导数较小,容易引发梯度消失问题。

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

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

相关文章

【redis-06】redis的stream流实现消息中间件

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

Spring Boot:医院管理的数字化转型

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息,可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加,修改,…

今日指数day8实战补充用户管理模块(下)

ps : 由于前端将userId封装为BigInt类型 , 导致有精度损失, 传入的userId不正确 , 部分功能无法正确实现 , 但是代码已经完善 1.4 更新用户角色信息接口说明 1)原型效果 2)接口说明 功能描述:更新用户角色信息 服务路径:/user/…

基于FPGA的ov5640摄像头图像采集(二)

之前讲过ov5640摄像头图像采集,但是只包了的摄像头驱动与数据对齐两部分,但是由于摄像头输入的像素时钟与HDMI输出的驱动时钟并不相同,所有需要利用DDR3来将像素数据进行缓存再将像素数据从DDR3中读出,对DDR3的读写参考米联客的IP…

别再为日期时间头疼了!Python datetime模块助你高效搞定一切时间问题,让你的代码从此与时间赛跑,快人一步!

博客主页:长风清留扬-CSDN博客系列专栏:Python基础专栏每天更新大数据相关方面的技术,分享自己的实战工作经验和学习总结,尽量帮助大家解决更多问题和学习更多新知识,欢迎评论区分享自己的看法感谢大家点赞&#x1f44…

花半小时用豆包Marscode 和 Supabase免费部署了一个远程工作的导航站

以下是「 豆包MarsCode 体验官」优秀文章,作者谦哥。 🚀 项目地址:remotejobs.justidea.cn/ 🚀 项目截图: 数据处理 感谢开源项目:https://github.com/remoteintech/remote-jobs 网站信息获取&#xff1…

MyBatis 操作数据库入门

目录 前言 1.创建springboot⼯程 2.数据准备 3.配置Mybatis数据库连接信息 4.编写SQL语句,进行测试 前言 什么是MyBatis? MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发 Mybatis操作数据库的入门步骤: 1.创建springboot⼯程 2.数…

SOMEIP_ETS_171: SD_Unicast_FindService

测试目的: 验证DUT能够响应Tester发送的多个单播FindService消息,并至少回复一个单播OfferService消息。 描述 本测试用例旨在确保DUT能够正确处理单播FindService消息请求,并为请求的服务提供至少一个单播OfferService消息作为响应。 测…

SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?

在现代Web开发中,SpringBoot以其简化的配置和快速的开发效率而受到广大开发者的青睐。本篇文章将带领你从零开始,搭建一个基于SpringBoot的简单Web应用~ 一、前提准备 想要创建一个SpringBoot项目,需要做如下准备: idea集成开发…

亲身经历告诉你该如何自学编程

我2016年硕士毕业后,从一个纯机械学生开始转行做软件开发,其中少不了要自学编程,这其中经历的到现在看来还历历在目。 我曾经写过一些关于我转行做软件开发经历的文章,如果你感兴趣,可以点击这里的链接(我…

国庆期间的问题,如何在老家访问杭州办公室的网络呢

背景:国庆期间的问题,如何在老家访问杭州办公室的网络呢 实现方案:异地组网 实现语言:Java 环境:三个网络,一台拥有公网IP的服务器、一台杭州本地机房内服务器、你老家所在网络中的一台电脑(…

【Git】TortoiseGitPlink提示输入密码解决方法

问题 克隆仓库,TortoiseGitPlink提示输入密码 解法 1、打开TortoiseGit 下的puttygen工具 位置:C:\Program Files\TortoiseGit\bin\ 2、点击【Load】按钮,载入 C:\Users\Administrator\.ssh\ 文件夹下的id_rsa文件。 3、点击save private …

Python数据分析-远程办公与心理健康分析

一、研究背景 随着信息技术的飞速发展和全球化的推进,远程工作(Remote Work)成为越来越多企业和员工的选择。尤其是在2020年新冠疫情(COVID-19)爆发后,全球范围内的封锁措施使得远程工作模式迅速普及。根据…

Mysql数据库--JDBC编程

文章目录 1.JDBC编程基础2.驱动程序下载3.新建项目3.1导入java包3.2转换为库 4.开始创作4.1准备数据库4.2创建DataSource4.3和数据库建立连接4.4构造sql,准备发送到服务器4.5发送sql,执行sql4.6释放系统资源4.7自行输入的设置4.8插入数据完整源代码4.9查…

JavaEE之多线程进阶-面试问题

一.常见的锁策略 锁策略不是指某一个具体的锁,所有的锁都可以往这些锁策略中套 1.悲观锁与乐观锁 预测所冲突的概率是否高,悲观锁为预测锁冲突的概率较高,乐观锁为预测锁冲突的概率更低。 2.重量级锁和轻量级锁 从加锁的开销角度判断&am…

OJ在线评测系统 微服务 用分布式消息队列 RabbitMQ 解耦判题服务和题目服务 手搓交换机和队列 实现项目异步化

消息队列解耦 项目异步化 分布式消息队列 分布式消息队列是一种用于异步通信的系统,它允许不同的应用程序或服务之间传递消息。消息队列的核心理念是将消息存储在一个队列中,发送方可以将消息发送到队列,而接收方则可以在适当的时候从队列中…

Vue2电商平台(六)、注册登录,请求头配置token,token持久化存储;导航守卫(重点);组件内守卫、路由独享守卫

文章目录 一、注册1. 获取注册验证码2. 完成注册用户 二、登录1. 登录获取token2. Home首页携带token获取用户数据3. 持久化存储token4. 退出登录5. 导航守卫 (牛)6. 路由独享守卫beforeEnter7. 组件内守卫(用的很少) 一、注册 1. 获取注册验证码 本系…

基于SSM+小程序的线上教育商城管理系统(教育2)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 微信小程序线上教育商城有管理员,教师,学生三个角色。 1、管理员功能有个人中心,学生管理,教师管理,类型管理,课程…

diffusion model(1.1) 为什么前向传播和反向传播都遵循高斯分布?

DDPM的引用[53]为Deep Unsupervised Learning using Nonequilibrium Thermodynamics,它证明了当 β t \beta_t βt​ 较小时,前向传播和反向传播前向分布和后向分布拥有同样的分布形式。 所引论文的内容如下, 后者又引用了另一篇论文(Fell…