激活函数学习笔记

作者: 开飞机的乔巴 | 来源:发表于2019-12-24 12:19 被阅读0次

    本博客内容来源于网络以及其他书籍,结合自己学习的心得进行重编辑,因为看了很多文章不便一一标注引用,如图片文字等侵权,请告知删除。

    传统2D计算机视觉学习笔记目录------->传送门
    传统3D计算机视觉学习笔记目录------->传送门
    深度学习学习笔记目录 ------------------->传送门

    简介

    激活函数作为神经网络中的一个基础单元,在神经网络的中产生了很大的作用。本文主要是介绍一下当前学习过程中了解的激活函数,了解激活函数的作用与特点,对常见的激活函数进行汇总,方便以后查看。

    刚才一看日历,今晚是平安夜,祝同学们也度过一个温馨的夜晚。

    愿每天都如此温馨

    什么是激活函数?

    对于什么是激活函数?大家都有个基础的认知就是激活函数就是非线性函数,负责将神经元的输入映射到输出端,添加非线性因素。这个是直接运算上的理解。那为什么叫激活函数呢?而不叫其他巴拉巴拉函数呢?这也是对神经系统的仿生,对于一个神经元,当输入激励达到一定强度时,该神经元才会被激活,产生相应的输出信号,那么模拟这个细胞激活过程的函数,就叫激活函数。

    为什么需要激活函数?

    在了解什么是激活函数的基础上,那我们为什么需要激活函数呢?需要当前是激活函数对整个神经网络产生了正面的影响。在不使用激活函数的神经网络上,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,在一定程度上,可以转换到一个单层网络,网络较简单。

    我们需要去解决一些复杂的问题,其实就是使用一个非常复杂的函数去做逼近。那么这么一个复杂函数怎么获得,正是通过神经网络进行学习来逼近这么一个函数。一个简单的线性的函数当然满足不了这么一个函数。通过应用激活函数,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,表示输入输出之间非线性的复杂的任意函数映射。

    所以现在要解决一个复杂的问题,神经网络中是不可避免使用非线性的激活函数的。

    常见激活函数

    接触神经网络会经常听到Sigmoid、ReLU等等,这些都是激活函数,下面我们来整理一下经常使用的激活函数,介绍一下其特点。

    • Sigmoid

    函数公式:

    函数图像:

    导数:

    特点:
    Sigmoid 函数输入是一个实值的数,输出压缩到0~1的范围内。大的正数被映射成1,小的负数被映射成0,很好的表达神经元的激活与未激活的状态。

    Sigmoid 函数容易饱和,当输入数值绝对值越大,其梯度接近于0,这就导致在反向传播过程中,权重难以更新。

    其次,Sigmoid的输出不是0均值的,会导致后面的神经元的输入是非0均值的信号。如果后层神经元的输入都为正,那么对权重参数求局部梯度则都为正,这样在反向传播的过程中权重参数要么都往正方向更新,要么都往负方向更新,会使得收敛效果变慢。

    Sigmoid 的计算量较大,在正向传播过程中需要进行指数运算。

    • Tanh

    函数公式: 函数图像: 导数:

    特点:
    可以看出Tanh函数与Sigmoid函数有点相似,Tanh是对Sigmoid函数的改进,将映射范围调整到了(-1,1)区间内,因此是0均值的,解决了Sigmoid不是0均值的缺点。 但是梯度消失以及计算量大的缺点仍存在。

    • ReLU

    函数公式: 函数图像: 导数:

    特点:
    单单从图像上就可以看出与前两者有很大的不同了。relu函数的公式很简单,输入小于0的时候为0,大于0的时候是本身,是目前主流的激活函数。

    正方向上,梯度不变,也就不会发生梯度弥散。由于正方向上是线性函数,相比于 sigmoid/tanh需要计算指数等,ReLU 只需要一个阈值就可以得到激活值,计算量大大的减少。

    但是如果输入是负值,那么输出就为0,这可能导致后面的网络输入都是0,梯度也是0,造成网络大面积的失活。

    此外ReLU 也不是0均值的。

    • Param Leaky ReLU (直接称为Leaky ReLU吧)

    函数公式: 函数图像:

    导数:


    特点:
    LeakyReLU 是对ReLU的改进,在输入是负值的时候,有一个很小的斜率,这样也可以避免ReLU死掉的问题。一般a取一个特别小的值,比如0.001。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有ReLU的死亡问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

    • ELU

    函数公式: 函数图像: 导数:

    特点:
    ELU函数也是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除ReLU死掉的问题,不过还是有梯度饱和和指数运算的问题,相比于LeakyReLU计算量增大不少。

    类似ReLU以及其改进版还有很多,比如:SELU、GELU、SoftPlus、Swish等

    • Maxout

    函数公式:

    特点:
    不像前面的几个激活函数,在反向传播过程中,不需要做任何的参数更新,因为没有可变参数。Maxout就不一样了,它引入了一些参数,可以拟合任意的的凸函数(当然包括ReLu和 Leaky ReLu)。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合。

    Maxout能够缓解梯度消失,同时又规避了ReLU神经元死亡的缺点,但较大的增加了参数和计算量。

    总结

    这些激活函数的作用还需要在日常使用中,去体验,因为神经网络涉及到超参数以及技巧方面比较多,可能只修改激活函数看不出来特别明显的变化,但是对于其计算原理以及思想还是要懂的,理解神经网络还是要一步步的来。


    重要的事情说三遍:

    如果我的文章对您有所帮助,那就点赞加个关注呗 ( * ^ __ ^ * )

    如果我的文章对您有所帮助,那就点赞加个关注呗 ( * ^ __ ^ * )

    如果我的文章对您有所帮助,那就点赞加个关注呗 ( * ^ __ ^ * )

    传统2D计算机视觉学习笔记目录------->传送门
    传统3D计算机视觉学习笔记目录------->传送门
    深度学习学习笔记目录 ------------------->传送门

    任何人或团体、机构全部转载或者部分转载、摘录,请保留本博客链接或标注来源。博客地址:开飞机的乔巴

    作者简介:开飞机的乔巴(WeChat:zhangzheng-thu),现主要从事机器人抓取视觉系统以及三维重建等3D视觉相关方面,另外对slam以及深度学习技术也颇感兴趣,欢迎加我微信或留言交流相关工作。

    相关文章

      网友评论

        本文标题:激活函数学习笔记

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