美文网首页
深入理解激活函数

深入理解激活函数

作者: yousa_ | 来源:发表于2020-07-07 16:00 被阅读0次

在谈激活函数前,我们先确立一个概念:什么是深度学习
维基百科对深度学习的定义为:“一类通过多层非线性变换对高复杂性数据建模算法的合集”,这里用到了两个概念:多层、非线性,激活函数的作用就是为神经网络引入非线性

  • 问:什么是激活函数?
    在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。

  • 问:激活函数有什么用?
    如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,相当于没有隐藏层,网络的学习能力有限。
    深度学习最主要的特点就是:多层,非线性。 多层为了能够学习更多的东西;没有非线性,多层和单层没什么区别,就是简单的线性组合,连异或都解决不了。

  • 问:介绍一下你熟悉的激活函数?特点,优缺点

sigmoid函数
                    f(z) = \frac{1}{1+e^{-z}}


特点
将输入的连续值映射到0和1之间,减小了离群值对模型的影响,同时引入非线性,模型的拟合程度变强。
缺点:
Sigmoid缺点大致有3:
①容易出现梯度消失:从梯度图来看,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐藏层很多,那么梯度在穿过多层后悔变得接近0,即出现梯度消失现象。
这里引申出反向传播的概念:简要地说,BP算法是一个迭代算法,它的基本思想为:(1)先计算每一层的状态和激活值,直到最后一层(即信号是前向传播的);(2)计算每一层的误差,误差的计算过程是从最后一层向前推进的(这就是反向传播算法名字的由来);(3)更新参数(目标是误差变小)。求解梯度用链导法则。迭代前面两个步骤,直到满足停止准则(比如相邻两次迭代的误差的差别很小)。
改进:1、LSTM可以解决梯度消失问题 2、Batchnorm 3、优化激活函数,使用relu 4、使用残差结构
②函数输出不是0均值(zero-centered)
sigmoid 函数的输出均大于 0,使得输出不是 0 均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非 0 均值的信号作为输入。
改进数据规范化(normalization)如Layer-Normalization Batch-Normalization等
③解析式中含有幂运算:幂运算对计算机来讲比较耗时,对于规模比较大的深度网络,这会较大地增加训练时间。

tanh函数
                    tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}}


特点:和sigmoid差不多,但值域为[-1,1]
此外,解决了Sigmoid函数的不是zero-centered输出问题。
缺点:
①仍存在梯度消失问题
②仍存在幂运算问题

ReLU函数
                    ReLU(x) =max(0, x)


ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient
特点:①解决了梯度消失问题
②计算速度非常快,只需要判断是否大于0
③收敛速度快于sigmoid和tanh,因为ReLu的收敛速度一直为1
缺点:
①不是0均值的(zero-centered)
②Dead ReLU Problem,指某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,少见 。例如w初始化全部为一些负数。(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
③原点不可导,解决办法:坐标轴下降法、最小角回归法

LeakyReLU函数
              LeakyReLU(x) =max(\alpha x, x),通常\alpha取0.01
特点:对ReLu的一个改进,可以改善relu中x<0部分的dead问题。

参考资料:
https://blog.csdn.net/GreatXiang888/article/details/99296607
https://zhuanlan.zhihu.com/p/25110450

相关文章

  • 深入理解激活函数

    在谈激活函数前,我们先确立一个概念:什么是深度学习?维基百科对深度学习的定义为:“一类通过多层非线性变换对高复杂性...

  • 理解激活函数

    一、何为激活函数? 深度学习中,激活函数通常指能够实现非线性映射的函数 二、为什么需要非线性激活函数? 定义:这里...

  • javascript函数,以及闭包的理解

    javascript函数,以及闭包的理解 深入理解javascript函数定义与函数作用域深入理解javascri...

  • 栈帧相关-深入理解函数调用

    深入理解函数调用(下)

  • 激活函数softmax-P2分类任务

    激活函数种类激活函数作用 激活函数 深度学习常用激活函数之— Sigmoid & ReLU & Softmax 深...

  • 3-Python 函数(2)

    本章概要:1、函数基础2、深入理解函数3、综合练习 1、函数基础 课程概要:理解函数定义函数调用函数函数文档 一、...

  • Sigmoid 函数

    前言 Sigmoid 函数(Logistic 函数)是神经网络中非常常用的激活函数,我们今天来深入了解一下 Sig...

  • 神经网络的激活函数总结

    导言 激活函数在神经网络中具有重要的地位。在SIGAI之前的公众号文章“理解神经网络的激活函数”中,我们回答了3个...

  • 2018-08-14 fork

    【转】进程系统调用——fork函数深入理解

  • ReLu 激活函数理解

    ReLU激活函数:简单之美深度学习中的激活函数与梯度消失

网友评论

      本文标题:深入理解激活函数

      本文链接:https://www.haomeiwen.com/subject/vsgaqktx.html