隐藏单元——DeepLearning系列

隐藏单元

概述

这是前馈神经网络的一个特有研究问题:如何选择隐藏单元的类型。

一般来说,整流线性单元是隐藏单元很好的一个默认选择。另外有一些隐藏单元并不是在所有的输入点上都是可微的,流入:\(g(z)=max\{0, z\}\)在z=0处是不可微的,这使得g对于基于梯度的学习算法无效。但由于神经网络使用的函数通常对左导数和右导数都有定义,在这种情况下,在z=0的左导数是0,右导数是1。神经网络训练的软件实现通常返回左导数或者右导数的其中一个。

除非有特别说明,大多数隐藏单元都可以描述为接收输入向量x,计算仿射变换\(z = W^Tx+b\),然后使用一个逐元素的非线性函数\(g(z)\)

整流线性单元及其扩展

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

在这种情况下,整流线性单元在其一半的定义域上输出为0,并且只要整流线性单元处于激活状态,它的导数都能保持比较大并一致。

整流线性单元通常作用于仿射变换之上: \[ h = g(W^Tx+b) \] 初始化的时候可以把b的所有元素设置为一个较小的正值,使得整流线性单元在初始时就能对大多数输入呈现激活状态。

至于扩展,都是基于当z<0时使用了一个非零的斜率:\(g(z, \alpha)_i=max(0, z_i) + \alpha_imin(0, z_i)\)

  • 绝对值整流(absolute value rectification)固定\(\alpha_i=-1\),它用于图像中的对象识别,寻找在输入照明极性反转下不变的特征是有意义的;
  • 渗透整流线性单元(Leakly ReLU)将固定\(\alpha_i=0.01\)之类的小值;
  • 参数化整流线性单元(parametric ReLU)则是将其作为学习的参数;

maxout单元进一步做了扩展,它将z划分为每组具有k个值的组,买个maxout单元则输出每组中的最大元素: \[ g(z)_i = max z_j \] maxout 单元可以学习具有多达 k 段的分段线性的凸函数,在k足够大的情况下,maxout 单元可以以任意的精确度来近似任何凸函数。

logistic sigmoid与双曲正切函数

在引入整流线性单元之前,大多数神经网络使用 logistic sigmoid 激活函数: \[ g(z) = \sigma(z) \] 或者双曲正切激活函数: \[ g(z) = tanh(z) \] 其中,\(tanh(z)=2\sigma(2z)-1\)

sigmoid 单元的广泛饱和性会使得基于梯度的学习变得非常困难。因为这个原因,现在不鼓励将它们用作前馈网络中的隐藏单元。而双曲正切激活函数通常要比 logistic sigmoid 函数表现更好。

而在一些不能使用分段激活函数的场景下,sigmoid的使用会更常见。