非线性激活函数作用和·各类的优缺点

为什么需要非线性激活函数?

a=z 叫做线性激活函数 或 恒等激活函数 如果使用线性激活函数,那么这个模型的输出不过是你输入特征x的线性组合。神经网络只是把输入线性组合再输出

所以即使你有很多个隐含层,但是你如果使用线性激活函数或者不用激活函数,一直在做的只是计算线性激活函数,所以还不如直接去掉全部隐藏层。所以除非引入非线性,那么无法计算更有趣的函数。 只有一个地方可以使用线性激活函数,那就是回归问题。或者在输出层用也是可以的。

非线性激活函数导数 【基础知识: 对于一元二次方程 求根公式: 求最大/最小值所对应的x:x=(如果忘记的话,可以先求一元二次方程的导数,让其等于0,即可求得了)

各种非线性激活函数的优缺点: Sigmoid(左上角): 现在吴恩达几乎从来不用sigmoid激活函数了,但是吴恩达会用sigmoid的一个例外场合是进行二元分类时。 缺点: 

1、Sigmoid容易饱和,并且当输入非常大或者非常小的时候,神经元的梯度就接近于0了,从图中可以看出梯度的趋势。这就使得我们在反向传播算法中反向传播接近于0的梯度,导致最终权重基本没什么更新,我们就无法递归地学习到输入数据了。另外,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。容易饱和这个问题叫做 “梯度饱和” ,也可以叫 “梯度弥散” 。     2、Sigmoid 的输出不是0均值的,这是我们不希望的,因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正(e.g. x>0 elementwise in  ),那么在反向传播的过程中对w求梯度要么都为正,要么都为负(取决于整个表达式 f 的梯度)。这可能会在权重的梯度更新中引入不受欢迎的zig-zagging动态。导致有一种捆绑的效果,使得收敛缓慢。当然了,如果你是按batch去训练,那么每个batch可能得到不同的符号(正或负),那么相加一下这个问题还是可以缓解。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。 Tanh(右上角):

tanh:有数据中心化的效果,让均值接近于0,而不是0.5,这实际让下一层的学习更方便点。tanh几乎在所有场合都更优越,一个例外是输出层,因为y如果真实值为0或1,那么我们希望y帽介于0和1之间,而不是-1和1之间,这时sigmoid更适合。 Tanh和sigmoid的一个共同缺点:当z很大或很小时,那么这个函数的斜率会很小,很接近于0,这样会拖慢梯度下降法。

Relu(左下角):

Relu:a = max(0,z),但是当z = 0时,导数是没有定义的,但如果编程实现,你得到的z刚好等于0.000000000000的概率很低,所以不必担心。 Relu已经变成激活函数的默认选择了,当你不知道因隐层到底该用哪个激活函数时,就可以用relu。虽然有人也会用tanh。Relu的一个缺点:当z为负时,导数等于0。但在实际中却没有什么问题。虽然对于z的一半范围来说,relu的斜率为0,但在实践中,有足够多的隐藏单元令z大于0,所以对于大多数训练样本来说还是很快的。

Leaky Relu(右下角):

Relu的另一个版本:leaky ReLu(a = 0.01*z,z),实际上比relu要好,但是实际中使用的频率却没有那么高。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值