《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

在 WSL 中通过 VSCode/Cursor+Cond 虚拟环境运行 Python 代码 全教程

在 WSL 中通过 VSCode/Cursor+Cond 虚拟环境运行 Python 代码 全教程 本文基于你已安装 WSL的前提,重点讲解「WSL 中安装 Miniconda→创建 Python 虚拟环境→VSCode/Cursor 连接 WSL 并使用 conda 环境运行代码」的完整流程,步骤精准可落地。 一、核心前提 * 已启用 WSL2(Ubuntu/Debian 等发行版),且能正常启动终端; * Windows 端已安装 VSCode/Cursor(建议最新版本); * 网络通畅(需下载 Miniconda 和 Python 包)。 二、步骤 1:

By Ne0inhk
Python 流程控制完全指南:条件语句 + 循环语句 + 实战案例(零基础入门)

Python 流程控制完全指南:条件语句 + 循环语句 + 实战案例(零基础入门)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 顺序语句:基础执行语句 * 二. 条件语句:实现 “如果… 否则…” 逻辑 * 2.1 核心语法格式 * 2.2 关键注意点 * 2.3 空语句 pass:占位符作用 * 2.4 练习题 * 三. 循环语句:实现 “重复执行” 逻辑 * 3.1 while 循环:条件满足就一直执行 * 3.2 for 循环:

By Ne0inhk

【Python】6 种方法轻松将 Python 脚本打包成 EXE 应用

以下是 2025–2026 年最实用的 6 种 Python 脚本打包成 Windows EXE 可执行文件 的主流方法,按易用性 × 普及度 × 实际场景排序。 排名方法/工具易用性生成文件大小启动速度运行速度反编译难度典型场景推荐指数 (★5)1PyInstaller★★★★★大(onefile 常 50–300MB)慢(几秒~几十秒)普通低绝大多数 GUI、小工具、初次尝试★★★★★2auto-py-to-exe★★★★★同 PyInstaller同上普通低零基础用户、GUI 操作打包★★★★☆3Nuitka★★★★☆中~小快明显更快(1.5–4×)中~高性能敏感、数值计算、想保护代码★★★★☆4cx_Freeze★★★★中较快普通低~中追求启动快、

By Ne0inhk

如何在 Mac 上安装 Python

所有最新的 MacOS(从 macOS 12.3 开始)都预装了 Python 版本(通常是 Python 2.x),但它已经过时并且不再受支持。要充分利用 Python 的功能,您需要安装 最新版本的 Python 。 本文提供了 分步教程 ,展示了 在 macOS (MacBook 旧版本和新版本,如 M1、M2、M3 或 M4)上安装和更新 Python 的所有有效方法,从检查预安装版本到下载和更新最新的 Python 并设置基本工具(如 IDE 和 包管理器) ,本指南将帮助您轻松地在任何 MacBook 设备上安装 Python。 先决条件 正在运行MacOS的笔记本电脑。

By Ne0inhk