我开始写这篇文章的目的是希望能够解释一些关于深度学习(DL)的误解,在机器学习领域,同时也被称为爆发的小宇宙和科研炒作。事实是在中间的某个地方,我希望能把这趟浑水弄清 - 至少有一点点。重要的是,我希望澄清一些攻击深度学习的问题,并讨论为什么它在自然语言处理(NLP),图像识别和机器翻译等方面表现良好,而在其他方面却失败了。
深度学习不是黑暗艺术
媒体经常将深度学习描述为世界末日或解决所有生活问题的神奇秘诀。事实上,并没有什么意义。而且,虽然深度学习公平地分享了奇怪的表现和无法解释的结果,但它最终还是得到了精英的推动。通过在您的开发过程中要求证明和推理,您可以在无限次数的模型排列中构建一个强大的框架。
一切都有目的(大部分时间)
我看到新的从业者展示的第一个问题之一就是将几个LSTM(长短期记忆)层,一个GRU(门控循环单元)层和几个卷积层一起粉碎混合,然后坐等魔法结果。然后看着他们的模型只有5%的准确性度量而受挫。后面将讨论,DL需要更合理的方法。
通过采用基于数据整合,网络设计和好奇心的方法,您将能够产生惊人的结果。我每天都花时间阅读关于最新方法论的新论文和文章,并不断看到推动新设计的巧妙思路。
在DL中,不同的层服务于不同的目的。这是一个简单的想法,往往是在这个领域的新手。而且,在设计过程中,我做了很多实验,总是考虑一下思路。应该有一个原因(或者至少是一个假设)来增加复杂性。应该根据一个可衡量的标准来检查,只有这样我才能接受它的最终设计。另外,您应该在复杂模型上使用更简单的模型,因为它们可以获得相同的结果。我一直在测试较小的网络,要么更少的神经元或更少的层次,并将其与我最好的设计进行比较。更小的系统也意味着更快的训练(在某些情况下,几个数量级),这意味着更多的迭代和更好的最终设计。
您可以创建一些工具来测试小型和大型网络上的新论文,这种理解将推动您对网络设计的全面了解。随着您对神经网络的工作越来越多,您将会更好地了解是什么驱使其执行特定任务的行为。你开始制定一个地图,在什么时候尝试什么,什么时候开始,但只有当你有正确的指标和流程才能理解。
设计过程
我想起了设计过程,就像孩子试图建造砖头塔一样。戳,刺,失败,但总是测试。塔的第二层太摇晃了吗?我应该改变地基吗?想想拥有有限数量的区块是有帮助的。神经网络越小,训练的速度越快,而且测试的速度越快。只在需要时增加复杂性。
在DL中,这个问题有无数的可能的解决方案 - 因此,你正在处理的网络可以模拟几乎无限的公式集。虽然最终的结果可能是离散的,神经网络生活在一个连续数字的世界。复杂性趋于迅速爆炸,复杂性增加要求增加控制。我试图用我建立一个新的数据项目的方式建立我的网络。例如,一个简单的探索性数据分析流水线可以是:
导入数据→清理数据→转换数据→存在数据
这些整体块中的每一块都可能涉及许多不同的步骤 如果我在不保证上游流程质量的情况下进行流程,整个系统就会失败。所以我一路测试 我测试一切 - 输入,输出,类,功能。我确定一切都单独工作,然后在一起。我知道这不是一个开创性的想法,但值得指出。一旦我有一个流程工作,我将移动到下一个流程。
在深度学习中,我从创建最简单的模型开始。在接近文本分类任务时,我将从最简单的嵌入编码参与预测模型开始。在看到这个基础模型是如何工作的之后,我将开始构建它。这可能涉及增加隐藏层的大小,加深网络,合并新的网络,改变激活和初始化,使用词性标记或其他数字数据来增加文本。我可能会有几个神经网络相互馈送,以达到不同的目的,或者改变数据的处理方式,或者文本被矢量化。名单继续。
随着每一步,我把它与我原来的模型和迭代一路上标准化。这个过程允许我回顾模型的演变,了解哪里变得更好(或更糟糕),并通知未来的设计迭代; 总是越来越接近全球最低限度。
成为您的数据的主人
在开始试验DL模型之前,了解给定问题的价值所在是至关重要的。有一个简单的层次结构可以遵循:
数据大于模型设计,模型设计比参数优化要大。
如果A公司有十倍于B公司的数据,那么这个世界上没有哪个模型会允许B公司超过A公司。同样的想法适用于数据质量。
如果我花了几周的时间在数据质量较差的情况下开发一个模型,那么它的性能将比我在高质量数据背后建立的模型差一些。在花费数周时间之前,总是问自己是否可以获得更多的数据。也许你可以改变你的预处理步骤来提高你已有的数据的质量。这通常会导致比仅通过模型调整更快的性能收益。
您不仅需要高质量的数据,还需要对其有深入的了解。您应该花时间开发工具来分析,呈现和研究您的输入数据。你应该建立指标和分析工具来理解你的模型的预测。避免将数据视为输入。所有的数据都有隐藏的功能,如果你可以提取它们,它们将具有巨大的预测能力。有时你必须自己去做,有时你可以用自己的方式来开发你的DL模型。将您的数据视为加密算法的输入 - 但不是对文本或电子邮件进行加密,而是对世界的方式进行编码。每个数据点都是更好理解的线索。
NLP中的文本分类就是一个很好的例子。给你一个数百或数千个单词的文集,每个文本都有一个或多个类。也许这门课是积极的,消极的或者中立的,也许你有数百个错综复杂的课程。无论哪种方式,文本是我们用来确定我们的输出的代码。
当你不再把自己的想法看作是单词时,它就变得非常有价值,并为难以置信的结果打开了大门。这种思维导致了从单词向量到单词级模型,句子级模型,到段落级模型的发展。这些实现中的每一个都基于人类理解如何工作,并在性能收益中表现出来。
花时间与领域的专家交谈
这与上一节紧密相关,或许更重要 - 花时间与具有领域知识的人交谈。与他们讨论你的结果,与他们讨论数据。让他们参与设计过程。
讨论模型设计理念的努力以及模型的输出结果能够迅速获得胜利,你会感到震惊的。这些快速胜利通常会导致准确性的急剧增加。当然,这需要时间投入来教育他们对深度学习的直观性和概念性的理解,但对我来说总是值得的。如果您没有可用的域名专家,请花时间自行学习。避免试图建立一个你不明白的问题的DL模型。
取消“深度学习”就像在没有灯光的迷宫中感觉自己的方式。实际上,您可以通过遵循正确的方法论并尝试解决正确的问题来解决深度学习问题。你应该总是问自己为什么。
虽然我将要描述的方法论可能听起来与指标驱动设计思想相反,但我发现它以最好的方式建立了理解; 不断问为什么。

像孩子一样学习
也许我不断地提到孩子,因为我和我的妻子在下个月期待着我们的女儿,但我发现他们呈现了一个如何学习的美好例子。孩子们像小科学家一样从子宫里出来。一切都是一个实验,任何抚养孩子的人都会记住他们的小探险家发出的无穷无尽的疑问。数据科学家们都应该有这样的方法,但是在实施深度学习的时候记住这一点尤其重要。深度学习是一个令人眼花缭乱的设计选择的领域,可以引起最勤奋的数据科学家的思考。
一旦我测试了一个有积极影响的设计变更,我试图找出它为什么起作用。这种方法使我能够继续提高我的理解。我今天可能不是某个领域的专家,但是如果有足够的时间,我总是可以努力成为一名专家。
我继续问为什么直到我觉得我真的理解选择一个设计决定而不是另一个的基础。通常有一个问题会导致另一个问题,三天之后,您对一系列有价值的概念有了新的深刻的理解。下面是我最近去下的一个兔子洞的合理例子(不要担心,如果这些术语对你没有任何意义):
• 为什么我应该使用LSTM来编码我的句子?
• LSTM如何工作?
• 什么是正规化LSTM的最佳方法?
• 我应该如何解码来自LSTM输出的序列?
• Max Pooling与Average Pooling的比较或者使用另一 个LSTM作为我的解码器?
• GRU比LSTM执行更好还是更快?为什么?
• 我应该如何初始化我的LSTM图层?为什么?
• 这个LSTM很慢,我可以加快速度吗?
• 为什么传统的LSTM比GPU上的Cuda优化的LSTM层 执行速度慢得多?
• 我可以使用较低精度的浮点数增加我可以在GPU上实 现的网络大小吗?
我把它们称为兔子洞,因为学习路径从一开始就是随机的,不确定的。我只是让自己去探索我所拥有的问题。我不担心这是随意的,我对每个学科的兴趣都会增加,我能够多快地学习答案。这个方法是我学习了我整个人生的方法,而且我发现它总是让我到最后的地方。如果我只是专注于预先设计的计划,我也会到达那里的一系列技能。这种方法的缺点是费时,但是大多数数据科学家自然也有这种好奇心。一旦我遇到问题,我必须找到答案。
“找到答案或死于尝试” - 50 Cent在平行宇宙中如是说
结果是我现在对第一个问题有了答复。为什么我应该使用LSTM来编码我的句子。另外,我对另一组半相关的问题有了答案,这些问题使我可以进行新的调整和设计更改以进一步优化。在测试这些调整时,我可能会得到新的和新颖的结果,所以我再次开始探索。如果你做这个足够长的时间,你可以从学习到试验,到设计到专业知识。很快,你可能会发现自己尝试了以前没有经过测试的全新想法。
这个特定的问题使我加快我的神经网络的四个具体问题,同时提高了3%的准确性(这在我的情况是相当可观的)。我也学习了编码器和解码器的设计,还有一些关于机器翻译的知识。回答我的问题,而不是像传统方法那样是预先设定的集合,使我可以继续集中精力几个小时,而不会耗尽我的意志力储备。
提出正确的问题
确定正确的深度学习问题是至关重要的。DL在语言任务,图像分类,语音翻译,机器翻译和游戏(即国际象棋,围棋,星际争霸)方面表现出色。传统的机器学习任务(如信用卡欺诈检测,资产定价和信用评分)的性能较差。也许在未来,我们将调整我们的模型,优化方法和激活函数,使深度学习更加广泛地适用,但是现在它受限于非常复杂。
DL可以运行的原因是它可以模拟的巨大复杂性。通过我所确定的所有任务,即使不是数百万个数据的不同部分之间的细微差别和相互关系,也有数千个。一个神经网络寻找和利用这些细微差别的方式是不可能的。而且,虽然传统的机器学习可以应用于这些领域,但是在其复杂性的建模方面显然受限。通常数据科学家需要花费几个星期进行特征提取和使传统模型工作的工程。原因是网络不具备深度学习网络相同的功能来自己获得功能。

人类设计师经常限制传统的机器学习模型。深度学习消除了人类的许多限制,使人类成为导师而不是老师。现在,该模型可以在人类开发人员的帮助下自由探索并找到解决方案。我的工作就是给神经网络提供正确的工具,把问题分解成数百万个子问题,然后再把它们建立起来。同时它既简单又复杂。
偏执狂的健康剂量
作为最后的,也许是最重要的话题 - 你如何确保你的模型表现良好?不幸的是,没有一个解决方案,但有一个适合所有系统,适合我的作品。
在设计一个网络时,我很偏执,工作不正常。我总是怀疑分数是否在愚弄我,还是有稀有的长尾事件让我的模型看起来很愚蠢。一个可怕的预测会使你的模型在许多人眼中不准确。因此,我建立的工具可以用多种方式查看相同的预测,制作图形工具,以便更快速地迭代和更快速地进行数据消化,并继续开发工具,直到不安的感觉退到舒适的地步。
有时你永远不会到达那里。这就是为什么你不断调整,并一直在寻找缺陷。就像一个顽固的侦探一样,不停地刺激,测试和寻找漏洞。我向您保证,您的原始准确度指标可能会提供更多信息。分别看每个类,分组看看,使用精确度,回忆,f1分; 地狱,我甚至在他们上花费一半的时间。
重点是要认识到你的模型是复杂的,你只会理解其决策过程的一部分。如果你知道进去,你更有可能成功出来。您的指标会导致设计更改,而您的设计更改会导致更好的模型。
有时候,你会学习模型的一小部分,以及如何控制它们。有时你只需要接受,它并不能总能工作。重点往往是缓解而不是消除。任何良好的深度学习系统在后台都有一个智能的质量保证(QA)系统。质量保证体系是防止用户尴尬预测的最后一道防线。
通过使用适当的质量保证流程,您可以获得有目的的设计指标,一路学习,持续改进自己和模型。最后,也许我们所做的只是搅动那个线性代数锅,但是通过目的和理解的方式来做,我们成功的几率是成倍增长的。
英文链接:https://towardsdatascience.com/deep-misconceptions-about-deep-learning-f...
本文转自:微信号 - fastai中文社区(fastaichina),作者:Jesse Moore,转载此文目的在于传递更多信息,版权归原作者所有。