资讯专栏INFORMATION COLUMN

深度学习常见激活函数介绍及代码实现

RdouTyping / 3419人阅读

摘要:通过查看导函数图像,激活函数最大的问题就是两端饱和,造成梯度消失解决办法使用激活函数,等,此外输出不以中心以中心的好处是可以加快模型收敛。

作用

深度神经网络引入非线性单元,使训练问题不再是一个凸优化问题,虽然我们很难得到最优解,但是可以通过梯度下降去寻找局部最小值。

增强模型的拟合能力,理论上只要有足够的神经元,一层隐藏层就可以表达任意函数。

性质

可微(多元函数):函数可微保证使用梯度下降优化的可计算性。

单调性:保证梯度方向相对稳定。

输出值范围:当输出有限,由于特征表示受有限权值影响,基于梯度的优化方法会更加稳定;当输出无限,特征表示不受影响,但由于高梯度需要小学习率。

非饱和性:

当激活函数满足如下要求,称为右饱和:

当激活函数满足如下要求,称为左饱和:

激活函数饱和会造成梯度值接近0,导致梯度消失使模型无法收敛。

sigmoid

sigmoid函数,导函数图像:

sigmoid激活函数具有“连续可微”,“单调性”,“输出值有限”。通过查看导函数图像,sigmoid激活函数最大的问题就是两端饱和,造成梯度消失(解决办法:使用relu激活函数,BN等),此外输出不以0中心(以0中心的好处是可以加快模型收敛)。
目前sigmoid激活函数多使用在二分类问题(对于大于二分类问题,如果类别之间存在相互关系使用sigmoid,反之使用softmax),门控机制的判断等。

import tensorflow as tf
tf.enable_eager_execution()

sigmoid_test=tf.nn.sigmoid([-3.,-2.,-1.,0.0,1.,2.,3.],name="sigmoid_op")

print(sigmoid_test)

输出:

tf.Tensor(
[0.04742587 0.11920292 0.26894143 0.5        0.7310586  0.880797
 0.95257413], shape=(7,), dtype=float32)
tanh

tanh函数,导函数图像:

tanh激活函数输出区间[-1,1],输出值以0为中心,与sigmoid激活函数相比具有更大的梯度值,再加上输出值以0为中心,模型收敛更快。不过它依然存在两端饱和,梯度消失问题还是存在,tanh激活函数在RNN模型中应用较多。

import tensorflow as tf
tf.enable_eager_execution()

tanh_test=tf.nn.tanh([-3.,-2.,-1.,0.0,1.,2.,3.],name="tanh_op")

print(tanh_test)

输出:

tf.Tensor(
[-0.9950547 -0.9640276 -0.7615942  0.         0.7615942  0.9640276
  0.9950547], shape=(7,), dtype=float32)
relu

relu函数,导函数图像:

relu与线性单元的区别是在其一半的定义域上输出为0,这使得它易于优化,计算。通过图像可得,relu激活函数的梯度不仅大,而且一致,更重要的是它没有sigmoidtanh激活函数的饱和性,有效缓解了梯度消失问题。目前,relu激活函数是神经网络隐藏层的首选。
但是,它最大的问题是当输入小于0时,输出值为0,此时神经元将无法学习。

import tensorflow as tf
tf.enable_eager_execution()

relu_test=tf.nn.relu([-3.,-2.,-1.,0.0,1.,2.,3.],name="relu_op")
tf.nn.relu
print(relu_test)

输出:

tf.Tensor([0. 0. 0. 0. 1. 2. 3.], shape=(7,), dtype=float32)
leakyrelu

leakyrelu函数,导函数图像:

leakyrelu激活函数是relu的衍变版本,主要就是为了解决relu输出为0的问题。如图所示,在输入小于0时,虽然输出值很小但是值不为0。
leakyrelu激活函数一个缺点就是它有些近似线性,导致在复杂分类中效果不好。

import tensorflow as tf
tf.enable_eager_execution()

# alpha: Slope of the activation function at x < 0
leaky_relu_test=tf.nn.leaky_relu([-3.,-2.,-1.,0.0,1.,2.,3.],alpha=0.2,name="leaky_relu_op")
print(leaky_relu_test)

输出:

tf.Tensor([-0.6 -0.4 -0.2  0.   1.   2.   3. ], shape=(7,), dtype=float32)
elu

elu函数,导函数图像:

elurelu的区别在负区间,relu输出为0,而elu输出会逐渐接近,更具鲁棒性。elu激活函数另一优点是它将输出值的均值控制为0(这一点确实和BN很像,BN将分布控制到均值为0,标准差为1)。

import tensorflow as tf
tf.enable_eager_execution()

elu_relu_test=tf.nn.elu([-10000,-100.,-3.,-2.,-1.,0.0,1.,2.,3.],name="elu_relu_op")
print(elu_relu_test)

输出:

tf.Tensor(
[-1.         -1.         -0.95021296 -0.86466473 -0.63212055  0.
  1.          2.          3.        ], shape=(9,), dtype=float32)
softmax

softmax单元常作为网络的输出层,它很自然地表示了具有 k 个可能值的离散型随机变量的概率分布。

softmax将向量等比例压缩到[0,1]之间,且保证所有元素之和为1。

import tensorflow as tf
tf.enable_eager_execution()

softmax_test=tf.nn.softmax([-3.,-2.,-1.,0.0,1.,2.,3.],name="softmax_op")
print(softmax_test)
softmax_test_sum=tf.reduce_sum(softmax_test)
print(softmax_test_sum)

输出:

tf.Tensor(
[0.0015683  0.00426308 0.01158826 0.03150015 0.0856263  0.23275642
 0.6326975 ], shape=(7,), dtype=float32)
tf.Tensor(1.0, shape=(), dtype=float32)
总结

激活函数的选择还要根据项目实际情况,考虑不同激活函数的优缺点。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42826.html

相关文章

  • 深度学习常见激活函数介绍代码实现

    摘要:通过查看导函数图像,激活函数最大的问题就是两端饱和,造成梯度消失解决办法使用激活函数,等,此外输出不以中心以中心的好处是可以加快模型收敛。 showImg(https://segmentfault.com/img/bVblaf5?w=592&h=645); 作用 深度神经网络引入非线性单元,使训练问题不再是一个凸优化问题,虽然我们很难得到最优解,但是可以通过梯度下降去寻找局部最小值。 ...

    jimhs 评论0 收藏0
  • 深度学习常见激活函数介绍代码实现

    摘要:通过查看导函数图像,激活函数最大的问题就是两端饱和,造成梯度消失解决办法使用激活函数,等,此外输出不以中心以中心的好处是可以加快模型收敛。 showImg(https://segmentfault.com/img/bVblaf5?w=592&h=645); 作用 深度神经网络引入非线性单元,使训练问题不再是一个凸优化问题,虽然我们很难得到最优解,但是可以通过梯度下降去寻找局部最小值。 ...

    phoenixsky 评论0 收藏0
  • 深度学习的这些坑你都遇到过吗?神经网络11大常见陷阱应对方法

    摘要:类似地,输入中的大规模特征将主导网络并导致下游发生更大的变化。因此,使用神经网络库的自动规范化往往是不够的,这些神经网络库会在每个特征的基础上盲目地减去平均值并除以方差。 如果你的神经网络不工作,该怎么办?作者在这里列出了建神经网络时所有可能做错的事情,以及他自己的解决经验。忘记规范化数据忘记检查结果忘记预处理数据忘记使用正则化使用的batch太大使用了不正确的学习率在最后层使用了错误的激活...

    DirtyMind 评论0 收藏0
  • 达观数据:深度学习来一波,受限玻尔兹曼机原理在推荐系统中的应用

    摘要:本文选取了达观推荐系统众多推荐算法的其中之一受限玻尔兹曼机,,进行详细介绍。主要包括三部分介绍的数学原理在推荐系统中的应用。这就是受限玻尔兹曼机中受限二字的本意。 深度学习相关技术近年来在工程界可谓是风生水起,在自然语言处理、图像和视频识别等领域得到极其广泛的应用,并且在效果上更是碾压传统的机器学习。一方面相对传统的机器学习,深度学习使用更多的数据可以进行更好的扩展,并且具有非常优异的...

    caspar 评论0 收藏0
  • 达观数据:深度学习来一波,受限玻尔兹曼机原理在推荐系统中的应用

    摘要:本文选取了达观推荐系统众多推荐算法的其中之一受限玻尔兹曼机,,进行详细介绍。主要包括三部分介绍的数学原理在推荐系统中的应用。这就是受限玻尔兹曼机中受限二字的本意。 深度学习相关技术近年来在工程界可谓是风生水起,在自然语言处理、图像和视频识别等领域得到极其广泛的应用,并且在效果上更是碾压传统的机器学习。一方面相对传统的机器学习,深度学习使用更多的数据可以进行更好的扩展,并且具有非常优异的...

    kel 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<