二、激活函数
1、激活函数知识
1.1 激活函数概念
每个神经元做的事情:
- 线性变换:
- 非线性激活:
激活函数sigma就是""非线性,若没有它,100层网络 = 1层网络

线性描述的是一种按比例变化和可叠加的直接关系,在几何上通常表现为一条直线。
如果没有激活函数,多层线性变换等价于单层线性变换:
y= W3(W2(W1x+ b1) + b2) + b3 = (W3W2W1)x+ 常数
无论堆多少层,最终还是线性变换,100层 = 1层

激活函数在每一层之间插入一道非线性的弯,让神经网络得以拟合任意复杂的函数。

1.2 激活函数的基本要求
|--------|-------------------------|
| 要求 | 说明 |
| 非线性 | 激活函数本身不能是线性的,否则多层堆叠没有意义 |
| 几乎处处可导 | 反向传播需要计算梯度 |
| 梯度稳定 | 导数不能太大(梯度爆炸)或太小(梯度消失) |
| 计算高效 | 前向和反向都要快(会被调用上亿次) |
1.3 激活函数发展史
阶跃函数(1958)
问题:导数几乎处处为0,反向传播时梯度无法通过。

Sigmoid(1986)
优点:处处可导,输出在(0,1)可解释为概率。缺点:两端饱和导致梯度消失(|x|大时导数趋近于0)。

Tanh(1990)
优点:输出在(-1,1),零中心,优化更顺畅。缺点:仍然是s型函数,两端饱和问题存在。

ReLU(2010)
优点:
- 正半轴导数恒为1,梯度畅通无阻
- 计算极快(比较运算)
- 产生稀疏激活(负值输出0)
缺点:
- 死亡****ReLU:负值输出永远为0,梯度为0,无法恢复
- 输出非零中心

Leaky ReLU / GELU / Swish
针对ReLU改进:
- Leaky ReLU:负半轴给一个小斜率,避免神经元死亡
- GELU:平滑近似,Transformer标配
- Swish:Google用NAS搜索出来的激活函数,性能优秀



1.4 激活函数选择指南
|---------------|------------------|
| 场景 | 推荐激活函数 |
| 输出层:二分类 | Sigmoid |
| 输出层:多分类 | Softmax |
| 隐藏层:普通CNN/RNN | ReLU |
| 隐藏层:Transform | GELU/SiLU |
| 死亡神经元多时 | Leaky ReLU / ELU |
1.5 激活函数总结
