感知机是最简单的神经网络,实现线性二分类:
y=σ(∑j=1dwjxj+b)=σ(wTx+b)
其中 σ 为阶跃函数:
σ(z)={10z≥0z<0
单层感知机只能解决线性可分问题,无法解决XOR问题:
XOR问题:
(0,0) → 0 (0,1) → 1
(1,0) → 1 (1,1) → 0
无法用一条直线分隔两类
解决:多层感知机(MLP)引入隐藏层。
h=σ(W1Tx+b1)
o=W2Th+b2
- 隐藏层引入非线性变换
- 通用近似定理:含一个隐藏层的MLP可以近似任意连续函数
| 激活函数 | 公式 | 值域 | 特点 |
|---|
| Sigmoid | σ(z)=1+e−z1 | (0,1) | 梯度消失 |
| Tanh | tanh(z)=ez+e−zez−e−z | (−1,1) | 零中心 |
| ReLU | max(0,z) | [0,+∞) | 简单高效 |
| Leaky ReLU | max(αz,z) | (−∞,+∞) | 解决Dead ReLU |
| ELU | z if z>0; α(ez−1) if z≤0 | (−α,+∞) | 负区间平滑 |
| GELU | z⋅Φ(z) | (−0.17,+∞) | Transformer常用 |
| Swish | z⋅σ(βz) | (−0.28,+∞) | 自门控 |
Sigmoid梯度消失:
σ′(z)=σ(z)(1−σ(z))≤0.25
多层累积后梯度指数衰减:
∂W1∂L∝∏l=1Lσ′(zl)⋅Wl
ReLU的优势:
ReLU′(z)={10z>0z≤0
正区间梯度恒为1,有效缓解梯度消失。
多分类输出层激活函数:
Softmax(zi)=∑j=1Kezjezi
数值稳定性:
Softmax(zi)=∑j=1Kezj−max(z)ezi−max(z)
输入层 (d维) → 隐藏层1 (h1维) → 隐藏层2 (h2维) → 输出层 (K维)
z1 = W1·x + b1
a1 = σ(z1)
z2 = W2·a1 + b2
a2 = σ(z2)
z3 = W3·a2 + b3
output = Softmax(z3)
| 层 | 输入 | 权重 | 输出 |
|---|
| 输入→隐藏1 | (n,d) | W1∈Rd×h1 | (n,h1) |
| 隐藏1→隐藏2 | (n,h1) | W2∈Rh1×h2 | (n,h2) |
| 隐藏2→输出 | (n,h2) | W3∈Rh2×K | (n,K) |
均方误差(MSE):
LMSE=n1∑i=1n(yi−y^i)2
平均绝对误差(MAE):
LMAE=n1∑i=1n∣yi−y^i∣
Huber Loss:
Lδ={21(y−y^)2δ∣y−y^∣−21δ2∣y−y^∣≤δ∣y−y^∣>δ
交叉熵损失:
LCE=−∑i=1n∑k=1Kyiklogy^ik
Focal Loss(解决类别不平衡):
LFL=−αt(1−pt)γlogpt
- γ>0 减少易分类样本的损失权重
- αt 平衡正负样本
训练时以概率 p 随机将神经元输出置零:
h~=m⊙h,mj∼Bernoulli(1−p)
推理时缩放:htest=(1−p)⋅h
x^j=σB2+ϵxj−μB
yj=γjx^j+βj
- 训练时使用当前batch的均值和方差
- 推理时使用全局均值和方差
- 允许更大学习率,加速收敛
| 方法 | 公式 | 适用激活 |
|---|
| Xavier | W∼U[−nin+nout6,nin+nout6] | Tanh |
| He (Kaiming) | W∼N(0,nin2) | ReLU |
| LSUV | 逐层初始化使方差为1 | 通用 |