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

如何预防pytorch tensor出现NAN pytorch 防止过拟合_复杂度


其中 θ 代表了模型的参数,加入 λ 之后可以迫使 θ 趋于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的梯度均值,节省显存,速度更快
  • 如何预防pytorch tensor出现NAN pytorch 防止过拟合_复杂度_02


  • 如何预防pytorch tensor出现NAN pytorch 防止过拟合_深度学习_03