问题描述
激活函数是深度学习,也是人工神经网络中一个十分重要的学习内容,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有非常重要的作用。那么,激活函数的作用应该如何来理解呢?
首先,当我们不用激活函数时,网络中各层只会根据权重w和偏差b进行线性变换,就算有多层网络,也只是相当于多个线性方程的组合,依然只是相当于一个线性回归模型,解决复杂问题的能力有限。如果希望神经网络能够处理复杂任务,但线性变换无法执行这样的任务,使用激活函数就能对输入进行非线性变换,使其能够学习和执行更复杂的任务。下面,就一起来了解常用的激活函数吧。
解决方案
常用激活函数:
(1)Sigmoid函数
sigmoid函数可以将输入的整个实数范围内的任意值映射到[0,1]范围内,当输入值较大时,会返回一个接近于1的值,当输入值较小时,则返回一个接近于0的值。在tensorflow中,用tf.sigmoid(x)直接调用这个函数使用。
Sigmoid函数的数学公式和函数图像如下:
优点:输出在映射区间(0,1)内单调连续,非常适合用作输出层,并且比较容易求导。
缺点:其解析式中含有幂运算,计算机求解时相对比较耗时,对于规模比较大的深度网络,会较大地增加训练时间。
(2)Softmax函数
softmax函数实际上是在sigmoid函数上做一个推广,它可以将所有输出映射成概率的形式,即值在[0,1]范围且概率总和为1。tensorflow中可以用tf.nn.softmax()来调用。
Softmax函数的数学公式如下:
举例说明一下,假如输入变量为[1.5,4.4,2.0],经过softmax函数激活后,输出为[0.04802413, 0.87279755, 0.0791784 ],分别对应属于1、2、3类的概率。代码实现则为:
tf.nn.softmax(tf.constant([[1.5,4.4,2.0]]))。
(3)Tanh函数
tanh函数相似于sigmoid函数,但它能将值映射到[-1,1]的范围。于sigmoid函数相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数,但幂运算的问题依然存在。
Tanh函数数学公式和函数图像如下:
(4)Relu函数
relu函数,是目前被使用最为频繁得激活函数,relu函数在x < 0时,输出始终为0。由于x > 0时,relu函数的导数为1,即保持输出为x,所以relu函数能够在x > 0时保持梯度不断衰减,从而缓解梯度消失的问题,还能加快收敛速度。
relu函数数学公式和函数图像如下:
前向传播的实例,就需要借助这个函数,小编发布过这个实例的详解,其中包括代码演示,感兴趣的话可以去看看《TensorFlow前向传播实例》这篇文章。
结语
简单来说,激活函数的作用就是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。在神经网络中,隐藏层之间的输出大多需要通过激活函数来映射,在构建模型时,需要根据实际数据情况选择激活函数。TensorFlow中的激活函数不止这4种,本文只是介绍最常用的4个,当然,其他激活函数大多是这几个激活函数的扩展变换形式。
END
编 辑 | 王楠岚
责 编 | 吴怡辰
where2go 团队