【AI基础】bias和variance的奇妙关系

简介: 【举栗子】一次打靶实验,目标是为了打到10环,但是实际上只打到了7环,那么这里面的Error就是3。具体分析打到7环的原因,可能有两方面:

一、误差Error分析

image.png

1.估测变量x的偏差和方差

【举栗子】

一次打靶实验,目标是为了打到10环,但是实际上只打到了7环,那么这里面的Error就是3。具体分析打到7环的原因,可能有两方面:

一是瞄准出了问题,比如实际上射击瞄准的是9环而不是10环,这里的差值1就是bias,表示模型期望和真实目标的差距;

二是枪本身的稳定性有问题,虽然瞄准的是9环,但是只打到了7环,这里的差值2就是variance,表示模型的稳定性,即训练得到的模型之间的变动水平。

Error = Bias + VarianceError反映的是整个模型的准确度。

image.png

具体的公式推导如下:

image.png

2.不同模型情况

1)不同模型的方差

一次模型的方差就比较小的,也就是是比较集中,离散程度较小。而5次模型的方差就比较大,同理散布比较广,离散程度较大。

所以用比较简单的模型,方差是比较小的(就像射击的时候每次的时候,每次射击的设置都集中在一个比较小的区域内)。如果用了复杂的模型,方差就很大,散布比较开。

这也是因为简单的模型受到不同训练集的影响是比较小的。

2)不同模型的偏差

image.png

这里没办法知道真正的 f ^ \hat{f}

f

^

,所以假设图中的那条黑色曲线为真正的 f ^ \hat{f}

f

^

结果可视化,一次平均的 f ˉ \bar{f}

f

ˉ

 没有5次的好,虽然5次的整体结果离散程度很高。

一次模型的偏差比较大,而复杂的5次模型,偏差就比较小。

直观的解释:简单的模型函数集的space比较小,所以可能space里面就没有包含靶心,肯定射不中。而复杂的模型函数集的space比较大,可能就包含的靶心,只是没有办法找到确切的靶心在哪,但足够多,就可能得到真正的 f ¯ f¯f¯。

image.png

每一个model就是一个function set,可以用上图的左下方的圈圈表示这个function set,即范围。一个简单的model的set是比较小的(可能就根本没有包含target),而上图左边的五次方方程曲线,这时的function set比较大。 虽然分布的比较散,没有办法找出target(数据少),但是比较分散在中心周围,平均起来能接近f ¯ f¯f¯。

3)方差VS偏差

image.png

将系列02中的误差拆分为偏差和方差。

U n d e r f i t t i n g UnderfittingUnderfitting 欠拟合:简单模型(左边)是偏差(b i a s biasbias)比较大造成的误差

O v e r f i t t i n g OverfittingOverfitting 过拟合:复杂模型(右边)是方差(v a r i a n c e variancevariance)过大造成的误差(过拟合,即在训练集表现良好,但是在测试集上很糟糕)

image.png

欠拟合(b i a s biasbias偏大)

添加其他特征项:如组合、泛化、相关性、上下文特征、平台特征等;

添加多项式特征:如线性模型添加二次型模型使得泛化能力更强;

减少正则化参数:正则化是用来防止过拟合的,但现在模型欠拟合,则需要减少正则化参数。

注意:如果此时强行再收集更多的data去训练,这是没有什么帮助的,因为设计的函数集本身就不好,再找更多的训练集也不会更好。

过拟合(v a r i a n c e variancevariance偏大)

重新清洗数据

增加训练的数据量(如下图),可学习的特征太少,如sparrow项目的电影数据集过少,过拟合,deepFM模型参数难以收敛。

使用正则化方法,使得参数越小越好(找到的曲线更平滑),也可以对r e g u l a r i z a t i o n regularizationregularization一项加上w e i g h t weightweight。但是正则化可能影响b i a s biasbias(曲线都平滑时可能就没包含目标的function)。

使用dropout方法,在深度学习中常用(imageNet提出的)

image.png

但是很多时候不一定能做到收集更多的data。也很多种收集(调整)数据的方法,针对对问题的理解对数据集做调整。比如识别手写数字的时候,偏转角度的数据集不够,那就将正常的数据集左转15度,右转15度,类似这样的处理。

3.模型的选择

现在在偏差和方差之间就需要一个权衡

想选择的模型,可以平衡偏差和方差产生的错误,使得总错误最小

但是下面这件事最好不要做:

image.png

用训练集训练不同的模型,然后在测试集上比较错误,模型3的错误比较小,就认为模型3好。但实际上这只是你手上的测试集,真正完整的测试集并没有。比如在已有的测试集上错误是 0.5,但有条件收集到更多的测试集后通常得到的错误都是大于 0.5 的。

1)交叉验证

image.png

图中public的测试集是已有的,private是没有的,不知道的。

交叉验证:将训练集再分为两部分,一部分作为训练集,一部分作为验证集。用训练集训练模型,然后在验证集上比较,确定出最好的模型之后(比如模型3),再用全部的训练集训练模型3,然后再用public的测试集进行测试,此时一般得到的错误都是大一些的。

不过此时会比较想再回去调一下参数,调整模型,让在public的测试集上更好,但不太推荐这样。

上述方法可能会担心将训练集拆分的时候分的效果比较差怎么办,可以用下面的方法。

2)N-折交叉验证

将训练集分成N份,比如分成3份。

image.png

比如在三份中训练结果Average错误是模型1最好,再用全部训练集训练模型1。

二、Bagging与Boosting策略

Bagging通过分而治之的策略,通过对训练样本多次采用,综合决策多个训练出来的模型,来减少集成分类器的方差。

Boosting通过逐步聚集基分类器分错的样本,减少集成分类器的偏差。

2.1 Bagging策略

Bagging是一种并行集成方法(各基分类器之间无强依赖,可以并行训练),其全称是b o o t s t r a p   ag g r e g a t ing \rm{\textbf{b}ootstrap\,\textbf{ag}gregat\textbf{ing}}bootstrapaggregating,即基于bootstrap抽样的聚合算法。随机森林算法就是一种基于bagging的模型,在最终决策时,每个个体单独做出判断后再进行投票作集体决策。

(1)Bootstrap抽样

Bootstrap抽样:指从样本集合中进行有放回的抽样,假设数据集的样本容量为n nn且基学习器的个数为M MM,对于每个基学习器我们可以进行有放回地抽取n nn个样本,从而生成了M MM组新的数据集,每个基学习器分别在这些数据集上进行训练,再将最终的结果汇总输出。

那这样的抽样方法有什么好处呢?

image.png

从上式的结果来看,当基模型之间的相关系数为1时方差不变,这相当于模型之间的输出完全一致,必然不可能带来方差的降低。

bootstrap的放回抽样特性保证了模型两两之间很可能有一些样本不会同时包含,这使模型的相关系数得以降低,而集成的方差随着模型相关性的降低而减小,如果想要进一步减少模型之间的相关性,那么就需要对基学习器进行进一步的设计。

(2)bootstrap造成的数据集差异

image.png

2.2 Boosting

Boosting是一种串行集成方法(迭代式学习),各个基分类器之间有依赖。每层在训练时,对前一层基分类器分错的样本,给予更高的权重。

假设第i ii个基模型的输出是


image.png

image.png

Boosting的过程很类似于人类学习的过程,我们学习新知识的过 程往往是迭代式的,第一遍学习的时候,我们会记住一部分知识,但往往也会犯 一些错误,对于这些错误,我们的印象会很深。第二遍学习的时候,就会针对犯 过错误的知识加强学习,以减少类似的错误发生。不断循环往复,直到犯错误的 次数减少到很低的程度。

2.3 基分类器用树型模型的原因

集成学习一般三部曲的第一步是【找到误差互相独立的基分类器】,事实上,任何 分类模型都可以作为基分类器,但树形模型由于结构简单且较易产生随机性所以比较常用。具体的3点原因:

决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用 过采样的方法来调整样本权重。

决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。

数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决 策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外, 在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性, 很好地引入了随机性。 除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型 也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始 权值等方式引入随机性。

相关文章
|
18天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【8月更文挑战第1天】在当今科技飞速发展的时代,AI已成为日常生活中不可或缺的一部分。神经网络作为AI的核心,通过模拟人脑中的神经元连接方式处理复杂数据模式。利用Python及其强大的库TensorFlow,我们可以轻松构建神经网络模型。示例代码展示了如何建立一个含有两层隐藏层的简单神经网络,用于分类任务。神经网络通过反向传播算法不断优化权重和偏置,从而提高预测准确性。随着技术的进步,神经网络正变得越来越深、越来越复杂,能够应对更加艰巨的挑战,推动着AI领域向前发展。
25 2
|
1天前
|
机器学习/深度学习 自然语言处理 负载均衡
揭秘混合专家(MoE)模型的神秘面纱:算法、系统和应用三大视角全面解析,带你领略深度学习领域的前沿技术!
【8月更文挑战第19天】在深度学习领域,混合专家(Mixture of Experts, MoE)模型通过整合多个小型专家网络的输出以实现高性能。从算法视角,MoE利用门控网络分配输入至专家网络,并通过组合机制集成输出。系统视角下,MoE需考虑并行化、通信开销及负载均衡等优化策略。在应用层面,MoE已成功应用于Google的BERT模型、Facebook的推荐系统及Microsoft的语音识别系统等多个场景。这是一种强有力的工具,能够解决复杂问题并提升效率。
|
17天前
|
机器学习/深度学习 人工智能 算法
【解锁AI新纪元】深度剖析元学习meta-learning:超越监督学习的智慧飞跃,掌握学习之学习的奥秘!
【8月更文挑战第2天】【元学习meta-learning】通俗易懂讲解:解锁学习之学习的奥秘与监督学习之别
50 24
|
1月前
|
人工智能
语言≠思维,大模型学不了推理:一篇Nature让AI社区炸锅了
【7月更文挑战第3天】新研究表明语言和思维是分离的,引发AI社区激烈讨论。论文通过fMRI实验显示语言处理与思维在大脑中独立,即使无语言人们仍能推理。这质疑了AI仅通过语言学习高级智能的可能性,暗示应更关注模拟人类思维。[[1](https://www.nature.com/articles/s41586-024-07522-w)]
52 1
|
3月前
|
机器学习/深度学习 人工智能 搜索推荐
【AI 初识】解释推荐系统的概念
【5月更文挑战第3天】【AI 初识】解释推荐系统的概念
|
3月前
|
存储 机器学习/深度学习 人工智能
极智AI | 从部署的角度看bn和in算子
本文介绍一下从部署角度来看 bn 和 in 的实现与对比。
96 1
|
3月前
|
机器学习/深度学习 人工智能 算法
极智AI | 谈谈非线性激活函数的量化方式
本文主要聊一聊深度学习模型量化中对激活函数的处理方式。
163 0
|
3月前
|
机器学习/深度学习 存储 人工智能
极智AI | 谈谈模型量化组织方式
本文主要聊一下深度学习模型量化组织方式。
219 0
|
3月前
|
机器学习/深度学习 人工智能 算法
极智AI | 谈谈tvm ansor
大家好,我是极智视界,本文分享了 谈谈 tvm ansor。希望我的分享能对你的学习有一点帮助。
83 0
|
机器学习/深度学习 人工智能 编解码
逐步揭开模型面纱!首篇深度视觉建模中的可解释AI综述
深度视觉模型在高风险领域有着广泛的应用。因此它们的黑匣子性质目前吸引了研究界的极大兴趣。论文在《可解释的人工智能》中进行了第一次调查,重点是解释深度视觉模型的方法和指标。涵盖了最新技术的里程碑式贡献,论文不仅提供了现有技术的分类组织,还挖掘了一系列评估指标,并将其作为模型解释的不同特性的衡量标准进行整理。在深入讨论当前趋势的同时,论文还讨论了这一研究方向的挑战和未来途径。
逐步揭开模型面纱!首篇深度视觉建模中的可解释AI综述