《Python 应用机器学习:代码实战指南》笔记30 深度学习核心 | 激活函数完全指南:Sigmoid、Tanh、ReLU 到现代变体

深度学习核心 | 激活函数完全指南:Sigmoid、Tanh、ReLU 到现代变体

当你第一次接触神经网络时,有没有这样一个困惑:
为什么神经网络必须使用“激活函数”?
它到底做了什么?又为什么存在那么多不同形式?
本文将系统讲清楚这些问题,并带你理解每一种常见激活函数的优缺点及适用场景。


一、激活函数到底是什么?

激活函数(Activation Function)是神经网络中每个神经元的非线性变换器。
它决定了一个神经元在接收到加权和之后究竟输出什么。

简单来说:

  • 如果没有激活函数,所有层都是线性的运算,那么 无论多少层叠加,整个网络只不过是一个线性变换
  • 只有加入激活函数,网络才具备拟合复杂非线性关系的能力,是深度学习强大表达力的关键。

二、常见激活函数解析

下面我们从经典到现代、从简单到进阶,一一解释:


1. Sigmoid 函数 — “概率型开关”

公式:
f(x) = 1 / (1 + e⁻ˣ)

它能把任意实数压缩到 0 到 1 之间。

优点:

  • 输出固定在 (0, 1) 之间,适合用作 输出概率
  • 可微分,对梯度下降友好。

缺点:

  • 当输入值很大或很小时梯度接近 0,会导致 梯度消失
  • 输出不是以 0 为中心,可能减缓训练速度。

👉 因此在现代深度网络中,Sigmoid 更多用于输出层二分类场景,而不是隐藏层。


2. Tanh 函数 — “对称 S 形”

公式:
tanh(x) = (eˣ − e⁻ˣ) / (eˣ + e⁻ˣ)

输出范围是 –1 到 1,比 Sigmoid 有更好的中心对称性。

优点:

  • 输出以 0 为中心,有助于梯度平衡传播。
  • 相比 Sigmoid,训练更稳定一些。

缺点:

  • 仍然会遭遇梯度消失问题,特别在深层网络中。

3. ReLU(修正线性单元) — 当前最常用

定义:
f(x) = max(0, x)

直观理解:

  • 所有正数原样输出
  • 所有负数输出 0

优点:

  • 计算简单,收敛快
  • 在隐藏层里能有效缓解梯度消失

缺点:

  • 可能出现所谓的 “死神经元” 问题:某些神经元输出恒等于 0,无法参与学习。

4. Leaky ReLU / PReLU 等变体

为了修复 ReLU 的“死神经元”问题:

  • Leaky ReLU:在 x < 0 时,让它输出一个很小的负斜率值
  • PReLU:让这个负斜率变成可学习参数

这些变种能让网络学习到更丰富的特征,尤其在深层模型中更稳定。


5. Softmax — 多分类的概率输出

在最后一层常用:
它将一组实数转换为概率分布,所有输出加和为 1。

比 Sigmoid 更适合 多分类任务


三、激活函数对模型训练有什么影响?

激活函数不仅决定输出范围,还影响着:

梯度传播效率
训练稳定性
收敛速度
最终性能表现

换句话说,每一次你选择激活函数,都是在为整个模型的学习轨迹下注。


四、简单选函数指南

如果你现在在做模型或项目,可以参考:

🚀 隐藏层默认首选 ReLU / Leaky ReLU — 既快又稳
🔢 二分类输出层用 Sigmoid — 输出概率
🎯 多分类输出层用 Softmax
尝试更进阶的函数(如 Swish、GELU) 在特定任务可能有提升


五、结语:激活函数为什么那么重要?

很少有网络结构设计会像激活函数那样看似简单,却对最终效果影响巨大。
它看似是一个小函数,却决定了“非线性学习能力”的底层逻辑。

从 Sigmoid 到 ReLU,从简单到复杂,每一次进化都代表着对更高效率、更稳定训练的不断追求。

如果你想真正掌握深度学习,那么对激活函数的理解,不应停留在公式,而是要理解它在 数据流与梯度传播中的角色。


 (本文内容基于Pyrcz, M.J., 2024, Applied Machine Learning in Python: A Hands-on Guide with Code [e-book]. Zenodo. doi:10.5281/zenodo.15169138章节整理) (https://geostatsguy.github.io/MachineLearningDemos_Book/)

Read more

旧电脑秒变 AI 员工:OpenClaw 本地部署教程(含环境配置 + 插件开发 + 常见坑)

旧电脑秒变 AI 员工:OpenClaw 本地部署教程(含环境配置 + 插件开发 + 常见坑)

前言 本文基于最新OpenClaw版本编写,适配电脑低配置场景(最低2vCPU+2GiB内存+40GiB SSD),兼容Windows 10/11(优先WSL2)、Ubuntu 20.04+系统,全程纯操作指令,覆盖环境配置、本地部署、插件开发、高频坑排查。核心解决部署卡顿、国内网络适配、插件开发无思路、报错无法排查四大痛点,全程适配国内网络(国内镜像源)、国内大模型(通义千问、阿里云百炼等),无需海外代理,可稳定运行实现自动化办公(文件处理、IM对接、任务调度等)。 一、前置准备(适配优化) 1.1 硬件要求(最低适配) * CPU:Intel i3 4代+/AMD Ryzen 3 2000+(支持虚拟化,

By Ne0inhk
Flutter 组件 zxcvbnm 的适配 鸿蒙Harmony 实战 - 驾驭极致密码强度评估、实现鸿蒙端金融级账户准入安全与人性化安全感知的深度方案

Flutter 组件 zxcvbnm 的适配 鸿蒙Harmony 实战 - 驾驭极致密码强度评估、实现鸿蒙端金融级账户准入安全与人性化安全感知的深度方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 zxcvbnm 的适配 鸿蒙Harmony 实战 - 驾驭极致密码强度评估、实现鸿蒙端金融级账户准入安全与人性化安全感知的深度方案 前言 在鸿蒙(OpenHarmony)构建的全场景安全体系中,“账号安全”是所有隐私防护的起点。我们绝大多数开发者在处理用户注册时,依然采用 length > 6 这种极其原始的校验逻辑。殊不知,像 password123 这种符合长度规则的密码,在现代暴力破解算法面前几乎是瞬间沦陷。 如何让你的鸿蒙 App 具备一眼识破“弱密码”的火眼金睛?如何在高频率交互的注册界面实现秒级的安全评级? zxcvbnm 是一款基于波斯纳算法(zxcvbn)的高性能 Dart 实现。它不是简单的正则匹配,而是扫描字典、日期、序列乃至常用键盘模式,给出一个 0 到

By Ne0inhk
Flutter 组件 dascade 的适配 鸿蒙Harmony 实战 - 驾驭级联式异步数据流、实现鸿蒙端响应式 UI 状态泵与复杂业务逻辑解耦方案

Flutter 组件 dascade 的适配 鸿蒙Harmony 实战 - 驾驭级联式异步数据流、实现鸿蒙端响应式 UI 状态泵与复杂业务逻辑解耦方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 dascade 的适配 鸿蒙Harmony 实战 - 驾驭级联式异步数据流、实现鸿蒙端响应式 UI 状态泵与复杂业务逻辑解耦方案 前言 在鸿蒙(OpenHarmony)的大型复杂应用开发中,我们最头疼的问题往往不是单一接口的调用,而是“由于一个操作引发的连锁数据反应”。例如:当用户在鸿蒙平板上切换了一个项目的 ID,系统需要同时刷新任务列表、参与人员、最近讨论以及对应的缓存指纹,且这些操作往往互有依赖、顺序敏感。 如果你依然在 Activity 或 Widget 中写满了一层层的 then() 或是各种脏乱的 setState(),那么业务逻辑的“级联爆炸”将不可避免。 dascade 是一款专为级联式数据流(Cascading Streams)设计的轻量化状态管理工具。它能将复杂的异步逻辑链条抽象为一组可插拔、可观测的“级联节点”

By Ne0inhk