激活函数是神经网络中每个神经元的输出函数,用于引入非线性,从而使神经网络能够逼近复杂的非线性关系。没有激活函数的网络只能表示线性变换(如上一篇的线性回归不需要激活函数),因此不能解决实际中的非线性问题。激活函数的输入是该神经元的加权和,输出则是处理后的值,通过激活函数的输出可以决定是否激活一个神经元,或者说一个神经元的输出程度。
常见的激活函数主要有以下几种:
- Sigmoid函数:将输入映射到一个介于0和1之间的值。输出范围有上下界,使得神经元的输出相对平滑,可以用于概率输出。但在输入较大或较小的情况下容易饱和,导致梯度消失,使得训练过程变得困难。公式:
- ReLU函数:是目前最常用的激活函数之一,尤其在深度神经网络中。它是一种简单而有效的激活函数,将负值映射为零,正值保持不变。在很多情况下比Sigmoid函数表现更好,因为它避免了梯度消失问题。但在负值上始终为零,可能导致神经元的死亡。公式:
- Leaky ReLU函数:ReLU函数的一种改进版本,在负值区域引入一个小的斜率,以防止神经元死亡。在解决神经元死亡问题的同时,仍然保持了ReLU函数较好的性能。公式:
- Tanh函数:将输入映射到介于-1和1之间的值的激活函数。输出范围相对于Sigmoid函数来说更大,因此在某些情况下表现更好。但仍然存在梯度消失的问题。公式:
- ELU (Exponential Linear Unit) 函数:ELU 可以处理负数输入并且缓解梯度消失问题,使得网络的收敛性更好。公式:
- Softmax 函数:通常用于多分类任务的输出层,将输出转换为概率分布,使得所有输出的和为 1。公式:
最终对比情况如下:
激活函数 | 输出范围 | 优点 | 缺点 | 适用场景 |
Sigmoid | (0, 1) | 平滑输出,适用于概率计算 | 易梯度消失,训练慢 | 输出层(如二分类任务) |
Tanh | (-1, 1) | 输出均值为 0,收敛性较好 | 易梯度消失 | 隐藏层 |
ReLU | [0, ∞) | 计算高效,减轻梯度消失问题 | 神经元可能死亡 | 隐藏层,深度网络中常用 |
Leaky ReLU | (-∞, ∞) | 避免神经元死亡,改进版 ReLU | 需调节 α\alphaα 参数 | 隐藏层,深度网络中应用 |
ELU | (-∞, ∞) | 减轻梯度消失,收敛性好 | 计算较慢 | 隐藏层 |
Softmax | (0, 1) | 生成概率分布,适用于分类 | 输出间相互依赖,复杂度较高 | 输出层(如多分类任务) |
别忘了给这篇文章点个赞哦,非常感谢。我也正处于学习的过程,可能会有错,如果有问题,欢迎在评论区留言讨论,一起学习!