隐藏单元的选择是神经网络设计中的一个活跃的研究领域,目前尚未有明确的指导性理论原则。
通常我们都默认选择整流线性单元作为隐藏单元,但仍有一些其他类型的隐藏单元是可用的。我们尝试建立一些对每种隐藏单元的基础直觉,通常我们无法预先得知哪种隐藏单元表现最好,设计过程中需要不断的试错,用不同的隐藏单元组成网络进行训练,最后用验证集来评估其性能。
我们知道大多数参数化机器学习模型都是使用基于梯度的优化方法来训练的。而有些隐藏单元并不是在所有的输入点上都是可微的,比如,整流线性单元g(z)=max(0,z)g(z)=max(0,z)在z=0z=0处不可微,这似乎使得g对于基梯度的学习算法无效,但是实践中梯度下降对这些机器学习模型仍然表现足够好。部分原因是神经网络训练算法通常不会达到代价函数的剧组最小值,而是仅仅显著的减小它的值。因为我们不再期望训练能够实际到达梯度为0的点,所以代价函数的最小值对应于梯度未定义的点是可以接受的。
大多数额隐藏单元都可以描述为接受输入向量x,计算仿射变换z=WTx+bz=WTx+b,然后使用一个逐元素的非线性函数g(z)g(z)。大多数隐藏单元的区别仅仅在于激活函数g(z)g(z)的形式。
1、整流线性单元及其扩展1、整流线性单元及其扩展
激活函数:g(z)=max(0,z)g(z)=max(0,z)
优点:易于优化,其与线性单元非常类似。单元处于激活状态时,一阶导数处处为1,二阶导数几乎处处为0。相比二阶效应的激活函数,其梯度方向对学习更有用。
缺点:不能通过基于梯度的方法来学习那些使激活为0的样本。
其扩展版本确保了它们能在各个位置都接收到梯度。扩展基于当zi<0zi<0时使用一个非零的斜率:
(1)绝对值整流:固定αi=−1αi=−1。用于图像识别寻找在输入照明极性反转下不变的特征是有意义的。
(2)渗漏整流线性单元:Leaky ReLU,将αiαi固定成一个类似0.01的小值。
(3)参数化整流线性单元:PReLU将αiαi作为学习的对象。
maxout 单元进一步扩展了整流线性单元。其将 zz 划分为每组具有 个值的组,而不是使用作用于每个元素的函数g(z)g(z)。每个maxout单元则输出每组的最大元素:
这里G(i)G(i)是组ii的输入索引集{(i−1)k+1,...,ik}{(i−1)k+1,...,ik},这提供了一种方法来学习输入xx空间中多个反向响应的分段线性函数。
logistic sigmod 函数:g(z)=σ(z)=11+ezg(z)=σ(z)=11+ez
双曲正切函数:g(z)=tanh(z)=2σ(2z)−1g(z)=tanh(z)=2σ(2z)−1
我们已经知道sigmod 单元作为输出单元用来预测二值型变量取值为1的概率。与分段函数不同,sigmod单元在大部分定义域内都饱和—–当z取绝对值很大的正值时饱和到一个高值,当很大的负值时,饱和到一个低值。当且仅当接近0时才对输入保持敏感。这样会使得基于梯度的徐阿西变得非常困难。
当必须使用sigmo激活函数时, tanh函数比其表现会更好。在tanh(0)=0,σ(0)=1/2tanh(0)=0,σ(0)=1/2下,它更类似于单位函数,在训练深层网络时ŷ =wTtanh(UTtanh(VTx))y^=wTtanh(UTtanh(VTx))类似于训练一个线性模型,只要网络的激活能够保持一个很小的值,这使得训练网络更容易。
不过在循环网络,许多概率模型以及一些自编码器有一些额外的要求使得它们不能使用分段线性激活函数,常使用sigma单元,尽管存在饱和性的问题。
3、其他隐藏单元3、其他隐藏单元
- 径向基函数(RBF):hi=exp(−1σ2i||W:i−x||2)hi=exp(−1σi2||W:i−x||2)
- softplus函数:g(z)=ζ(a)=log(1+ea)g(z)=ζ(a)=log(1+ea)
- 硬双曲正切函数:g(a)=max(−1,min(1,a))g(a)=max(−1,min(1,a))