Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

深度学习基础——化直为曲:激活函数

曲径通幽处,禅房花木深 —— 《题破山寺后禅院》唐.常建

1  引言

作为一个学通信的人来说,对激活函数的启蒙恐怕要从《信号与系统》中的阶跃函数谈起,阶跃信号作为一种特殊的时间函数,是一个从0跳变为1的过程。在电路分析中,阶跃函数是研究动态响应电路的基础,利用阶跃函数可以进行信号处理积分变换

单位阶跃函数信号处理中,可以通过阶跃信号及其时延信号的线性组合进行复杂信号的表达。由于阶跃函数将小于0的信号输入置为0,大于零的信号输入置为1,其本质也是一个非线性的变换,神经网络的鼻祖感知就是运用阶跃函数作为其激活函数来进行模式分类。再进一步,如果将输入信号通过级联的方式通过多个阶跃函数就构成了多层感知机模型,也就是我们所熟悉的深度神经网络的雏形。

2   为什么需要激活函数(激活层)?

这个在很多博客中都有介绍,首先深度学习想要学习到的函数不是简单的线性关系,而是复杂的非线性关系,需要有非线性变换,而深度神经网络中的卷积层和池化层都是线性变换(乘的是权重矩阵,矩阵的几何意义就是线性变换,无论经过多少卷积层都是线性的),因此要给深度学习增加非线性的话,就需要非线性层,就是我们所说的激活层。

3   理想激活函数

很多博客,上来就是介绍几种激活函数,还有他们的优缺点,没有从一个更高的视角来审视激活函数本质。我也是看了CS231n上的解释才彻底明白不同激活函数所遵从的设计思想,明白了设计思想就能对不同激活函数进行分析,同时也可以根据自己的任务特点选用甚至是设计自己的激活函数。本文从以下两个方面介绍激活函数:什么样的函数可以做激活函数、什么样的函数是好的激活函数

3.1  什么样的函数可以做激活函数

  • 有界、单增且连续

前面已经说过,激活函数是为了增加深度学习的非线性,因此激活函数必须要是非线性函数。训练深度神经网络目的就是找到一个复合函数,有足够的建模能力。实践证明,其实只要激活函数选择得好,神经元足够多,包含一个隐层的3层神经网络就可以实现对输入信号到输出信号映射关系的逼近,这符合万能逼近定理。对于万能逼近定理,其要求函数必须是非常数、有界、单调递增并且连续

  • 几乎处处可导

然而只满足有界、单增且连续可不行,由于在神经网络中往往使用BP算法进行参数更新,因此激活函数又必须是可导的。理论和工程实现总是需要相互权衡,在实际应用中,往往只需要要求激活函数“几乎处处可导”就可以了,比如常用的ReLU函数在零点处就不可导。

3.2  什么样的函数是好的激活函数

  • 零对称性

我们都知道,tanh激活函数是以0为中心的中心对称函数,sigmoid函数是以0.5为中心的中心对称函数。因此tanh在后来取代了sigmoid函数。那么为什么零对称要更好呢?可以参考谈谈激活函数以零为中心的问题(https://liam.page/2018/04/17/zero-centered-active-function/),主要原因是非零中心的函数sigmoid函数输出总为正值,即所有维度的输出都为正值,所有梯度的更新方向总是向正或者向负,导致梯度更新的Z字走向,更新缓慢。

梯度更新Z字走向

从反面看,这也是为什么我们期望每层的输入的信号都是零对称的原因,从而有了批归一化层的提出。(题外话)

  • 无饱和区域

BP算法计算误差项时每一层都要乘以激活函数导数。如果激活函数导数的绝对值小于1,那么多次连乘后误差项就会很快衰减到0,从而导致权重没有得到有效更新,这就是所谓的梯度消失。sigmoid函数的饱和区对于sigmoid和tanh激活函数而言,都存在左右饱和区,从而有梯度消失的问题。

  • 梯度计算高效

对于深度学习,训练速度一直是个痛点。因此设计梯度计算高效的激活函数对训练速度的提升有较大的帮助。对于sigmoid和tanh函数而言,它们的梯度计算需要涉及指数运算,计算复杂度高,相反ReLU函数就相当简单。

4   常见激活函数优缺点

我们如果从上文的零对称非饱和区域梯度计算高效三个特性来看常见的激活函数,就比较容易理解激活函数的发展史。

  • sigmoid

sigmoid

缺点:非零对称、有饱和区(容易梯度消失)、梯度计算复杂度高

  • tanh

tanh

优点:零对称

缺点:有饱和区(容易梯度消失)、梯度计算复杂度高

  • ReLU

ReLU优点:右半轴无饱和区(不会梯度消失)、梯度计算高效(收敛快)

缺点:非零对称、负半轴永远不会被激活(权重初始化不好会导致某些神经元dead)

  • Leaky ReLU

Leaky ReLU优点:不会饱和(两边都不会)、梯度计算高效(收敛快)、不会出现dead神经元

5   激活函数使用建议

  • 使用ReLu,设定合适的学习率
  • 尝试Leaky ReLU
  • 尝试tanh,但不期待它
  • 不使用sigmoid
中国人工智能开放创新平台
中国人工智能开放创新平台

平台由贵阳市政府、英特尔及中国产业创新联盟共同打造,致力于深化AI产业结构发展,扶持AI初创企业,打造AI生态圈,集合众多海内外高校导师及行业大牛,撰稿深度分析专业技术及应用,为 智能+注入源源不断的活力。

入门深度学习激活函数
8
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

多层感知机技术

感知机(Perceptron)一般只有一个输入层与一个输出层,导致了学习能力有限而只能解决线性可分问题。多层感知机(Multilayer Perceptron)是一类前馈(人工)神经网络及感知机的延伸,它至少由三层功能神经元(functional neuron)组成(输入层,隐层,输出层),每层神经元与下一层神经元全互连,神经元之间不存在同层连接或跨层连接,其中隐层或隐含层(hidden layer)介于输入层与输出层之间的,主要通过非线性的函数复合对信号进行逐步加工,特征提取以及表示学习。多层感知机的强大学习能力在于,虽然训练数据没有指明每层的功能,但网络的层数、每层的神经元的个数、神经元的激活函数均为可调且由模型选择预先决定,学习算法只需通过模型训练决定网络参数(连接权重与阈值),即可最好地实现对于目标函数的近似,故也被称为函数的泛逼近器(universal function approximator)。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

导数技术

导数(Derivative)是微积分中的重要基础概念。当函数y=f(x)的自变量x在一点x_0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x_0) 或 df(x_0)/dx。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

信号处理技术

信号处理涉及到信号的分析、合成和修改。信号被宽泛地定义为传递“关于某种现象的行为或属性的信息(如声音、图像和生物测量)”的函数。例如,信号处理技术用于提高信号传输的保真度、存储效率和主观质量,并在测量信号中强调或检测感兴趣的组件。我们熟悉的语音、图像都可以看做是一种信号形式。因此,对于语音、图像的增强、降噪、识别等等操作本质上都是信号处理。

批归一化技术

批归一化(Batch Normalization,BN)由谷歌于2015年提出,是一个深度神经网络训练的技巧,它不仅可以加快模型的收敛速度,还能在一定程度上缓解深层网络中的“梯度弥散”问题,从而使得训练深层网络模型更加容易和稳定。目前BN已经成为几乎所有卷积神经网络的标配技巧了。从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

推荐文章
暂无评论
暂无评论~