STEP-3:Pytorch-过拟合、欠拟合、梯度消失、梯度爆炸

感谢伯禹学习平台,本次学习将记录记录如何使用Pytorch高效实现网络,熟练掌握Pytorch的基础知识,记录不包含理论知识的细节展开。

一:过拟合与欠拟合

模型训练中经常出现的两类典型问题:

  • 一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting);
  • 另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。
过拟合与欠拟合
Pytorch 如何应对过拟合
  • 权重衰减:在pytorch 中的optim使用weight_decay可以指定权重衰减因子,引入正则化
import torch
optimizer_w = torch.optim.SGD(params=[net.weight], lr=lr, weight_decay=wd) 
  • 随机丢弃(Dropout)Pytorch中可以直接使用封装号的Dropout
import torch.nn as nn
nn.Dropout(drop_p)
Pytorch 如何应对欠拟合
  • 增加模型复杂度
  • 提高输入特征

二:梯度消失与梯度爆炸

以下内容来自伯禹学习平台教学内容

当神经网络的层数较多时,模型的数值稳定性容易变差。

假设一个层数为的多层感知机的第层的权重参数为,输出层的权重参数为。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping)。给定输入,多层感知机的第层的输出。此时,如果层数较大,的计算可能会出现衰减或爆炸。举个例子,假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入分别与(消失)和(爆炸)的乘积。当层数较多时,梯度的计算也容易出现消失或爆炸。

PyTorch的默认随机初始化

随机初始化模型参数的方法有很多。在线性回归的简洁实现中,我们使用torch.nn.init.normal_()使模型net的权重参数采用正态分布的随机初始化方式。不过,PyTorch中nn.Module的模块参数都采取了较为合理的初始化策略(不同类型的layer具体采样的哪一种初始化方法的可参考源代码),因此一般不用我们考虑。

你可能感兴趣的:(STEP-3:Pytorch-过拟合、欠拟合、梯度消失、梯度爆炸)