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

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

作者: 一只当归 | 来源:发表于2020-02-19 17:28 被阅读0次

1.多层感知机

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


Image Name

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

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

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

ReLU函数

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

\text{ReLU}(x) = \max(x, 0).

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


image.png

2.过拟合和欠拟合

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

避免过拟合的方法:

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

欠拟合的解决方法:

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

梯度消失和梯度爆炸

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

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

假设一个层数为L的多层感知机的第l\boldsymbol{H}^{(l)}的权重参数为\boldsymbol{W}^{(l)},输出层\boldsymbol{H}^{(L)}的权重参数为\boldsymbol{W}^{(L)}。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping)\phi(x) = x。给定输入\boldsymbol{X},多层感知机的第l层的输出\boldsymbol{H}^{(l)} = \boldsymbol{X} \boldsymbol{W}^{(1)} \boldsymbol{W}^{(2)} \ldots \boldsymbol{W}^{(l)}。此时,如果层数l较大,\boldsymbol{H}^{(l)}的计算可能会出现衰减或爆炸。举个例子,假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入\boldsymbol{X}分别与0.2^{30} \approx 1 \times 10^{-21}(消失)和5^{30} \approx 9 \times 10^{20}(爆炸)的乘积。当层数较多时,梯度的计算也容易出现消失或爆炸。

解决方法:

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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/yhgafhtx.html