历届kaggle竞赛冠军的做法,或简单或复杂,其最后一步必然是集成学习,尽管现有的模型已经很强大了,但是集成学习往往能够起到锦上添花的作用。一般而言,深度学习的集成有两大层面:数据层面和模型层面。下面详细介绍这些方法。
数据扩充法在训练和测试阶段均适用,可以增强模型的鲁棒性。
常见的数据扩充方法有:
“简单集成法”是Liu等人提出针对不平衡样本问题的一种简单集成学习解决方案,好处在于模型集成的同时还能缓解数据不平衡带来的问题。
简单集成法,简单说三点:
同一模型不同初始化方法,非常适用于小样本学习场景,会大幅度缓解模型的随机性,提升最终任务的预测结果。
对于同一个模型来说,不同的参数初始化方式通过随机梯度下降方法得到的训练结果也会不同。具体的做法如下:
同一模型不同训练轮数方法,可以有效降低训练轮数过多带来的过拟合风险。
若网络超参数设置得当,深度模型随着网络训练的进行会逐步趋于收敛,但不同训练轮数的结果仍有不同。无法确定到底哪一轮得到的模型最适用于测试数据,我们将最后几轮训练结果做集成。
损失函数是整个网络训练的 “指挥棒”,选择不同目标函数势必让网络学到不同的特征表示。
具体的做法如下,以分类任务为例:可将包括交叉熵损失、合页损失、大间隔交叉熵损失、中心损失等作为损失函数分别训练模型。而在测试阶段,有两种做法:
由于深度卷积神经网络特征具有层次性的特点,不同层特征富含的语义信息可以相互补充,因而在目标检测、图像语义分割、细粒度图像检索这些领域常见多层特征融合策略的使用。
一般地,多层特征融合操作可直接将不同层的网络特征进行级联(concatenate),而对于特征融合应该选取哪些网络层,选取的经验是:最好使用靠近目标函数的几层卷积特征,因为愈深层特征包含的高层语义愈强,分辨能力也愈强。相反,网络较浅层的特征更为普适,用于特征融合反而起不到作用。
我们知道深度神经网络模型复杂的解空间中存在非常多的局部最优解,而传统的Min-batch SGD往往只能收敛到其中一个局部最优解,如下所示:
图1 SGD:传统SGD方法只能收敛到一个局部最优解
相反的,网络快照法通过循环调整学习率,使得网络依次收敛到不同的局部最优解,利用这些最优解对模型进行集成,示意图如下所示:
图2 快照法:通过循环调整学习率,使得网络依次收敛到不同的局部最优解
具体的做法如下,将网络学习率设置为随模型迭代轮数t改变的函数:
其中:
注:退火原先是材料加工的一个特有名词,指将金属加热到某个再结晶温度并维持一段时间,再将其缓慢冷却的过程。这里退火指网络模型学习率从初始学习率逐渐减缓到0的过程。
学习率从0.1*1 随着t增长逐渐减缓到0,之后将学习率重新放大,从而跳出该局部最优解,如此往复,分别得到不同权重参数的同一模型。测试阶段,一般我们挑选最后个模型“快照”用于集成,这些模型“快照”可以采用“直接平均法”。
我们可以使用不同架构的网络训练模型,根据这些模型结果做集成。假设共有N个模型待集成,对于某测试样本x,其预测结果为N个维向量:S1,S2,...,Sn(C为数据的标记空间大小)。我们介绍常见的四种方法:
直接平均不同模型产生的类别置信度得到最终预测结果。
公式:
在直接平均法的基础上加入权重来调节不同模型输出间的重要程度。
公式:
其中,Wi 对应第 i 个模型的权重,且必须满足:
实际使用中,权重 w_i 的取值可以根据不同模型在验证集上各自单独的准确率而定。简单说:准确率高点的权重高点,准确率低点权重就小点。
投票法,少数服从多数,投票数最多的类别作为最终预测结果。
投票法前,我们先将模型各自预测的置信度基于阈值转换为相应的类别,那么对于某次预测,就有以下两种情况:
但是这样有个问题,就是模型拒绝预测时候怎么办?一般我们采用相对多数投票法,很简单,少数服从多数,即投票数最多的类别即作为最终预测结果。
堆叠法,一阶段,原始模型进行训练和预测,预测结果作为二阶段的输入,非常容易过拟合。
堆叠法分两步:
注意此时的学习器可以为任何学习算法模型,如支持向量机、随机森林等。不过在此需要指出的是,堆叠法真的非常非常容易过拟合!
集成的汇总如下:
留大家一个作业,回顾我们的课程,然后用思维导图或者表格整理出这些方法的优缺点。下面,我有一个之前自己学习笔记整理的(不完全):
还有,请大家思考,我们实战中怎么用模型集成来提升最终预测准确率?下期我们用实战来讲模型集成到底怎么用?
参考
更详细的请大家参阅魏秀参博士的《魏秀参——解析深度学习:卷积神经网络原理与视觉实践 - 第13章 - 模型集成方法》。
本文仅做学术分享,如有侵权,请联系删文。