1. 选择几个隐藏层
1.1 通用近似定理
通用近似定理由G. Cybenko在论文Approximation by Superpositions of a Sigmoidal Function中提出。其贡献为从数学角度证明,单一隐藏层、任意宽度、使用sigmoid函数作为激励函数的前馈神经网络可以以任意精准度近似任意复杂函数,为多层感知机(MLP)提供了数学原理支撑。
1.2 隐藏层的层数
虽然一个单隐层网络能学习任何函数,但并不意味着我们应该尝试使用单隐藏层网络来解决所有问题。
通用近似定理只是说明了神经网络具备近似任意函数的能力,并不保证学习这些函数的过程是高效的或者可行的。
事实上,通过使用更深(而不是更广)的网络,我们可以更容易地逼近许多函数。
简单的说,理论上一个隐藏层具备学习任何复杂函数的能力,而从实际应用的角度,根据系统相响应(目标函数)和数据的分布,按照经验选择2层或以上的MLP,可能更容易训练出一个好的MLP模型。
2. 为什么需要激活函数
2.1 激活函数的作用
激活函数将输入信号转换为输出的可微运算。大多数激活函数都是非线性的。激活函数是深度学习的基础,对于MLP作用于隐藏层和输出层。
- 引入非线性:激活函数使得神经网络能够处理非线性问题,使其能够逼近任何非线性函数。同时使MLP的层数有意义。
- 避免梯度消失:某些激活函数(如ReLU)可以缓解梯度消失的问题,使得网络能够更好地训练。
2.2 常见的激活函数
2.2.1 ReLU
ReLU(x)=max(x,0)
使用ReLU的原因是,它求导表现得特别好:要么让参数消失,要么让参数通过。这使得优化表现得更好,并且ReLU减轻了困扰以往神经网络的梯度消失问题(导数稳定)。
ReLU函数有许多变体,包括参数化ReLU(Parameterized ReLU,pReLU)函数。
2.2.2 Sigmoid
当我们想要将输出视作二元分类问题的概率时,sigmoid仍然被广泛用作输出单元上的激活函
数(sigmoid可以视为softmax的特例)。然而,sigmoid在隐藏层中已经较少使用,它在大部分时候被更简单、更容易训练的ReLU所取代。
输入在双向远离0点时,导数越接近0,存在梯度消失的隐患。
2.2.3 Tanh
类似与sigmoid,取值范围(-1,1), 导数最大值1。对比sigmoid取值范围(0,1),导数最大值0.25