pytorch学习笔记(激活函数)

下面介绍五种激活函数:

Sigmoid

Sigmoid非线性激活函数的数学表达式是,其图形如下.sigmoid函数是将一个实数输入转化到0-1之间的输出,负数越大转化越靠近于0,越大的正数越靠近1.

 sigmoid 函数有两大缺点:

  • sigmoid 函数会造成梯度消失,当它靠近1和0的时候,梯度基本上会变为0 ,如果用梯度下降法的话,如果梯度接近0,那么没有任何信息来更新参数,这样会造成模型的不收敛。另外在初始化权重的时候也要注意,如果初始化权重过大,激活函数会导致大多数的神经元饱和,无法更新参数。
  • sigmoid 输出不以0为均值,这就会导致sigmoid激活函数之后的输出作为后面一层的输入全是整的,这就会导致梯度全都是正的,那么在更新参数的时候永远是正的。怎么理解呢?比如进入下一层神经元的输入是x,参数是w和b,那么输入就是f=wx+b,这个时候,如果x是以0均值的数据,那么梯度就会有正有负.但这个问题并不严重,因为神经网络在训练的时候一般是按Batch(批)进行训练的,可以一定程度缓解这个问题.Tanh

Tanh 激活函数是上面sigmoid函数的变形,其数学表达式为   图形如下:

pytorch学习笔记(激活函数)_第1张图片

它将输入的数据转为-1-1之间,可以通过图像可以看出,它将输出变为0均值,一定程度解决了上面第二个零均值问题,但是并没有解决梯度消失的问题,它的实际效果要比sigmoid函数好 。

Relu

ReLu激活函数(Rectified Linear Unit),它的数学表达式为f(x) = max(0,x),换句话说这个激活函数只是简单的将大于0的部分保留,将小于0的部分变为0 。

优点:

  • 相比于Sigmoid函数和Tanh函数,ReLu激活函数能够极大的加速随机梯度下降的收敛速度,这是因为它是线性的,且不存在梯度消失的问题
  •  相比于Sigmoid函数和Tanh函数的复杂计算而言,ReLu的计算方法更加的简单,只需要一个阈值过滤就可以得到结果,不需要进行一大堆复杂的计算

缺点:

  • ReLu激活函数本质上是一个不可逆的过程,它会直接去掉输入小于0的部分,在实际的操作过程中可以设置比较小的学习率来避免这个问题。

Leakly ReLu

Leaky ReLu 激活函数是ReLu激活函数的变式 ,主要是为了修复ReLu激活函数中训练部分比较脆弱的这个缺点,不将x<0 的部分直接变为0,而是给它一个很小的学习率,比如0.01,它的数学形式可以表现为,其中a是很小的常数,这样就可以使得输入小于0的时候也有一个小的梯度,关于Leaky ReLu 激活函数的效果,有些实验证明它很好,有些实验证明它其实并不好。有人还提出可以对参数a也进行参数化处理,但是否有作用呢?

pytorch学习笔记(激活函数)_第2张图片

Maxout

另一种激活函数的类型并不是f(wx+b) 作用在一种输出结果的形式,而是这种Maxout 的类型,可以发现ReLu函数只是Maxout 中w1 = 0, b1 = 0的特殊形式.因此Maxout既有ReLu函数的优点也避免了ReLu函数的训练脆弱的缺点,但是它也有一个缺点,加倍了模型的参数,导致模型的存储变大.

pytorch学习笔记(激活函数)_第3张图片

 

参考: 深度学习入门之PyTorch(廖星宇)

         https://www.cnblogs.com/Terrypython/p/9436683.html

你可能感兴趣的:(深度学习,pytorch)