简介:通过一些科学的方法对优秀的模型进行融合,以突破单个模型对未知问题的泛化能力的瓶颈,并且综合各个模型的优点得到同一个问题的最优解决方法,这就是多模型融合。多模型融合的宗旨就是通过科学的方法融合各个模型的优势,以获得对未知问题的更强的解决能力。
1.多模型融合入门
使用多模型融合方法融合神经网络模型的过程中会遇到的问题:
首先,在使用融合神经网络模型的过程中遇到的第1个问题就是训练复杂神经网络非常耗时,因为优秀的模型一般都是深度神经网络模型,这些网络模型的特点是层次较深、参数较多,所以对融合了多个深度神经网络的模型进行参数训练,会比我们使用单一的深度神经网络模型进行参数训练所耗费的时间要多上好几倍。
两种解决办法:挑选一些结构比较简单、网络层次较少的神经网络参与到多模型融合中;如果还想继续使用深度神经网络模型进行多模型融合,就需要使用迁移学习方法来辅助模型的融合,以减少训练耗时。
其次,在对各个模型进行融合时,在融合方法的类型选择上也很让人头疼,因为在选择不同的模型融合方法解决某些问题时其结果的表现不同,而且可以选择是针对模型的过程进行融合,还是针对各个模型输出的结果进行融合,这都是值得我们思考的。
本章在实践模型融合的实例中选取了相对简单的结果融合法。 结果融合法是针对各个模型的输出结果进行的融合,主要包括多数表决、结果直接平均和结果加权平均这三种主要的类型。在结果融合法中有一个比较通用的理论,就是若我们想通过多模型融合来提高输出结果的预测准确率,则各个模型的相关度越低,融合的效果会更好,也就是说各个模型的输出结果的差异性越高,多模型融合的效果就会越好。
(1)结果多数表决
结果多数表决有点类似于我们现实生活中的多人投票表决,但是需要注意:在使用这个方法的过程中最好保证我们融合的模型个数为奇数,如果为偶数,则极有可能会出现结果无法判断的情况。
需要注意:进行多模型融合并不一定能取得理想的效果,需要使用不同的方法不断地尝试。
(2)结果直接平均
结果直接平均追求的是融合各个模型的平均预测水平,以提升模型整体的预测能力,但是与结果多数表决相比,结果直接平均不强调个别模型的突出优势,却可以弥补个别模型的明显劣势,比如在参与融合的模型中有一个模型已经发生了过拟合的问题,另一个模型却发生了欠拟合的问题,但是通过结果直接平均的方法能够很好地综合这两个模型的劣势,最后可预防融合模型过拟合和欠拟合的发生。
虽然结果直接平均的方法追求的是“平均水平”,但是使用结果直接平均的多模型融合在处理很多问题时取得了优于平均水平的成绩。
结果直接平均的最大不足:融合的模型在单个数据的预测能力上并没有完胜其他三个模型。
(3)结果加权平均
我们可以将结果加权平均看作结果直接平均的改进版本,在结果加权平均的方法中会新增一个权重参数,这个权重参数用于控制各个模型对融合模型结果的影响程度。简单来说,我们之前使用结果直接平均融合的模型,其实可以被看作由三个使用了一样的权重参数的模型按照结果加权平均融合而成的。所以结果加权平均的关键是对权重参数的控制,通过对不同模型的权重参数的控制,可以得到不同的模型融合方法,最后影响融合模型的预测结果。
**调节各个模型的权重参数对最后的融合模型的结果影响较大。**所以在使用权重平均的过程中,我们需要不断尝试使用不同的权重值组合,以达到多模型融合的最优解决方案。
2.PyTorch之多模型融合实战
这里使用的是多模型融合方法中的结果加权平均,其基本思路是首先构建两个卷积神经网络模型,然后使用我们的训练数据集分别对这两个模型进行训练和对参数进行优化,使用优化后的模型对验证集进行预测,并将各模型的预测结果进行加权平均以作为最后的输出结果,通过对输出结果和真实结果的对比,来完成对融合模型准确率的计算。
使用VGG16架构和ResNet50架构的卷积神经网络模型参与本次模型的融合,然后按照结果加权平均的方法分别对这两个模型提前拟定好会使用到的权重值。
首先通过代码models.vgg16和models.resnet50得到我们想要迁移的两个卷积神经网络模型,并分别将其赋值到model_1和model_2上。因为使用的是之前的猫狗数据,所以最后的输出结果仍然是两个,对模型也需要进行相应的调整,同时我们搭建的模型使用GPUs来计算参数。
接下来进行模型训练。通过观察输出结果的准确率会发现,通过结果加权平均得到的融合模型在预测结果的准确率上优于VGG16和ResNet50,所以我们进行多模型融合的方法是成功的。