当前位置: 首页 > article >正文

别再死记硬背了!用Python和PyTorch亲手画一遍Sigmoid、Tanh、ReLU激活函数,理解立马不一样

用Python和PyTorch亲手绘制激活函数从代码中理解神经网络的核心机制在深度学习的世界里激活函数就像是神经元的开关决定了信息是否应该被传递下去。很多初学者会陷入死记硬背函数公式和特性的误区却忽略了最本质的理解——这些函数在实际数据流动中究竟如何表现今天我们将打破常规用代码和可视化带你重新认识Sigmoid、Tanh和ReLU这三个最基础的激活函数。1. 环境准备与基础概念在开始绘制之前我们需要搭建一个简单的Python环境。推荐使用Anaconda创建虚拟环境这能避免包版本冲突conda create -n activation_functions python3.8 conda activate activation_functions pip install torch matplotlib numpy激活函数的数学本质是一个非线性变换它为神经网络引入了非线性因素。没有激活函数无论多少层的神经网络都等价于单层线性变换。理解这一点至关重要非线性使神经网络能够拟合任意复杂函数可微性保证可以通过反向传播更新权重计算效率影响训练速度的关键因素输出范围决定信号传递的强度范围提示虽然Softmax也是重要的激活函数但它的多分类特性与本文重点不同我们将专注于前三个经典函数。2. Sigmoid函数从生物学启发的经典让我们首先实现Sigmoid函数。在PyTorch中我们可以用三种方式定义它import torch import matplotlib.pyplot as plt # 方法1使用基本数学运算 def sigmoid(x): return 1 / (1 torch.exp(-x)) # 方法2使用PyTorch内置函数 torch_sigmoid torch.nn.Sigmoid() # 方法3使用Lambda表达式 sigmoid_lambda lambda x: 1 / (1 torch.exp(-x))绘制函数曲线及其导数x torch.linspace(-10, 10, 1000, requires_gradTrue) y sigmoid(x) y.sum().backward() # 计算导数 plt.figure(figsize(12, 5)) plt.subplot(1, 2, 1) plt.plot(x.detach(), y.detach(), labelSigmoid) plt.title(Sigmoid Function) plt.grid(True) plt.subplot(1, 2, 2) plt.plot(x.detach(), x.grad, labelDerivative, colororange) plt.title(Sigmoid Derivative) plt.grid(True) plt.show()观察图像时注意这些关键特性特性表现影响输出范围(0,1)适合表示概率饱和区两端梯度接近0导致梯度消失中心点f(0)0.5不以零为中心平滑性处处可导训练稳定性好实际应用中的发现在早期的神经网络中Sigmoid被广泛使用但在深层网络中多个Sigmoid叠加会导致梯度指数级减小这就是著名的梯度消失问题。我在调试一个5层全连接网络时发现使用Sigmoid后前三层的权重几乎不再更新。3. Tanh函数改进的零中心化激活Tanh函数可以看作是Sigmoid的缩放平移版本实现起来同样简单def tanh(x): return (torch.exp(x) - torch.exp(-x)) / (torch.exp(x) torch.exp(-x)) # PyTorch内置版本 torch_tanh torch.nn.Tanh()比较Tanh与其导数的代码x torch.linspace(-5, 5, 1000, requires_gradTrue) y tanh(x) y.sum().backward() plt.figure(figsize(12, 10)) plt.subplot(2, 2, 1) plt.plot(x.detach(), y.detach()) plt.title(Tanh Function) plt.subplot(2, 2, 2) plt.plot(x.detach(), x.grad) plt.title(Tanh Derivative) # 对比Sigmoid和Tanh plt.subplot(2, 2, 3) plt.plot(x.detach(), sigmoid(x).detach(), labelSigmoid) plt.plot(x.detach(), y.detach(), labelTanh) plt.legend() plt.title(Sigmoid vs Tanh) plt.tight_layout() plt.show()从可视化中可以直观看到Tanh的优势输出范围(-1,1)的对称区间解决了Sigmoid不以零为中心的问题梯度强度在相同输入下Tanh的梯度比Sigmoid更大曲线形状更陡峭的过渡区对输入变化更敏感但Tanh仍然存在梯度消失问题。我在RNN项目中测试发现虽然Tanh比Sigmoid表现更好但在处理长序列时仍然会出现梯度衰减。4. ReLU函数简单却强大的现代选择ReLURectified Linear Unit的实现最为简单def relu(x): return torch.maximum(torch.tensor(0), x) # PyTorch内置版本 torch_relu torch.nn.ReLU()绘制ReLU及其导数的代码有个小技巧——需要手动定义导数x torch.linspace(-3, 3, 1000, requires_gradTrue) y relu(x) # 手动计算导数 with torch.no_grad(): derivative (x 0).float() plt.figure(figsize(12, 5)) plt.subplot(1, 2, 1) plt.plot(x.detach(), y.detach()) plt.title(ReLU Function) plt.subplot(1, 2, 2) plt.step(x.detach(), derivative, wherepost) plt.title(ReLU Derivative) plt.show()ReLU的特性使其成为现代深度学习的首选计算效率只需要比较和取最大值操作稀疏激活负输入直接输出0减少参数更新缓解梯度消失正区梯度恒为1允许深层网络训练但ReLU也有著名的死亡神经元问题一旦神经元输出为0可能永远无法激活。我在训练CNN时遇到过约15%的神经元永久死亡的情况这时可以尝试LeakyReLU等变体。5. 三函数对比与实战建议现在我们将三个函数放在同一坐标系中比较x torch.linspace(-4, 4, 1000) plt.figure(figsize(10, 6)) plt.plot(x, sigmoid(x).detach(), labelSigmoid) plt.plot(x, tanh(x).detach(), labelTanh) plt.plot(x, relu(x).detach(), labelReLU) plt.legend() plt.grid(True) plt.title(Three Activation Functions Comparison) plt.show()从实际应用角度这是我的经验总结何时使用哪种激活函数场景推荐激活函数理由二分类输出层Sigmoid天然概率输出RNN/LSTMTanh处理正负信号CNN/深度前馈网络ReLU计算高效担心神经元死亡LeakyReLU保留负值信息常见问题解决方案梯度消失尝试ReLU配合BatchNorm输出爆炸添加梯度裁剪训练不稳定调整学习率或使用Mish等平滑激活函数在Kaggle比赛中我通常会先使用ReLU作为基线然后根据验证集表现尝试Swish等新函数。记住没有绝对最好的激活函数只有最适合特定数据和架构的选择。

相关文章:

别再死记硬背了!用Python和PyTorch亲手画一遍Sigmoid、Tanh、ReLU激活函数,理解立马不一样

用Python和PyTorch亲手绘制激活函数:从代码中理解神经网络的核心机制 在深度学习的世界里,激活函数就像是神经元的"开关",决定了信息是否应该被传递下去。很多初学者会陷入死记硬背函数公式和特性的误区,却忽略了最本质…...

8大网盘直链下载神器:告别限速,一键获取真实下载地址

8大网盘直链下载神器:告别限速,一键获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

突破Windows远程桌面限制:RDP Wrapper Library完全指南

突破Windows远程桌面限制:RDP Wrapper Library完全指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾因Windows家庭版只能单用户远程连接而困扰?想同时让家人使用电脑、自己远程办…...

OpenClaw 2.6.6 安装避坑 + 必装技能 新手入门教程

OpenClaw 2.6.6 保姆级部署 必装技能全攻略|10 分钟打造高效数字员工 下载地址:https://xiake.yun/api/download/package/12?promoCodeIV3FAC171F46 一、OpenClaw 是什么?核心优势 OpenClaw(昵称小龙虾)是可直接操…...

为什么92%的Python跨端项目在macOS M-series上编译失败?Apple Silicon专用符号表修复方案曝光

更多请点击: https://intelliparadigm.com 第一章:Apple Silicon架构下Python跨端编译失败的根因诊断 Apple Silicon(M1/M2/M3)采用ARM64指令集与统一内存架构,导致传统基于x86_64构建的Python扩展模块在交叉编译或pi…...

AlienFX Tools终极指南:500KB替代AWCC,彻底掌控你的Alienware设备

AlienFX Tools终极指南:500KB替代AWCC,彻底掌控你的Alienware设备 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 还在为臃肿的…...

如何用AKShare快速获取金融数据?Python量化投资必备工具完全指南

如何用AKShare快速获取金融数据?Python量化投资必备工具完全指南 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirr…...

用LabVIEW给ESP32做个远程监控面板:TCP通信+OLED显示温度(附完整Arduino代码)

基于LabVIEW与ESP32的智能监控系统开发实战 在物联网技术快速发展的今天,远程监控系统已成为工业控制、环境监测等领域的重要工具。本文将详细介绍如何利用LabVIEW和ESP32开发板构建一套完整的远程监控系统,实现温度数据的实时采集、传输与可视化展示&am…...

如何用WebPlotDigitizer快速从图表图像中提取数据:完整指南

如何用WebPlotDigitizer快速从图表图像中提取数据:完整指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经遇到…...

告别网盘限速:如何通过本地解析技术实现多平台文件高速下载

告别网盘限速:如何通过本地解析技术实现多平台文件高速下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...

Mamba-3 在金融时序预测中的应用:从理论到 PyTorch 实现

一、状态空间模型(SSM)与 Mamba 是什么? 如果你做过时序预测,大概率用过 Transformer 或 LSTM。Transformer 的自注意力机制虽然强大,但计算复杂度是 O(n),序列一长就爆显存。LSTM 倒是线性复杂度&#xff…...

Switch大气层整合包终极指南:5步解锁游戏新境界

Switch大气层整合包终极指南:5步解锁游戏新境界 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层整合包作为Nintendo Switch最强大的自制系统解决方案,为玩家带…...

避开MATLAB优化那些坑:fmincon求解失败?可能是你的初始点和选项没设对

MATLAB优化实战:破解fmincon求解失败的五大关键策略 当你在MATLAB中运行fmincon优化求解器时,是否经常遇到"求解失败"的提示?这往往不是代码本身的错误,而是优化过程中的关键参数设置不当所致。本文将深入剖析fmincon求…...

从Kaggle金牌方案里,我扒出了3种给神经网络‘组队’的野路子(模型融合实战)

Kaggle金牌方案揭秘:3种颠覆性的神经网络集成策略 在数据科学竞赛的战场上,单打独斗的模型往往难以登顶冠军宝座。那些最终摘得Kaggle金牌的解决方案,几乎都藏着一个不为人知的秘密武器——非传统的模型集成技术。这些方法很少出现在教科书里…...

AI_10_Coze_Multi-Agent多智能体

学习目标 了解什么是多智能体掌握多智能体的创建方式了解单Agent自主规划模式 一、 什么是Multi-Agent 在单 Agent 模式下处理复杂任务时,你必须编写非常详细和冗长的提示词,而且你可能需要添加各种插件和工作流等,这增加了调试智能体的复…...

若依微服务实战:SpringBoot 2.x + WebSocket 实现实时消息推送(含完整代码与网关配置)

若依微服务架构下WebSocket深度整合实战指南 在分布式系统架构中,实时消息推送已成为提升用户体验的关键能力。作为国内广泛使用的开源微服务解决方案,若依(RuoYi)框架为企业级应用提供了完整的基础设施,但在实时通信方面的原生支持仍需开发者…...

WindowResizer:Windows窗口调整的终极免费解决方案,让每个窗口都听你指挥

WindowResizer:Windows窗口调整的终极免费解决方案,让每个窗口都听你指挥 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些固执的Windows窗口而烦…...

WechatRealFriends:微信单向好友检测的技术实现与实用指南

WechatRealFriends:微信单向好友检测的技术实现与实用指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends…...

Seraphine终极指南:英雄联盟智能辅助工具深度解析

Seraphine终极指南:英雄联盟智能辅助工具深度解析 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的对局中,你是否曾因错过接受匹配而懊恼不已?是否在BP阶段面对…...

如何高效批量下载抖音内容:douyin-downloader专业用户实战指南

如何高效批量下载抖音内容:douyin-downloader专业用户实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallba…...

基于Electron与React的Gemini CLI现代化GUI开发实践

1. 项目概述:为Gemini CLI打造一个现代化的桌面GUI如果你和我一样,经常在终端里和Google的Gemini大模型打交道,那你肯定对gemini-cli这个官方命令行工具不陌生。它功能强大,但纯文本交互的方式,对于需要频繁切换对话、…...

Nucleus Co-Op:单机游戏分屏多人同玩的终极解决方案

Nucleus Co-Op:单机游戏分屏多人同玩的终极解决方案 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾梦想过与朋友在同一台电脑…...

Bebas Neue:重新定义标题设计的免费开源字体艺术 [特殊字符]

Bebas Neue:重新定义标题设计的免费开源字体艺术 🎨 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 还在寻找一款能够让你的设计瞬间提升专业感的免费开源字体吗?今天我要向你…...

微信API开发:iPad协议5分钟搞定全功能

微信API开发:iPad协议5分钟搞定全功能老哥,做微信二次开发,最怕啥?不是码代码,是适配!今儿个GeWe,明儿个wechatapi,后天又冒出个新框架,每次升级都得重写底层&#xff0c…...

体验Taotoken控制台在API密钥管理与访问控制上的便捷性

体验Taotoken控制台在API密钥管理与访问控制上的便捷性 1. 密钥管理的集中化操作 Taotoken控制台将API密钥管理功能整合在统一界面中,用户登录后即可在左侧导航栏找到"API密钥"入口。创建新密钥只需点击"生成API密钥"按钮,系统会自…...

SQL如何对加密后的视图进行维护_查看与管理加密逻辑

加密视图定义被SQL Server二进制加密且原始文本永久丢弃,仅能通过sys.views与sys.sql_modules中is_encrypted1且definition为NULL确认;必须DROPCREATE修改,不可ALTER或图形化设计;不提供实质安全防护,仅防低权限用户查…...

face-api.js核心技术深度解析:5个关键架构设计与性能优化实践

face-api.js核心技术深度解析:5个关键架构设计与性能优化实践 【免费下载链接】face-api.js JavaScript API for face detection and face recognition in the browser and nodejs with tensorflow.js 项目地址: https://gitcode.com/gh_mirrors/fa/face-api.js …...

别再死记硬背ASCII码表了!用Python 3.11快速查询与转换字符编码(附实战代码)

Python 3.11字符编码实战:从原理到高效查询技巧 字符编码是每个开发者迟早要面对的"必修课"。上周团队新来的实习生小张就遇到了一个典型问题:他写的Python脚本在读取中文CSV文件时,屏幕上突然出现了一堆像"ˆ‘š„"这样…...

别只盯着论文看!用Calib3D和Place3D,手把手教你搭建更可靠的自动驾驶感知系统

从论文到工程:用Calib3D与Place3D构建高可靠自动驾驶感知系统 当特斯拉的工程师在2023年AI Day展示他们的多摄像头感知系统时,一个被反复强调的词是"可靠性"。这不仅是学术论文里的评估指标,更是决定自动驾驶系统能否上路的生死线。…...

避开这些坑,你的保研路会顺很多:一位C2学长的浙软、东南、哈深踩坑实录

保研避坑指南:从浙软到哈深的实战经验与策略解析 1. 保研前必须了解的核心概念 保研这场没有硝烟的战争,从你踏入大学校门那一刻就已经悄然开始。但真正决定成败的,往往不是GPA那几个小数点,而是你是否掌握了那些藏在规则背后的&q…...