1 引言
假设历经训练,前文所述的公司神经网络以及训练完毕,对于下属的各个意见经过开会最终都可汇聚成大boss的输出,那么如何评价这个输出的正确与否呢?或者说如何评价这个公司的执行决策神经网络的性能呢?
2 方差和偏差
2.1 两个误差
首先明确两个概念:验证集误差和训练集误差。
这个误差,是和谁比较得出的呢?容易想到,我们神经网络训练完毕后,总代价不会是零,自然的,将训练集样本放入神经网络,得到的输出与真实值的差值即为训练集误差;同样的将验证集样本放入神经网络,得到的输出与验证集真实值的差值即为验证集误差。
其次,有一个大前提,即样本来自同一分布。在这种情况下,这两个误差的值应该是相等的,因为理想情况下样本都是均匀分布的。
但实际并非如此,由于模型的不确定性,对于来自同一分布的非线性输出会导致出现三种典型情况:一是训练集误差大而验证集误差更大,二是训练集误差小但是验证集误差很大,三是训练集误差与验证集误差差不多。这里比较的大小是一个相对概念,而他们的绝对大小需要依据自己对于模型的期望而作评估。
为何不会出现验证集误差小于训练集误差的情况?因为大前提已经明确了样本来自同一分布。
2.2 不是它俩的错
为了描述这两种情况,我们自然而然的要从模型作为切入口。
因为无论是验证集误差还是训练集误差,他们都只是反映模型性能的指标。他俩仅仅是我们通过现有的模型而获取到的两个预测值,预测值有什么错呢,他们也只是为模型办事罢了。但是他俩却是我们去评估这个模型办事的一个很适合的角度。话虽啰嗦,但是笔者学习至此处时确实有点迷糊,对不上号。
对于模型办事,办出的两种典型状态,一是训练集误差大而验证集误差更大,二是训练集误差很小但是验证集误差很大,我们加以分析。
再次明确大前提,样本来自同一分布。
第一种情况,模型对训练数据拟合不佳,导致精密度不高,训练集误差大,使得(没有经过拟合这个过程)验证集误差变得更大,这种情况叫模型偏差大。
第二种情况,模型对训练数据拟合的太好了,导致模型难以泛化,成为了训练集数据的专用模型,使得验证集误差变大,这种情况叫模型方差大。
第三种情况,模型训练的恰到好处。
通过查看训练集误差,我们可以判断数据拟合情况,至少对于训练数据是这样,可以判断是否有偏差问题,然后查看错误率有多高。当完成训练集训练,开始使用验证集验证时,我们可以判断方差是否过高,从训练集到验证集的这个过程中,我们可以判断方差是否过高。
三种情况
2.3 优化方差和偏差
偏差的出现,是因为神经网络出了问题,训练不够到位。在迭代程度确定的情况下,我们就要思考换一个神经网络,若神经网络确定,我们就要考虑继续迭代训练下去,直至能够较好的拟合训练集数据。
方差的出现,是因为过度拟合了训练集数据,成为了训练集数据的专属模型,而验证集数据未能参与神经网络的训练,致使其验证集误差变大,反映到模型上就是方差较大。为了摆脱模型对于训练集的专属特性,我们需要在训练集加入更多的数据,使得在一定的迭代程度下,拟合效果相较于之前的拟合效果有所减弱,削弱模型对于训练集数据的专属程度。
当迭代至足够次数或切换了一另一个模型,偏差越来越小,神经网络对训练集数据越来越拟合,最终可想而知,模型将从高偏差状态变成高方差状态;
当加入了足够的数据,现有神经网络在对训练集数据进行训练,方差越来越小,神经网络对训练集数据越来越不拟合,最终可想而知,模型将从高方差状态变成高偏差状态。
由上图可知,存在一个状态,使得方差和偏差都在一个可以接受的范围。
3 正则化
偏差比较容易得到改善,这里主要讲讲方差的问题。理想情况下,只要有数据,往训练集里加入即可,但是有时手边并没有这些东西,我们就需要通过正则化来解决这个问题。
对模型有着至关重要影响的两类参数,分别是和,我们不考虑,只关注。
3.1 正则化
在前向传播计算代价函数后加上一个正则项,正则项为 乘以范数的平方, 欧几里德范数的平方等于( 𝑗 值从到)平方的和,也可表示为,也就是向量参数的欧几里德范数( 2 范数)的平方,而后在进行反向传播即可,此方法称为正则化。
L2正则化神经网络含有一个成本函数,该函数包含, 到, 所有参数,字母是神经网络所含的层数,因此成本函数等于个训练样本损失函数的总和乘以 ,正则项为,我们称||||为范数平方,这个矩阵范数||||(即平方范数),被定义为矩阵中所有元素的平方求和。
正则化计算
正则化计算反向传播后,梯度斜率变成
更正后的梯度下降
至此我们让变得更小,完成了正则化。
3.2 正则化
正如我们所理解的,方差较大的原因是因为过拟合,神经网络过度参与了输出值的生成。可想而知,若删除神经网络中的某些结点,即可消除过拟合的问题。而事实也正是如此。
dropout正则化
具体操作方法以(反向随机失活)为例,我们对第三层进行,设置一个掩膜层,其大小与该层的激活值矩阵相同,数值为0到1的随机数。设置概率值,以的方式将掩膜层的值由随机数转化为01矩阵,且矩阵值为1的概率 。在以此掩膜层与激活值矩阵相乘,则使得某些掩膜层值为零所对应的激活值矩阵值也变为零,形式上舍弃了这些激活值。然后再把相乘后的激活值矩阵除以值,以保证该激活值矩阵传播至下一层时的期望值不变。而后对于反向传播求导数时,我们利用缓存的与做同样的处理。至此,我们完成了正则化。
3.3其他正则方法
1)数据扩增:通过对原有数据的变换生成假数据参与训练
2):将训练过程提前终止
4 归一化输入
第一步是零均值化,它是一个向量, 等于每个训练数据 减去 ,意思是移动训练集,直到它完成零均值化。
第二步是归一化方差,注意特征 的方差比特征 的方差要大得多,我们要做的是给 赋值, ,这是节点 的平方, 是一个向量,它的每个特征都有方差,注意,我们已经完成零值均化,元素就是方差,我们把所有数据除以向量。
以此种方式,就把梯度下降模型由狭长变为均匀的样子了。
5 梯度爆炸与梯度消失
用数值逼近的方式,以双边误差代替单边误差生成反向传播的导数的预估值,并和预估值做以比较,判断出问题的地方。
6 总结
多思考 多动手