Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
深入理解泛化_什么叫泛化,希望能够帮助你!!!。
什么是泛化呢?
先举个栗子:
小明和小李都上了高三。小明头脑机灵,一边刷着五年高考三年模拟一边总结做题规律,而小李一门心思刷题,一套完了又一套,刷的试卷堆成山了却没有对错题进行总结。高考结束成绩公布,小明超出一本线几十分,而小李却勉强上了二本线。这是为什么呢?
原来高考试题一般是新题,谁也没做过,平时的刷题就是为了掌握试题的规律,能够举一反三、学以致用,这样面对新题时也能从容应对。这种对规律的掌握便是泛化能力。
在这个例子中,小明善于总结做题规律,可以说是他的泛化能力好;而小李只知道刷题却没有掌握做题规律,可以说是他的泛化能力差。
机器学习(深度学习)的根本问题是优化和泛化之间的对立。
优化(optimization)是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习),而泛化(generalization)是指训练好的模型在前所未见的数据上的性能好坏。
机器学习的目的当然是得到良好的泛化,但你无法控制泛化,只能基于训练数据调节模型。
对泛化能力可以从以下六个方面来理解:
泛化能力最直接的定义是训练数据和真实数据间的差异,训练模型的目地是要模型在完全陌生的数据上进行测试的;
泛化能力还可以看成模型的稀疏性。正如奥卡姆的剪刀指出的,面对不同的解释时,最简单的解释是最好的解释。在机器学习中,具有泛化能力的模型中应该有很多参数是接近0的。而在深度学习中,则是待优化的矩阵应该对稀疏性有偏好性。
泛化能力的第三种解释是生成模型中的高保真能力。具有泛化能力的模型应在其每个抽象层次具有重构特征的能力。
第四种解释是模型能够有效的忽视琐碎的特征,或者说在无关的变化下都能找到相同的特征。
泛化能力还可以看成模型的信息压缩能力。
这里涉及到解释为什么深度学习有效的一种假说,信息瓶颈(information bottleneck),说的是一个模型对特征进行压缩(降维)的能力越强,其就越更大的可能性做出准确的分类。信息压缩能力可以概括上述的四种关于泛化能力的解释,稀疏的模型因其结构而完成了信息的压缩,生成能力强,泛化误差低的模型因信息压缩而可能,而忽略无关特征是信息压缩的副产品。
理解泛化能力的最后一种角度是风险最小化。
这是从博弈论的角度来看,泛化能力强的模型能尽可能降低自己在真实环境中遇到意外的风险,因此会在内部产生对未知特征的预警机制,并提前做好应对预案。这是一种很抽象的也不那么精确的解释,但随着技术的进步,人们会找出在该解释下进行模型泛化能力的量化评价方法。
数据集可以分为:
为了让测试集能有效反映网络的泛化能力,需要牢记:
第一,测试集绝不能以任何形式用于训练网络,即使是用于从一组备选网络中挑选网络中挑选网络。测试集只能在所有的训练和模型选择完成后使用;
第二、测试集必须代表网络使用中涉及的所有情形(当输入空间是高维或者形状复杂时,难以保证)。
举个栗子:
老师出了10 道习题供同学们练习,考试时老师又用同样的这10道题作为试题,这个考试成绩能否有效反映出同学们学得好不好呢?
答案是否定的,可能有的同学只会做这10 道题却能得高分.回到我们的问题上来,我们希望得到泛化性能强的模型?好比是希望同学们对课程学得很好、获得了对所学知识"举一反三"的能力;训练样本相当于给同学们练习的习题,测试过程则相当于考试.显然,若测试样本被用作训练了,则得到的将是过于"乐观"的估计结果。
根据泛化能力强弱,可以分为:
在机器学习中,可以用Bias(偏差)、Variance(方差)衡量欠拟合、刚好拟合、过拟合。
对于Bias:
对于Variance:
左图是高偏差,对应欠拟合;右图是高方差,对应过拟合,中间是Just Right,对应刚好拟合。
对于过拟合,可以理解为:
过拟合指的是给定一堆数据,这堆数据带有噪声,利用模型去拟合这堆数据,可能会把噪声数据也给拟合了,这点很致命,一方面会造成模型比较复杂(想想看,本来一次函数能够拟合的数据,现在由于数据带有噪声,导致要用五次函数来拟合,多复杂!),另一方面,模型的泛化性能太差了(本来是一次函数生成的数据,结果由于噪声的干扰,得到的模型是五次的),遇到了新的数据让你测试,你所得到的过拟合的模型,正确率是很差的。
模型的容量(capacity):通常指模型中可学习参数的个数(或模型复杂度)。
训练刚开始的时候,模型还在学习过程中,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大。这个时候,模型还没有学习到知识,处于欠拟合状态,曲线落在欠拟合区域。
随着训练的进行,训练误差和测试误差都下降。随着模型的进一步训练,在训练集上表现的越来越好,终于在突破一个点之后,训练集的误差继续下降,而测试集的误差上升了,此时模型的方差较大,就进入了过拟合区间。 它通常发生在模型过于复杂的情况下,如参数过多等,会使得模型的预测性能变弱,并且增加数据的波动性。虽然模型在训练时的效果可以表现的很完美,基本上记住了数据的全部特点,但这种模型在未知数据的表现能力会大减折扣,因为简单的模型泛化能力通常都是很弱的。
因此,所使用的模型应该具有足够多的参数,以防欠拟合,即模型应避免记忆资源不足。在容量过大与容量不足之间要找到一个折中,即最优容量。
这里有两个地方需要注意。
(1) 模型训练过程中,训练集的误差一定一直低于测试集吗?
未必。如果这两个集合本来就取自于同样的数据分布,比如从一个数据集中随机采样,那么有可能测试的误差从一开始就低于训练集。不过,总体的趋势肯定是不变的,两者从一开始慢慢下降直到最后过拟合,训练集的误差低于测试集。
(2) 模型的训练一定会过拟合吗?
这也不一定!如果数据集足够大,很可能模型的能力不够始终都不会过拟合。另一方面,有很多的方法可以阻止,或者减缓模型的过拟合,比如正则化。
1.聊聊神经网络中的正则化
2.尹恩·古德费洛.深度学习[M].北京:人民邮电出版社,2017.8
3.马丁 T·哈根,章毅(译).神经网络设计.第二版.北京:机械出版社,2017.12
4.深度学习500问
5.网上其它资料(后补)
PS:过拟合怎么解决?,请看正则化
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章