结合pytorch中的激活函数,来总结一下深度学习中的激活函数
一、激活函数的概念和作用
概念:在神经网络中每个神经元节点接受上一层神经元的输出作为本神经元的输入,并将输出值传入到下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐藏层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
对激活函数的理解:不使用激活函数的话,神经网络的每层都只是做线性变换,多层叠加后还是线性变换。因为线性模型的表达能力通常不够,所以引入激活函数,加入非线性因素,来增强模型的表达能力。
Q:激活函数是如何引进非线性因素的?
A:
1、没有激活函数的神经网络
神经网络中最简单的结构是单层输出的感知机,单层的感知机只有输入层和输出层。下图是一个只有2个输入单元和1个输出单元的简单单层感知机。图中x1、w2代表神经网络的输入神经元受到的刺激,w1、w2代表输入神经元和输出神经元间连接的紧密程度,b代表输出神经元的兴奋阈值,y为输出神经元的输出。我们使用该单层感知机划出一条线将平面分割开,如图所示:
同理,也可以将多个感知机组合,获得更强的平面分类能力
再看一个包含隐藏层的感知机:
上面三种没有激活函数的神经网络的输出都是线性方程的,其实都是在用复杂的线性组合来逼近曲线。
2、带激活函数的神经网络
在神经网络每一层神经元做完线性变换以后,加上一个非线性激励函数对线性变换的结果进行转换,结果显而易见,输出是一个非线性函数了,如图所示:
拓展到多层神经网络的情况, 和刚刚一样的结构, 加上非线性激励函数之后, 输出就变成了一个复杂的非线性函数了,如图所示:
总结:加入非线性激励函数后,神经网络就有可能学习到平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面,使神经网络的表示能力更强了,能够更好的拟合目标函数。 这就是为什么要有非线性的激活函数的原