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

【机器学习深度学习】常见激活函数

目录

一、激活函数的作用是什么?

二、常见激活函数分类总览

三、核心激活函数详解

1. Sigmoid 函数

2. Tanh(双曲正切)函数

3. ReLU(Rectified Linear Unit)

4. Leaky ReLU

5. GELU(Gaussian Error Linear Unit)

6. Softmax(用于分类)

四、激活函数选择建议

五、代码示例(图像比较)

六、总结


在深度学习中,激活函数(Activation Function)起着至关重要的作用。它们赋予神经网络非线性能力,使得模型能够学习复杂的模式。本文将系统介绍几种常见的激活函数,包括它们的定义、图像特性、优缺点以及典型应用场景


一、激活函数的作用是什么?

神经网络的每一层都在进行类似线性变换的操作(例如 y = Wx + b)。如果每一层都是线性的,那么无论堆叠多少层,整个网络仍然是一个线性模型,无法拟合非线性问题

引入激活函数,就像在神经元中注入“生命”,让模型能更好地捕捉图像、语音、文本等数据中的复杂非线性结构。


二、常见激活函数分类总览

名称数学表达是否线性是否有梯度饱和是否稀疏激活是否单边抑制
Sigmoid
Tanh
ReLU
Leaky ReLU
GELU

其中:

Softmax否(用于输出层)

三、核心激活函数详解

1. Sigmoid 函数

✅ 定义:

✅ 特性:

  • 输出范围:(0, 1)

  • 曲线呈S型,适合输出概率

  • 梯度在两端接近0,容易梯度消失

  • 不是零中心,可能导致学习效率下降

✅ 应用场景:

  • 二分类输出层

  • 生物神经模型的启发

【直观例子】

🎯比喻:

像一个 旧式收音机上的音量旋钮,你不断拧,它从“关”慢慢变“开”,但无论怎么拧也拧不到 0 或 1(永远接近但不等于)。

🎯特性直观解释:

  • 你输入越大(正数),它输出越接近 1;

  • 你输入越小(负数),它输出越接近 0;

  • 中间(比如0)时输出是 0.5。

🎯应用直觉:

“你是不是开心?”输出一个概率:开心概率 87%?那就是 sigmoid(输入) = 0.87。


2. Tanh(双曲正切)函数

✅ 定义:

✅ 特性:

  • 输出范围:(-1, 1),零中心

  • 比Sigmoid在训练初期表现更好

  • 同样存在梯度消失问题

✅ 应用场景:

  • 中间隐藏层(老式 RNN 中常见)

【直观例子】

🎯比喻:

Tanh 和 Sigmoid 类似,但它输出的是正负情绪,“开心度”从 -1 到 1。

🎯 举例:

  • 如果你有个“情绪神经元”,输入 -2 表示“悲伤”,+2 表示“开心”:

    • 输入 -2,输出 ≈ -0.96(很悲伤)

    • 输入 0,输出 0(中性)

    • 输入 2,输出 ≈ +0.96(很开心)

🎯特点:

  • 比 Sigmoid 更对称、居中,负面信息也能被表达。


3. ReLU(Rectified Linear Unit)

✅ 定义:

✅ 特性:

  • 输出非负,激活稀疏,效率高

  • 收敛速度快,不易梯度消失

  • 缺点:可能“死亡神经元”(永远为0)

✅ 应用场景:

  • 当前最主流的激活函数

  • 深度CNN、Transformer 等几乎都用它

【直观例子】

🎯 比喻:

它就像一个 只测正电压的电压计,负电压一律显示为 0。

🎯 举例:

  • 输入 -3 → 输出 0(负电压测不到)

  • 输入 0 → 输出 0

  • 输入 2 → 输出 2(原样输出)

🎯直觉:

只关心“积极”的信息,负面的就直接“忽略”。


4. Leaky ReLU

✅ 定义:

其中 alpha 通常取 0.01

✅ 特性:

  • 解决 ReLU 的“死亡神经元”问题

  • 保留一定负数梯度,信息不完全丢失

✅ 应用场景:

  • 深层网络,如 GAN 中的判别器

【直观例子】

🎯比喻:

像 ReLU,但 对负数不是完全置零,而是象征性保留一点点信息,像“耳边风”但还是听进了一点。

🎯 举例:

假设 α = 0.01:

  • 输入 -3 → 输出 -0.03(不是完全0,保留微弱信号)

  • 输入 2 → 输出 2(正数正常输出)

🎯 优势:

防止“神经元死亡”——ReLU 一旦输出 0,梯度就是 0,学不动了;Leaky ReLU 还能继续学习。


5. GELU(Gaussian Error Linear Unit)

✅ 定义:

其中 $\Phi(x)$ 为标准正态分布的累积分布函数。

✅ 特性:

  • 更平滑的非线性

  • 结合概率与线性,有统计学基础

  • 训练效果优于 ReLU(尤其在Transformer中)

✅ 应用场景:

  • BERT、GPT 等大型预训练语言模型

【直观例子】

🎯比喻:

像是一个 聪明的门卫:不是简单的“过或不过”,而是:

“这个输入我有70%的把握是有用的,那我就通过70%的量。”

🎯 举例:

  • 输入 -2 → 输出 ≈ -0.04(觉得没啥用,几乎不给过)

  • 输入 0 → 输出 0(中立)

  • 输入 2 → 输出 ≈ 1.5(很有用,几乎全放行)

🎯为什么高端:

  • 比 ReLU 更平滑,不那么暴躁;

  • 大模型(如 BERT、GPT)都爱用它。


6. Softmax(用于分类)

✅ 定义(用于输出层):

✅ 特性:

  • 将输出映射为概率分布(总和为1)

  • 多分类问题中的首选

✅ 应用场景:

  • 神经网络最后一层的多分类任务

【直观例子】

🎯比喻:

比如你看到一张动物照片,你内心评分如下:

  • 狗:3分

  • 猫:1分

  • 鸟:0分

Softmax 会把它转换成概率:

  • 狗 84%

  • 猫 11%

  • 鸟 5%

🎯 你就会选“狗”这个类作为输出。

函数图像形状特征
SigmoidS形上限 1,下限 0,斜率中间最大
TanhS形(对称)上限 1,下限 -1,更“均衡”
ReLU折线(0 开始,斜向上)负数为0,正数直线
Leaky ReLU折线(负斜率微小)类似 ReLU,但负半轴有微斜
GELU更柔和的 S形平滑版 ReLU,有概率感
Softmax输出多个条形概率图多分类的概率分布

四、激活函数选择建议

场景推荐激活函数
二分类输出层Sigmoid
多分类输出层Softmax
一般隐藏层ReLU 或 GELU
避免 ReLU 死亡神经元Leaky ReLU
需要更平滑拟合Tanh / GELU
语言模型/TransformerGELU 是默认选择

五、代码示例(图像比较)

 说明:该代码主要对比6前面所讲的6种常见激活函数进行图示对比。

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as np# 定义输入区间
x = torch.linspace(-5, 5, 200)
x_np = x.numpy()# 定义激活函数列表(名称,函数)
activation_funcs = [("Sigmoid", torch.sigmoid),("Tanh", torch.tanh),("ReLU", F.relu),("Leaky ReLU", F.leaky_relu),("GELU", F.gelu),("Softmax", lambda x: F.softmax(x, dim=0))  # 注意:Softmax 需要设置 dim
]# 画图
plt.figure(figsize=(12, 8))
for i, (name, func) in enumerate(activation_funcs, 1):plt.subplot(2, 3, i)y = func(x)plt.plot(x_np, y.detach().numpy(), label=name, color='royalblue')plt.title(name)plt.grid(True)plt.axhline(0, color='gray', linestyle='--', linewidth=0.5)plt.axvline(0, color='gray', linestyle='--', linewidth=0.5)plt.legend()plt.tight_layout()
plt.suptitle("常见激活函数曲线", fontsize=16, y=1.02)
plt.show()

【运行结果】

解读分析


【代码解读】

代码核心逻辑

x = torch.linspace(-5, 5, 200)

这行表示:我们创建了一个从 -5 到 5 的连续输入,一共 200 个点,作用是给激活函数提供输入值

然后每个函数都会计算这些输入对应的输出,最终画在图上。


【逐个解释图像含义和为何长这样】

① Sigmoid

torch.sigmoid(x)
  • 曲线呈 S 型

  • 左边趋近于 0,右边趋近于 1;

  • 中间(x = 0)值为 0.5。

💡 原因解释:
Sigmoid 就是概率输出函数:输入越大输出越接近 1,越小越接近 0,中间是 0.5。

② Tanh

torch.tanh(x)

📈 图像形状:

  • 仍然是 S 型,但是对称的;

  • 左边趋近于 -1,右边趋近于 +1;

  • 中间是 0。

💡 对比 Sigmoid:
Sigmoid 输出范围 [0, 1],Tanh 输出 [-1, 1],所以 Tanh 的图像居中对称,更适合表示“正负情绪”或“中性”。

③ ReLU

F.relu(x)

📈 图像形状:

  • x < 0 时输出为 0(水平线);

  • x ≥ 0 时,输出等于 x(45°对角线上升)。

💡 解释:
ReLU 的意思就是 “不理负数,只传递正数”,所以负数全部变成 0。

④ Leaky ReLU

F.leaky_relu(x)

📈 图像形状:

  • x < 0 区域不是水平线,而是轻微向下斜;

  • x ≥ 0 区域仍是直线上升。

💡 解释:
Leaky ReLU 在负值区域也留一点“梯度”,例如让 x=-3 输出 -0.03(而不是 ReLU 的 0),可以防止神经元“死掉”。

⑤ GELU

F.gelu(x)

📈 图像形状:

  • 看起来像 ReLU + S型平滑过渡;

  • x 越大,输出越接近 x;

  • x 越小,输出越接近 0,但比 ReLU 更平滑。

💡 解释:
GELU 用概率方式决定信息是否通过,结果像一个“柔软的 ReLU”,是 Transformer 默认激活函数。

⑥ Softmax

F.softmax(x, dim=0)

📈 图像解释:

  • 会像一座高高的“波峰”,其余值低;

  • 因为 Softmax 是对所有输入整体归一化为概率

💡 例子:
如果输入是 [2, 1, 0],Softmax 会输出 [0.71, 0.26, 0.03] —— 最大值被高亮,其他抑制。

所以 Softmax 的图像并不像单独函数那样“逐点曲线”,而是一个全体归一化的概率分布。


【输出结果】

这段代码会生成一个包含以下六个子图的图像:

  • Sigmoid:S 型曲线,范围 [0, 1]

  • Tanh:双曲正切,对称的 S 形,范围 [-1, 1]

  • ReLU:负值为0,正值线性

  • Leaky ReLU:负值保留一点微弱斜率(例如 α=0.01)

  • GELU:像平滑的 ReLU,带概率因素

  • Softmax:由于是对整段 x 进行归一化,形状会像“波峰型分布”

函数名输出范围样式直觉解释
Sigmoid(0, 1)S型概率
Tanh(-1, 1)S型(对称)情绪值
ReLU[0, ∞)折线(负0正斜)忽略负数
Leaky ReLU(-∞, ∞)折线(负微斜)保留负梯度
GELU类似 [0, x]平滑曲线概率控制信息通过
Softmax(0, 1), 总和=1波峰分布多分类选择概率

六、各激活函数的应用领域与原因详解

6.1 Sigmoid:二分类输出(如医学诊断、垃圾邮件识别)

应用场景:

  • 二分类问题的输出层(例如:是否患病?是否为垃圾邮件?)

  • 简单神经网络的早期结构

为什么?

  • 输出在 (0, 1) 范围内,很容易解释为“概率”;

  • 适合表示“是/否”“好/坏”“真/假”类型决策;

  • 缺点:梯度容易消失,不适合深层网络。


6.2 Tanh:情绪建模、信号处理(如语音识别)

应用场景:

  • 早期 RNN(循环神经网络)中的隐藏层

  • 需要表达正负信号(如正负情感、涨跌趋势)

为什么?

  • 输出在 (-1, 1),是对称的,更自然地表达正负信号;

  • 零中心有利于梯度传播;

  • 但在深层网络中也有梯度消失问题。


6.3 ReLU:图像处理、卷积神经网络(CNN)

应用场景:

  • 计算机视觉(图像分类、目标检测)

  • 卷积神经网络(CNN)中的隐藏层

为什么?

  • 简单、计算快;

  • 输出稀疏(大量为0),利于提取关键特征;

  • 不容易梯度消失 → 有助于深层网络训练;

  • 缺点:容易“死亡神经元”(一直为0)。


6.4 Leaky ReLU:GAN、对抗样本处理

应用场景:

  • 对抗生成网络(GAN)的判别器

  • 深层神经网络中对抗 ReLU 死亡问题

为什么?

  • 和 ReLU 相比,它对负数留了一点梯度(不过于激进);

  • 更稳定、更“灵活”,适合噪声丰富或梯度敏感的任务;

  • 在训练不稳定的场景中表现更好。


6.5 GELU:自然语言处理、预训练大模型(如 BERT, GPT)

应用场景:

  • Transformer 网络中的默认激活函数;

  • BERT、GPT、T5 等预训练语言模型;

  • 文本生成、问答、翻译等任务

为什么?

  • 比 ReLU 更平滑(带概率性),更适合表达复杂语言上下文;

  • 收敛更稳定、泛化能力强;

  • 兼具 ReLU 的稀疏性和 Sigmoid 的平滑性。


6.6 Softmax:多分类问题(如图像识别、文本分类)

应用场景:

  • 多分类输出层(猫/狗/鸟、情绪正负中性、话题分类等)

  • 所有类别互斥的任务中

为什么?

  • 把多个输出转换成概率分布(总和为1);

  • 适合模型做“唯一选择”的决策场景;

  • 输出结果易解释、利于后续评估。


总结表格

激活函数典型应用领域原因说明
Sigmoid二分类输出层映射到 (0,1),表达概率
TanhRNN、语音识别零中心对称,适合情绪等正负值任务
ReLUCNN、图像识别简单、快、不饱和、特征稀疏
Leaky ReLUGAN 判别器防止神经元死亡,训练稳定
GELUNLP 预训练模型平滑、高级、泛化能力强
Softmax多分类输出层归一化概率,表达唯一选择


💬 小结:怎么选?

  • 图像任务?→ ReLU / Leaky ReLU

  • 文本任务?→ GELU

  • 二分类?→ Sigmoid

  • 多分类?→ Softmax(输出层)

  • 情绪/涨跌?→ Tanh


七、总结

激活函数是深度学习的核心“非线性引擎”。
不同的函数适用于不同的网络结构和任务目标。随着模型的不断演化,像 GELU 等新型激活函数也正在替代传统函数,成为工业界的默认选择。

✅ 学术研究中,需要理解激活函数的数学性质
✅ 工程应用中,建议以 GELU(Transformer)或 ReLU(CNN)为主

相关文章:

  • 网站建设模板下载关键词优化的技巧
  • java 网站建设自学seo能找到工作吗
  • 建网站需要身份证吗网站关键词优化案例
  • 做直播网站软件有哪些软件有哪些百度云网盘搜索引擎
  • 图书馆网站建设调查问卷国家免费培训机构
  • 怎么样做问卷网站家庭优化大师下载
  • 基于MATLAB图像特征识别及提取实现图像分类
  • Docker环境搭建和docker性能监控
  • spring-ai 1.0.0 学习(十五)——RAG
  • 复用对象Aspose.Words 中 DocumentBuilder 的状态管理解析
  • 从理论到实践:马丁格尔策略真实案例验证
  • 【PolarCTF】01
  • 渗透靶场:事件和属性被阻止的反射xss
  • 前端中的 CI/CD 教程详解(附实践方案)
  • 搭建自己的WEB应用防火墙
  • 【MongoDB】MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作
  • 【MySQL】12. C语言与数据库的连接
  • 【PyTorch】保存和加载模型
  • ubuntu下好用的软件
  • 通过 HTML 子图和多尺度卷积 BERT 的双向融合实现可解释的恶意 URL 检测
  • HarmonyNext动画大全02-显式动画
  • FPGA基础 -- Verilog 格雷码(Gray Code)计数器设计与原理解析
  • 如何快速将iPhone中的文本保存到电脑上
  • Java课后习题(编程题)
  • 空间理解模型 SpatialLM 正式发布首份技术报告
  • Spring Web MVC ①