深度网络现代实践 - 深度前馈网络之隐藏单元篇

序言

在探索深度学习与人工智能的广袤领域中,我们时常会遭遇一个看似神秘却至关重要的概念——隐藏单元。这些单元,如同神经网络中的“隐形守护者”,承载着数据的深度处理与模式识别的重任。

隐藏单元

  • 到目前为止我们集中讨论了神经网络的设计选择,这对于使用基于梯度的优化方法来训练的大多数参数化机器学习模型都是通用的。
  • 现在我们转向一个前馈神经网络独有的问题:该如何选择隐藏单元的类型,这些隐藏单元用在模型的隐藏层中。
  • 隐藏单元的设计是一个非常活跃的研究领域,并且还没有许多明确的指导性理论原则。
  • 整流线性单元(ReLU) 是隐藏单元极好的默认选择
    • 许多其他类型的隐藏单元也是可用的。
    • 决定何时使用哪种类型的隐藏单元是困难的事(尽管整流线性单元通常是一个可接受的选择)。
    • 我们这里描述对于每种隐藏单元的一些基本直觉。这些直觉可以用来建议我们何时来尝试一些单元。
    • 通常不可能预先预测出哪种隐藏单元工作得最好。
    • 设计过程充满了试验和错误,先直觉认为某种隐藏单元可能表现良好,然后用它组成神经网络进行训练,最后用校验集来评估它的性能。
  • 这里列出的一些隐藏单元可能并不是在所有的输入点上都是可微的
    • 例如, 整流线性单元 g ( z ) = max ⁡ { 0 , z } g(z)=\max\{0,z\} g(z)=max{0,z} z = 0 z = 0 z=0处不可微。这似乎使得 g g g对于基于梯度的学习算法无效。在实践中,梯度下降对这些机器学习模型仍然表现得足够好。部分原因是神经网络训练算法通常不会达到代价函数的局部最小值,而是仅仅显著地减小它的值,如基于梯度的优化方法中所介绍。
    • 因为我们不再期望训练能够实际到达梯度为 0 0 0的点,所以代价函数的最小值对应于梯度未定义的点是可以接受的。不可微的隐藏单元通常只在少数点上不可微。
    • 一般来说,函数 g ( z ) g(z) g(z)具有左导数和右导数,左导数定义为紧邻在 z z z左边的函数的斜率,右导数定义为紧邻在 z z z右边的函数的斜率。
    • 只有当函数在 z z z处的左导数和右导数都有定义并且相等时,函数在 z z z点处才是可微的。
    • 神经网络中用到的函数通常对左导数和右导数都有定义。
    • g ( z ) = max ⁡ { 0 , z } g(z)=\max\{0,z\} g(z)=max{0,z}的情况下,在 z = 0 z = 0 z=0处的左导数是 0 0 0,右导数是 1 1 1
    • 神经网络训练的软件实现通常返回左导数或右导数的其中一个,而不是报告导数未定义或产生一个错误。
    • 这可以通过观察到在数字计算机上基于梯度的优化总是会受到数值误差的影响来启发式地给出理由。
    • 当一个函数被要求计算 g ( 0 ) g(0) g(0)时,底层值真正为 0 0 0是不太可能的。相对的,它可能是被舍入为 0 0 0的一个小量 ϵ \epsilon ϵ。在某些情况下,理论上更好的理由可以使用,但这些通常对神经网络训练并不适用。重要的是,在实践中,我们可以放心地忽略下面描述的隐藏单元激活函数的不可微性。
  • 除非另有说明,大多数的隐藏单元都可以描述为接受输入向量 x \boldsymbol{x} x,计算仿射变换 z = w ⊤ x + b \boldsymbol{z}=\boldsymbol{w}^\top\boldsymbol{x}+\boldsymbol{b} z=wx+b,然后使用一个作用于每个元素的非线性函数 g ( z ) g(z) g(z)。大多数隐藏单元的区别仅仅在于激活函数 g ( z ) g(z) g(z)的形式。

整流线性单元及其扩展

  • 整流线性单元使用激活函数 g ( z ) = max ⁡ { 0 , z } g(z)=\max\{0,z\} g(z)=max{0,z}
  • 线性单元和整流线性单元区别
    • 整流线性单元易于优化,因为它们和线性单元非常类似。
    • 线性单元整流线性单元的唯一区别:在于整流线性单元在其一半的定义域上输出为零。
  • 这使得只要整流线性单元处于激活状态它的导数都能保持较大。它的梯度不仅大而且一致。整流操作的二阶导数几乎处处为 0 0 0,并且在整流线性单元处于激活状态时它的一阶导数处处为 1 1 1。这意味着它的梯度方向对于学习来说更加有用,相比于引入二阶效应的激活函数。
  • 整流线性单元通常用于仿射变换之上: h = g ( W ⊤ x + b ) \boldsymbol{h}=g(\boldsymbol{W}^\top\boldsymbol{x}+\boldsymbol{b}) h=g(Wx+b)
    • 当初始化仿射变换的参数时,可以将 b \boldsymbol{b} b的所有元素设置成一个小的正值,例如 0.1 0.1 0.1,这使得整流线性单元很可能初始时就对训练集中的大多数输入呈现激活状态,并且允许导数通过。
  • 有很多整理线性单元的扩展存在。大多数这些扩展的表现比得上整理线性单元,并且偶尔表现得更好。
  • 整流线性单元的一个缺陷:是它们不能通过基于梯度的方法学习那些使它们激活为零的样例。 整流线性单元的各种扩展保证了它们能在各个位置都接收到梯度。
  • 整流线性单元的三个扩展
    • 整流线性单元的三个扩展基于当 z i < 0 z_i < 0 zi<0时使用一个非零的斜率 α i : h i = g ( z , α ) i = max ⁡ ( 0 , z i ) + α i min ⁡ ( 0 , z i ) \alpha_i:h_i=g(\boldsymbol{z,\alpha})_i=\max(0,z_i)+\alpha_i\min(0,z_i) αi:hi=g(z,α)i=max(0,zi)+αimin(0,zi)
    • 绝对值整流 (absolute value rectification) 固定 α i = 1 \alpha_i=1 αi=1来得到 g ( z ) = ∣ z ∣ g(z)=|z| g(z)=z。它用于图像中的对象识别,其中寻找在输入照明极性反转下不变的特征是有意义的。整流线性单元的其他扩展更广泛地适用。
    • 扩展一:
      • 渗漏整流线性单元 (Leaky ReLU):将 α i \alpha_i αi固定成一个类似 0.01 0.01 0.01的小值。
    • 扩展二:
      • 参数化整流线性单元 (parametric ReLU) 或者PReLU:将 α i \alpha_i αi作为学习的参数。
    • 扩展三:
      • maxout 单元 (maxout unit):进一步扩展了整流线性单元。并不是使用作用于每个元素的函数 g ( z ) g(z) g(z),maxout单元将 z z z划分为具有 k k k个值的组。每个maxout单元然后输出其中一组的最大元素: g ( z ) i = max ⁡ j ∈ G ( i ) z j g(z)_i=\max\limits_{\displaystyle j\in\mathbb{G}^{(i)}} z_{j} g(z)i=jG(i)maxzj
      • 说明:
        • 这里 G ( i ) \mathbb{G}^{(i)} G(i)是组 i i i的输入指标集 { ( i − 1 ) k + 1 , … , i k } \{(i-1)k+1,\dots,ik\} {(i1)k+1,,ik}
        • 这提供了一种方法来学习对输入 x \boldsymbol{x} x空间中多个方向响应的分段线性函数。
      • maxout单元可以学习具有多达 k k k段的分段线性的凸函数。maxout单元因此可以视为学习激活函数本身而不仅仅是单元之间的关系。
      • 使用足够大的 k k k,maxout单元可以以任意的逼真度来近似任何凸函数。特别地,具有每组两块的maxout层可以学习实现和传统层相同的输入 x \boldsymbol{x} x的函数,包括整流线性激活函数、绝对值整流、渗漏整流线性单元或参数化整流线性单元、或者可以学习实现与这些都不同的函数。
      • maxout层的参数化当然也将与这些层不同,所以即使是maxout学习去实现和其他种类的层相同的 x \boldsymbol{x} x的函数这种情况下,学习的机理也是不一样的。
      • 每个maxout单元现在由 k k k个权重向量来参数化,而不仅仅是一个,所以maxout单元通常比整流线性单元需要更多的正则化。如果训练集很大并且每个单元分得的块数保持很低的话,它们可以在没有正则化的情况下正常工作。
      • maxout单元还有一些其他的优点。在某些情况下,需要更少的参数可以获得一些统计和计算上的优点。具体来说,如果由 n n n个不同的线性过滤器描述的特征可以在不损失信息的情况下,用每一组 k k k个特征的最大值来概括的话,那么下一层可以获得 k k k倍更少的权重数。
      • 因为每个单元由多个过滤器驱动,maxout单元具有一些冗余来帮助它们抵抗一种被称为灾难遗忘(catastrophic forgetting)的现象,这种现象是说神经网络忘记了如何执行它们过程训练的任务。
  • 整流线性单元和它们的这些扩展都是基于一个原则,那就是如果它们的行为更接近线性,那么模型更容易优化。
  • 使用线性行为更容易优化的一般性原则同样也适用在除了深度线性网络以外的内容。循环网络可以从序列中学习并产生状态和输出的序列。
  • 当训练它们时,需要通过一些时间步长来传播信息,当其中包含一些线性计算(具有大小接近 1 1 1的某些方向导数)时,这会更容易。
  • 作为性能最好的循环网络结构之一, LSTM通过求和来在时间上传播信息,这是一种特别直观的线性激活。

logistic sigmoid与双曲正切函数

  • 在引入整流线性单元之前,大多数神经网络使用logistic sigmoid激活函数: g ( z ) = σ ( z ) g(z)=\sigma(z) g(z)=σ(z),或者是双曲正切激活函数: g ( z ) = tanh ⁡ ( z ) g(z)=\tanh(z) g(z)=tanh(z)
  • 这些激活函数紧密相关,因为 tanh ⁡ ( z ) = 2 σ ( 2 z ) − 1 \tanh(z)=2\sigma(2z)-1 tanh(z)=2σ(2z)1
  • 我们已经看过sigmoid单元作为输出单元用来预测二值型变量取值为 1 1 1的概率。
  • 与分段线性单元不同,sigmoid单元在其大部分定义域内都饱和——当 z z z取绝对值很大的正值时,它们饱和到一个高值,当 z z z取绝对值很大的负值时,它们饱和到一个低值,并且仅仅当 z z z接近 0 0 0时它们才对输入强烈敏感。
  • sigmoid单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。如果使用了一个合适的代价函数来抵消sigmoid的饱和性的话,它们作为输出单元可以与基于梯度的学习相兼容。
  • 当必须要使用sigmoid激活函数时,双曲正切激活函数通常要比logistic sigmoid函数表现更好。在 tanh ⁡ ( 0 ) = 0 \tanh(0)=0 tanh(0)=0 σ ( 0 ) = 1 2 \sigma(0)=\displaystyle\frac{1}{2} σ(0)=21的意义上,它更像是单位函数。
  • 因为 tanh ⁡ \tanh tanh 0 0 0附近与单位函数类似,训练深层神经网路: y ^ = w ⊤ tanh ⁡ ( U ⊤ tanh ⁡ ( V ⊤ x ) ) \hat{y}=\boldsymbol{w}^\top\tanh(\boldsymbol{U}^\top\tanh(\boldsymbol{V}^\top\boldsymbol{x})) y^=wtanh(Utanh(Vx))类似于训练一个线性模型 y ^ = w ⊤ U ⊤ V ⊤ x \hat{y}=\boldsymbol{w}^\top\boldsymbol{U}^\top\boldsymbol{V}^\top\boldsymbol{x} y^=wUVx,只要网络的激活函数能够被保持地很小。这使得训练 tanh ⁡ \tanh tanh网络更加容易。
  • sigmoid激活函数在除了前馈网络以外的配置中更为常见。循环网络、许多概率模型以及一些自编码器有一些额外的要求使得它们不能使用分段线性激活函数,并且使得sigmoid单元更具有吸引力,尽管它存在饱和性的问题。

其他隐藏单元

  • 也存在许多其他种类的隐藏单元,但它们并不常用。
  • 一般来说,很多种类的可微函数都表现得很好。许多未发布的激活函数与流行的激活函数表现得一样好。
  • softmax单元是另外一种经常用作输出的单元(如softmax作为输出单元中所描述的),但有时也可以用作隐藏单元。softmax单元很自然地表示具有 k k k个可能值的离散型随机变量的概率分布,所以它们可以用作一种开关。这些类型的隐藏单元通常仅用于明确地学习操作内存的高级结构中。
  • 其他一些常见的隐藏单元类型包括:
    • 径向基函数(radial basis function, RBF)
      • 公式: h i = e ( − 1 σ i 2 ∥ W : , i − x ∥ 2 ) h_i=e^{\left(\displaystyle-\frac{1}{\sigma_i^2}\Vert\boldsymbol{W}_{:,i}-\boldsymbol{x}\Vert^2 \right)} hi=e(σi21W:,ix2)
      • 这个函数在 x \boldsymbol{x} x接近模板 W : , i \boldsymbol{W}_{:,i} W:,i时更加活跃。因为它对大部分 x \boldsymbol{x} x都饱和到 0 0 0,因此很难优化。
    • softplus函数
      • 公式: g ( a ) = ζ ( a ) = log ⁡ ( 1 + e a ) g(a)=\zeta(a)=\log(1+e^a) g(a)=ζ(a)=log(1+ea)
      • 这是整流线性单元的平滑版本。通常不鼓励使用softplus函数。softplus表明隐藏单元类别的性能可能是非常反直觉的——因为它处处可导或者因为它不完全饱和,人们可能性它具有优于整流线性单元的点,但根据经验来看,它并没有。
    • 硬双曲正切函数(hard tanh)
      • 公式: g ( a ) = max ⁡ ( − 1 , min ⁡ ( 1 , a ) ) g(a)=\max(-1,\min(1, a)) g(a)=max(1,min(1,a))
      • 它的形状和 tanh ⁡ \tanh tanh以及整流线性单元类似,但是不同于后者,它是有界的。
  • 隐藏单元的设计仍然是一个活跃的研究领域,许多有用的隐藏单元类型仍有待发现。

总结

我们回顾了隐藏单元在深度学习中的广泛应用与重要性。无论是在图像识别中捕获像素间的复杂关系,还是在自然语言处理中理解文本的深层含义,隐藏单元都发挥着不可替代的作用。同时,我们也探讨了隐藏单元设计的一些基本原则与技巧,如选择合适的激活函数、调整权重矩阵的初始化方式等。

最后,我们展望了隐藏单元在未来的发展趋势。随着计算能力的提升与算法的优化,我们有理由相信,隐藏单元将在更多领域展现出其独特的魅力与价值。它们将继续作为深度学习的核心组件,推动人工智能技术的不断前

本篇章涉及往期重要内容回顾

应用数学与机器学习基础 - 数值计算篇
应用数学与机器学习基础 - 随机梯度下降算法篇
深度网络现代实践 - 深度前馈网络之基于梯度的学习篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绎岚科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值