最近参加了伯禹平台和Datawhale等举办的《动手学深度学习PyTorch版》课程,对过拟合,欠拟合,梯度消失,梯度爆炸做下笔记。
过拟合和欠拟合
- 模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting)
- 模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合
文章图片
其中超参数λ>0。当权重参数均为0时,惩罚项最小。当λ较大时,惩罚项在损失函数中的比重较大,这通常会使学到的权重参数的元素较接近0。当λ设为0时,惩罚项完全不起作用。上式中L2范数平方|w|^2展开后得到w1^2+w2^2。 有L2范数惩罚项后,在小批量随机梯度下降中,我们将线性回归一节中权重w1和w2的迭代方式更改为
【动手学深度学习PyTorch版|《动手学深度学习PyTorch版》打卡_Task3,过拟合,欠拟合,梯度消失,梯度爆炸】
文章图片
可见,L2范数正则化令权重w1和w2先自乘小于1的数,再减去不含惩罚项的梯度。因此,L2范数正则化又叫权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。
Dropout(丢弃法) 当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为p,那么有p的概率hi会被清零,有1?p的概率hi会除以1?p做拉伸。丢弃概率是丢弃法的超参数。具体来说,设随机变量ξi为0和1的概率分别为p和1?p。使用丢弃法时我们计算新的隐藏单元h′i
文章图片
由于E(ξi)=1?p,因此
文章图片
即丢弃法不改变其输入的期望值。在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法
梯度消失和梯度爆炸 当神经网络的层数较多时,模型的数值稳定性容易变差,容易出现梯度消失和梯度爆炸的情况。
假设使用softmax来做为激活函数,神经网络层数为3层:
ai:表示第i层经过激活函数后的输出
hi:表示w(i)*a(i-1)
那么有
h(i) = w(i)*a(i-1)
a(i) = softmax(h(i))
在BP过程中就有了:
用s表示:a(i)对h(i)的导数,即softmax函数的导数
用w表示:h(i)对a(i-1)的导数,即w(i)
那么在对底层神经求导时会不断出现:s*w*s*w*s*w...这个结构
由于s的取值范围是0-1/4
所以只有w>4就可能会造成梯度爆炸,w<4就可能会造成梯度消失
解决办法
随机初始化模型参数 在神经网络中,通常需要随机初始化模型参数。下面我们来解释这样做的原因。
回顾多层感知机一节描述的多层感知机。为了方便解释,假设输出层只保留一个输出单元o1(删去o2和o3以及指向它们的箭头),且隐藏层使用相同的激活函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。因此,正如在前面的实验中所做的那样,我们通常将神经网络的模型参数,特别是权重参数,进行随机初始化。
Xavier随机初始化
有一种比较常用的随机初始化方法叫作Xavier随机初始化。 假设某全连接层的输入个数为a,输出个数为b,Xavier随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布:
文章图片
假设x服从[a,b]上的均匀分布,则x的概率密度函数如下:
文章图片
它的设计主要考虑到,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。
选择合适的激活函数 使用ReLU或者其变种代替softmax
批量归一化 更好的优化器
推荐阅读
- 分类|LeNet网络模型——CIFAR-10数据集进行分类
- pytorch|升级pip超时python -m pip install --upgrade pip(终极解决)
- 深度学习|【深度学习1】Anaconda3的安装和Jupyter的使用
- 自然语言处理|Python 文字转语音(TTS)
- 深度学习|【深度学习】吴恩达深度学习-Course1神经网络与深度学习-第四周深度神经网络的关键概念编程(上)——一步步建立深度神经网络
- 计算机视觉|10分钟学会使用YOLO及Opencv实现目标检测
- pytorch|PyTorch框架中使用早停止Early Stopping(含详细代码)
- 深度学习基础知识|深度学习的性能评价指标---图像分类的评价指标
- 强化学习|强化学习笔记(七)演员-评论家算法(Actor-Critic Algorithms)及Pytorch实现