• 深度学习中激活函数的用途


    激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题

    深度学习中激活函数的概念

    激活函数,即Activation Function,有时候也称作激励函数。它是为了解决线性不可分的问题引出的。但是也不是说线性可分就不能用激活函数,也是可以的。它的目的是为了使数据更好的展现出我们想要的效果。激活函数是一种非线性的转换,转换的结果会作为下一层神经元的输入。

    激活函数决定了某个神经元是否被激活,当这个神经元接受到的信息是有用或者无用的时候,激活函数决定了对这个神经元接收到的信息是留下还是抛弃。

    激活函数应该具备的性质

    • 可微性: 这是因为优化方法基于梯度。

    • 单调性: 如果激活函数单调,单层网络能够保证是凸函数。

    • 输出值的范围: 当激活函数输出值范围有限时,基于梯度的优化方法会更加稳定,这是因为特征的表示受有限权值的影响更显著。当激活函数的输出无限时,模型的训练会更加高效,但是此时需要更小的学习率。

    为什么要有激活函数

    • 如果不加激活函数,那么神经元就仅仅做线性变换,以AlexNet为例,这个神经网络就会成为一个线性回归模型。而一个线性回归模型对于复杂非线性任务的处理能力是十分有限的。因此,我们需要添加非线性的激活函数,在神经网络的输入输出之间形成非线性映射,让网络能力更为强大。
    • 有时候,我们希望对神经元的输出做一些规约,比如希望它的输出在[-1,1]或者[0,1]之间。
    • 起到类似于组合特征的作用。

    激活函数的作用

    激活函数是神经网络中的一种非线性变换,它的作用是引入非线性能力,使得神经网络可以更好地逼近各种复杂的非线性函数关系。

    以下是激活函数的几个重要作用:

    1. 引入非线性:激活函数通过非线性变换,打破了神经网络仅由线性层组成的结构,使得网络可以学习到非线性的复杂模式。如果没有非线性变换,多层网络将无法提供比单层网络更强大的表达能力。

    2. 解决线性不可分问题:许多实际问题是非线性的,线性模型无法很好地拟合这些数据。通过使用激活函数,神经网络可以捕捉数据中的非线性特征,从而更好地处理线性不可分的问题。

    3. 增加网络的表示能力:激活函数通过引入非线性,扩展了神经网络的表示能力。神经网络可以通过组合不同的激活函数来表示更加复杂的函数关系,从而提高对输入数据的建模能力。

    4. 梯度传播:激活函数的导数对于反向传播算法中的梯度计算和参数更新非常重要。良好的激活函数设计可以保证梯度能够有效地传播,避免梯度消失或梯度爆炸的问题。

    常见的激活函数包括Sigmoid、ReLU、Leaky ReLU、Tanh等。每种激活函数都有其特点和适用场景,选择适合的激活函数可以提升神经网络的性能和效果。

    激活函数在哪里使用

    比如一个神经网络

    在这里插入图片描述

    为了清晰的表示,我用红色标出。比如像上面的网络z = W*x,这个线性运算就是上面节点白色的部分,另一部分当然就是F(z)了。则第一层隐层(除了输入和输出层,其他都为隐层,因为’看不见’)输出的就是F(z)。但是不是说所有层都要经过激活函数。根据自己的情况而定。

    数学推导如下:

    1. 比如有两层隐层网络:z_1 = W_1*x, z_2 = W_2*z_1 (x为输入层,W_1, W_2为两个隐层,z_2为输出层)
    2. z_2 = W_2*z_1 = W_2*W_1*x = W*x
    3. 可以看出,无论经过多少次隐层,跟经过一层的是一样的。简单的应该看出来激活函数的作用了吧。

    五分钟秒懂神经网络中激活函数的原理,非线性变换有什么作用

    常用的几种激活函数

    sigmoid

    sigmoid函数,范围是(0,1)。如果你想要你的数据近可能的处在0或1上,或者你要进行二分类,就用这个函数吧。其他的情况尽量不要用。或者几乎从来不用。因为,下面的这个函数几乎在任何场合都比sigmoid更加优越。

    在这里插入图片描述
    在这里插入图片描述

    tanh

    tanh函数,范围是(-1,1)。如果想让数据尽可能在-1和1之间,就考虑这个吧。

    在这里插入图片描述
    在这里插入图片描述

    但是,sogmoid和tanh有个很明显的缺点:在z很大或者很小的时候,导数几乎是零,也就是在梯度下降优化时几乎更新不了。然而在机器学习中最受欢迎的莫过于修正线性单元

    reLU(rectified Linear Unit)

    reLU = max(0, z) 当z小于零时,导数为0,当z大于0时,导数为1。这个激活函数几乎变成默认的激活函数,如果你不知道用什么激活函数的话,就用reLU函数。

    在这里插入图片描述
    在这里插入图片描述

    虽然遇到向量z(0,0,0,0,0,0,0,0,…,0)的几率贼小,但是为了万无一失,有人就提出了下面的reLU版本:
    在这里插入图片描述
    leaky reLU = max(0.01z, z) 叫做 带泄漏reLU,0.01这个值是经验值,在z小于0的时候有个特别特别缓的直线。这个比reLU好用,但是实际用的真的不多。

    在这里插入图片描述

    reLU和leaky reLU的好处在于当z大于0时,导数和0差的很远。所以在实际实践中,用reLU和leaky reLU会使得神经网络学习速率快很多。虽然有z有小于0的可能,但是在实际中,有足够多的隐层单元是的z大于0

    Exponential Linear Unit (ELU)

    在这里插入图片描述

    SELU

    在这里插入图片描述

    Swish

    在这里插入图片描述

    Maxout

    在这里插入图片描述

    softmax

    在这里插入图片描述

    常用激活函数的求导

    sigmoid    F'(z) = 1 - F(z)
    
    tanh          F'(z) = 1 - F^2 (z)
    
    • 1
    • 2
    • 3

    reLU F’(z) =

                                        1        if z >= 0
    
                                        0        if z < 0
    
                                        1        if z >= 0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    leaky reLU F’(z) =

                                        0.01  if z < 0
    
    • 1

    如何选择正确的激活函数

    • 分类器的最后一层用sigmoid或者softmax。
    • 隐藏层首先尝试ReLU,在大多数情况下这么做。
    • 如果ReLU效果欠佳,尝试使用PReLU、LeakyReLU、Maxout等变种。
    • sigmoid和tanh会在RNN中有所应用。
  • 相关阅读:
    电路设计中的 “热地” 和 “冷地”
    Word控件Spire.Doc 【段落处理】教程(十二):如何在 C# 中管理 word 文档的分页
    软件质量保证计划书(2024Word完整版)
    元宇宙的六大支撑技术
    JAVA------基础篇
    【ACG】博主在专栏更新内容后,及时通知关注他的用户去阅读
    华为od德科面试数据算法解析 2022-8-3 消息队列合并
    idea常用快捷键(mac版)
    c++标准模板(STL)- 算法 (std::remove, std::remove_if)
    Unity中Shader的光照衰减
  • 原文地址:https://blog.csdn.net/weixin_45277161/article/details/127882912