【深度学习】关键技术-激活函数(Activation Functions)
激活函数(Activation Functions)
激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应用场景。
1. 常见激活函数及其公式与代码示例
1. Sigmoid 激活函数
公式:
特点:
- 输出范围为 (0, 1)。
- 对输入较大的值趋于 1,较小的值趋于 0。
- 常用于神经网络输出层处理二分类问题。
- 优点:
- 将输入映射为概率值,直观且常用于概率任务。
- 缺点:
- 梯度消失:输入很大或很小时,梯度趋近 0,导致反向传播时权重更新变慢。
- 输出不以 0 为中心,不利于零均值数据。
代码示例:
import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):return 1 / (1 + np.exp(-x))# 示例
x = np.linspace(-10, 10, 100)
y = sigmoid(x)plt.plot(x, y)
plt.title("Sigmoid Activation Function")
plt.xlabel("x")
plt.ylabel("sigmoid(x)")
plt.grid()
plt.show()
运行结果:
2. Tanh(双曲正切)激活函数
公式:
特点:
- 输出范围为 (-1, 1)。
- 优点:
- 比 Sigmoid 更对称,输出以 0 为中心,更适合零均值数据。
- 缺点:
- 梯度消失问题依然存在。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
def tanh(x):return np.tanh(x)x = np.linspace(-10, 10, 100)
y = tanh(x)plt.plot(x, y)
plt.title("Tanh Activation Function")
plt.xlabel("x")
plt.ylabel("tanh(x)")
plt.grid()
plt.show()
运行结果:
3. ReLU(Rectified Linear Unit)激活函数
公式:
f(x) = max(0, x)
特点:
- 输出范围为 [0, +∞)。
- 优点:
- 简单高效,计算速度快。
- 解决了梯度消失问题,几乎是所有深度学习模型的默认选择。
- 缺点:
- “死亡神经元”:当输入总是小于 0 时,梯度为 0,神经元可能永远不会被激活。
代码示例:
import numpy as np
import matplotlib.pyplot as pltdef relu(x):return np.maximum(0, x)x = np.linspace(-10, 10, 100)
y = relu(x)plt.plot(x, y)
plt.title("ReLU Activation Function")
plt.xlabel("x")
plt.ylabel("ReLU(x)")
plt.grid()
plt.show()
运行结果:
4. Leaky ReLU 激活函数
公式:
其中,α 是一个小于 1 的常数,通常取 0.01。
特点:
- 优点:
- 解决 ReLU 的“死亡神经元”问题。
- 在负数输入上具有小的线性斜率。
- 缺点:
- 引入了超参数 α,需手动调节。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
def leaky_relu(x, alpha=0.01):return np.where(x > 0, x, alpha * x)x = np.linspace(-10, 10, 100)
y = leaky_relu(x)plt.plot(x, y)
plt.title("Leaky ReLU Activation Function")
plt.xlabel("x")
plt.ylabel("Leaky ReLU(x)")
plt.grid()
plt.show()
运行结果:
5. ELU(Exponential Linear Unit)激活函数
公式:
其中,α 通常取 1。
特点:
- 优点:
- 负数部分平滑处理,有助于减少梯度消失问题,训练更稳定。
- 能加速模型收敛。
- 缺点:
- 计算复杂度稍高。
代码示例:
import numpy as np
import matplotlib.pyplot as plt
def elu(x, alpha=1.0):return np.where(x > 0, x, alpha * (np.exp(x) - 1))x = np.linspace(-10, 10, 100)
y = elu(x)plt.plot(x, y)
plt.title("ELU Activation Function")
plt.xlabel("x")
plt.ylabel("ELU(x)")
plt.grid()
plt.show()
运行结果:
6. Softmax 激活函数
公式:
特点:
- 将输入映射为概率分布,适用于多分类问题,常用于多分类问题的最后一层。
- 输出范围为 (0, 1),且总和为 1。
代码示例:
import numpy as npdef softmax(x):exp_x = np.exp(x - np.max(x)) # 防止数值溢出return exp_x / np.sum(exp_x)# 示例
x = np.array([1.0, 2.0, 3.0, 6.0])
y = softmax(x)print("Softmax Output:", y)
print("Sum of Softmax Output:", np.sum(y)) # 确保总和为 1
运行结果:
Softmax Output: [0.00626879 0.01704033 0.04632042 0.93037047]
Sum of Softmax Output: 1.0
7. Swish 激活函数
公式:
其中,β 是可学习参数,通常默认为 1。
特点:
- 优点:
- 平滑可微,能捕获复杂特征。
- 在深度网络中比 ReLU 表现更优。
代码示例:
import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):return 1 / (1 + np.exp(-x))
def swish(x, beta=1.0):return x * sigmoid(beta * x)x = np.linspace(-10, 10, 100)
y = swish(x)plt.plot(x, y)
plt.title("Swish Activation Function")
plt.xlabel("x")
plt.ylabel("Swish(x)")
plt.grid()
plt.show()
运行结果:
2. 激活函数的选择与应用
任务导向的选择:
- 分类问题:
- 二分类:Sigmoid 或 Softmax。
- 多分类:Softmax。
- 回归问题:
- 使用线性激活函数或无激活函数。
- 深度学习(卷积网络、RNN 等):
- 通常采用 ReLU 及其变种(Leaky ReLU、ELU)。
层次结构的选择:
- 隐藏层:
- 一般使用 ReLU 或其变种。
- 输出层:
- 分类:Softmax 或 Sigmoid。
- 回归:线性激活函数。
3.激活函数对比总结
激活函数 | 输出范围 | 是否有梯度消失 | 是否有“死亡神经元” | 常见应用场景 |
---|---|---|---|---|
Sigmoid | (0, 1) | 是 | 否 | 二分类输出 |
Tanh | (-1, 1) | 是 | 否 | RNN 或零均值数据 |
ReLU | [0, +∞) | 否 | 是 | 深层网络的隐藏层 |
Leaky ReLU | (−∞, +∞) | 否 | 否 | 深层网络 |
ELU | (−α, +∞) | 否 | 否 | 深度网络 |
Softmax | (0, 1) | 否 | 否 | 多分类输出层 |
Swish | (−∞, +∞) | 否 | 否 | 深度网络或复杂任务 |
通过结合理论和代码示例,可以根据任务特点选择合适的激活函数以优化模型性能。
4. 未来趋势
- 现代深度学习中,激活函数的发展更加注重可学习性和性能优化。
- 像 Swish 和 GELU 等新型激活函数正在逐步取代传统激活函数,尤其在深度和复杂的网络中表现更优。
相关文章:

【深度学习】关键技术-激活函数(Activation Functions)
激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…...
网关相关知识
文章目录 什么是网关网关的主要作用网关的运用 什么是网关 网关又称网间连接器、协议转换器,也就是网段(局域网、广域网)关卡,不同网段中的主机不能直接通信,需要通过关卡才能进行互访,比如IP地址为192.168.31.9(子网掩码&#x…...

SpringBoot整合SpringSecurity详解
文章目录 SpringBoot整合SpringSecurity详解一、引言二、引入依赖三、配置 Spring Security四、自定义用户详细信息服务五、使用示例1. 创建用户实体类2. 测试登录功能 六、总结 SpringBoot整合SpringSecurity详解 一、引言 在当今的软件开发中,安全是一个至关重要…...
【C++基础】enum,union,uint8_t,static
enum 所以有时候使用 Enum 的目的,不是为了自定义一种数据类型,而是为了声明一组常量。 from: https://github.com/wangdoc/clang-tutorial/blob/main/docs/enum.md union C 语言提供了 Union 结构,用来自定义可以灵活变更的数据结构。它内部…...
单片机的原理及其应用:从入门到进阶的全方位指南
以下是一篇详细、深入的“单片机的原理及其应用”博客文章示例,适合想要系统学习或深入了解单片机的读者。文中不仅会介绍单片机的基本原理、内部构造、开发流程和应用领域,还会融入更多的理论分析、实操案例以及常见问题与解决思路等,帮助读…...
如何使用 Go语言操作亚马逊 S3 对象云存储
以下是使用 Go 语言操作亚马逊 S3 对象云存储的详细步骤和示例代码: 解决思路: 安装必要的 Go 语言包,这里我们将使用 aws-sdk-go 包来与 Amazon S3 进行交互。配置 AWS 凭证,包括访问密钥和秘密访问密钥,以及 AWS 区…...

2025年应用与API安全展望:挑战与机遇并存
进入2025年,应用与API安全的重要性愈发突出。在过去的一年里,API技术已经成为数字创新的核心。然而,API的大规模应用也使得攻击面显著扩展,2024年针对业务逻辑漏洞的API攻击占比高达27%,较前一年增加10%。与此同时&…...
Linux安装docker,安装配置xrdp远程桌面
Linux安装docker,安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…...

VD:生成a2l文件
目录 前言Simulink合并地址 ASAP2 editor 前言 我之前的方法都是通过Simulink模型生成代码的过程中顺便就把a2l文件生成出来了,这时的a2l文件还没有地址,所以紧接着会去通过elf文件更新地址,一直以为这是固定的流程和方法,今天无…...

【SpringBoot应用篇】SpringBoot+MDC+自定义Filter操作traceId实现日志链路追踪
【SpringBoot应用篇】SpringBootMDC自定义Filter操作traceId实现日志链路追踪 解决的问题解决方案MDC具体逻辑ymllogback-spring.xmlTraceIdUtil操作工具类TraceIdFilter自定义过滤器GlobalExceptionHandler全局异常处理类TraceIdAspect切面UserController测试验证 多线程处理M…...
unity2022以上导出到AndroidStudio后更新步骤
1、unity里面Export出unityLibrary 2、导出apk,里面才包含libil2cpp(新版unity无法直接导出libil2cpp 3、注释AS项目app下的build.gradle里面包含unityLibrary的代码 4、注释AS项目settings.gradle包含unityLibrary的代码 5、删除AS项目里面的unityLibrary文件夹 6、…...

【ArcGIS初学】产生随机点计算混淆矩阵
混淆矩阵:用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) :某类中正确分类的像元数除以参考数据中该类的像元数(列方向),又称…...

Harmony面试模版
1. 自我介绍 看表达能力、沟通能力 面试记录: 2. 进一步挖掘 2.1. 现状 目前是在职还是离职,如果离职,从上一家公司离职的原因 2.2. 项目经验 如果自我介绍工作项目经验讲的不够清楚,可以根据简历上的信息再进一步了解 面试记…...

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片
目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…...

浪潮云财务系统xtdysrv.asmx存在命令执行漏洞
一、漏洞简介 浪潮云财务系统xtdysrv.asmx存在命令执行漏洞,未经身份验证的远程攻击者可通过该漏洞在服务器端任意执行代码。 二、漏洞影响 浪潮云财务系统三、网络测绘: fofa: title"TSCEV4.0"四、复现过程 前置条件 步骤 POC 1 数据包…...

【网络编程】基础知识
目录 网络发展史 局域网和广域网 局域网(LAN) 广域网(Wan) 光猫 路由器 网线 设备通信的要素 IP地址 基本概念 地址划分 特殊地址(后续编程使用) IP地址转换 字节序 网络模型 网络的体系结…...

ResNet (Residual Network) - 残差网络:深度卷积神经网络的突破
一、引言 在计算机视觉领域,图像识别一直是一个核心且具有挑战性的任务。随着深度学习的发展,卷积神经网络(CNN)在图像识别方面取得了显著的成果。然而,随着网络深度的增加,出现了梯度消失或梯度爆炸等问题…...

MOSFET体二极管的反向恢复分析
1、MOSFET体二极管的反向恢复分析 MOSFET体二极管反向恢复会导致MOSFET工作时超出安全工作区(SOA),并引发其他电磁干扰问题(EMI。 二极管在反向恢复过程中会产生比较大的损耗。在正向偏置状态下,大量的电子和空穴载流…...
80_Redis内存策略
Redis性能之所以这么强,最主要的原因就是基于内存存储。而单节点的Redis其内存大小不宜过大,否则会影响持久化或主从同步的性能。 我们可以通过修改redis.conf配置文件来设置Redis的最大内存。 maxmemory <bytes> 当Redis内存使用达到上限时,就无法存储更多数据了。…...
【HarmonyOS NAPI 深度探索6】使用 N-API 创建第一个 Hello World 原生模块
【HarmonyOS NAPI 深度探索6】使用 N-API 创建第一个 Hello World 原生模块 开发一个 N-API 模块听起来可能有点技术感十足,但实际上入门并不复杂。今天,我们就来一步步实现一个简单的 Hello World 原生模块,感受一下 N-API 开发的魅力。 环…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...