一、欠拟合与过拟合
误差:
训练误差(training error):指模型在训练数据集上表现出的误差
泛化误差(generalization error):指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。机器学习模型应关注降低泛化误差。
Q:如何计算误差?A:引入损失函数(MSE、交叉熵损失)。
验证集:从严格意义上讲,测试集只能在所有超参数和模型参数选定后使用一次。因为不可以使用测试数据选择模型,如调参。所以引入验证集(从训练集中划分出部分验证集),即预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。验证集就是模型每个epoch训练后用于测试模型的数据集。
K折交叉认证:是用来确定验证集的。把数据集划分成K个不重叠的集合,取K-1为训练集,剩下的一个为验证集。因为验证集不参与模型训练,这样减少了训练数据集的浪费。
过拟合、欠拟合的概念
过拟合:模型的训练误差远小于它在测试数据集上的误差
欠拟合:无法获得较小的训练误差
一般来说,如果训练数据集中样本数过少,过拟合更容易发生。
泛化误差不会随训练数据集里样本数量增加而增大。
3,模型复杂度
即没有免费午餐定理的应用。
解决过拟合的方法
①权重衰减:(等价于L2正则化)
L2数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数的乘积。以线性回归中的线性回归损失函数为例
线性回归一节中权重w1和w2的迭代方式为:
所以L2正则化又叫权重衰减。
②Dropout:
如图所示,是将隐藏层中的单元随机置为失活。
当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为p,那么有的p的概率hi会被清零,有1-p的概率hi会除以1-p做拉伸。
这里的超参数是丢弃概率。
即丢弃法不改变输入的期望值
即丢弃法是依照丢弃概率随机的将隐含层的神经元置为失活,即模型不依赖于某个神经元。
模型又是一个集成的思想,即不同的神经网络集成在一起,降低了模型的过拟合。
二、梯度消失、梯度爆炸
1.梯度爆炸与梯度消失:
深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)
当神经网络的层数较多时,模型的数值稳定性容易变差。
以多层感知机为例:
即一个指数模型,底数大于1与小于1时,指数趋近于无穷,对应的一个为无穷(梯度爆炸),另一个为0(梯度消失)
2.随机权重初始化:
原因:若将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。
PyTorch:torch.nn.init_normal()
Xavier初始化:
3.协变量偏移:
举例,训练时是使用正常的图片进行训练,但是测试的时候选取了卡通风格的图片进行测试。
4.标签偏移
简单来说,标签偏移就是测试数据集中出现了训练集中没有的数据。
5.概念偏移
因为地理位置不同等,导致标签含义发生的变化。
三、循环神经网络进阶
1.GRU(门控神经网络)
针对RNN中存在的问题:梯度较容易出现衰减或爆炸
⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系
RNN:
GRU:
• 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
• 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。
2.LSTM(长短记忆网络)
重点要素:
遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入
输出门:控制从记忆细胞到隐藏状态
记忆细胞:⼀种特殊的隐藏状态的信息的流动
深度循环神经网络: