type
Post
status
Published
date
Nov 13, 2025
slug
summary
本文按照激活函数的发展脉络,对深度学习中常用的激活函数进行了系统整理,涵盖其数学公式、取值范围、核心特点、PyTorch公式级实现代码、适用场景、出现背景(解决的具体问题)以及计算复杂度和参数情况等信息。通过这种方式,可以从工程和理论两个角度快速理解不同激活函数的设计动机与应用差异,帮助在实际模型设计(如推荐系统、CV、LLM 等)中进行合理选型。
tags
DL
NLP
LLM
开发
教程
思考
精选
category
知行合一
icon
password
本文按照激活函数的发展脉络,对深度学习中常用的激活函数进行了系统整理,涵盖其数学公式、取值范围、核心特点、PyTorch公式级实现代码、适用场景、出现背景(解决的具体问题)以及计算复杂度和参数情况等信息。通过这种方式,可以从工程和理论两个角度快速理解不同激活函数的设计动机与应用差异,帮助在实际模型设计(如推荐系统、CV、LLM 等)中进行合理选型。
激活函数
激活函数 | 数学公式 | 取值范围 | 核心特点 | PyTorch 手搓实现代码(纯数学公式版) | 适用场景 | 为什么会出现 / 解决的问题 | 计算量 | 参数 |
Sigmoid | (0,1) | 输出可解释为概率 | 1 / (1 + torch.exp(-x)) | 二分类输出层、CTR 预估、LSTM/GRU 门控 | 早期神经网络需要把输出压到 $(0,1)$ 表示概率,但深层网络中容易 梯度消失 | 中 | 无 | |
Tanh | (−1,1) | 零中心输出,比 Sigmoid 更适合隐藏层 | (torch.exp(x)-torch.exp(-x))/(torch.exp(x)+torch.exp(-x)) | RNN / LSTM / GRU 隐状态、门控及残差结构、需要输出对称区间时 | 为解决 Sigmoid 非零中心 导致训练慢的问题,但仍存在梯度消失 | 中 | 无 | |
ReLU | [0,+∞) | 计算极快、梯度稳定、产生稀疏激活、工程默认首选 | torch.maximum(x, torch.zeros_like(x)) # max()也可以 | CNN、MLP、深度网络主干 | 为解决 Sigmoid/Tanh 深层梯度消失和计算慢的问题 | 低 | 无 | |
Leaky ReLU | (−∞,+∞) | 负区间保留小梯度 | torch.where(x>0, x, alpha*x) | 推荐系统 DNN、深层 MLP、表征学习 | 为解决 ReLU 死亡神经元(负区间梯度为0) | 低 | alpha | |
PReLU | (−∞,+∞) | 负区间斜率可学习,表达能力更强 | torch.where(x>0, x, weight*x) | CNN、推荐系统深层网络 | 为解决 Leaky ReLU 负斜率固定不灵活的问题 | 低~中 | *weight初始值 | |
ELU | (−α,+∞) | 输出均值接近 0,负区间平滑 | torch.where(x>0, x, alpha*(torch.exp(x)-1)) | 深层 CNN、需要稳定梯度的网络 | 为解决 ReLU 输出偏正(负半轴全 0)、均值偏移问题 | 中 | alpha | |
Swish / SiLU | *σ 是 Sigmoid | (−∞,+∞) | 平滑、非单调、梯度更柔和 | x * (1/(1+torch.exp(-beta*x))) | 深层 MLP、视觉模型、推荐系统 | 为解决 ReLU 不连续、负半轴信息直接截断的信息丢失的问题 | 中 | beta |
GELU | *Φ 是高斯 CDF | (−∞,+∞) | 平滑,保留小负值、效果通常优于 ReLU | 0.5*x*(1+torch.tanh(torch.sqrt(torch.tensor(2/torch.pi))*(x+0.044715*x**3))) | Transformer / GPT / BERT / LLM | Transformer中改善 ReLU 的硬截断问题,让激活更平滑、信息保留更自然 | 中 | 无 |
Mish | (−∞,+∞) | 极度平滑,梯度稳定、但计算量大 | x * torch.tanh(torch.log(1+torch.exp(x))) | 一些视觉模型、追求上线的研究型模型 | 为进一步改进 Swish/GELU 的平滑性与梯度流 | 高 | 无 | |
Softmax | (0,1)(总和 = 1) | 概率归一化 | exp_x=torch.exp(x-torch.max(x,dim=dim,keepdim=True)[0]); exp_x/torch.sum(exp_x,dim=dim,keepdim=True) | 分类输出层、多分类头、注意力权重 | 为把任意分数转换为可比较 概率分布 | 高 | dim |
模块模板
测试
参考
- 一文搞懂激活函数(Sigmoid/ReLU/LeakyReLU/PReLU/ELU) - 知乎 里面关于梯度消失的可以看看,以及各个激活函数诞生的原因
- Author:YelloooBlue
- URL:https://tangly1024.com/article/31be32f0-1b7f-809a-9b0f-c2c937a1c9b7
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!





