注意:本文引用自专业人工智能社区Venus AI
更多AI知识请参考原站 ([www.aideeplearning.cn])
激活函数的定义与作用
激活函数是深度学习、人工神经网络中一个十分重要的学习内容,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有非常重要的作用。在深度学习模型中,一般习惯性地在每层神经网络的计算结果输入下一层神经网络之前先经过一个激活函数,如下图所示。
激活函数的本质是一个非线性的数学式子,其具体形态有很多种。神经网络的计算本质上就是一个相乘求和的过程,当不用激活函数时,网络中各层只会根据权重w和偏差b进行线性变换,就算有多层网络,也只是相当于多个线性方程的组合,依然只是相当于一个线性回归模型,解决复杂问题的能力有限,因为生活中绝大部分的问题都是非线性问题。如果希望神经网络能够处理复杂任务,但线性变换无法执行这样的任务,使用激活函数就能对输入进行非线性变换,使其能够学习和执行更复杂的任务。
常见的激活函数
1.Sigmoid函数
Sigmoid函数可以将输入的整个实数范围内的任意值映射到[0, 1]范围内,当输入值较大时,会返回一个接近于1的值;当输入值较小时,则返回一个接近于0的值。Sigmoid函数的数学公式如下,Sigmoid函数图像如下图所示。
Sigmoid函数的优点:输出在映射区间(0, 1)内单调连续,非常适合用作输出层,并且比较容易求导。
Sigmoid函数的缺点:其解析式中含有幂运算,计算机求解时相对比较耗时,对于规模比较大的深度网络,会较大地增加训练时间。且当输入值太大或者太小时,对应的值域变化很小,这容易导致网络训练过程中的梯度弥散问题。
2. tanh函数
tanh函数与Sigmoid函数相似,实际上,它是Sigmoid函数向下平移和伸缩后的结果,它能将值映射到[-1, 1]的范围。相较于Sigmoid函数,tanh函数的输出均值是0,使得其收敛速度要比Sigmoid函数快,减少了迭代次数,但它的幂运算的问题依然存在。
tanh函数的数学公式如下,tanh函数图像如下图所示。
3. ReLU函数
ReLU函数是目前被使用最为频繁的激活函数,当 x<0 时,ReLU函数输出始终为0;当 x>0 时,由于ReLU函数的导数为1,即保持输出为x。所以ReLU函数能够在 x>0时,梯度不会被放大或减小,从而帮助减缓梯度消失的问题。这是因为梯度在反向传播过程中不会被减弱,同时还能加快收敛速度。
ReLU函数的数学公式如下,ReLU函数图像如下图所示。
类比初中生物课的一个小实验来理解非线性。读者们应该还记得初中生物课本上有一个使用电流来刺激青蛙大腿肌肉的实验吧。当电流不强时,青蛙的大腿肌肉是不反应的,只有电流到达一定强度,青蛙大腿肌肉才开始抽搐,而且电流越大,抽搐的越剧烈。这个反应过程如果画出来的话,实际上与ReLU函数非常相似,这体现了生物的非线性,正是这种非线性反应,让生物体拥有了决策的能力,以适应复杂的环境。所以,在神经网络层后接激活函数的原因,就是给模型赋予这种非线性的能力,让模型通过训练的方式可以拟合更复杂的问题与场景。