原文:https://machinelearningmastery.com/deep-learning-competence/
最后更新于 2019 年 8 月 19 日
深度学习并非灵丹妙药,但该技术已在大量极具挑战性的问题领域显示出高效性。
这意味着企业对有效的深度学习实践者有着巨大的需求。
问题是,一般的企业如何区分好的和坏的从业者?
作为深度学习的实践者,你如何最好地证明你能提供熟练的深度学习模型?
在这篇文章中,你将发现深度学习能力的三个层次,作为一名实践者,你必须在每个层次上展示什么。
看完这篇文章,你会知道:
- 评估深度学习能力的问题最好通过项目组合来解决。
- 三个能力等级的层次结构可用于对从业者进行分类,并为识别预期技能提供框架。
- 初学者最常犯的错误是从第 3 级开始,这意味着他们试图同时学习所有级别,导致混乱和沮丧。
用我的新书用 Python 深度学习来启动你的项目,包括分步教程和所有示例的 Python 源代码文件。
我们开始吧。
深度学习能力的三个层次 图片由贝恩德·塔勒提供,版权所有。
本文分为三个部分;它们是:
- 能力评估问题
- 开发深度学习作品集
- 深度学习能力的水平
你如何知道一个从业者是否有能力进行深度学习?
这是一个难题。
- 一个学者可能能够很好地用数学方法描述技术,并提供一份论文清单。
- 开发人员也可能能够使用直观的解释和一系列 API 很好地描述技术。
两者都是理解的好迹象。
但是,在真正的商业项目中,我们不需要解释。
我们需要能做出巧妙预测的工作模型。我们需要结果。
结果几乎胜过一切。
当然,结果胜过教育背景、工作经历和经验水平等典型的能力信号。
大多数开发人员和开发人员招聘经理都已经知道这一点。
有些没有。
回答一个从业者是否胜任的问题,最好的方法是展示,而不是讲述。
从业者必须提供证据来证明他们理解如何应用深度学习技术,并使用它们来开发熟练的模型。
这意味着使用开源库和公开可用的数据集开发一个公共项目组合。
这有很多好处,原因如下:
- 可以呈现出巧妙的模型。
- 代码可以查看。
- 设计决策是可以辩护的。
对真实项目的诚实讨论将很快揭示从业者是否知道他们在做什么。
- 为了评估能力,雇主必须要求并关注已完成的工作组合。
- 深度学习实践者必须开发和维护已完成项目的组合,以展示能力。
作为一个从业者,问题变成了:能力的层次是什么,每个层次的期望是什么?
可以仔细选择项目,以便发展和展示特定的技能。
在本节中,我们将概述深度学习能力的水平,以及作为实践者,您可以开发和实施的项目类型,以便学习、获得和展示每一个能力水平。
深度学习能力有三个层次;它们是:
- 一级:建模
- 2 级:调谐
- 第三级:应用
这可能不完整,但为商业环境中的从业者提供了一个良好的起点。
关于此层次结构的一些注意事项:
- 这些水平假设你已经是一个机器学习实践者,可能不是从零开始。
- 并非所有的企业都需要或能够充分利用三级从业者。
- 许多练习者在第 3 级开始练习,并试图在运行中找出第 1 级和第 2 级。
- 第二级经常被忽视,但我认为这对于展示更深层次的理解至关重要。
其他级别可能会捕获未讨论的主题,例如从头开始编码算法、处理大数据或流数据、GPU 编程、开发新方法等。
如果你对能力水平或项目有更多的想法,请在下面的评论中告诉我。
现在,让我们依次仔细看看每个级别。
这种深度学习的能力水平假设你已经是一个机器学习的实践者。
这是最低的水平,表明你可以在一个经典的机器学习类型的项目中有效地使用这些工具和方法。
这并不意味着你被期望拥有高级学位或你是一个大师级的从业者。相反,这意味着您熟悉应用机器学习的基础知识和端到端预测建模项目的工作过程。
这不是一个严格的先决条件,因为如果需要,这些元素可以在这个级别快速学习。
这一级别的能力证明了以下几点:
- 图书馆能力:说明你知道如何使用开源深度学习图书馆开发模型。
- 建模能力:说明你知道如何将应用的机器学习过程应用到神经网络模型中。
库能力意味着你知道如何设置开发环境和使用应用编程接口最常见的方面,以便定义、拟合和使用神经网络模型进行预测。
这也意味着你知道每种类型的神经网络模型之间的基本区别,以及什么时候使用它是合适的。
这并不意味着你知道每个函数调用和每个参数。这也不意味着你知道具体技术的数学描述。
建模能力意味着你知道如何使用神经网络模型端到端地完成机器学习项目。
具体来说,这意味着您能够完成以下任务:
- 定义监督学习问题并收集相关数据。
- 准备数据,包括特征选择、输入缺失值、缩放和其他转换。
- 使用客观的测试工具评估一套模型和模型配置。
- 选择和准备最终模型,并使用它对新数据进行预测。
这意味着在开发和使用一个熟练的模型时,你可以在新项目中有效地利用神经网络。
这并不意味着你是使用所有或甚至一些神经网络技术的专家,也不意味着你可以获得最好的结果。这也不意味着您熟悉所有数据类型。
展示这种能力水平的项目应该使用开源深度学习库(如 Keras),并在公共表格机器学习数据集上展示应用机器学习过程的每个步骤。
这并不意味着获得数据集的最佳可能结果,甚至不意味着使用神经网络是数据集的最佳可能模型。相反,目标是展示使用神经网络的能力,很可能是更简单的模型类型,如多层感知机。
数据集的一个很好的来源是在 20 世纪 90 年代和 21 世纪广泛用于展示机器学习甚至神经网络表现的内存中的小数据集,例如在 UCI 机器学习资源库上列出的那些数据集。
事实上,数据集很小,很容易放入内存,这意味着项目的范围也很小,允许使用稳健的模型评估方案,如 k 倍交叉验证,并可能需要仔细的模型设计,以避免过度拟合。
我希望有一系列项目能够处理标准预测建模项目的正常问题,例如:
不同的输入数据,以证明适合神经网络的数据准备:
- 输入相同比例的变量。
- 不同尺度的输入变量。
- 数字和类别变量的混合。
- 缺少值的变量。
- 具有冗余输入特征的数据。
各种目标变量,以展示合适的模型配置:
- 二元分类任务。
- 多类分类任务。
- 回归任务。
这种能力水平假定为 1 级能力,并表明您可以使用经典和现代技术,以便从深度学习神经网络模型中获得最大收益。
它演示了以下内容:
- 学习能力。你可以改进神经网络模型的训练过程。
- 概括能力。可以减少训练数据的过拟合,减少样本外数据的泛化误差。
- 预测能力。你可以减少最终模型预测的差异,提升模型技能。
学习能力意味着你知道如何配置和调整学习算法的超参数,以便获得良好或更好的表现。
这意味着调整随机梯度下降的超参数的技能,例如:
- 批量。
- 学习率。
- 学习进度计划
- 适应性学习率。
这意味着调整影响模型能力的方面的技能,例如:
- 车型选择。
- 激活函数的选择。
- 节点数。
- 层数。
这意味着解决学习问题的技能,例如:
- 消失渐变。
- 爆炸梯度。
这也意味着用技巧来加速学习,例如:
- 批量标准化。
- 分层训练。
- 转移学习。
泛化能力意味着您知道如何配置和调整模型,以减少过度拟合并提高样本外数据的模型表现。
这包括经典技术,例如:
- 权重正则化。
- 增加噪音。
- 提前停止。
这也包括现代技术,例如:
- 体重限制。
- 活动正规化。
- 辍学。
预测能力意味着你知道如何在进行预测时使用技术来减少所选模型的方差,并组合模型以提高表现。
这意味着使用合奏技术,例如:
- 模型平均。
- 堆叠合奏。
- 重量平均。
展示这种能力水平的项目可能不太关注应用机器学习过程中的所有步骤,而是可能关注特定的问题和技术或旨在缓解该问题的一系列技术。
对于这三个职能领域,可以是:
- 模型学习不良或缓慢的问题。
- 训练数据集的过拟合问题。
- 高方差预测问题。
同样,这并不意味着在某个特定问题上实现最佳表现,只是证明了技术的正确使用及其解决已识别问题的能力。
数据集甚至问题类型的选择可能不如正在调查的问题的明确表现重要。
有些数据集自然会带来问题;例如,小的训练数据集和不平衡的数据集会导致过拟合。
可以使用标准的机器学习数据集。或者,可以设计问题来演示问题,或者可以使用数据集生成器。
这种能力水平假设 1 级和 2 级能力,并表明您可以在专门的问题领域中使用深度学习神经网络技术。
这是超越简单表格数据集的深度学习技术的演示。
这也是对问题域类型和具体问题实例的深度学习的展示,在这些领域中,技术可能表现良好,甚至是最先进的。
它演示了以下内容:
- 数据处理能力。您可以加载和准备特定领域的数据,为神经网络建模做好准备。
- 技术能力。你可以比较和选择合适的特定领域的神经网络模型。
数据处理能力意味着您可以获取、加载、使用和准备用于建模的数据。
这将很可能证明处理数据的标准库和准备数据的标准技术的能力。
域和数据处理的一些示例可能包括:
- 时间序列预测。将时间序列问题框架化为监督学习问题的代码。
- 计算机视觉。用于加载图像和转换以调整像素大小(也许是标准化像素)的 API。
- 自然语言处理。用于加载文本数据和对字符或单词进行编码的转换的 API。
技术能力意味着您可以正确地识别适合给定领域特定建模问题的技术、模型和模型架构。
这很可能需要熟悉学术文献和/或行业中用于该领域一般类别问题的常用方法。
域和特定于域的方法的一些示例可能包括:
- 时间序列预测。使用序列预测模型,如卷积和递归神经网络模型。
- 计算机视觉。深度卷积神经网络模型的使用和特定结构的使用。
- 自然语言处理。深度递归神经网络模型的使用和特定体系结构的使用。
展示这种能力水平的项目必须涵盖应用的机器学习过程,包括仔细的模型调整(能力水平 1 和 2 的方面),并且必须关注特定领域的数据集。
数据集可能来自:
- 学术界用来演示方法的标准数据集。
- 用于竞争性机器学习网站的数据集。
- 您定义和收集的原始数据集。
可能有大量的问题属于给定的问题领域,尽管可能会有更常见或更突出的子集,这些可能是示范项目的重点。
一些领域和突出子问题的例子可能包括:
- 时间序列预测。单变量、多变量、多步骤和分类。
- 计算机视觉。对象分类、对象定位和对象描述。
- 自然语言处理。文本分类、文本翻译和文本摘要。
可能需要在多个领域展示高水平的能力,并且数据处理、建模技术和技能将会很好地转化。
在解决了最突出的问题和技术之后,可能还需要专攻一个领域,并缩小到关于细微子问题的示范项目。
因为这种类型的项目可能展示了深度学习更广泛的吸引力(例如,超越经典方法的能力),所以直接跳到这个水平是有危险的。
对于有经验的从业者来说,可能对其他机器学习方法有更深的知识和经验,或者对该领域有更深的知识和经验。
然而,这要困难得多,因为你可能不得不学习,而且你必须同时驾驭和展示所有三个水平的能力。
这是初学者最大的错误,他们潜入特定领域的项目,遇到一个又一个障碍,因为他们还不能胜任这个库,完成一个项目的过程,以及提高模型表现的过程,更不用说领域中使用的特定数据处理和建模技术了。
同样,也有可能从这个层面开始;这只会使工作量增加两倍,并可能导致沮丧。
这个能力框架引起共鸣了吗?你认为有洞吗? 评论里告诉我。
如果您想更深入地了解这个主题,本节将提供更多资源。
在这篇文章中,你发现了深度学习能力的三个层次,作为一名实践者,你必须在每个层次上展示什么。
具体来说,您了解到:
- 评估深度学习能力的问题最好通过项目组合来解决。
- 三个能力等级的层次结构可用于对从业者进行分类,并为识别预期技能提供框架
- 初学者最常犯的错误是从第 3 级开始,这意味着他们试图同时学习所有级别,导致混乱和沮丧。
你有什么问题吗? 在下面的评论中提问,我会尽力回答。