1. 深度学习中的激活函数基础
在神经网络的世界里,激活函数就像是神经元的"开关",决定了信息是否以及如何被传递下去。没有激活函数的神经网络,无论多少层都只能表示线性变换,就像一台没有齿轮的机器,无法处理复杂的非线性关系。
我第一次接触激活函数是在构建一个简单的图像分类器时。当时模型在训练集上表现很好,但在测试集上准确率始终停留在50%左右——这跟随机猜测没什么区别。后来发现问题就出在我使用了不合适的激活函数上。
1.1 激活函数的本质作用
激活函数的核心作用可以归纳为三点:
-
引入非线性:让神经网络能够拟合复杂的非线性函数。想象一下,如果没有非线性激活函数,多层网络就等同于单层网络,因为线性变换的组合仍然是线性的。
-
控制输出范围:不同的激活函数有不同的输出范围。比如Sigmoid输出在0到1之间,tanh在-1到1之间,这有助于控制梯度的大小和稳定性。
-
决定神经元是否被激活:通过阈值机制决定信息是否继续传递,模拟生物神经元的"全有或全无"特性。
1.2 常见激活函数对比
在深度学习中,我们常用的激活函数主要有以下几种:
| 激活函数 | 公式 | 输出范围 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | 1/(1+e^-x) | (0,1) | 输出平滑,适合概率输出 | 容易梯度消失,输出不以0为中心 |
| tanh | (e^x - e^-x)/(e^x + e^-x) | (-1,1) | 输出以0为中心 | 同样存在梯度消失问题 |
| ReLU | max(0,x) | [0,∞) | 计算简单,缓解梯度消失 | 存在"神经元死亡"问题 |
| Leaky ReLU | max(αx,x) | (-∞,∞) | 解决神经元死亡问题 | 需要调参选择α值 |
| Softmax | e^x_i/∑e^x_j | (0,1)且和为1 | 适合多分类概率输出 | 计算复杂度较高 |
提示:在实际项目中,ReLU及其变种(如Leaky ReLU、PReLU)通常作为隐藏层的首选,而Sigmoid和Softmax则更适合输出层,特别是分类问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
