pytorch各种激活函数总结
- 0.思维导图预览
- 1. ReLU函数
- 1.1 改进版ReLU6函数
- 2. Sigmoid函数
- 3. Softmax函数
- 4. Tanh函数
- 5.(学习后更新)
0.思维导图预览
1. ReLU函数
ReLU(Rectified Linear Unit)线性整流函数
其公式为:
f
(
x
)
=
M
a
x
(
0
,
x
)
f(x)=Max(0,x)
f(x)=Max(0,x)
它将小于零的输入映射为0,而将大于等于零的输入保持不变。在PyTorch中,可以使用torch.nn.ReLU
类来表示。
ReLU函数求导简单方便;但是当反向传播过程中,权值更新小于0时,导致该处的导数始终为0,无法更新权值,会进入失活状态。
AlexNet就用的是ReLU函数
1.1 改进版ReLU6函数
其公式为:
f
(
x
)
=
m
i
n
(
m
a
x
(
x
,
0
)
,
6
)
f(x) = min(max(x, 0), 6)
f(x)=min(max(x,0),6)
在p6 MobileNet网络中有使用过。
2. Sigmoid函数
Sigmoid函数将输入值压缩到0和1之间,在PyTorch中,可以使用torch.nn.Sigmoid
类来表示。
其公式为:
f
(
x
)
=
1
1
+
e
−
x
f(x)=\frac{1}{1+\mathcal{e}^{-x}}
f(x)=1+e−x1
Sigmoid函数的优点是输出范围在(0, 1)之间,可以将输入映射到概率形式或者用于二分类问题中。
缺点是激活函数饱和时,梯度非常小,网络层数较深时容易出现梯度消失。
3. Softmax函数
Softmax函数将输入值转换为概率分布,用于多分类问题。在PyTorch中,可以使用torch.nn.Softmax
类来表示。Softmax函数将原始的实数向量转换为表示概率分布的向量,使每个元素的取值范围≥0,并且所有元素的和等于1。
其公式为:
对于输入向量 z = ( z 1 , z 2 , … , z k − 1 ) \mathbf{z} = (z_1, z_2, \ldots, z_{k-1}) z=(z1,z2,…,zk−1),Softmax函数对应的输出向量 y = ( y 1 , y 2 , … , y n ) \mathbf{y} = (y_1, y_2, \ldots, y_n) y=(y1,y2,…,yn) 的计算公式为:
y i = e z i ∑ j = 0 k − 1 e z j y_i = \frac{e^{z_i}}{\sum_{j=0}^{k-1} e^{z_j}} yi=∑j=0k−1ezjezi
其中, e e e 是自然对数的底。 y i y_i yi 表示输入向量 z \mathbf{z} z 属于类别 i i i 的概率。
4. Tanh函数
Tanh函数将输入值压缩到(-1,1)之间,它在中间层中能够产生非线性的激活输出,并且保留了负数的信息,经常被用于数据归一化的过程,将数据标准化到一个更小的范围,使得数据更易处理和比较。
Sigmoid函数是压缩到(0,1)之间。
在PyTorch中,可以使用torch.nn.Tanh
类来表示。
其公式为:
f
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
f(x)=\frac{\mathcal{e}^{x}-\mathcal{e}^{-x}}{\mathcal{e}^{x}+\mathcal{e}^{-x}}
f(x)=ex+e−xex−e−x