深度学习

理解和使用深度学习网络

集成学习

结合深度学习网络以提高预测精度。
下面的帖子来自Maria Duarte Rosa,她写了一篇关于神经网络特征可视化,讨论如何提高模型预测的准确性。
  • 您是否尝试过从头开始培训不同的体系结构?
  • 您是否尝试过不同的权重初始化?
  • 您是否尝试过使用不同的预训练模式进行迁移学习?
  • 您是否已运行交叉验证以找到最佳超参数?
如果你对这些问题中的任何一个回答是,这篇文章将告诉你如何利用你训练过的模型来提高预测的准确性。即使你对这四个问题的回答都是否定的,下面的简单技巧仍然可以帮助你提高预测的准确性。
首先,让我们谈谈集成学习。

什么是集成学习?

集成学习或模型集成,是一套完善的机器学习和统计技术[LINK:https://doi.org/10.1002/widm.1249]通过组合不同的学习算法来提高预测性能。不同模型的预测组合通常比组成集合的任何单个模型更精确。集成方法有不同的风格和复杂程度(有关综述,请参阅https://arxiv.org/pdf/1106.0257.pdf),但在这里,我们将重点放在结合先前训练过的多个深度学习网络的预测上。
不同的网络会犯不同的错误,这些错误的组合可以通过模型集成加以利用。虽然在深度学习文献中不如在更传统的机器学习研究中那么流行,但用于深度学习的模型集成已经取得了令人印象深刻的结果,特别是在非常流行的竞争中,如正如ImageNet和其他Kaggle挑战一样,这些竞赛通常由深度学习体系结构的团队赢得。
在本文中,我们将重点介绍三种结合不同深度神经网络预测的简单方法:
  1. 平均:对来自不同网络的所有预测(softmax层的输出)的简单平均值
  2. 加权平均:权重与单个模型的性能成比例。例如,最佳模型的预测可以加权2,而其他模型没有权重;
  3. 多数表决:对于每个测试观察,预测是所有预测中最频繁的一类
我们将使用两个示例来说明这些技术如何在以下情况下提高准确性:示例1:结合从零开始训练的不同体系结构。例2:结合不同的预训练模型进行迁移学习。尽管我们选择了两个特定的用例,但这些技术适用于大多数情况,其中您已经训练了多个深度学习网络,包括在不同数据集上训练的网络。

示例1–结合从头开始培训的不同体系结构

这里我们使用CiFAR-10数据集从头开始训练6种不同的ResNet架构。我们遵循这个例子//www.tianjin-qmedu.com/help/deeplearning/examples/train-residual-network-for-image-classification.html而不是训练一个单一的体系结构,我们使用以下6种组合来改变单元的数量和网络宽度:和netWidth =[12 32 16 24 9 6]。我们使用与示例中相同的训练选项来训练每个网络,并估计它们各自的验证错误(验证误差= 100 -预测精度):
个别验证错误:
网络1:16.36%
网络2:7.83%
网络3:9.52%
4: 7.68%
网络5:10.36%
6: 12.04%
然后我们计算了三种不同的集成技术的误差:
模型置乱错误:
平均值:6.79%
加权平均:6.79%(网络4计算两次)。
多数票:7.16%
这些数字的快速图表:
图;条形图(示例1结果);标题(‘示例1:预测误差(%));XTICKLabel({‘网络1’、‘网络2’、‘网络3’、‘网络4’、‘网络5’、‘网络6’、‘平均’、‘加权平均’、‘多数投票’);xtickangle(40)
集合预测的误差比任何单个模型的误差都小。差异很小,但在10000张图片中,与最佳的个体模型相比,这意味着89张图片现在被正确分类了。我们可以看到这些图片中的一些例子:
%绘制一些数据(最佳模型分类错误)载荷示例1结果图;对于i=1:4的子批次(2,2,i);imshow(dataVal(:,:,:,i))标题(sprintf('最佳模型:%s/集合:%s',最佳模型preds(i),集合preds(i))结束

示例2–结合不同的预训练模型进行迁移学习

在这个例子中,我们再次使用CiFAR-10数据集,但这次我们使用不同的迁移学习预训练模型。模型最初是在ImageNet上训练的,可以作为支持包下载[LINK:万博1manbetx//www.tianjin-qmedu.com/matlabcentral/profile/authors/8743315-mathworks-deep-learning-toolbox-team].我们使用了googlenet、squeezenet、resnet18、Exception和mobilenetv2,并遵循迁移学习示例[链接://www.tianjin-qmedu.com/help/deeplearning/examples/train-deep-learning-network-to-classify-new-images.html]
个别验证错误:
谷歌网:7.23%
挤压机:12.89%
结果18:7.75%
例外:3.92%
mobilenetv2: 6.96%
模型置乱错误:
平均值:3.56%
加权平均值:3.28%(例外情况计算两次)。
多数票:4.04%
%绘制误差图;条形图(example2Results);title('示例2:预测错误(%)');xticklabels({'GoogLeNet','SqueezeNet','ResNet-18', 'Xception', 'MobileNet-v2',…'Average', 'Weighted Average', 'Majority vote'});xtickangle (40)
同样,集合预测误差小于任何单个模型,并且正确分类了64张以上的图像。这些包括:
%绘制一些数据(错误分类为最佳模型)加载Example2Results。垫图;for i = 1:4 subplot(2,2,i);imshow(dataVal(:,:,: i)) title(sprintf('Best model: %s / Ensemble: %s',bestModelPreds(i),ensemblePreds(i))) end . for i = 1:4 subplot(2,2,i)

我还应该知道什么?

模型集成可以显著增加预测时间,这使得它在推理时间成本高于做出错误预测成本的应用程序中不切实际。
另一件需要注意的事情是,性能不会随着网络数量的增加而单调增加。通常,随着这个数字的增加,训练时间显著增加,但组合所有模型的回报减少。
对于应该合并多少个网络,并没有一个神奇的数字。这严重依赖于网络、数据和计算资源。话虽如此,在一个集合中,模型的多样性越多,性能就越好。
希望这对你有用——你尝试过或想过尝试集合学习吗?请在下方留言。

|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。