1.过拟合
过拟合指的是在训练集上表现很好,而在测试集上表现很差。
原因
模型过度的学习训练样本所具有的特性,导致将训练样本所独有的特性,不是这一类别所共有的特性。例如训练能够识别狗的网络,模型只能认识哈士奇是狗,而不认识金毛也是狗。当用测试数据集进行预测时会导致模型的预测准确率较低,泛化性能较差。
解决办法
- 扩大模型规模
- 增加训练数据集
- 正则化
- Dropout
- Bagging和Boosting,Bagging和Boosting是机器学习中的集成方法,多个模型的组合可以弱化每个模型中的异常点的影响,保留模型之间的通性,弱化单个模型的特性
2.网络退化
增加网络的层数,可以使模型准确率达到饱和(100%),继续增加网络模型的层数,准确率会逐渐降低,这种现象不是由于过拟合而造成的。
原因
理论上较深的模型不应该比它对应的较浅的模型更差,因为较深的模型是较浅的模型的超空间。较深的模型可以这样得到:先构建较浅的模型,然后添加很多恒等映射的网络层。
实际上较深模型后面添加的不是恒等映射,而是一些非线性层。因此,退化问题也表明了:通过多个非线性层来近似恒等映射可能是困难的。
解决办法
- 残差网络
3.梯度消失和梯度爆炸
原因
梯度消散和梯度爆炸本质上是一样的,都是因为网络层数太深而引发的梯度反向传播中的连乘效应。Sigmoid激活函数最容易产生梯度消散,这是由于它的函数特性决定的。
解决办法
- 改换激活函数,使用relu、LeakyRelu、ELU等激活函数可以改善梯度消散或爆炸问题。relu导数的正数部分恒等于1,所以不会产生梯度消失和梯度爆炸。
- BatchNormalization。对每一层的输入做scale和shift方法,将每层神经元的输入分布强行拉回均值为0、方差为1的标准正态分布,这就使得激活层输入值落入在非线性函数对输入值比较敏感的区域,使得输入的小变化会导致损失函数较大的变化,使得梯度变大,训练速度加快,且避免梯度消失问题。
- 残差网络
- 梯度剪切,该方法主要是针对梯度爆炸提出。其思想是设置一个梯度剪切阈值,更新梯度时,如果梯度超过这个阈值,那么限制其在这个范围之内
网友评论