三 深度学习笔记:神经网络之九种激活函数Sigmoid、tanh、ReLU、R

文章目录
1.什么叫激活函数
激活函数可作用于感知机(wx+b)累加的总和 ,所谓的激活就是把输出值必须要大于,节点才可以被激活,不然就处于睡眠状态 。
2.激活函数的作用
提供网络的非线性建模能力 。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的 。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力 。由于输出值是有限的,基于梯度的优化方法会更加稳定 。输出值是无限的时候,模型的训练会更加高效,但往往这个时候学习率需要更小 。
3.激活函数的类型
、tanh、ReLU、ReLU6、Leaky Relu、ELU、
4./
函数定义:
函数图像:
函数的导数是其本身的函数,即f′(x)=f(x)(1?f(x)),计算非常方便 。
这可用做神经网络的阈值数,将变量映射到0,1之间 。由于在图像两端,该函数导数趋近于0,也就是说的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,所以这会造成梯度弥散(也就是说长时间权值得不到更新,loss一直保持不变),从而网络参数很难得到有效训练 。一般来说,网络在 5 层之内就会产生梯度消失现象 。
代码实现:
"""pytorch 神经网络"""import torch.nn.functional as FF.sigmoid(x)
# sigmoid函数在torch中如何实现import torch# a从-100到100中任取10个数a = torch.linspace(-100,100,10)print(a)# 或者F.sigmoid也可以 F是从from torch.nn import functional as Fb = torch.sigmoid(a)print(b)
运行结果:
从图中可知道通过函数把全部的值映射到0,1之间,且不均与变化 。5.tanh
函数定义:
值域为(-1,1)
tanh()为双曲正切 。在数学中,双曲正切tanh是由基本双曲函数双曲正弦和双曲余弦推导而来 。
函数图像
tanh和的关系:的X轴平面压缩1/2,Y轴放大两倍,再向下平移一个单位得到tanh 。
tanh函数的导数:f’(x)=1-[f(x)]^2.
优点:
缺点:
代码实现:
# tanh函数在torch中如何实现import torcha = torch.linspace(-10,10,10)b = torch.tanh(a)print(a)print(b)
运行结果:
6.ReLU
函数定义:
函数图像:
ReLU函数非常适合于做深度学习,因为当Z0的时候梯度为1,因此在做向后传播的时候,计算非常方便,不放大也不缩小,很大程度上不会出现梯度离散和梯度爆炸的情况 。
代码实现:
"""pytorch 神经网络"""import torch.nn as nnRe=nn.ReLU(inplace=True)
# ReLU函数在torch中如何实现import torcha = torch.linspace(-1,1,10)b = torch.relu(a)print(a)print(b)
运行结果:
7.ReLU6
函数定义:
函数图像:
主要是为了在移动端的低精度的时候,也能有很好的数值分辨率,如果对ReLu的输出值不加限制,那么输出范围就是0到正无穷,而低精度的无法精确描述其数值,带来精度损失 。
代码实现:
"""pytorch 神经网络"""import torch.nn as nnRe=nn.ReLU6(inplace=True)
# ReLU函数在torch中如何实现import torchimport torch.nn as nnx = torch.linspace(-5, 10, 20)relu6 = nn.ReLU6()y = relu6(x)print(x)print(y)
运行结果:
8.Leaky ReLU
函数定义: