美文网首页
为什么会存在激活函数?

为什么会存在激活函数?

作者: Shu灬下雨天 | 来源:发表于2019-12-22 09:14 被阅读0次

来源:AINLPer微信公众号
编辑: ShuYini
校稿: ShuYini
时间: 2019-9-1

引言

    在深度学习网络中,我们经常可以看到对于某一个隐藏层节点的激活值计算一般分为两步,如下图:


    第一步,输入该节点的值为 ,时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值 ,上标 1 表示第 1 层隐藏层。
    第二步,再进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值) ,其中 g(z)为非线性函数。
    那么问题来了,这个激活函数到底有什么用呢,可不可以不加激活函数呢?

什么是激活函数?

    激活函数是神经网络中极其重要的概念。它们决定了某个神经元是否被激活,这个神经元接受到的信息是否是有用的,是否该留下或者是该抛弃。激活函数的形式如下:

    激活函数是我们对输入做的一种非线性的转换。转换的结果输出,并当作下一个隐藏层的输入。

如果没有激活函数会怎样?

    1、首先对于y=ax+b 这样的函数,当x的输入很大时,y的输出也是无限大/小的,经过多层网络叠加后,值更加膨胀的没边了,这显然不符合我们的预期,很多情况下我们希望的输出是一个概率。
    2、线性变换太简单(只是加权偏移),限制了对复杂任务的处理能力。没有激活函数的神经网络就是一个线性回归模型。激活函数做的非线性变换可以使得神经网络处理非常复杂的任务。例如,我们希望我们的神经网络可以对语言翻译和图像分类做操作,这就需要非线性转换。同时,激活函数也使得反向传播算法变的可能。因为,这时候梯度和误差会被同时用来更新权重和偏移。没有可微分的线性函数,这就不可能了。
    3、结论:可以用线性激活函数的地方一般会是输出层。

常用的激活函数有哪些?

    在深度学习中,常用的激活函数主要有:sigmoid函数,tanh函数,ReLU函数、Leaky ReLU函数。

sigmoid函数

    该函数是将取值为 (−∞,+∞)(的数映射到 (0,1) 之间。sigmoid函数的公式以及图形如下:
g(z) = \frac{1}{1+e^{-z}}

    对于sigmoid函数的求导推导为:     sigmoid函数作为非线性激活函数,但是其并不被经常使用,它具有以下几个缺点:
    (1)当 zz 值非常大或者非常小时,通过上图我们可以看到,sigmoid函数的导数 g′(z) 将接近0 。这会导致权重W的梯度将接近0,使得梯度更新十分缓慢,即梯度消失。
    (2)函数的输出不是以0为均值,将不便于下层的计算,具体可参考[3]。sigmoid函数可用在网络最后一层,作为输出层进行二分类,尽量不要使用在隐藏层。
tanh函数

    tanh函数相较于sigmoid函数要常见一些,该函数是将取值为 (−∞,+∞)的数映射到 (−1,1) 之间,其公式与图形为
g(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}}

    tanh函数在0附近很短一段区域内可看做线性的。由于tanh函数均值为0,因此弥补了sigmoid函数均值为0.5的缺点。对于tanh函数的求导推导为:     tanh函数的缺点同sigmoid函数的第一个缺点一样,当 zz 很大或很小时,g′(z)接近于0,会导致梯度很小,权重更新非常缓慢,即梯度消失问题。
ReLU函数

    ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。ReLU函数的公式以及图形如下:
g(z)= \begin{cases} z, & \text {if $z>0$ } \\ 0, & \text{if $z<0$} \end{cases}

对于ReLU函数的求导为:

    ReLU函数的优点:
    (1)在输入为正数的时候(对于大多数输入 zz 空间来说),不存在梯度消失问题。
    (2) 计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)
    ReLU函数的缺点:
    (1)当输入为负时,梯度为0,会产生梯度消失问题。
Leaky ReLU函数

    这是一种对ReLU函数改进的函数,又称为PReLU函数,但其并不常用。其公式与图形如下:
g(z)= \begin{cases} z, & \text {if $z>0$ } \\ az, & \text{if $z<0$} \end{cases}

    其中 a 取值在 (0,1)之间。Leaky ReLU函数的导数为:
     Leaky ReLU函数解决了ReLU函数在输入为负的情况下产生的梯度消失问题。

参考文献

[1] https://blog.csdn.net/qq_35290785/article/details/89349635
[2] https://www.datalearner.com/blog/1051508750742453
[3] https://www.cnblogs.com/lliuye/p/9486500.html

更多自然语言处理、pytorch相关知识,还请关注AINLPer公众号,极品干货即刻送达。

相关文章

  • 为什么会存在激活函数?

    来源:AINLPer微信公众号编辑: ShuYini校稿: ShuYini时间: 2019-9-1 引言     ...

  • 理解激活函数

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

  • 6.神经网络训练细节part1

    一、激活函数 前边我们学到,一个节点的输出会进入激活函数进行处理 常见的激活函数有以下 sigmoid激活函数 s...

  • 非线性激活函数的作用

    一直有个疑问 为什么需要非线性激活函数?如果没有激活函数g(z),即g(z)=z,就叫线性激活函数,或者叫恒等激活...

  • 01 神经网络激活函数

    q1:激活函数是干嘛的? q2:激活函数有哪些分类? q3:现在最好用的激活函数是哪些?为什么好用? ------...

  • 神经网络和深度学习-3.2激活函数

    为什么要使用激活函数?目前只介绍了sigmoid函数。下面多介绍几个激活函数。 sigmoid 现在已经不使用,除...

  • 3. 深度学习- 常用的激活函数

    在学习神经网络中,我们会常常碰到激活函数这个名词。那么什么是激活函数?激活函数激活的是什么?在神经网络中,有什么用...

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

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

  • AI数学基础11——为什么人工神经网络需要非线性激活函数?

    每一个神经元里面都有一个激活函数,如下图所示: 那么为什么人工神经网络需要激活函数尤其是非线性激活函数呢? 我们用...

  • 交叉熵损失函数

    目录 二分类 多分类 为什么sigmoid激活函数,使用交叉熵损失函数更好? 1. 二分类 激活函数sigmoid...

网友评论

      本文标题:为什么会存在激活函数?

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