目录
激活函数(activation function)的作用是对网络提取到的特征信息进行非线性映射,提供网络非线性建模的能力。常见的激活函数有 Sigmoid、Tanh、ReLU、LeakyReLU 和 ELU 等。
1. Sigmoid 激活函数
Sigmoid 是一种常见的非线性激活函数,输入实数值并将其压缩到 (0,1) 范围内,适用于二元分类任务。其缺点是当输入值较大和较小时,梯度会接近于0从而导致梯度消失问题,函数的输出也不是以0为中心,指数计算复杂度高也更加耗时。其计算公式如下所示:
Sigmoid 激活函数 Pytorch 示例:
import torch
# 定义输入张量
x = torch.tensor([0.5, -0.1, 2.0])
# 使用Sigmoid激活函数
output = torch.sigmoid(x)
print(output)
Sigmoid 激活函数示意图:
2. Tanh 激活函数
双曲正切激活函数(hyperbolic tangent activation function, Tanh)也属于非线性激活函数,它可以将输入实数值映射到 [-1,1] 范围之间,适用于多元分类任务。输出是以零为中心,但是和sigmoid激活函数一样存在饱和问题,并仍未解决梯度消失问题。其计算公式如下所示:
Tanh 激活函数 Pytorch 示例:
import torch
# 定义输入张量
x = torch.tensor([0.5, -0.1, 2.0])
# 使用Tanh激活函数
output = torch.tanh(x)
print(output)
Tanh 激活函数示意图:
3. ReLU 激活函数
ReLU(The Rectified Linear Unit)是一种线性激活函数,该函数公式如下所示。相较于前两种,ReLU针对随机梯度下降的收敛有巨大的加速作用,能够在 时保持梯度不衰减,在一定程度上缓解了神经网络的梯度消失问题。ReLU在
时,传递函数的梯度将都变成0,造成不可逆转的神经元“死亡”,导致了数据多样化的丢失,并且ReLU是通过简单地对一个矩阵进行阈值计算得到,减少了计算资源的消耗,计算开支较少,所以作为卷积神经网络激活函数时,需要降低学习率值。
RELU 激活函数 Pytorch 示例: