问题描述
激活函数是深度学习,也是人工神经网络中一个十分重要的学习内容,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有非常重要的作用。那幺,激活函数的作用应该如何来理解呢?
首先,当我们不用激活函数时,网络中各层只会根据权重 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 个,当然,其他激活函数大多是这几个激活函数的扩展变换形式。
Be First to Comment