激活函数定义

激活函数是控制神经元输出阈值的,即如果输入没有超过阈值,则神经元不会产生输出。

  • 输出一般并不是简单的简单的线性输入关系,而是通过激活函数控制

image.png

  • 激活函数有多种类别,每个激活函数也有其独特性质

多种激活函数

  • 对于激活函数层来说input.shape == output.shape

    torch.nn.Sigmoid()

    image.png
    image.png
    特点

  • 梯度比较好求

  • 可能出现梯度离散的情况,因为其梯度在x轴两端接近于0
  • 常用于二分类任务神经网络最后一层的激活函数,且多与交叉熵损失函数配合使用


torch.nn.Softmax()

image.png
特点

  • softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来
  • softmax函数的原理

softmax第一步就是将模型的预测结果转化到指数函数(指数函数的非负性)上,这样保证了概率的非负性。为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。

  • 常用于多分类任务神经网络最后一层的激活函数,且多与交叉熵损失函数配合使用
  • 该激活函数有两个特点
    • 将输入向量元素的值进行放缩,使其和为1
    • 最大值与其他值的差距进一步扩大

torch.nn.Tanh()

image.png
特点

  • 该函数在RNN中使用比较多,与sigmoid很类似,区别是其取值在(-1, 1)
  • 可能出现梯度离散的情况
  • 梯度比sigmoid大

torch.nn.Relu(inplace=False)

image.png

  • inplace — 原地计算选项,即是否改变传入的数据,默认为False,将该激活函数加入神经网络模型中时,一般需要显式设置该属性为True

特点

  • 该函数是使用最频繁的激活函数
  • 该函数一定程度上解决了sigmoid函数梯度离散的情况,因其x>0时梯度固定为1

torch.nn.LeakyRelu()

image.png

  • negative_slope — 指定x<0时的梯度,默认为0.01

特点

  • ReLu函数的改进版本,解决ReLu函数在x<0时梯度为0的情况,也就避免了x<0时,因为梯度为0而停止优化的情况

torch.nn.SELU(inplace=False)

image.png
特点

  • 一种在x=0处比ReLu更光滑的函数,SELU可以说是两种函数的合并