1、基础概念
- ground-truth:正确标记的数据
- noise:模型与实际之间的不可避免的观察误差等
- model capacity:模型的能力,指可以表达的分布情况有多复杂。一次表达式和高次表达式的能力相比,显然高次的能力更强
2、欠拟合&过拟合
- estimated表示模型复杂度,ground-truth表示真实数据复杂度
- estimated < ground-truth,欠拟合
训练bad、测试bad - ground-truth < estimated,过拟合
训练good、测试bad
3、过拟合检测与减少
3.1 检测过拟合
- 划分数据集:train、validation、test
- 使用train进行训练,backward
- 利用val进行反馈,取哪一个时间戳上的参数,防止过拟合
- test不能用来反馈、只能测试
3.2 k-fold交叉验证
- 将test和val混合在一起然后平均分k份
- 每次取一份作为val、k-1份作为test进行训练
3.3 减少过拟合
- 奥卡姆剃刀定理:不是必要的就不用
几种减少过拟合的方式
(1)more data
(2)constraint model complexity
shallow
regularization
(3)dropout
(4)data augmentation
(5)early stopping
3.3.1 regularization / weight decay
其中 θ 代表了模型的参数,加入 λ 之后可以迫使 θ 趋于0
- regularization的分类
3.3.2 动量
- momentum(动量,源自惯性的思想)
梯度下降时:同时考虑当前梯度方向和历史梯度方向,新的梯度方向为二者加权求和
3.3.3 学习率衰减
- lr decay
- 学习率的衰减可能引起loss的突降,因为在训练一段时间后,loss可能接近最小值但始终无法到达,而采用小的 lr 可能刚好到达
- 使用:ReduceLROnPlateau(优化器,‘min’)
同时监视损失函数是否一直在保持下降
3.3.4 early stop
- 一般认为,validation的表现随训练epoch先上升再下降,early stop就是让其停在最高点
3.3.5 dropout
- pytorch和tensorflow对于随机失活的概率设置刚好相反
- pytorch:torch.nn.Dropout§ 里面的p是失活概率
- tensorflow:tf.nn.dropout§ 里面的p是存活概率
- 用于训练时才失活:net_dropped.train()
- 用于测试时不失活:net_dropped.eval()
3.3.6 stochastic gradient descent(随机梯度下降)
- stochastic:不是完全随机,而是对于某个x,对应生成f(x)符合某种分布
- deterministic:确定的,对于某个x,确定生成f(x)
- 实际中SGD的意义在于,每次求解梯度的时候不是求所有样本的梯度均值的求解,而是随机选取一个sample,求解该sample的梯度均值,节省显存,速度更快