pytorch基础(五)- 过拟合、正则化、学习率衰减

目录

  • 模型的学习能力 model capacity
  • 欠拟合 underfitting
  • 过拟合 overfitting
  • Train-Val-Test划分
    • Train-Test划分
    • Train-Val-Test划分
    • 交叉验证
  • 正则化
    • 奥卡姆剃刀原理
    • 正则化的作用
    • L1 Regularization / L2 Regularization
      • L2 Regularization
      • L1 Regularization
  • 动量与学习率衰减
    • 动量
    • 学习率衰减
      • ReduceLROnPlateau管理optimizer 自动衰减学习率
      • StepLR固定多少epoch下降学习率
  • 提早结束训练和Dropout
    • 提早结束训练 Early Stopping
    • Dropout
  • Stochastic Gradient Descent

模型的学习能力 model capacity

pytorch基础(五)- 过拟合、正则化、学习率衰减_第1张图片
model capacity
pytorch基础(五)- 过拟合、正则化、学习率衰减_第2张图片
次方越高,模型能力越大,表达能力变强,或者搜索空间变大了。

pytorch基础(五)- 过拟合、正则化、学习率衰减_第3张图片
AlexNet-> VGG-> ResNet 模型网络深度逐渐加深,参数量增多。

欠拟合 underfitting

模型复杂度比真实数据的复杂度小,模型的表达能力不够,会出现欠拟合。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第4张图片
欠拟合的表现:训练acc和训练loss都表现不好;测试时候的acc也不好。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第5张图片

过拟合 overfitting

模型的复杂度比真实数据的复杂度高。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第6张图片
过拟合的表现:训练acc和训练loss都表现得很好,但是测试集上acc不好。泛化能力变差。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第7张图片
现实情况中,更容易出现过拟合的现象,因为计算机计算能力越来越强,可优化的网络非常深。

Train-Val-Test划分

Train-Test划分

在training set上训练一个模型,在test set上测试 模型,选择过拟合前表现最好的一组模型参数(选择test acc最高时的时间戳下的模型参数)。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第8张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第9张图片

Train-Val-Test划分

val set用于挑选模型;
test set不用于训练和评估的数据集。用于客观评价模型的泛化能力,test set一般不会给出。
注意:看到test set的性能后不能回过头来选择模型,unavaliable.
pytorch基础(五)- 过拟合、正则化、学习率衰减_第10张图片
如何只得到train-test划分的数据集,那么需要人为地划分train数据集为train-val两个数据集。

torch.utils.data.random_split(train_db, [train_size, val_size[)

pytorch基础(五)- 过拟合、正则化、学习率衰减_第11张图片

交叉验证

如果train:val:test = 5:1:1
那么有2/7的数据不能用于训练,那么如果考虑将验证集(val set)这1/7的数据也用于训练,那么可以使用K-fold交叉验证。
将train-val数据集合并分成N份,依次取第i份(i<=N)作为验证集,剩下的作为训练集来训练。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第12张图片

正则化

奥卡姆剃刀原理

奥卡姆剃刀原理:如果不是必要的东西就不要使用。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第13张图片

正则化的作用

pytorch基础(五)- 过拟合、正则化、学习率衰减_第14张图片
正则化(Regularization/Weight decay),迫使参数的范数接近于0(预测曲线变得平滑,迫使多项式前几项比较大-预测结果好,多项式后几项比较小,退化成较小次方的模型),减小模型复杂度。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第15张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第16张图片

L1 Regularization / L2 Regularization

pytorch基础(五)- 过拟合、正则化、学习率衰减_第17张图片

L2 Regularization

torch.optim优化器实现L2正则化;
optim.SGD()中的weight-decay参数等于L2-regularization中的 λ \lambda λ参数。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第18张图片

L1 Regularization

pytorch中没有直接实现L1正则的类或函数,需要手动实现。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第19张图片

动量与学习率衰减

动量

动量也称为惯性;
pytorch基础(五)- 过拟合、正则化、学习率衰减_第20张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第21张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第22张图片
代码:
optim.SGD()中的momentum参数等于momentum算法中的 β \beta β参数。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第23张图片

学习率衰减

pytorch基础(五)- 过拟合、正则化、学习率衰减_第24张图片
刚开始设置比较大的学习率,然后逐步衰减学习率。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第25张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第26张图片

ReduceLROnPlateau管理optimizer 自动衰减学习率

设置学习率衰减的方式:
将optimizer丢给ReduceLROnPlateau管理

torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode=‘min’,
factor=0.1, patience=10, verbose=False,…)
patience:监听多少次loss没有减少的时候,衰减学习率;ReduceLROnPlateau.step()调用一次,监听一次;
factor:每次学习率衰减为原来的多少比例

pytorch基础(五)- 过拟合、正则化、学习率衰减_第27张图片

StepLR固定多少epoch下降学习率

StepLR(optimizer, step_size=30, gamma=0.1)

pytorch基础(五)- 过拟合、正则化、学习率衰减_第28张图片

提早结束训练和Dropout

提早结束训练 Early Stopping

pytorch基础(五)- 过拟合、正则化、学习率衰减_第29张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第30张图片

Dropout

dropout迫使模型在训练的时候使用的参数少一点;
pytorch基础(五)- 过拟合、正则化、学习率衰减_第31张图片
pytorch基础(五)- 过拟合、正则化、学习率衰减_第32张图片

pytorch基础(五)- 过拟合、正则化、学习率衰减_第33张图片
在test的时候没有dropout,是要使用net.eval()设置模型使用所有的参数进行预测,训练的时候使用net.train()设置可使用dropout。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第34张图片

Stochastic Gradient Descent

最开始的梯度下降算法,使用所有数据的平均loss来计算参数梯度;但是加载全部数据对于内存压力比较大,存在内存不足的情况。
pytorch基础(五)- 过拟合、正则化、学习率衰减_第35张图片
原始的Stochastic Gradient Descent,随机取一个样本来计算参数梯度;
pytorch基础(五)- 过拟合、正则化、学习率衰减_第36张图片
现在的的Stochastic Gradient Descent,随机取一个batch样本来计算梯度;
pytorch基础(五)- 过拟合、正则化、学习率衰减_第37张图片

你可能感兴趣的:(pytorch,python,pytorch)