多层神经网络的常见问题

多层神经网络的常见问题

神经网络中的隐层极大的提升了神经网络的表达能力,理论上只要隐层的节点足够多,即使只有一个隐含层的神经网络也可以拟合任意函数,隐层越多就越容易拟合复杂函数。在实际使用中使用层数较深的神经网络,会遇到容易过拟合、参数难以调试、梯度弥散等等恩义。

过拟合

过拟合是机器学习的一个常见问题,它是指模型预测准确率在训练集上升高了,在测试集上反而下降了。这通常是因为模型的泛化性不好,只记忆了当前数据的特征,不具备推广能力。Dropout是解决过拟合问题的一种简单有效的方法,它的大致思路是在训练时,将神经网络的某一层的输出节点数据随机丢弃一部分。我们可以理解成每次丢弃节点是对特征的一种采样,这种方法相当于随机创造了很多新的样本,通过增大样本量,减少特征数量来防止过拟合。

参数难以调试

神经网络通常不是一个凸优化的问题,充满了局部最优,当然我们也不期望能够达到全局最优,就像每个人对这个世界的认知都是局部的,但是也妨碍在绝大多数情况下做出正确的判断。不同机器学习问题的参数需要反复调试设置,非常繁琐,像Adagrad、Adam、Adadelta等自适应的方法可以减轻参数调试的负担。

梯度弥散

多层神经网络的常见问题

在ReLU激活函数出现之前,神经网络都采用Sigmoid作为激活函数。

多层神经网络的常见问题

这可能是因为sigmoid函数输出值在0-1之间,最符合概率的定义。非线性的Sigmoid函数在信号的特征空间映射上,对中央区的信号增益较大,对两侧区的信号增益小,酷似生物神经元的兴奋态和抑制态的机制。但在神经网络层数较多的时候,Sigmoid的梯度值会在反向传播中急剧减小,这种情况下,根据训练数据的反馈更新神经网络的参数会非常缓慢,基本起不到训练的作用。

ReLU较好的解决了梯度弥散的问题,因此非常适合训练很深的神经网络。不难看出,ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。可别小看这个简单的操作,正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。

多层神经网络的常见问题


分享到:


相關文章: