神经网络中常见的激活函数Sigmoid、Tanh和ReLU
激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、Tanh 和 ReLU 的详细介绍。
1. Sigmoid 激活函数
公式:
图像:
特点:
- 输出范围:(0, 1),将输入压缩到0到1之间。
- 用途:常用于二分类问题中的输出层,因为它的输出可以解释为概率值(0表示负类,1表示正类)。
- 优点:
- 输出具有良好的可解释性,适合用于需要概率输出的任务。
- 缺点:
- 梯度消失问题:当输入较大或较小时,Sigmoid 函数的导数接近于0,导致反向传播时梯度几乎为零,使得权重更新非常缓慢,甚至停止更新。这在深度网络中尤为严重。
- 非零中心化:Sigmoid 函数的输出不是以0为中心的,这会导致后续层的权重更新方向不一致,影响训练效率。
应用场景:
- 二分类问题的输出层。
- 逻辑回归模型。
2. Tanh (双曲正切) 激活函数
公式:
图像:
特点:
- 输出范围:(-1, 1),将输入压缩到-1到1之间。
- 用途:常用于隐藏层,尤其是在早期的神经网络中。它比 Sigmoid 更加对称,且输出是以0为中心的。
- 优点:
- 零中心化:Tanh 的输出是零中心化的,这有助于加速收敛,因为后续层的权重更新方向更加一致。
- 更好的梯度传播:相比 Sigmoid,Tanh 在输入接近0时的导数更大,因此梯度消失问题稍微缓解。
- 缺点:
- 仍然存在梯度消失问题:虽然比 Sigmoid 稍好,但在输入较大或较小时,Tanh 的导数也会接近0,导致梯度消失。
应用场景:
- 隐藏层,尤其是浅层神经网络。
- RNN(循环神经网络)中,Tanh 是常用的激活函数,因为它可以帮助控制信息的流动。
3. ReLU (Rectified Linear Unit) 激活函数
公式:
图像:
特点:
- 输出范围:[0, +∞),当输入为正时,输出等于输入;当输入为负时,输出为0。
- 用途:广泛应用于现代深度学习模型的隐藏层,尤其是在卷积神经网络(CNN)和全连接网络中。
- 优点:
- 避免梯度消失问题:对于正输入,ReLU 的导数为1,因此不会出现梯度消失问题。这使得 ReLU 在深层网络中表现良好,能够加速训练。
- 计算简单:ReLU 的计算非常简单,只需判断输入是否大于0,因此计算效率高。
- 稀疏性:ReLU 会将负输入直接设为0,这有助于引入稀疏性,减少模型的复杂度。
- 缺点:
- 死亡 ReLU 问题:当输入为负时,ReLU 的导数为0,导致该神经元在反向传播时不再更新权重。如果大量神经元进入“死亡”状态,模型可能会失去表达能力。为了解决这个问题,通常使用改进版的 ReLU,如 Leaky ReLU 或 Parametric ReLU。
- 非零中心化:ReLU 的输出是非零中心化的,这可能会导致后续层的权重更新方向不一致。
改进版本:
- Leaky ReLU:为了解决死亡 ReLU 问题,Leaky ReLU 在负输入时赋予一个很小的斜率(通常是0.01),而不是直接设为0。
[
\text{Leaky ReLU}(x) = \max(\alpha x, x), \quad \text{其中} ; 0 < \alpha \ll 1
] - Parametric ReLU (PReLU):Leaky ReLU 的斜率是固定的,而 PReLU 的斜率是一个可学习的参数,可以在训练过程中自动调整。
[
\text{PReLU}(x) = \max(\alpha_i x, x), \quad \text{其中} ; \alpha_i ; \text{是每个神经元的可学习参数}
] - Exponential Linear Unit (ELU):ELU 在负输入时使用指数函数来平滑过渡,避免了死亡 ReLU 问题,并且输出是零中心化的。
[
\text{ELU}(x) =
\begin{cases}
x & \text{if} ; x > 0 \
\alpha (e^x - 1) & \text{if} ; x \leq 0
\end{cases}
]
应用场景:
- 隐藏层,尤其是深度神经网络(DNN)、卷积神经网络(CNN)和生成对抗网络(GAN)。
- 由于其出色的性能和计算效率,ReLU 及其变体已成为现代深度学习模型中最常用的激活函数之一。
总结
激活函数 | 输出范围 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|
Sigmoid | (0, 1) | 输出具有概率意义 | 梯度消失,非零中心化 | 二分类问题的输出层,逻辑回归 |
Tanh | (-1, 1) | 零中心化,更好的梯度传播 | 梯度消失 | 隐藏层,RNN 中 |
ReLU | [0, +∞) | 避免梯度消失,计算简单,引入稀疏性 | 死亡 ReLU 问题,非零中心化 | 隐藏层,DNN、CNN、GAN |
选择激活函数的建议:
- Sigmoid:主要用于二分类问题的输出层,尤其是在需要概率输出的情况下。
- Tanh:适用于隐藏层,尤其是浅层网络或 RNN 中。它比 Sigmoid 更加对称,有助于加速收敛。
- ReLU:是现代深度学习模型中最常用的激活函数,尤其适用于隐藏层。如果你遇到死亡 ReLU 问题,可以尝试使用 Leaky ReLU 或 PReLU。
相关文章:

神经网络中常见的激活函数Sigmoid、Tanh和ReLU
激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、T…...

适用于学校、医院等低压用电场所的智能安全配电装置
引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁…...

基于python爬虫的智慧人才数据分析系统
废话不多说,先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO_SETTINGS_MODULE, 智慧人才数据分析系统.settings)try:from django.core.m…...

LeetCode-315. Count of Smaller Numbers After Self
目录 题目描述 解题思路 【C】 【Java】 复杂度分析 LeetCode-315. Count of Smaller Numbers After Selfhttps://leetcode.com/problems/count-of-smaller-numbers-after-self/description/ 题目描述 Given an integer array nums, return an integer array counts whe…...

根据导数的定义计算导函数
根据导数的定义计算导函数 1. Finding derivatives using the definition (使用定义求导)1.1. **We want to differentiate f ( x ) 1 / x f(x) 1/x f(x)1/x with respect to x x x**</font>1.2. **We want to differentiate f ( x ) x f(x) \sqrt{x} f(x)x wi…...
WPF关于打开新窗口获取数据的回调方法的两种方式
一种基于消息发送模式 一种基于回调机制 基于消息发送模式 父页面定义接收的_selectedPnNumberStandarMsg保证是唯一 Messenger.Default.Register<PlateReplaceApplyModel>(this, _selectedPnNumberStandarMsgToken, platePnNumberModel > { …...

复杂网络(四)
一、规则网络 孤立节点网络全局耦合网络(又称完全网络)星型网络一维环二维晶格 编程实践: import networkx as nx import matplotlib.pyplot as pltn 10 #创建孤立节点图 G1 nx.Graph() G1.add_nodes_from(list(range(n))) plt.figure(f…...

用MATLAB符号工具建立机器人的动力学模型
目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型,表示为二阶微分方程组。本文以一个二杆系统为例,介绍如何用MATLAB符号工具得到微分方程表达式,只需要…...

SQL优化与性能——数据库设计优化
数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目,合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间,并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...

FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现 原因ADS111x连续采样实现连续采样功能说明iic读取adc的数据速率 VS adc连续采样的速率adc连续采样的速率iic读取adc的数据速率结论分析 FPGA读取adc数据问题一:读取adc数…...

我们来学mysql -- 事务之概念(原理篇)
事务的概念 题记一个例子一致性隔离性原子性持久性 题记 在漫长的编程岁月中,存在一如既往地贯穿着工作,面试的概念这类知识点,事不关己当然高高挂起,精准踩坑时那心情也的却是日了🐶请原谅我的粗俗,遇到B…...

基于特征子空间的高维异常检测:一种高效且可解释的方法
本文将重点探讨一种替代传统单一检测器的方法:不是采用单一检测器分析数据集的所有特征,而是构建多个专注于特征子集(即子空间)的检测器系统。 在表格数据的异常检测实践中,我们的目标是识别数据中最为异常的记录,这种异常性可以…...

看不见的彼方:交换空间——小菜一碟
有个蓝色的链接,先去看看两年前的题目的write up (https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md) 从别人的write up中了解到&…...
YOLO模型训练后的best.pt和last.pt区别
在选择YOLO模型训练后的权重文件best.pt和last.pt时,主要取决于具体的应用场景:12 best.pt:这个文件保存的是在训练过程中表现最好的模型权重。通常用于推理和部署阶段,因为它包含了在验证集上表现最好的模型权重&#x…...

Pareidoscope - 语言结构关联工具
文章目录 关于 Pareidoscope安装使用方法输入格式语料库查询 将语料库转换为 SQLite3 数据库两种语言结构之间的关联简单词素分析关联共现和伴随词素分析相关的更大结构可视化关联结构 关于 Pareidoscope Pareidoscope 是一组 用于确定任意语言结构之间 关联的工具,…...
GPT(Generative Pre-trained Transformer) 和 Transformer的比较
GPT(Generative Pre-trained Transformer) 和 Transformer 的比较 flyfish 1. Transformer 是一种模型架构 Transformer 是一种通用的神经网络架构,由 Vaswani 等人在论文 “Attention Is All You Need”(2017)中提…...

软件无线电(SDR)的架构及相关术语
今天简要介绍实现无线电系统调制和解调的主要方法,这在软件定义无线电(SDR)的背景下很重要。 外差和超外差 无线电发射机有两种主要架构——一种是从基带频率直接调制到射频频率(称为外差),而第二种超外差是通过两个调制阶段来实…...
Python将Excel文件转换为JSON文件
工作过程中,需要从 Excel 文件中读取数据,然后交给 Python 程序处理数据,中间需要把 Excel 文件读取出来转为 json 格式,再进行下一步数据处理。 这里我们使用pandas库,这是一个强大的数据分析工具,能够方便地读取和处理各种数据格式。需要注意的是还需要引入openpyxl库,…...

排序算法之选择排序篇
思想: 每次从未排序的部分找出最小的元素,将其放到已排序部分的末尾 从数据结构中找到最小值,放到第一位,放到最前面,之后再从剩下的元素中找出第二小的值放到第二位,以此类推。 实现思路: 遍…...

sizeof和strlen区分,(好多例子)
sizeof算字节大小 带\0 strlen算字符串长度 \0之前...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...