本文主要是介绍sigmoid、 tanh、 tanh、 tanh比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由上篇文章,我们知道逻辑回归是怎么过渡到神经网络的了
总的来说就一句话——多个逻辑回归模型,前后堆积形成了神经网络!
我引用吴恩达中的一张图,稍微的回顾以下这个过程
对于这张图,它的过程是这样的:
- 输入1个样本(含3个特征),分别到4个逻辑回归中(中间那一列的4个圈圈)
- 对于样本的输入,逻辑回归模型分别通过y = wx + b后将y值通过Sigmoid函数映射到01区间内,那么这里就有4个输出的01概率
- 对于上面输出的4个概率再输入到最后一个逻辑回归模型中,再通过y = wx + b后将y值通过Sigmoid函数映射到01区间内,得到最后的结果
对于中间那层,我们称为隐藏层,如果隐藏层多了,输入特征也多了的话,就会形成下面这样的图象
但是这里有个问题,对于逻辑回归使用的是Sigmoid激活函数,但是对于深度学习中继续使用Sigmoid函数是否合理?
答案是不合理的,所以在这基础上,分别提出了以下多种激活函数:
- sigmoid 激活函数
- tanh 函数(效果优于 sigmoid 函数)
- 修正线性单元的函数( tanh)(默认)
- tanh
首先让我们看看sigmoid 激活函数
然后再看看tanh 函数
紧接着看看修正线性单元的函数(ReLu)
最后再看看Leaky Relu激活函数
这里主要解决以下几个问题:
问题一:tanh 函数为什么效果优于 sigmoid 函数?
优于sigmoid的原因:因为函数值域在-1 和+1 的激活函数,其均值是更接近零均值的。在训练一个算法模型时,如果使用 tanh函数代替 sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是 0.5。
问题二:深度学习中一般使用——修正线性单元的函数(ReLu),它的好处?
Relu 的优点是:当𝑧是负值的时候,导数等于 0。
从实际上来说,当使用𝑧的导数时,𝑧=0的导数是没有定义的。但是当编程实现的时候,𝑧的取值刚好等于0.00000001,这个值相当小,所以,在实践中,不需要担心这个值,𝑧是等于 0 的时候,假设一个导数是 1 或者 0 效果都可以。
问题三:sigmoid 函数与tanh 函数的对比!
共同的缺点——在𝑧特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度
问题四:ReLu与Leaky Relu的比较
第一,在𝑧的区间变动很大的情况下,激活函数的导数或者激活函数的斜率都会远大于0。使用 ReLu 激活函数神经网络通常会比使用
sigmoid 或者 tanh 激活函数学习的更快。
第二,sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度弥散,而 Relu 和 Leaky ReLu函数大于 0 部分都为常数,不会产生梯度弥散现象。(同时应该注意到的是,Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,产生所谓的稀疏性,而 Leaky ReLu 不会有这问题)𝑧在 ReLu 的梯度一半都是0,但是,有足够的隐藏层使得 z 值大于 0,所以对大多数的 训练数据来说学习过程仍然可以很快。
这篇关于sigmoid、 tanh、 tanh、 tanh比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!