深度学习入门---多层感知机,过拟合和欠拟合,梯度消失和梯度爆炸
2020-02-19 本文已影响0人
一只当归
1.多层感知机
多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:

激活函数需要具备以下几点性质:
1. 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。
目前最主流的激活函数就是relu函数
ReLU函数
ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素,该函数定义为
可以看出,ReLU函数只保留正数元素,并将负数元素清零。为了直观地观察这一非线性变换,我们先定义一个绘图函数xyplot。

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。
- 梯度剪切、正则:剪切是指设置一个阈值对梯度进行强制限制,正则是指对权重进行正则化。