概念介绍 • 函数详解 • 性能分析 • 选择指南
激活函数是神经网络中的非线性变换函数,作用于每个神经元的输出。它决定了神经元是否应该被"激活"(即输出信号传递给下一层)。数学上表示为:output = f(Σ(weights × inputs) + bias)
引入非线性:没有激活函数,多层神经网络等价于单层线性变换,无法学习复杂模式。激活函数让网络能够逼近任意复杂函数,解决XOR等非线性问题。
• 控制信息流动(门控机制)
• 归一化输出范围
• 引入稀疏性(如ReLU)
• 模拟生物神经元的激活特性
| 激活函数 | 公式 | 输出范围 | 主要用途 |
|---|---|---|---|
| Step | x ≥ 0 ? 1 : 0 | {0, 1} | 早期感知器(已弃用) |
| ReLU | max(0, x) | [0, +∞) | CNN隐藏层 |
| Sigmoid | 1/(1+e⁻ˣ) | (0, 1) | 二分类输出、门控 |
| Tanh | (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ) | (-1, 1) | RNN状态更新 |
| GELU | x·Φ(x) | ≈(-0.17, +∞) | Transformer FFN |
| SiLU/Swish | x·σ(x) | ≈(-0.28, +∞) | 现代LLM (LLaMA) |
| Softmax | eˣⁱ/Σeˣʲ | (0, 1), Σ=1 | 多分类输出、注意力 |
仅用于早期感知器和理论分析。现代神经网络不使用此函数。
CNN隐藏层(AlexNet, VGG, ResNet)、全连接层。是图像分类、目标检测的默认选择。
二分类输出层、LSTM/GRU门控(遗忘门、输入门、输出门)、注意力权重。
RNN/LSTM隐藏状态更新、候选记忆计算。需要输出正负值时使用。
Transformer FFN层。BERT、GPT-2/3/4、ViT等模型的标准选择。
现代大语言模型FFN层。LLaMA系列、Mistral的默认选择。通常与GLU结合使用(SwiGLU)。
多分类输出层、Transformer注意力权重计算、知识蒸馏。配合交叉熵损失使用。
将MatMul + Bias + 激活函数合并为单个CUDA kernel,减少50-67%显存读写。FLOP不变,但实际速度提升1.5x。
激活函数通常是内存带宽限制而非计算限制。优化内存访问比减少FLOP更重要。
Tensor Core仅加速矩阵乘法(MatMul),不处理激活函数。激活函数始终在CUDA Core执行。
| 优化技术 | FLOP变化 | 加速来源 | 实际效果 |
|---|---|---|---|
| Kernel Fusion | 0% (不变) | 减少显存读写 | ~1.5x 加速 |
| 混合精度 FP16 | 0% (不变) | 带宽减半 + Tensor Core | ~2x 加速 |
| 向量化 float4 | 0% (不变) | 指令数减少75% | ~2x 吞吐量 |
GPU通过专用硬件单元(SFU)加速exp、tanh等超越函数的计算
| 函数 | 时钟周期 | 实现方式 | 精度 |
|---|---|---|---|
| max(0, x) - ReLU | ~1 cycle | CUDA Core 比较指令 | 精确 |
| __expf(x) 快速版 | ~8 cycles | SFU 硬件查找表+插值 | ~2 ULP误差 |
| exp(x) 标准版 | ~20 cycles | SFU + 软件修正 | IEEE精确 |
| tanhf(x) | ~15-20 cycles | SFU exp + 除法 | IEEE精确 |
| __fdividef(x,y) | ~8 cycles | SFU 快速除法 | ~2 ULP误差 |
直接计算 e^x 对大的 x 很困难,所以把问题分解成两部分
直接计算 e^10 用泰勒级数: e^x = 1 + x + x²/2! + x³/3! + ...
需要 30+ 项才能收敛!太慢了。
范围规约后只需计算 e^0.298,4-5 项即可,然后乘以 2^14。
| 激活函数 | 使用位置 | 核心原因 | 典型模型 |
|---|---|---|---|
| ReLU | CNN卷积层后 | 计算极快、稀疏激活、缓解梯度消失 | AlexNet, VGG, ResNet, YOLO |
| Sigmoid | 门控机制、二分类输出 | 输出(0,1)表示比例或概率 | LSTM/GRU门控, 逻辑回归 |
| Tanh | RNN隐藏状态 | 零中心、有界输出防止状态爆炸 | LSTM候选值, GRU状态 |
| GELU | Transformer FFN层 | 平滑、概率性激活、NLP效果更好 | BERT, GPT-2/3/4, ViT |
| SiLU/Swish | 现代LLM FFN层 | 自门控、允许负值、比GELU更简单 | LLaMA, Mistral, Qwen |
| Softmax | 多分类输出、注意力权重 | 转换为概率分布(Σ=1) | 所有分类模型、Transformer |
| 场景 | 推荐激活函数 | 原因说明 |
|---|---|---|
| CNN 隐藏层 | ReLU / Leaky ReLU | 计算快、稀疏、符合图像非负特性 |
| RNN/LSTM 隐藏层 | Tanh | 有界输出、零中心、配合门控使用 |
| Transformer FFN层 | GELU / SiLU | 平滑、NLP任务效果显著更好 |
| 门控机制 | Sigmoid | 输出(0,1)表示"开启"程度 |
| 注意力权重 | Softmax | 归一化为概率分布 |
| 二分类输出层 | Sigmoid | 输出可解释为正类概率 |
| 多分类输出层 | Softmax | 输出为类别概率分布 |
| 回归输出层 | 无激活函数(线性) | 输出任意实数值 |