返回介绍

6.3 隐藏单元

发布于 2024-01-20 12:27:18 字数 7552 浏览 0 评论 0 收藏 0

到目前为止,我们集中讨论了神经网络的设计选择,这对于使用基于梯度的优化方法来训练的大多数参数化机器学习模型都是通用的。现在我们转向一个前馈神经网络独有的问题:该如何选择隐藏单元的类型,这些隐藏单元用在模型的隐藏层中。

隐藏单元的设计是一个非常活跃的研究领域,并且还没有许多明确的指导性理论原则。

整流线性单元是隐藏单元极好的默认选择。许多其他类型的隐藏单元也是可用的。决定何时使用哪种类型的隐藏单元是困难的事(尽管整流线性单元通常是一个可接受的选择)。我们这里描述对于每种隐藏单元的一些基本直觉。这些直觉可以用来建议我们何时尝试一些单元。通常不可能预先预测出哪种隐藏单元工作得最好。设计过程充满了试验和错误,先直觉认为某种隐藏单元可能表现良好,然后用它组成神经网络进行训练,最后用验证集来评估它的性能。

这里列出的一些隐藏单元可能并不是在所有的输入点上都是可微的。例如,整流线性单元g(z)=max{0,z}在z=0处不可微。这似乎使得g对于基于梯度的学习算法无效。在实践中,梯度下降对这些机器学习模型仍然表现得足够好。部分原因是神经网络训练算法通常不会达到代价函数的局部最小值,而是仅仅显著地减小它的值,如图4.3所示。这些想法会在第8章中进一步描述。因为我们不再期望训练能够实际到达梯度为0的点,所以代价函数的最小值对应于梯度未定义的点是可以接受的。不可微的隐藏单元通常只在少数点上不可微。一般来说,函数g(z)具有左导数和右导数,左导数定义为紧邻在z左边的函数的斜率,右导数定义为紧邻在z右边的函数的斜率。只有当函数在z处的左导数和右导数都有定义并且相等时,函数在z点处才是可微的。神经网络中用到的函数通常对左导数和右导数都有定义。在g(z)=max{0,z}的情况下,在z=0处的左导数是0,右导数是1。神经网络训练的软件实现通常返回左导数或右导数的其中一个,而不是报告导数未定义或产生一个错误。这可以通过观察到在数字计算机上基于梯度的优化总是会受到数值误差的影响来启发式地给出理由。当一个函数被要求计算g(0)时,底层值真正为0是不太可能的。相对的,它可能是被舍入为0的一个小量。在某些情况下,理论上有更好的理由,但这些通常对神经网络训练并不适用。重要的是,在实践中,我们可以放心地忽略下面描述的隐藏单元激活函数的不可微性。

除非另有说明,大多数的隐藏单元都可以描述为接受输入向量x,计算仿射变换z=,然后使用一个逐元素的非线性函数g(z)。大多数隐藏单元的区别仅仅在于激活函数g(z)的形式。

6.3.1 整流线性单元及其扩展

整流线性单元使用激活函数g(z)=max{0,z}。

整流线性单元易于优化,因为它们和线性单元非常类似。线性单元和整流线性单元的唯一区别在于整流线性单元在其一半的定义域上输出为零。这使得只要整流线性单元处于激活状态,它的导数都能保持较大。它的梯度不但大而且一致。整流操作的二阶导数几乎处处为0,并且在整流线性单元处于激活状态时,它的一阶导数处处为1。这意味着相比于引入二阶效应的激活函数来说,它的梯度方向对于学习来说更加有用。

整流线性单元通常作用于仿射变换之上:

当初始化仿射变换的参数时,可以将b的所有元素设置成一个小的正值,例如0.1。这使得整流线性单元很可能初始时就对训练集中的大多数输入呈现激活状态,并且允许导数通过。

有很多整流线性单元的扩展存在。大多数这些扩展的表现比得上整流线性单元,并且偶尔表现得更好。

整流线性单元的一个缺陷是它们不能通过基于梯度的方法学习那些使它们激活为零的样本。整流线性单元的各种扩展保证了它们能在各个位置都接收到梯度。

整流线性单元的3个扩展基于当zi<0时使用一个非零的斜率绝对值整流(absolute value rectification)固定αi=−1来得到g(z)=|z|。它用于图像中的对象识别(Jarrett et al.,2009a),其中寻找在输入照明极性反转下不变的特征是有意义的。整流线性单元的其他扩展比这应用得更广泛。渗漏整流线性单元(Leaky ReLU)(Maas et al.,2013)将αi固定成一个类似0.01的小值,参数化整流线性单元(parametric ReLU)或者PReLU将αi作为学习的参数(He et al.,2015)。

maxout单元(maxout unit)(Goodfellow et al.,2013a)进一步扩展了整流线性单元。maxout单元将z划分为每组具有k个值的组,而不是使用作用于每个元素的函数g(z)。每个maxout单元则输出每组中的最大元素:

这里是组i的输入索引集。这提供了一种方法来学习对输入x空间中多个方向响应的分段线性函数。

maxout单元可以学习具有多达k段的分段线性的凸函数。maxout单元因此可以视为学习激活函数本身,而不仅仅是单元之间的关系。使用足够大的k,maxout单元可以以任意的精确度来近似任何凸函数。特别地,具有两块的maxout层可以学习实现和传统层相同的输入x的函数,这些传统层可以使用整流线性激活函数、绝对值整流、渗漏整流线性单元或参数化整流线性单元,或者可以学习实现与这些都不同的函数。maxout层的参数化当然也将与这些层不同,所以即使是maxout学习去实现和其他种类的层相同的x的函数这种情况下,学习的机理也是不一样的。

每个maxout单元现在由k个权重向量来参数化,而不仅仅是一个,所以maxout单元通常比整流线性单元需要更多的正则化。如果训练集很大并且每个单元的块数保持很低的话,它们可以在没有正则化的情况下工作得不错(Cai et al.,2013)。

maxout单元还有一些其他的优点。在某些情况下,要求更少的参数可以获得一些统计和计算上的优点。具体来说,如果由n个不同的线性过滤器描述的特征可以在不损失信息的情况下,用每一组k个特征的最大值来概括的话,那么下一层可以获得k倍更少的权重数。

因为每个单元由多个过滤器驱动,maxout单元具有一些冗余来帮助它们抵抗一种被称为灾难遗忘(catastrophic forgetting)的现象,这个现象是说神经网络忘记了如何执行它们过去训练的任务(Goodfellow et al.,2014a)。

整流线性单元和它们的这些扩展都是基于一个原则,那就是如果它们的行为更接近线性,那么模型更容易优化。使用线性行为更容易优化的一般性原则同样也适用于除深度线性网络以外的情景。循环网络可以从序列中学习并产生状态和输出的序列。当训练它们时,需要通过一些时间步来传播信息,当其中包含一些线性计算(具有大小接近1的某些方向导数)时,这会更容易。作为性能最好的循环网络结构之一,LSTM通过求和在时间上传播信息,这是一种特别直观的线性激活。它将在第10.10节中进一步讨论。

6.3.2 logistic sigmoid与双曲正切函数

在引入整流线性单元之前,大多数神经网络使用logistic sigmoid激活函数

或者是双曲正切激活函数

这些激活函数紧密相关,因为

我们已经看过sigmoid单元作为输出单元用来预测二值型变量取值为1的概率。与分段线性单元不同,sigmoid单元在其大部分定义域内都饱和——当z取绝对值很大的正值时,它们饱和到一个高值,当z取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当z接近0时它们才对输入强烈敏感。sigmoid单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。当使用一个合适的代价函数来抵消sigmoid的饱和性时,它们作为输出单元可以与基于梯度的学习相兼容。

当必须要使用sigmoid激活函数时,双曲正切激活函数通常要比logistic sigmoid函数表现更好。在的意义上,它更像是单位函数。因为tanh在0附近与单位函数类似,训练深层神经网络类似于训练一个线性模型,只要网络的激活能够被保持地很小。这使得训练tanh网络更加容易。

sigmoid激活函数在除了前馈网络以外的情景中更为常见。循环网络、许多概率模型以及一些自编码器有一些额外的要求使得它们不能使用分段线性激活函数,并且使得sigmoid单元更具有吸引力,尽管它存在饱和性的问题。

6.3.3 其他隐藏单元

也存在许多其他种类的隐藏单元,但它们并不常用。

一般来说,很多种类的可微函数都表现得很好。许多未发布的激活函数与流行的激活函数表现得一样好。为了提供一个具体的例子,作者在MNIST数据集上使用测试了一个前馈网络,并获得了小于1%的误差率,这可以与更为传统的激活函数获得的结果相媲美。在新技术的研究和开发期间,通常会测试许多不同的激活函数,并且会发现许多标准方法的变体表现非常好。这意味着,通常新的隐藏单元类型只有在被明确证明能够提供显著改进时才会被发布。新的隐藏单元类型如果与已有的隐藏单元表现大致相当,那么它们是非常常见的,不会引起别人的兴趣。

列出文献中出现的所有隐藏单元类型是不切实际的。我们只对一些特别有用和独特的类型进行强调。

其中一种是完全没有激活函数g(z)。也可以认为这是使用单位函数作为激活函数的情况。我们已经看过线性单元可以用作神经网络的输出。它也可以用作隐藏单元。如果神经网络的每一层都仅由线性变换组成,那么网络作为一个整体也将是线性的。然而,神经网络的一些层是纯线性也是可以接受的。考虑具有n个输入和p个输出的神经网络层。我们可以用两层来代替它,一层使用权重矩阵U,另一层使用权重矩阵V。如果第一层没有激活函数,那么我们对基于W的原始层的权重矩阵进行因式分解。分解方法是计算。如果U产生了q个输出,那么UV一起仅包含(n+p)q个参数,而W包含np个参数。如果q很小,这可以在很大程度上节省参数。这是以将线性变换约束为低秩的代价来实现的,但这些低秩关系往往是足够的。线性隐藏单元因此提供了一种减少网络中参数数量的有效方法。

softmax单元是另外一种经常用作输出的单元(如第6.2.2.3节中所描述的),但有时也可以用作隐藏单元。softmax单元很自然地表示具有k个可能值的离散型随机变量的概率分布,所以它们可以用作一种开关。这些类型的隐藏单元通常仅用于明确地学习操作内存的高级结构中,将在第10.12节中描述。

其他一些常见的隐藏单元类型包括:

径向基函数(radial basis function,RBF):。这个函数在x接近模板W:,i时更加活跃。因为它对大部分x都饱和到0,因此很难优化。

softplus函数:。这是整流线性单元的平滑版本,由Dugas et al.(2001)引入用于函数近似,由Nair and Hinton(2010a)引入用于无向概率模型的条件分布。Glorot et al.(2011a)比较了softplus和整流线性单元,发现后者的结果更好。通常不鼓励使用softplus函数。softplus表明隐藏单元类型的性能可能是非常反直觉的——因为它处处可导或者因为它不完全饱和,人们可能希望它具有优于整流线性单元的点,但根据经验来看,它并没有。

硬双曲正切函数(hard tanh):它的形状和tanh以及整流线性单元类似,但是不同于后者,它是有界的,g(a)=max(−1,min(1,a))。它由Collobert(2004)引入。

隐藏单元的设计仍然是一个活跃的研究领域,许多有用的隐藏单元类型仍有待发现。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文