PyTorch激活函数概述
在PyTorch中,激活函数是深度学习模型中非线性部分的关键组件,它们引入非线性能力,使得神经网络能够学习复杂的模式和特征。以下是一些常用的激活函数及其概述:
ReLU(Rectified Linear Unit)
- 形式:( f(x) = \max(0, x) )
- 特点:简单、高效,能够加速收敛并减少梯度消失问题。
- 注意:ReLU神经元可能“死亡”,即输出恒为零。可能导致网络中部分神经元始终不更新。
Leaky ReLU
- 形式:( f(x) = x ) if ( x > 0 ) else ( \alpha \times x )(通常 ( \alpha = 0.01 ))
- 特点:通过引入小的负数梯度修正ReLU的“死亡”问题。
Parameterized ReLU (PReLU)
- 形式:( f(x) = x ) if ( x > 0 ) else ( a \times x ),其中 ( a ) 是可学习的参数。
- 特点:提高网络表达能力,通过学习负轴的斜率来适应任务。
Sigmoid
- 形式:( f(x) = \frac{1}{1 + e^{-x}} )
- 特点:将输入压缩到 (0, 1) 之间,适合用于二分类和概率输出。
- 注意:易出现梯度消失问题,对0或1附近的输入梯度会很小。
Tanh(双曲正切)
- 形式:( f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} )
- 特点:输出范围 (-1, 1),对称于原点,中间区域对梯度消失问题有一定改善。
Softmax
- 形式:( f(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} )
- 特点:将输入压缩到0到1之间,且总和为1,常用于多分类最后一层。
ELU(Exponential Linear Unit)
- 形式:( f(x) = x ) if ( x \ge 0 ) else ( \alpha \times (e^x - 1) )
- 特点:在避免“死亡”ReLU问题的同时,输出接近0,一定程度上改善偏移不平衡。
Swish
- 形式:( f(x) = x \cdot \text{sigmoid}(x) )
- 特点:由Google提出,性能优于ReLU,保持了S形态,兼具解释性和灵活性。
激活函数在选择和使用时,通常需要结合具体任务和模型架构来考虑。在PyTorch中,激活函数通常可以通过torch.nn
模块调用,使用简单且灵活。