第五章

来源 : 实用机器学习 李沐
【5.1 方差和偏差【斯坦福21秋季:实用机器学习中文版】】 https://www.bilibili.com/video/BV1H44y1v7Kf?share_source=copy_web&vd_source=0fd6186eede6081ffb0cb8b80f215b64

5.1 偏差和方差

偏差是指学习到的模型的结果跟真实之间的位移.
方差是指每次模型输出的结果之间的差别.
一个好的模型应该具有低偏差和低方差.

数学理解

  • 采样D={(x1, y1), (x2, y2), ..., }, 来源于y=f(x) + \epsilon
  • 从样本集D中学习函数\hat f, 使用MSE, 目的是对于不同的采样集D都能够输出合适的结果.

\begin{aligned} E_D[(y- \hat f(x))^2] &=E[((f-E(\hat f) + \epsilon + (\hat f - E(\hat f)))^2] \\ &=(f-E[\hat f])^2 + E[\epsilon ^2] + E[(\hat f -E[\hat f]) ^2] \\ &=Bias[\hat f]^2 + Var[\hat f] + \sigma ^2 \end{aligned}

泛化的误差可以约等于偏差和方差和噪声的方差.

权衡

Bias-Variance tradeoff

模型简单的时候, 可能学不到真实想要表达的事情; 而随着模型复杂度的上升, 可以学习到的内容就更多, 因此偏差就会不断下降.
反之, 如果每次数据不变, 随着模型的复杂度变大, 模型会越来越贴近数据本身, 同时也会学习到更多的噪声, 于是泛化误差会在某个程度不断上升.

最小化泛化误差

  1. 减小偏差
    使用更加复杂的模型(增加层数、隐层)
    boosting
    stacking

  2. 减小方差
    减小模型复杂度
    正则化(L1, L2)
    bagging
    stacking

  3. 降低\sigma ^2
    提升数据质量

Ensemble learning 集成学习

使用多个模型来提升训练的效果

5.2 Bagging

bagging源于bootstrap aggregating, 就是训练n个模型(base learner).
然后对于每个模型的结果做平均(回归问题), 或者投票(分类问题).
每个模型使用通过bootstrap采样得到的数据集进行训练.
bootstrap采样过程:
假设有m个样本, 那么我们随机进行m次有放回采样, 这样的话可能会有样本被提取多次.
平均每次大概会有1-1/e, 即63%的样本, 会被采样到, 那么剩下的37%相当于可以作为验证集.

随机森林

使用决策树作为base learner, 而且在进行样本采样的时候还会随机采样一些样本特征(即表格里面的列), 样本特征不进行有放回采样.
随着base learner的数量上升, 那么我们的训练误差和验证误差都会变小, 而且随着模型数量上升, 验证误差是不会上升的, 这是因为我们降低了方差, 但是没有改变偏差, 即我们降低了泛化误差三项中的一项, 但是没有改变其他2项, 因此整体是会有一定程度的下降.

不稳定模型 unstable learner

bagging实际上会降低模型的方差, 就像做物理实验进行测量时, 会进行多次测量然后去平均一样.
因此当方差比较大的时候, 使用bagging进行优化的结果会更明显, 而方差大的模型叫做unstable learner.
考虑一个简单的回归问题, 给定真实函数f, 基础模型h, 使用bagging得到的预测值为\hat f =E[h(x)].
我们知道, 由方差定义可知, 一个随机变量满足: 它的均值的平方小于等于其平方的期望. (E[x])^2 \le E[x^2].
套用这个公式, 对于真实值和预测值之间的平方:
(f(x) - \hat f(x))^2 \le E[(f(x) - h(x))^2] \Rightarrow (E[h(x)])^2 \le E[h(x)^2]
当h(x)相等的时候, 公式取等号. 当base learner不是很稳定的时候, bagging下降方差的效果更好.
特别是对于决策树这类不稳定的模型, bagging的效果更好; 相反, 线性回归是一个比较稳定的模型, 使用bagging不会带来很好的泛化误差降低的效果.

总结

  1. bagging就是训练多个模型, 每个模型用bootstrap进行采样的数据进行训练.
  2. bagging能减少模型的方差, 特别是对于不稳定的模型, 决策树等.

5.3 Boosting

boosting的想法就是把多个弱的模型组合起来变成一个强的模型. 主要的目的在于降低模型的偏差。
主要步骤是:
按顺序学习n个弱模型,在第i步时:

  • 训练一个弱模型h_i, 测量它的误差\epsilon_t
  • 根据\epsilon_t重新对数据进行采样,主要关注在本模型预测错误的样本上。
    著名样例:AdaBoost,gradient boosting

Gradient Boosting

标记t时刻的模型为H_t(x), 初始化H_1(x)=0

  • 在时刻t=1,2,...
    • 在残差数据集\{ (x_i, y_i - H_t(x_i) ) \}_{i=1,...,m}上训练一个新的模型h_t。相当于新的模型学习的是旧模型的残差。
    • H_{t+1} (x) = H_t(x) + \eta h_t(x)
      • 学习率\eta用于调节模型的收缩 (shrinkage) 。假如学习率设置为1,而且后续模型训练的效果较好的话,很容易导致模型整体完全拟合到数据上,造成过拟合。因此通常设置为零点几,以降低过拟合的概率。(从这里看起来好像梯度下降,所以这个方法被称作gradient boosting)
  • 如果使用一个mse作为损失函数或者目标函数,那么它的残差等于负的损失函数对函数H的梯度。
    其他的boosting方法也可以带入到gradient boosting中,只是需要改变损失函数L即可。

Gradient Boosting Decision Tree (GBDT)

使用决策树作为弱模型;由于gradient boosting非常容易过拟合,我们需要做一些正则化,比如降低层数,或者随机采样一些特征(即只选择其中一些特征进行训练)
一些具体表现:

  1. 训练模型数量较小的时候,误差相比于随机森林更大
  2. 学习率设置得低和模型较弱的情况下,可能不会出现过拟合的现象
  3. 随着模型数量增大,误差会在一个特定值不再下降
  4. 需要按顺序地训练每一个模型,因此在大的数据集上运行速度慢;其他的一些变体会加快训练速度,如XGBoost,lightGBM

总结

  1. boosting使用的是多个弱模型来降低整体的偏差(bagging是方差)
  2. Gradient boosting通过拟合数据的残差(损失函数的负梯度方向)来进行弱模型的学习。

5.4 Stacking

与bagging类似, 都是将多个base learner放在一起企图降低方差. 与bagging不一样的地方在于,

  1. 这些小模型可以存在多种类别 (随机森林, GBDT, MLP, ...).
  2. 都是在原始数据集上进行训练, 不需要进行bootstrap重采样.
    在同样的数据上, 训练不同的模型, 以此降低我们的方差.
    bagging在最终的输出做一个平均或者投票来得出最终的结果, 这源于bagging训练的是相同的模型. 而在stacking上面, 由于我们训练的是不同的模型, 最终得到的结果不好进行这样的操作, 因此通常是把结果进行拼接, 然后加上一个全连接层进行最终参数的学习.

Multi-layer Stacking

stacking也可以通过降低偏差的方法来降低泛化误差. 多层stack首先使用n个不同的模型从原始数据中计算一个输出, 然后将这个输出和原始数据拼接在一起, 放到下一层的模型 (应该是相同的模型) 作为输入, 以此循环, 然后再通过一个全连接层输出最终结果.


多层 stack结构 (From 李沐: 实用机器学习)

可以在每一层使用不同的模型, 但是为了调参方便通常会使用相同的模型组合.
stacking非常容易过拟合, 因为第一次训练的时候会得到一个比较强的特征, 然后第二次训练很容易把剩余没有学习到的(通常是噪声)学习到.

避免使用stacking导致过拟合的方法

  1. 训练第一层和第二层的数据分开, 先使用A数据集训练第一层, 然后使用B数据集放到第一层网络中, 和B本身拼接作为第二层模型的训练输入. 这样的方法不能很好的利用整个数据集.
  2. 重复k折bagging
    使用k折交叉验证来训练k个模型, 在这期间把每个模型进行验证时的输出收集起来, 得到一个与原始数据一样大小的数据, 把这些放到下一层的模型中作为输入. 重复上述步骤n次, 然后把每次的预测值做一个平均, 然后放到下一次的模型训练中, 这样能进一步降低训练的方差.

总结

  1. stacking使用多个不同的模型来降低方差. 这是一个非常强大的方法
  2. 多层stacking叠加模型来降低偏差, 但是很容易导致过拟合的问题, 因此常用k折bagging来完全利用数据集, 并且能保证不同的模型输入不会耦合.
  3. stacking的效果很好, 经常用于各种竞赛刷榜, 但是相对来说, 它的成本更高, 如果想要一个成本低一点的小模型, 可以使用蒸馏等方法.

本章总结

Reduce Variance Bias Computation Cost Parallelization
Bagging Y n n
Boosting Y n 1
Stacking Y n n
K-fold
Multi-layer
Stacking
Y Y n \times l \times k n \times k

n表示n个base learner, l表示l层stacking layer, k表示k折.
我们讲了几个降低模型偏差和方差的方法, 主要是几个集成学习的方法, 把几个模型组合起来.
具体来说,
bagging就是把几个相同的模型组合起来, 降低模型的方差.
boosting是按顺序的训练多个模型, 每个模型学习的是前一个模型对于gt的残差, 以此降低模型的偏差.
stacking是训练不同的模型, 并把这些模型的输出整合到一个全连接层中, 能够降低模型的方差.
k折多层stacking是为了解决多层stacking的过拟合问题, 能够降低模型的方差和偏差, 但是计算成本非常高. 能够同时训练n个模型, 并行度不错.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容