美文网首页程序员Tensorflow从入门到精通人工智能一百问
人工智能一百问-2深度学习里说的激活函数是什么意思?

人工智能一百问-2深度学习里说的激活函数是什么意思?

作者: 西瓜量化 | 来源:发表于2019-03-09 15:04 被阅读14次

    很多刚刚接触深度学习的朋友,在看书籍、博文的时候,经常会看到一个名词:激活函数。那激活函数到底是干什么的呢?

    实际上激活函数并不是真正用来“激活”什么的,而是用来对神经元计算出来的结果进行计算和处理的。目的是把特征保留下来,去除数据中的冗余,并且使得神经网络能够解决非线性问题。
    简单来说,激活函数就是把计算结果再进行一次处理,加入一些非线性因素,使得神经网络可以更好地解决比较复杂的问题。

    常用的激活函数有:

    一、Sigmoid函数

    Sigmoid函数函数是目前被了解最多的一种激活函数,在生物学中也是常见的S型函数,又被称为S型生长曲线,它长这个样子:


    image

    公式定义是这样的:

    f(x) = \frac{1}{1+e^-x}

    它具有单调递增、反函数单调递增、连续可导、输出值都大于0等性质,所以我们可以把变量通过这个函数映射到[0,1]之间。

    它的优点:

    • 1 )输出在(0,1)之间,单调连续,连续可导,可以用作输出层。
    • 2 )求导比较容易

    它的缺点:

    • 1)比较容易产生梯度消失,导致训练出问题
    • 2)输出并不是以0位中心

    二、Tanh函数

    Tanh函数也是一种比较常见的激活函数,它实际是Sigmoid的一种变型。它长这个样子:

    image
    它的公式是:
    image

    它的公式为:

    f(x) = max(0,x)

    因为在x>0的时候x可以保持梯度不衰减,从而可以缓解梯度消失的问题。

    优点:

    • 1)相比Sigmoid函数和tanh函数,ReLU函数收敛速度更快
    • 2)ReLU的实现比较简单
    • 3)ReLU可以有效缓解梯度消失问题

    缺点:

    • 1 )随着训练的进行,可能会出现神经元死亡、权重无法更新的情况
    • 2 )偏移现象和神经元死亡会影响收敛性

    四、Softplus函数

    Softplus函数可以看做ReLU函数的平滑形式。并且如果对Softplus函数进行求导,得到的函数就是Sigmoid函数。它长这个样子:


    image

    上图是Softplus和ReLU的对比
    Softplus的表达式为:

    Softplus(x) = log(1+e^x)

    Softplus优点:

    • 1)相比Sigmoid和tanh计算量相对小
    • 2)对于深层次网络,Softplus函数不会像Sigmoid函数那样很容易出现梯度消失的情况

    缺点:
    -1)反向传播时计算耗费较大

    五、Softmax函数

    Softmax函数是深度学习中常用的激活函数之一,经常作为神经网络最后一层,用来进行多分类。它并不是一个简单的运算,所以木有图,但这里可以给出在运用的时候的例子:

    image image

    前面计算的结果输入到Softmax层中,得到结果,结果是一组概率,概率之和为1,而概率最大的那个,就是我们倾向选择的结果

    它的公式为:

    f(x_i) = \frac {exp(x_i)} {\sum_{x=1}^nexp(x)}

    Softmax和前面的函数都不同,主要表现在:Softmax函数主要针对的是多分类问题,而其他的主要是二分类问题

    六、Swish 函数

    Google Brain也提出了一个形似ReLu的激活函数, Swish。它长这个样子:


    image

    它的公式为:
    f(x) = x {\sigma}({\beta}x)

    它的优点是:

    • 1)处处连续可导
    • 2)计算起来不那么麻烦
    • 3)拥有和ReLU同样的有点同时一定程度上避免了死区问题。

    因此在google的论文中,他们宣称Swish函数普遍优于ReLu(及其变体),并且更适用于深层的网络结构。

    七、我们应该如何选用合适的激活函数?

    这里我们讨论的是隐藏层的激活函数选用,输出层激活函数的选择通常是基于其预测值类型

    • 首先要认识到,目前没有一个公认的“最优的”激活函数,不同的激活函数可能在不同类型的数据上做到较好的效果。
    • 其次,由于tanh和sigmoid函数这两个最早的激活函数由于其缺陷现在已经不太使用了,因而我们通常都是用ReLu函数起手。
    • 如果ReLu的效果不好(特别是发现有很多神经元长期失活),然后不妨试试看它的各种变体(新潮点可以选择Swish函数)或是softplus。
    • 如果能够不计时间调参的话,可以简单在原来的激活函数上自定义,通常是乘以一个常数的超参数来调节。

    相关文章

      网友评论

        本文标题:人工智能一百问-2深度学习里说的激活函数是什么意思?

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