神经网络 - 激活函数、损失函数、优化器

神经网络核心组件全解析:激活函数、损失函数、优化器与鞍点问题

一文搞懂神经网络训练中的所有核心组件,从原理到选型,从公式到实战。


📑 目录


一、激活函数是什么?

为什么需要激活函数?

如果没有激活函数,神经网络会退化成线性模型:

y = W 2 ⋅ ( W 1 ⋅ x + b 1 ) + b 2 = ( W 2 W 1 ) ⋅ x + ( W 2 b 1 + b 2 ) y = W_2 \cdot (W_1 \cdot x + b_1) + b_2 = (W_2 W_1) \cdot x + (W_2 b_1 + b_2) y=W2⋅(W1⋅x+b1)+b2=(W2W1)⋅x+(W2b1+b2)

不管多少层,最终还是一个线性变换。网络再深也等于一层。

加上激活函数后:

h = σ ( W 1 ⋅ x + b 1 ) h = \sigma(W_1 \cdot x + b_1) h=σ(W1⋅x+b1)

y = W 2 ⋅ h + b 2 y = W_2 \cdot h + b_2 y=W2⋅h+b2

网络就能拟合任意复杂的非线性函数。

激活函数分两类

text 复制代码
隐藏层激活:为了引入非线性,让网络能拟合复杂函数
输出层激活:为了匹配任务,让输出变成想要的形式

两者目的完全不同,不能混为一谈。


二、隐藏层激活函数

2.1 Sigmoid

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1

导数:

σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x)(1 - \sigma(x)) σ′(x)=σ(x)(1−σ(x))

text 复制代码
输出范围:(0, 1)
导数范围:(0, 0.25]
优点 缺点
可表示概率 梯度消失严重
平滑可导 输出非零中心
- 计算含 exp,慢

适用: 二分类输出层(隐藏层已不推荐)


2.2 Tanh

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x

导数:

tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh'(x) = 1 - \tanh^2(x) tanh′(x)=1−tanh2(x)

text 复制代码
输出范围:(-1, 1)
导数范围:(0, 1]
优点 缺点
零中心 仍有梯度消失
比 Sigmoid 收敛快 计算含 exp

适用: RNN、LSTM 隐藏层


2.3 ReLU(最常用)

ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)

导数:

ReLU ′ ( x ) = { 1 , x > 0 0 , x ≤ 0 \text{ReLU}'(x) = \begin{cases} 1, & x > 0 \\ 0, & x \leq 0 \end{cases} ReLU′(x)={1,0,x>0x≤0

text 复制代码
输出范围:[0, +∞)
导数:0 或 1
优点 缺点
计算快 死神经元
不饱和 输出非零中心
稀疏激活 -
收敛快 -

适用: CNN、深层网络、大部分前馈网络、MCU 部署

什么是死神经元?

text 复制代码
x ≤ 0 时导数恒为 0
如果某个神经元一直输出 0
它的权重永远不更新
这个神经元就"死了"

2.4 LeakyReLU

LeakyReLU ( x ) = { x , x > 0 α x , x ≤ 0 \text{LeakyReLU}(x) = \begin{cases} x, & x > 0 \\ \alpha x, & x \leq 0 \end{cases} LeakyReLU(x)={x,αx,x>0x≤0

通常 α = 0.01 \alpha = 0.01 α=0.01。

优点 缺点
解决死神经元 多一个超参数
保留 ReLU 大部分优点 输出非零中心

适用: 深层网络、GAN


2.5 PReLU

PReLU ( x ) = { x , x > 0 α x , x ≤ 0 \text{PReLU}(x) = \begin{cases} x, & x > 0 \\ \alpha x, & x \leq 0 \end{cases} PReLU(x)={x,αx,x>0x≤0

其中 α \alpha α 是可学习参数。

优点 缺点
自适应负半轴斜率 参数增多
比 LeakyReLU 更灵活 小数据容易过拟合

2.6 ELU

ELU ( x ) = { x , x > 0 α ( e x − 1 ) , x ≤ 0 \text{ELU}(x) = \begin{cases} x, & x > 0 \\ \alpha(e^x - 1), & x \leq 0 \end{cases} ELU(x)={x,α(ex−1),x>0x≤0

优点 缺点
零中心 计算含 exp
负半轴平滑 比 ReLU 慢
抗噪声 -

2.7 SELU

SELU ( x ) = λ { x , x > 0 α ( e x − 1 ) , x ≤ 0 \text{SELU}(x) = \lambda \begin{cases} x, & x > 0 \\ \alpha(e^x - 1), & x \leq 0 \end{cases} SELU(x)=λ{x,α(ex−1),x>0x≤0

其中 λ ≈ 1.0507 \lambda \approx 1.0507 λ≈1.0507, α ≈ 1.6733 \alpha \approx 1.6733 α≈1.6733。

优点 缺点
自归一化 需要特定初始化
不需要 BatchNorm 只适合全连接网络

2.8 GELU(Transformer 标配)

GELU ( x ) = x ⋅ Φ ( x ) \text{GELU}(x) = x \cdot \Phi(x) GELU(x)=x⋅Φ(x)

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

近似形式:

GELU ( x ) ≈ 0.5 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) \text{GELU}(x) \approx 0.5x\left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right) GELU(x)≈0.5x(1+tanh(π2 (x+0.044715x3)))

优点 缺点
平滑 计算稍慢
效果好 -

适用: Transformer(BERT、GPT)


2.9 Swish / SiLU

Swish ( x ) = x ⋅ σ ( x ) \text{Swish}(x) = x \cdot \sigma(x) Swish(x)=x⋅σ(x)

优点
平滑
无上界有下界
效果好

2.10 Mish

Mish ( x ) = x ⋅ tanh ⁡ ( ln ⁡ ( 1 + e x ) ) \text{Mish}(x) = x \cdot \tanh(\ln(1 + e^x)) Mish(x)=x⋅tanh(ln(1+ex))

优点
平滑
比 Swish 稍好

2.11 隐藏层激活函数对比表

函数 输出范围 梯度消失 死神经元 计算速度 适用
Sigmoid (0, 1) 严重 无 慢 输出层
Tanh (-1, 1) 有 无 慢 RNN
ReLU [0, +∞) 无 有 快 首选
LeakyReLU (-∞, +∞) 无 无 快 深层
PReLU (-∞, +∞) 无 无 快 深层
ELU (-α, +∞) 无 无 中 抗噪
SELU (-λα, +∞) 无 无 中 自归一化
GELU (-∞, +∞) 无 无 中 Transformer
Swish (-∞, +∞) 无 无 中 通用
Mish (-∞, +∞) 无 无 中 通用

2.12 隐藏层选型口诀

text 复制代码
默认首选:ReLU
死神经元多:LeakyReLU / PReLU
RNN/LSTM:Tanh
Transformer:GELU
自归一化网络:SELU
MCU 部署:ReLU

三、输出层激活函数

3.1 Softmax(多分类互斥)

Softmax ( x i ) = e x i ∑ j = 1 K e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{K} e^{x_j}} Softmax(xi)=∑j=1Kexjexi

text 复制代码
输出范围:(0, 1)
所有输出之和 = 1
可看作概率分布

数值稳定版:

Softmax ( x i ) = e x i − max ⁡ ( x ) ∑ j e x j − max ⁡ ( x ) \text{Softmax}(x_i) = \frac{e^{x_i - \max(x)}}{\sum_j e^{x_j - \max(x)}} Softmax(xi)=∑jexj−max(x)exi−max(x)

适用: 多分类互斥,搭配 CrossEntropyLoss


3.2 Sigmoid(二分类 / 多标签)

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1

text 复制代码
输出范围:(0, 1)
每个输出独立
输出之和 ≠ 1

适用: 二分类、多标签分类,搭配 BCELoss


3.3 Linear(回归)

Linear ( x ) = x \text{Linear}(x) = x Linear(x)=x

text 复制代码
输出范围:(-∞, +∞)
不做任何变换

适用: 回归任务,搭配 MSELoss


3.4 Tanh(有界回归)

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x

text 复制代码
输出范围:(-1, 1)
零中心

适用: 回归(有界输出)、角度预测(sin/cos)


3.5 输出层激活函数选择表

任务 输出层激活 损失函数 输出之和
多分类互斥 Softmax CrossEntropy = 1
二分类 Sigmoid BCE ≠ 1
多标签 Sigmoid BCE ≠ 1
回归 Linear MSE 无意义
有界回归 Tanh MSE 无意义

3.6 常见疑问:Sigmoid 能多分类吗?

能,但那是多标签分类,不是多分类互斥。

text 复制代码
多标签:每个标签独立,Sigmoid,BCE
  例子:一张图可以同时有猫、狗、人
  输出:[0.9, 0.7, 0.3],加起来 ≠ 1

多分类互斥:只能选一个,Softmax,CrossEntropy
  例子:一张图只能是猫、狗、人中的一种
  输出:[0.7, 0.2, 0.1],加起来 = 1

关键区别:输出之和要不要等于 1。


四、损失函数

4.1 MSE(均方误差)

MSE = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2 MSE=N1i=1∑N(yi−y^i)2

导数:

∂ MSE ∂ y ^ i = 2 N ( y ^ i − y i ) \frac{\partial \text{MSE}}{\partial \hat{y}_i} = \frac{2}{N}(\hat{y}_i - y_i) ∂y^i∂MSE=N2(y^i−yi)

优点 缺点
数学形式简单 对异常值敏感
对大误差敏感 分类任务梯度消失

适用: 回归


4.2 MAE(平均绝对误差)

MAE = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{N} \sum_{i=1}^{N} |y_i - \hat{y}_i| MAE=N1i=1∑N∣yi−y^i∣

优点 缺点
对异常值鲁棒 零点不可导
梯度稳定 收敛慢

4.3 Huber Loss

Huber = { 1 2 ( y − y ^ ) 2 , ∣ y − y ^ ∣ ≤ δ δ ∣ y − y ^ ∣ − 1 2 δ 2 , 否则 \text{Huber} = \begin{cases} \frac{1}{2}(y - \hat{y})^2, & |y - \hat{y}| \leq \delta \\ \delta |y - \hat{y}| - \frac{1}{2}\delta^2, & \text{否则} \end{cases} Huber={21(y−y^)2,δ∣y−y^∣−21δ2,∣y−y^∣≤δ否则

优点
小误差用 MSE,大误差用 MAE
兼顾精度和鲁棒性

4.4 CrossEntropy(多分类标配)

CE = − ∑ i = 1 K y i log ⁡ ( y ^ i ) \text{CE} = -\sum_{i=1}^{K} y_i \log(\hat{y}_i) CE=−i=1∑Kyilog(y^i)

因为 one-hot,简化为:

CE = − log ⁡ ( y ^ 正确类别 ) \text{CE} = -\log(\hat{y}_{\text{正确类别}}) CE=−log(y^正确类别)

导数(对 logits):

∂ CE ∂ z i = y ^ i − y i \frac{\partial \text{CE}}{\partial z_i} = \hat{y}_i - y_i ∂zi∂CE=y^i−yi

优点 缺点
梯度干净 对噪声敏感
收敛快 -
适合分类 -

适用: 多分类互斥,搭配 Softmax


4.5 BCE(二元交叉熵)

BCE = − 1 N ∑ i = 1 N y i log ⁡ ( y \^ i ) + ( 1 − y i ) log ⁡ ( 1 − y \^ i ) \text{BCE} = -\frac{1}{N} \sum_{i=1}^{N} y_i \\log(\\hat{y}_i) + (1 - y_i) \\log(1 - \\hat{y}_i) BCE=−N1i=1∑Nyilog(y\^i)+(1−yi)log(1−y\^i)

导数:

∂ BCE ∂ z i = y ^ i − y i \frac{\partial \text{BCE}}{\partial z_i} = \hat{y}_i - y_i ∂zi∂BCE=y^i−yi

适用: 二分类、多标签,搭配 Sigmoid


4.6 Focal Loss(类别不平衡)

FL = − α ( 1 − y ^ ) γ log ⁡ ( y ^ ) \text{FL} = -\alpha (1 - \hat{y})^\gamma \log(\hat{y}) FL=−α(1−y^)γlog(y^)

其中 γ \gamma γ 是聚焦参数,通常取 2。

优点
解决类别不平衡
聚焦难样本

适用: 目标检测、类别不平衡分类


4.7 KL 散度

KL ( P ∥ Q ) = ∑ i P ( i ) log ⁡ P ( i ) Q ( i ) \text{KL}(P \| Q) = \sum_i P(i) \log \frac{P(i)}{Q(i)} KL(P∥Q)=i∑P(i)logQ(i)P(i)

适用: 知识蒸馏、分布对齐、变分自编码器


4.8 Triplet Loss

L = max ⁡ ( 0 , d ( a , p ) − d ( a , n ) + margin ) L = \max(0, d(a, p) - d(a, n) + \text{margin}) L=max(0,d(a,p)−d(a,n)+margin)

其中:

text 复制代码
a = anchor(锚点)
p = positive(同类)
n = negative(异类)

适用: 人脸识别、度量学习


4.9 损失函数对比表

损失 任务 输出层 对大误差 对异常值
MSE 回归 Linear 非常敏感 敏感
MAE 回归 Linear 线性 鲁棒
Huber 回归 Linear 折中 较鲁棒
CE 多分类 Softmax 敏感 敏感
BCE 二分类/多标签 Sigmoid 敏感 敏感
Focal 不平衡分类 Softmax 聚焦难样本 敏感
KL 分布对齐 Softmax - -
Triplet 度量学习 Linear - -

4.10 损失函数选型口诀

text 复制代码
回归 → MSE / Huber / MAE
多分类互斥 → CrossEntropy
二分类 → BCE
多标签 → BCE
类别不平衡 → Focal Loss
知识蒸馏 → KL
度量学习 → Triplet

五、梯度优化器

5.1 SGD(随机梯度下降)

w = w − η ⋅ g w = w - \eta \cdot g w=w−η⋅g

优点 缺点
简单 容易震荡
内存小 收敛慢
泛化好 对学习率敏感

5.2 Momentum(加惯性)

v = β ⋅ v + g v = \beta \cdot v + g v=β⋅v+g

w = w − η ⋅ v w = w - \eta \cdot v w=w−η⋅v

优点
方向稳
冲过小坑
加速收敛

5.3 Nesterov Momentum

v = β ⋅ v + ∇ L ( w − η ⋅ β ⋅ v ) v = \beta \cdot v + \nabla L(w - \eta \cdot \beta \cdot v) v=β⋅v+∇L(w−η⋅β⋅v)

w = w − η ⋅ v w = w - \eta \cdot v w=w−η⋅v

优点
比 Momentum 更准
收敛更快

5.4 Adagrad

s = s + g 2 s = s + g^2 s=s+g2

w = w − η s + ϵ ⋅ g w = w - \frac{\eta}{\sqrt{s} + \epsilon} \cdot g w=w−s +ϵη⋅g

优点 缺点
自适应学习率 学习率单调递减
适合稀疏数据 后期几乎不更新

5.5 RMSprop

s = β ⋅ s + ( 1 − β ) ⋅ g 2 s = \beta \cdot s + (1 - \beta) \cdot g^2 s=β⋅s+(1−β)⋅g2

w = w − η s + ϵ ⋅ g w = w - \frac{\eta}{\sqrt{s} + \epsilon} \cdot g w=w−s +ϵη⋅g

优点
自适应学习率
适合 RNN
对学习率不敏感

5.6 Adam(最常用)

一阶矩:

m = β 1 ⋅ m + ( 1 − β 1 ) ⋅ g m = \beta_1 \cdot m + (1 - \beta_1) \cdot g m=β1⋅m+(1−β1)⋅g

二阶矩:

v = β 2 ⋅ v + ( 1 − β 2 ) ⋅ g 2 v = \beta_2 \cdot v + (1 - \beta_2) \cdot g^2 v=β2⋅v+(1−β2)⋅g2

偏差修正:

m ^ = m 1 − β 1 t , v ^ = v 1 − β 2 t \hat{m} = \frac{m}{1 - \beta_1^t}, \quad \hat{v} = \frac{v}{1 - \beta_2^t} m^=1−β1tm,v^=1−β2tv

更新:

w = w − η ⋅ m ^ v ^ + ϵ w = w - \eta \cdot \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon} w=w−η⋅v^ +ϵm^

优点 缺点
收敛快 内存大
对学习率不敏感 泛化有时不如 SGD
通用 -

5.7 AdamW(Transformer 标配)

w = w − η ⋅ m ^ v ^ + ϵ − η ⋅ λ ⋅ w w = w - \eta \cdot \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon} - \eta \cdot \lambda \cdot w w=w−η⋅v^ +ϵm^−η⋅λ⋅w

优点
权重衰减正确
泛化更好
Transformer 标配

5.8 优化器对比表

优化器 动量 自适应 权重衰减 收敛速度 内存
SGD 无 无 手动 慢 小
Momentum 有 无 手动 中 小
Adagrad 无 有 手动 中 中
RMSprop 无 有 手动 中 中
Adam 有 有 不完善 快 大
AdamW 有 有 完善 快 大

5.9 优化器选型口诀

text 复制代码
新手/通用 → Adam,lr=0.001
图像分类 → SGD+Momentum,lr=0.01
RNN/LSTM → RMSprop 或 Adam
Transformer → AdamW,lr=0.0001
追求泛化 → SGD+Momentum
追求速度 → Adam / AdamW

六、鞍点问题

6.1 什么是鞍点?

鞍点是梯度为 0,但不是局部最小值的点。

text 复制代码
某些方向是上升
某些方向是下降

数学上:

∇ L = 0 \nabla L = 0 ∇L=0

但 Hessian 矩阵既有正特征值,也有负特征值。

6.2 为什么高维空间鞍点更多?

text 复制代码
n 维空间中:
  局部最小值:所有方向都上升 → 概率 ≈ 1/2^n
  鞍点:部分上升部分下降 → 概率远大于局部最小值

所以高维空间里,鞍点比局部最小值常见得多。

6.3 解决鞍点的方法

方法 原理
Momentum 动量让参数在鞍点处继续前进
Adam 自适应学习率,梯度小的方向自动放大步长
噪声注入 在梯度上加随机噪声,帮助跳出鞍点
随机初始化 避免一开始就落在鞍点
二阶优化 用 Hessian 信息判断方向(牛顿法、LBFGS)
Skip Connection 残差连接,让梯度可以直接跳过
学习率调度 Warmup + 余弦退火,帮助跳出鞍点

6.4 鞍点 vs 局部最小值

项目 鞍点 局部最小值
梯度 0 0
方向 部分上升部分下降 全上升
高维空间 常见 稀少
解决 动量、噪声 随机重启

七、综合应用场景

场景 隐藏层激活 输出层激活 损失函数 优化器 学习率
图像分类 ReLU Softmax CrossEntropy SGD+M 0.01
目标检测 ReLU Linear+Softmax 多任务 SGD+M 0.01
语义分割 ReLU Softmax CE+Dice Adam 0.001
自然语言 GELU Linear CrossEntropy AdamW 0.0001
语音识别 ReLU/GELU Softmax CTC Adam 0.001
时序预测 ReLU/Tanh Linear MSE/Huber Adam 0.001
电机观测器 ReLU Tanh MSE Adam 0.001
推荐系统 ReLU Sigmoid/Softmax BCE/CE Adam 0.001
强化学习 ReLU/Tanh Linear/Softmax TD/策略梯度 Adam 0.0003
GAN LeakyReLU Tanh/Sigmoid 对抗损失 Adam 0.0002

八、总结与选型口诀

8.1 核心公式

w = w − η ⋅ ∂ L ∂ w w = w - \eta \cdot \frac{\partial L}{\partial w} w=w−η⋅∂w∂L

8.2 选型总口诀

text 复制代码
隐藏层激活:
  默认 ReLU
  死神经元 → LeakyReLU
  RNN → Tanh
  Transformer → GELU
  MCU → ReLU

输出层激活:
  多分类互斥 → Softmax
  二分类/多标签 → Sigmoid
  回归 → Linear
  有界回归 → Tanh

损失函数:
  回归 → MSE
  多分类 → CrossEntropy
  二分类/多标签 → BCE
  不平衡 → Focal

优化器:
  通用 → Adam,lr=0.001
  图像 → SGD+Momentum,lr=0.01
  Transformer → AdamW,lr=0.0001
  RNN → RMSprop

鞍点:
  动量 + 自适应学习率 + 噪声注入

8.3 一句话总结

激活函数引入非线性,损失函数衡量误差,优化器更新权重。

隐藏层选 ReLU,输出层按任务选 Softmax/Sigmoid/Linear。

回归用 MSE,分类用 CE/BCE,不平衡用 Focal。

新手用 Adam,图像用 SGD+M,Transformer 用 AdamW。

鞍点用动量、自适应学习率、噪声注入来解决。

相关推荐
数字融合1 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0111 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
xiangzhihong81 小时前
创之星花店多端业务闭环拆解
人工智能
奈落242 小时前
AI 编程从助手到 Agent:基于两份资料看哪些环节可以交出去,哪些必须自己攥住
大数据·人工智能
Joker可视化开发平台2 小时前
AI短剧接棒真人剧:开机量跌七成,普通人进场窗口在收窄
大数据·人工智能
澳鹏Appen2 小时前
澳鹏电子书 | 强化学习环境:为AI智能体打造高保真训练场
人工智能
吴佳浩2 小时前
单卡5090跑125B 大模型:Strata 把服务器级 MoE 拉进普通 PC
人工智能
Data-Miner2 小时前
AI做表格软件哪个好?专业评测:五维对比看清差距
人工智能
Raspberry_Pi_官方账号3 小时前
观察、理解与响应:Raspberry Pi 5 上的低功耗 CNN、VLM 和 SLM 工作负载
人工智能·神经网络·cnn·树莓派·raspberrypi