教程 | 从检查过拟合到数据增强,一文简述提升神经网络性能方法

作者:Rohith Gandhi

机器之心编译

参与:Nurhachu Null、路

本文简要介绍了提升神经网络性能的方法,如检查过拟合、调参、算法集成、数据增强。

神经网络是一种在很多用例中能够提供最优准确率的机器学习算法。但是,很多时候我们构建的神经网络的准确率可能无法令人满意,或者无法让我们在数据科学竞赛中拿到领先名次。所以,我们总是在寻求更好的方式来改善模型的性能。有很多技术可以帮助我们达到这个目标。本文将介绍这些技术,帮助大家构建更准确的神经网络。

检查过拟合

保证神经网络在测试集上运行良好的第一步就是验证神经网络没有过拟合。什么是过拟合呢?当你的模型开始记录训练数据而不是从中学习的时候,就发生了过拟合。然后,当你的模型遇到之前没有见过的数据时,它就无法很好的运行。为了更好地理解,我们来看一个类比。我们有一个记性特好的同学,假设一次数学考试马上就要来临了。你和这位擅长记忆的同学开始学习课本。这名同学记住课本中的每一个公式、问题以及问题的答案,然而你要比他来得聪明一些,所以你决定以直觉为基础、解决问题、学习这些公式是如何发挥作用的。考试来了,如果试卷中的问题是直接来源于课本的,那么可以想像那名记忆力超群的同学发挥得更好,但是,如果试题是涉及应用直观知识的全新问题,那么你将会做得更好,而你的朋友会惨败。

如何鉴别模型是否过拟合呢?你仅仅需要交叉检查训练准确率和测试准确率。如果训练准确率远远高出了测试准确率,那么可以断定你的模型是过拟合了。你也可以在图中画出预测点来验证。下面是一些避免过拟合的技术:

  • 数据正则化(L1 或 L2);
  • Dropout:随机丢弃一些神经元之间的连接,强制神经网络寻找新的路径并泛化;
  • 早停(Early Stopping):促使神经网络训练早点停止,以减少在测试集中的误差。

超参数调节

超参数是你必须给网络初始化的值,这些数值不能在训练的过程中学到。在卷积神经网络中,这些超参数包括:核大小、神经网络层数、激活函数、损失函数、所用的优化器(梯度下降、RMSprop)、批大小、训练的 epoch 数量等等。

每个神经网络都会有最佳超参数组合,这组参数能够得到最大的准确率。你也许会问,「有这么多超参数,我如何选择每个参数呢?」不幸的是,对每个神经网络而言,并没有确定最佳超参数组合的直接方法,所以通常都是通过反复试验得到的。但是也有一些关于上述超参数的最佳实践:

  • 学习率:选择最优学习率是很重要的,因为它决定了神经网络是否可以收敛到全局最小值。选择较高的学习率几乎从来不能到达全局最小值,因为你很可能跳过它。所以,你总是在全局最小值附近,但是从未收敛到全局最小值。选择较小的学习率有助于神经网络收敛到全局最小值,但是会花费很多时间。这样你必须用更多的时间来训练神经网络。较小的学习率也更可能使神经网络困在局部极小值里面,也就是说,神经网络会收敛到一个局部极小值,而且因为学习率比较小,它无法跳出局部极小值。所以,在设置学习率的时候你必须非常谨慎。
  • 神经网络架构:并不存在能够在所有的测试集中带来高准确率的标准网络架构。你必须实验,尝试不同的架构,从实验结果进行推断,然后再尝试。我建议使用已经得到验证的架构,而不是构建自己的网络架构。例如:对于图像识别任务,有 VGG net、Resnet、谷歌的 Inception 网络等。这些都是开源的,而且已经被证明具有较高的准确率。所以你可以把这些架构复制过来,然后根据自己的目的做一些调整。
  • 优化器和损失函数:这方面有很多可供选择。事实上,如果有必要,你可以自定义损失函数。常用的优化器有 RMSprop、随机梯度下降和 Adam。这些优化器貌似在很多用例中都可以起作用。如果你的任务是分类任务,那么常用的损失函数是类别交叉熵。如果你在执行回归任务,那么均方差是最常用的损失函数。你可以自由地使用这些优化器超参数进行试验,也可以使用不同的优化器和损失函数。
  • 批大小和 epoch 次数:同样,没有适用于所有用例的批大小和 epoch 次数的标准值。你必须进行试验,尝试不同的选择。在通常的实践中,批大小被设置为 8、16、32……epoch 次数则取决于开发者的偏好以及他/她所拥有的计算资源。
  • 激活函数:激活函数映射非线性函数输入和输出。激活函数是特别重要的,选择合适的激活函数有助于模型学习得更好。现在,整流线性单元(ReLU)是最广泛使用的激活函数,因为它解决了梯度消失的问题。更早时候,Sigmoid 和 Tanh 函数都是最常用的激活函数。但是它们都会遇到梯度消失的问题,即在反向传播中,梯度在到达初始层的过程中,值在变小,趋向于 0。这不利于神经网络向具有更深层的结构扩展。ReLU 克服了这个问题,因此也就可以允许神经网络扩展到更深的层。

ReLU 激活函数

算法集成

如果单个神经网络不像你期待的那样准确,那么你可以创建一个神经网络集成,结合多个网络的预测能力。你可以选择不同的神经网络架构,在不同部分的数据集上训练它们,然后使用它们的集合预测能力在测试集上达到较高的准确率。假设你在构建一个猫狗分类器,0 代表猫,1 代表狗。当组合不同的猫狗分类器时,基于单个分类器之间的皮尔逊相关系数,集成算法的准确率有了提升。让我们看一个例子,拿 3 个模型来衡量它们各自的准确率:

Ground Truth: 1111111111
Classifier 1: 1111111100 = 80% accuracy
Classifier 2: 1111111100 = 80% accuracy
Classifier 3: 1011111100 = 70% accuracy

3 个模型的皮尔逊相关系数很高。所以,集成它们并不会提升准确率。如果我们使用多数投票的方式来组合这三个模型,会得到下面的结果:

Ensemble Result: 1111111100 = 80% accuracy

现在,让我们来看一组输出具备较低皮尔逊相关系数的模型:

Ground Truth: 1111111111
Classifier 1: 1111111100 = 80% accuracy
Classifier 2: 0111011101 = 70% accuracy
Classifier 3: 1000101111 = 60% accuracy

当我们组合这三个弱学习器的时候,会得到以下结果:

Ensemble Result: 1111111101 = 90% accuracy

正如你在上面所看到的,具有低皮尔逊相关系数的弱学习器的组合优于具有较高皮尔逊相关系数的学习器的组合。

缺乏数据

在使用了上述所有的技术以后,如果你的模型仍然没有在测试集上表现得更好一些,这可能是因为缺乏数据。在很多用例中训练数据的数量是有限的。如果你无法收集更多的数据,那么你可以采取数据增强方法。

数据增强技术

如果你正在使用的是图像数据集,你可以通过剪切、翻转、随机裁剪等方法来增加新的图像。这可以为你正在训练的神经网络提供不同的样本。

结论

这些技术被认为是最佳实践经验,在提升模型学习特征的能力方面通常是有效的。希望对大家有所帮助。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2018-05-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器人网

【案例】最大似然估计、最大后验估计以及贝叶斯参数估计的联系和区别

假如你有一个硬币。你把它投掷 3 次,出现了 3 次正面。下一次投掷硬币正面朝上的概率是多少? 这是一个从数据中估计参数的基础机器学习问题。在这种情况下,我们要...

693
来自专栏企鹅号快讯

机器学习之白话adaboost元算法

阅读本文大约需要5分钟 作为(曾)被认为两大最好的监督分类算法之一的adaboost元算法(另一个为前几节介绍过的SVM算法),该算法以其简单的思想解决复杂的分...

1836
来自专栏专知

【深度学习RNN/LSTM中文讲义】循环神经网络详解,复旦邱锡鹏老师《神经网络与深度学习》报告分享03(附pdf下载)

【导读】复旦大学副教授、博士生导师、开源自然语言处理工具FudanNLP的主要开发者邱锡鹏(http://nlp.fudan.edu.cn/xpqiu/)老师撰...

1K8
来自专栏机器学习算法原理与实践

强化学习(二)马尔科夫决策过程(MDP)

    在强化学习(一)模型基础中,我们讲到了强化学习模型的8个基本要素。但是仅凭这些要素还是无法使用强化学习来帮助我们解决问题的, 在讲到模型训练前,模型的简...

1423
来自专栏机器之心

学界 | 通过Crowd Layer,利用众包标注数据集进行深度学习

选自arXiv 机器之心编译 参与:刘晓坤、路雪 本文通过在深度神经网络中引入一种新型众包层(crowd layer),通过反向传播方式,直接利用噪声标签实现端...

4056
来自专栏CreateAMind

CPC(representation learning with contrastive predctive coding)

摘要: 监督学习在很多应用方面有了巨大的进步,但是非监督学习却没有如此广的应用,非监督学习是人工智能方面非常重要也非常具有挑战性的领域。这篇论文提出了 cons...

833
来自专栏云时之间

<机器学习>西瓜书,读书笔记

机器学习的发展阶段 1:推荐书目:周志华<机器学习西瓜书>,李航教授<统计学习方法>,这两本书都用简单的方式介绍了一批重要并且常用的机器学习算法 机器学习所发展...

3479
来自专栏专知

【深度学习最精炼中文讲义】前馈与卷积神经网络详解,复旦邱锡鹏老师《神经网络与深度学习》报告分享02(附报告pdf下载)

【导读】复旦大学副教授、博士生导师、开源自然语言处理工具FudanNLP的主要开发者邱锡鹏(http://nlp.fudan.edu.cn/xpqiu/)老师撰...

7936
来自专栏AI研习社

做AI必须要知道的十种深度学习方法

不管是AI也好,其他学科也好,学习、研究的过程中不断反思学科的历史,总结学科的发展现状,找出最重要的理念,总能让人能“吾道一以贯之”。软件工程师James Le...

3415
来自专栏人工智能

带你通俗易懂的理解人工智能算法一

我们所谓的人工智能算法就是一个机器嵌入了这个算法后,这个机器就拥有了人所具有的基本能力,比如观察、思考、学习、创造等,本文要说的就是这个算法。 人工智能算法主要...

2189

扫码关注云+社区