介绍
激活函数的作用是为神经网络提供非线性;
1. Sigmoid
Sigmoid函数的图像如下:
梯度曲线如下:
关于Sigmoid的详细分析请参考《为什么sigmoid会造成梯度消失?》
2. ReLU——最常用的激活函数
我们可以看看ReLU的图像
ReLU比Sigmoid好的原因是因为梯度更加容易更新
可以使用Cockpit来进行实验看看,请参考《Cockpit:深度神经网络的训练调试神器!NeurIPS 2021》
3. SiLU – nn.functional.silu
使用ReLU和Sigmoid的机制改进的激活函数,被用于GiraffeDet[paper]中;
其函数公式如下:
SiLU
(
x
)
=
x
⋅
σ
(
x
)
\text{SiLU}(x) = x \cdot \sigma(x)
SiLU(x)=x⋅σ(x)
2. Swish (同“SiLU”)
Swish函数在PyTorch中没有进行实现,需要自己实现;
其公式与SiLU一样。
3. H-Swish
H-Swish对ReLU函数的高效近似,使用在PicoDet中;
3. SiLU
SiLU可以看作是一种较为平滑的ReLU函数;
可以看看SiLU的图像,
3 PyTorch激活函数
使用nn.ActFunc()
来新建一个激活函数层,
(这里我们参考官方ResNet的实现形式,不使用torch.nn.functional.act_func()来进行计算);