感谢伯禹学习平台,本次学习将记录记录如何使用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具体采样的哪一种初始化方法的可参考源代码),因此一般不用我们考虑。
网友评论