激活函数的作用:提供网络的非线性表达建模能力。
  • 线性可分数据:可以通过机器学习(感知机、SVM)找到的线性方程来进行划分。
  • 非线性可分数据:找不到一种线性方程来划分数据,此时需要引入非线性函数。
    在这里插入图片描述
什么样的激活函数是好的激活函数:有上界,无下界,连续,非单调,响应均值为0,无梯度消失和梯度爆炸,易于计算。

Sigmoid

在这里插入图片描述
图中,梯度软饱和表示区域零但是没有到0;输出均值不为0,则网络收敛较慢。

Hard-Sigmoid

在这里插入图片描述

Tanh

在这里插入图片描述

Hard-Tanh

在这里插入图片描述

ReLU

在这里插入图片描述

Leaky ReLU(a为人为设置)和PReLU(a为学习获得)

在这里插入图片描述

ELU

在这里插入图片描述

SELU

在这里插入图片描述

ReLU6

在这里插入图片描述

Swish

在这里插入图片描述

Hard-Swish

在这里插入图片描述

Mish

在这里插入图片描述

总结

  • 在深度不是特别深的CNN中,激活函数的影响一般不会太大。
  • 网络输出层使用Sigmoid
  • 网络中间层优先使用ReLU
  • 深层网络使用Mish、Swish
  • float16/int8时使用ReLU6
  • 轻量级网络可以将Sigmoid换成Hard-Sigmoid,Swish换成Hard-Swish
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐