1 引言

假设历经训练,前文所述的公司神经网络以及训练完毕,对于下属的各个意见经过开会最终都可汇聚成大boss的输出,那么如何评价这个输出的正确与否呢?或者说如何评价这个公司的执行决策神经网络的性能呢?

2 方差和偏差

2.1 两个误差

首先明确两个概念:验证集误差和训练集误差。

这个误差,是和谁比较得出的呢?容易想到,我们神经网络训练完毕后,总代价不会是零,自然的,将训练集样本放入神经网络,得到的输出与真实值的差值即为训练集误差;同样的将验证集样本放入神经网络,得到的输出与验证集真实值的差值即为验证集误差。

其次,有一个大前提,即样本来自同一分布。在这种情况下,这两个误差的值应该是相等的,因为理想情况下样本都是均匀分布的。

但实际并非如此,由于模型的不确定性,对于来自同一分布的非线性输出会导致出现三种典型情况:一是训练集误差大而验证集误差更大,二是训练集误差小但是验证集误差很大,三是训练集误差与验证集误差差不多。这里比较的大小是一个相对概念,而他们的绝对大小需要依据自己对于模型的期望而作评估。

为何不会出现验证集误差小于训练集误差的情况?因为大前提已经明确了样本来自同一分布。

2.2 不是它俩的错

为了描述这两种情况,我们自然而然的要从模型作为切入口。

因为无论是验证集误差还是训练集误差,他们都只是反映模型性能的指标。他俩仅仅是我们通过现有的模型而获取到的两个预测值,预测值有什么错呢,他们也只是为模型办事罢了。但是他俩却是我们去评估这个模型办事的一个很适合的角度。话虽啰嗦,但是笔者学习至此处时确实有点迷糊,对不上号。

对于模型办事,办出的两种典型状态,一是训练集误差大而验证集误差更大,二是训练集误差很小但是验证集误差很大,我们加以分析。

再次明确大前提,样本来自同一分布

第一种情况,模型对训练数据拟合不佳,导致精密度不高,训练集误差大,使得(没有经过拟合这个过程)验证集误差变得更大,这种情况叫模型偏差大。

第二种情况,模型对训练数据拟合的太好了,导致模型难以泛化,成为了训练集数据的专用模型,使得验证集误差变大,这种情况叫模型方差大。

第三种情况,模型训练的恰到好处。

通过查看训练集误差,我们可以判断数据拟合情况,至少对于训练数据是这样,可以判断是否有偏差问题,然后查看错误率有多高。当完成训练集训练,开始使用验证集验证时,我们可以判断方差是否过高,从训练集到验证集的这个过程中,我们可以判断方差是否过高。

神经网络绝对误差和相对误差 神经网络的偏差和方差_方差


三种情况

2.3 优化方差和偏差

偏差的出现,是因为神经网络出了问题,训练不够到位。在迭代程度确定的情况下,我们就要思考换一个神经网络,若神经网络确定,我们就要考虑继续迭代训练下去,直至能够较好的拟合训练集数据。

方差的出现,是因为过度拟合了训练集数据,成为了训练集数据的专属模型,而验证集数据未能参与神经网络的训练,致使其验证集误差变大,反映到模型上就是方差较大。为了摆脱模型对于训练集的专属特性,我们需要在训练集加入更多的数据,使得在一定的迭代程度下,拟合效果相较于之前的拟合效果有所减弱,削弱模型对于训练集数据的专属程度。

当迭代至足够次数或切换了一另一个模型,偏差越来越小,神经网络对训练集数据越来越拟合,最终可想而知,模型将从高偏差状态变成高方差状态;

当加入了足够的数据,现有神经网络在对训练集数据进行训练,方差越来越小,神经网络对训练集数据越来越不拟合,最终可想而知,模型将从高方差状态变成高偏差状态。

由上图可知,存在一个神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_02状态,使得方差和偏差都在一个可以接受的范围。

3 正则化

偏差比较容易得到改善,这里主要讲讲方差的问题。理想情况下,只要有数据,往训练集里加入即可,但是有时手边并没有这些东西,我们就需要通过正则化来解决这个问题。

对模型有着至关重要影响的两类参数,分别是神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_03神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_04,我们不考虑神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_04,只关注神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_03

3.1 神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_07正则化

在前向传播计算代价函数后加上一个正则项,正则项为神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_08 乘以神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_09范数的平方, 神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_10欧几里德范数的平方等于神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_11( 𝑗 值从神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_12神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_13)平方的和,也可表示为神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_14,也就是向量参数神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_09的欧几里德范数( 2 范数)的平方,而后在进行反向传播即可,此方法称为神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_07正则化。

神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_17


L2正则化神经网络含有一个成本函数,该函数包含神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_18神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_19神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_20神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_21所有参数,字母神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_22是神经网络所含的层数,因此成本函数等于神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_23个训练样本损失函数的总和乘以 神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_24,正则项为神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_25,我们称||神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_26||神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_27为范数平方,这个矩阵范数||神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_26||神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_27(即平方范数),被定义为矩阵中所有元素的平方求和。

神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_30


正则化计算

神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_31


正则化计算反向传播后,梯度斜率变成

神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_32


更正后的梯度下降

至此我们让神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_09变得更小,完成了神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_07正则化。

3.2 神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_35正则化

正如我们所理解的,方差较大的原因是因为过拟合,神经网络过度参与了输出值的生成。可想而知,若删除神经网络中的某些结点,即可消除过拟合的问题。而事实也正是如此。

神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_36


dropout正则化

具体操作方法以神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_37(反向随机失活)为例,我们对第三层进行神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_38,设置一个掩膜层神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_39,其大小与该层的激活值矩阵相同,数值为0到1的随机数。设置概率值神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_40,以神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_41的方式将掩膜层的值由随机数转化为01矩阵,且矩阵值为1的概率 神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_42。在以此掩膜层与激活值矩阵相乘,则使得某些掩膜层值为零所对应的激活值矩阵值也变为零,形式上舍弃了这些激活值。然后再把相乘后的激活值矩阵除以神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_40值,以保证该激活值矩阵传播至下一层时的期望值不变。而后对于反向传播求导数时,我们利用缓存的神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_39神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_40做同样的处理。至此,我们完成了神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_38正则化。

3.3其他正则方法

1)数据扩增:通过对原有数据的变换生成假数据参与训练

2)神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_47:将训练过程提前终止

4 归一化输入

第一步是零均值化,神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_48它是一个向量, 神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_49等于每个训练数据 神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络绝对误差和相对误差_49减去 神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_51,意思是移动训练集,直到它完成零均值化。

第二步是归一化方差,注意特征神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_52 的方差比特征神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_53 的方差要大得多,我们要做的是给 神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_54赋值, 神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_55,这是节点神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_56 的平方, 神经网络绝对误差和相对误差 神经网络的偏差和方差_pytorch_57 是一个向量,它的每个特征都有方差,注意,我们已经完成零值均化,神经网络绝对误差和相对误差 神经网络的偏差和方差_神经网络_58元素神经网络绝对误差和相对误差 神经网络的偏差和方差_方差_59就是方差,我们把所有数据除以向量神经网络绝对误差和相对误差 神经网络的偏差和方差_深度学习_60

以此种方式,就把梯度下降模型由狭长变为均匀的样子了。

5 梯度爆炸与梯度消失

用数值逼近的方式,以双边误差代替单边误差生成反向传播的导数的预估值,并和预估值做以比较,判断出问题的地方。

6 总结

多思考 多动手