首页 > 其他分享 >激活函数还是有一点意思的!

激活函数还是有一点意思的!

时间:2022-10-07 11:34:10浏览次数:58  
标签:函数 训练 sigmoid 意思 ReLU 神经网络 激活


激活函数还是有一点意思的!_计算机视觉

激活函数还是有一点意思的!_计算机视觉_02

激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。

引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。



激活函数还是有一点意思的!_计算机视觉_03

为什么要用激活函数?


如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少深,输出都是输入的线性组合,这种情况就是最原始的感知机。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。一般激活函数有如下一些性质:

  • 非线性: 
    当激活函数是线性的,两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即f(x)=x,就不满足这个性质,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的;
  • 可微性: 
    当优化方法是基于梯度的时候,就体现了该性质;
  • 单调性: 
    当激活函数是单调的时候,单层网络能够保证是凸函数;
  • f(x)≈x: 
    当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值;
  • 输出值的范围: 
    当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate。

那接下来,我们就开始讲讲激活函数。


ReLU

今天主要说的就是ReLU激活函数,其全名叫修正线性单元(Rectified linear unit)。

f(x)=max(0,x)

优点: 
使用 ReLU得到的SGD的收敛速度会比 sigmoid/tanh 快。这是因为它是linear,而且ReLU只需要一个阈值就可以得到激活值,不用去计算复杂的运算。

缺点: 

训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有激活的功能,导致梯度永远都是零。

细说ReLU



激活函数还是有一点意思的!_计算机视觉_04

上图就是ReLU的可视化图,其实ReLU还是可以将其归为线性函数,如果更加准确的话,那就是分段线性函数。如果输入的值小于等于0的时候,输出全部给予0值,而大于0输入,就按照正常线性处理。

该处理形式被称为单侧抑制机制,这种机制可就厉害啦!

  • 第一,采用sigmoid、Tanh等激活函数时,计算激活函数时计算量教大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多;
  • 第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练;
  • 第三,ReLu会使一部分神经元的输出为0,这样就使网络稀疏,且减少了参数的相互依存关系,缓解了过拟合问题的发生。

为啥ReLU的激活函数形式要这样书写,不可以镜面反转之类的吗?不又成新的一种激活函数?​

其实很简单,这里激活函数主要核心是单侧抑制,所以不管你是在哪个象限内进行抑制操作,最后目的都是一样。无论是镜面反转还是180度翻转,最终神经元的输出也只是相当于加上了一个常数项系数,并不影响模型的训练结果。

激活函数还是有一点意思的!_神经网络_05

ReLU激活函数还有一大好处就是稀疏了参数,这个作用对于深度网络来说就是神来之笔。稀疏有何作用呢?接下来我引用偏执的眸一段比如,简单太形象的解释了这个问题。

标签:函数,训练,sigmoid,意思,ReLU,神经网络,激活
From: https://blog.51cto.com/u_15726357/5734342

相关文章

  • 最近流行的激活函数
    最近又看了点深度学习的东西,主要看了一些关于激活函数的内容,不知道算不算新颖,但是我想把自己阅读后的分享一下,请各位给予评价与指点,谢谢!一般激活函数有如下一些性质:非线性: ......
  • 网络字节序与主机字节序的转换函数实践
    首先我们要对于网络字节序和主机字节序有一个初步的概念。字节序:字节在内存中储存的顺序字节序的种类:(1):大端字节序,数值高位储存在内存的低地址,低位储存在内存的高地址,在 ......
  • 【我开了C语言的金手指】二.函数(1)
    (一)函数的定义 是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定的任务,相较于其它的代码,具备相对独立性。 一般会有输入参数并有返回值,提供对过......
  • 【VB.NET】VB的字符操作函数
    函数以及其参数说明Asc/AscW(Char/String)AsInteger返回一个代表某个字符的字符编码的Integer值。Chr/ChrW(Integer)AsChar返回指定字符编码对应的字符。Filter(String(......
  • g2o函数
    g2o简介g2o(GeneralGraphicalOptimization),是一个在SLAM领域广为使用的优化库。基于图优化理论。图优化理论把优化问题表现成图的一种方式。一个图由若干个顶点和连接......
  • 网络字节序与主机字节序的转换函数实践
    1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。2、主机字节序:即大端(BigEndian)......
  • 1.9 高级语法_函数
    #函数中已经输出结果,调用函数即可deffun(x):#函数体print(x/10)fun(10)fun(20)#函数中未输出结果,调用函数,再输出结果defcalc(a,b):returna+b......
  • 【C语言】初始函数
    ......
  • ES6新特征高阶函数
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="......
  • 详解 printf() 函数
    声明(叠甲):鄙人水平有限,本文章仅供参考。1.引子#include<stdio.h>intmain(){printf("helloworld\n");return0;}上面这一段代码大家应该都十分的......