深度学习入门---多层感知机,过拟合和欠拟合,梯度消失和梯度爆炸

1.多层感知机

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:


Image Name

激活函数需要具备以下几点性质:

        1. 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
        2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
        3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

目前最主流的激活函数就是relu函数

ReLU函数

ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素,该函数定义为

可以看出,ReLU函数只保留正数元素,并将负数元素清零。为了直观地观察这一非线性变换,我们先定义一个绘图函数xyplot。


image.png

2.过拟合和欠拟合

  • 一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting);
  • 另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。
    在实践中,我们要尽可能同时应对欠拟合和过拟合。

避免过拟合的方法:

  • 交叉验证:即重复使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集, 用训练集训练模型,用测试集来评估模型预测的好坏。
  • 正则化:(L1和L2)通过改动代价函数实现。
  • 数据增强:增加训练数据样本。
  • Dropout:通过改动神经网络本身来实现。例如,训练前,随机删除一部分隐层单元,保持输入输出层不变,依照BP算法更新上图神经网络中的权值。
  • early stopping:即提前终止。Early stopping是一种以迭代次数截断的方法来防止过拟合。
  • Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;
  • 数据清洗:将错误的label纠正或者删除错误的数据。

欠拟合的解决方法:

  • 添加其他特征项:添加特征的重要手段是“组合”,“泛化”,“相关性”;另外,特征添加的首选项是“上下文特征”,“平台特征”。
  • 添加多项式特征:比较常用,例如,在线性模型中通过添加二次项或者三次项使模型的泛化能力更强。
  • 减少正则化参数:特征化的目的是用来防止过拟合的。

梯度消失和梯度爆炸

深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。

当神经网络的层数较多时,模型的数值稳定性容易变差。

假设一个层数为的多层感知机的第层的权重参数为,输出层的权重参数为。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping)。给定输入,多层感知机的第层的输出。此时,如果层数较大,的计算可能会出现衰减或爆炸。举个例子,假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入分别与(消失)和(爆炸)的乘积。当层数较多时,梯度的计算也容易出现消失或爆炸。

解决方法:

  • 使用relu激活函数:relu激活函数的导数为1
  • BatchNormalization:本质上是解决传播过程中的梯度问题
  • ResNet残差结构
  • LSTM结构:LSTM不太容易发生梯度消失,主要原因在于LSTM内部复杂的“门(gates)”
  • 预训练加finetunning:其基本思想是每次训练一层隐藏层节点,将上一层隐藏层的输出作为输入,而本层的输出作为下一层的输入,这就是逐层预训练。训练完成后,再对整个网络进行“微调(fine-tunning)”。此方法相当于是找全局最优,然后整合起来寻找全局最优,但是现在基本都是直接拿imagenet的预训练模型直接进行finetunning。
  • 梯度剪切、正则:剪切是指设置一个阈值对梯度进行强制限制,正则是指对权重进行正则化。

你可能感兴趣的:(深度学习入门---多层感知机,过拟合和欠拟合,梯度消失和梯度爆炸)