用于跟踪机器学习进度的清单

原文标题A checklist to track your Machine Learning progress

Getting Started[0]

用于跟踪机器学习进度的清单

可能对深度学习有最小的偏见

你有没有问过自己,你目前在机器学习之旅的哪个阶段?还有什么是你仍然可以学习的?

此清单可帮助您回答此类问题。它提供了该领域的概述,分为三个广泛的级别:入门级(每个人都开始)、中级(您可以快速到达)和高级(您可以长期停留)。它没有列出具体的课程或软件,但侧重于一般概念:

让我们从入门级开始更详细地介绍这些级别。

Entry level

入门级分为5类:

  • 数据处理侧重于能够处理小型数据集
  • 机器学习涵盖经典机器学习的关键概念
  • 网络仅限于 DNN、CNN 和 RNN
  • Theory 旨在帮助您理解机器学习背后的思想
  • 一般列出了您在此阶段将使用的主要内容

Data handling

此类别侧重于使您能够处理小型数据集。

最常见的数据类型是

  • Images
  • Audio
  • Time-series
  • Text

此级别的数据集通常已经内置于 PyTorch 或 TensorFlow;无需额外下载。它们通常在大小和复杂性上都很小,并且通常适合内存。一个很好的图像示例是经典的 MNIST 图像数据集(PyTorch、TensorFlow)、用于文本数据的 IMDB 评论数据集(PyTorch、TensorFlow)以及小型音频或时间序列数据集。[0][1][2][3]

一些对初学者友好的数据集需要预处理——这通常只是调整图像大小或缩短句子。几行代码就可以轻松搞定。由于示例的数量非常少,或者它们的大小很小,因此您可以在运行时进行(而不是提前运行单独的复杂脚本)。

由于您使用的是经过仔细检查的数据,因此您经常会在网上找到有用的指南、提示和可行的解决方案。

总结这个类别:重点是处理小型(内置)数据集和应用简单的预处理。

Machine learning

与强大的深度学习模型相比,经典方​​法无疑显得乏味。但请放心,总有一天你也会遇到它们。有几个概念很突出:

回归侧重于回归数据。通常你会得到数据点,你必须推断出看不见的数据点。这些新点依赖于已知(可观察)点,回归旨在找到这种依赖关系。

聚类包含许多算法,它们都做同样的事情:将相似的数据样本聚集在一起并分离不同的样本。已经出现了许多不同的方法来解决这个任务,但我建议先检查 k-Means。

最后,我们有支持向量机,它是更复杂的算法之一。 SVM 试图构建一个最适合将类彼此分开的超平面。了解前两种方法后,请阅读并使用此方法。

总结一下:虽然这份清单的重点是深度学习——而不是经典的机器学习——但学习经过时间验证的基础知识也很有用。

Networks

这个类别的重点是从以前的经典 ML 转向神经网络。

密集层和一般的密集神经网络是一个很好的起点。我猜想这些层在 90% 的分类模型中被非常频繁地使用。例如,在最基本的设置中,您将输入乘以权重并添加偏差:w₁ × x₁ + b。

如果你有两个输入,将每个输入乘以它自己的权重,然后加上一个偏差:w₁ × x₁ + w₂ × x₂ + b。

如果你有 3、4、100 个输入,则过程保持不变——对于单个神经元。如果你有两个接收神经元和一个输入,那么每个神经元就有一个权重和偏差:w11 和 w21,b1 和 b2。如果你有 20 个输入,每个接收神经元有 20 个权重,每个神经元有 1 个偏置。如果这让您感到困惑,请不要担心。在你掌握了这个之后,这将不是问题。

列表中的下一个网络是卷积神经网络,简称 CNN。 CNN 使用卷积运算,其中内核遍历矩阵并计算其自身与所覆盖的补丁之间的内积。这样,您可以从数据中提取少量特征,并帮助网络检测这些特征,而不管实际位置如何。换句话说:虽然图像上的鞋子可能在底部,但当它在上半部分时,网络也能发现它。很难想象任何成功的研究都没有使用过这个简单的操作并从中受益。

第三大类网络是循环神经网络。当您必须长时间保留信息时,这些网络非常有用。例如,考虑这句话:“The dog barks, then he jumps”。要推断“他”是谁,必须记住“狗”这个句子的开头。 RNN 及其衍生物可帮助您对此类时间依赖性进行建模。

总结这一类:你从密集神经网络开始,它们很容易理解并且被广泛使用。之后,您使用 CNN 提取分散的特征,并在时间依赖性发挥作用时继续使用 RNN。

Theory

此类别侧重于理论概念。这不仅是数学,而且还对支持一般机器学习和特别是深度学习的技术有一个意图。

为了实现这一点,学习数学符号是一个好的开始。以 Σ 为例。一旦你使用了一段时间,你就会开始接受它的简洁性。例如,与其重复写“我们计算所有单个元素的总和乘以概率”,不如写成:

这更短,随着时间的推移,也更精确。我们将最终的总和相乘吗?还是我们将每个元素相乘?使用数学符号,这很清楚。

留在数学领域,要学习的一件事是矩阵运算。还记得我建议作为一个好的起点的密集层吗?它们可以写成矩阵运算;使用“偏差技巧”,您还可以整合偏差。

学习回归和聚类等经典机器学习技术还包括了解它们的背景。这是相辅相成的:一旦你了解了一种新算法,你就会同时学习它背后的理论。一次勾选多个项目很好!

一旦你从经典学习转向深度学习——也就是说,一旦你开始使用神经网络——你就会遇到卷积操作。在入门级,这是我建议熟悉的唯一技术。

当您开始使用此类层增强网络时,您当然想要衡量效果。这就是度量标准的用武之地,目标函数可以量化您的方法的成功。准确率、均方误差、召回率和准确率是标准的。由于数据集的复杂性很小,因此无需切换到高级指标;你可以留着以后用。

总结这一类:您将学习阅读数学符号、常用技术背后的(数学)思想,以及如何衡量神经网络的成功。

General

此类别包含您早期学习的技术和最佳实践。

要使用神经网络,您需要使用一些有用的工具。其中包括 IDE(帮助您编写代码的计算机程序)和 GitHub(对您的代码进行版本化的服务)。

如果您不熟悉编程语言,我建议将 python 作为初学者友好的开始。这种特定语言的资源数量是巨大的。这是一个关键点;作为初学者,您希望避免构建自定义操作并查阅文档以利用内置功能。

分析数据集后,这些提供的功能也会派上用场。例如,取值范围是多少?有一些异常值吗?他们有多极端?是否有不可用的数据样本?这些是您想要回答的一些问题,通常在旅途中发生:

你编写了一个简短的代码片段——它会因为数据样本不同而中断——你更新了代码——你对你的数据有了更多的了解。

通常,您使用的数据在此阶段受到监督,这意味着它包含数据→标签映射。对于图像,这可能是狗还是猫;对于文本,它可能是正面的或负面的;对于音频,它可能是音乐流派。

这些映射是元数据的一部分,元数据是关于实际数据的数据。这些附加知识通常通过 CSV 或 JSON 文件提供。因此,能够解析它们是件好事。值得庆幸的是,主要的编程语言都提供了实现这一目标的代码。几行就可以了。

在成功解析元数据并使用它准备数据后,您还希望将训练好的模型保存到磁盘。保存和加载模型变得很重要

  • 当你与其他学习者分享你的工作时,
  • 当你想让你的结果可验证时,
  • 当您只想将它​​们保存到磁盘并稍后运行推理时

如果您也这样做了,您应该查看回调,即在训练期间执行的代码。想要定期保存您的模型?想提前取消培训?这些和其他标准回调随大型深度学习框架一起提供。您不必从头开始编写它们。一、两行代码就够了。稍后保留复杂的回调。

总而言之,此类别侧重于您将在早期遇到的一般事情,例如解析元数据文件、使用 IDE 和分析数据集。

Intermediate level

中级是您将花费大量时间的地方,这里有很多东西需要探索:语言模型、大型数据集、自定义训练循环、超参数搜索等等。但是,从上一级过渡到这一级是非常顺利的。我会说这需要三到四个月,这取决于你的背景,但是:你会比你想象的更快地达到它!

你学到的东西分布在六大类中:

  • 数据处理使大型数据集和自定义预处理成为焦点
  • 定制项目希望您获得与此相关的经验
  • 网络包含此级别的几个趋势
  • 培训涵盖了前两点的大部分内容
  • 理论侧重于扩展你的背景知识
  • 常规列出了您在此级别使用的几个项目

Data handling

数据处理侧重于更大和更复杂的数据集、广泛的自定义预处理和高效的数据加载。

我观察到这个级别的数据集往往会变得更大或更复杂。或两者。您之前处理的小型数据集很容易放入 RAM,现在您将处理 30 到 100 GB 的数据。但是,这不应该吓到你。一旦你查阅了 TensorFlow 或 PyTorch 的文档,你就会觉得该怎么做。

这也是不平衡数据集的情况,这是现阶段的第二个趋势。标签——如果它毕竟是一个分类问题——不再是均匀分布的,而是集中在一个大类上。这与更复杂的数据集密切相关,其中数据的形状可能不规则。

您随后探索的一种技术是增强,即人为地更改现有数据以生成新样本。您可以将其应用于只有少量样本的类。或者您可以随机旋转图像以使您的网络更加健壮。

说到图像,您通常还必须对数据进行规范化。例如,一些图像可能是 400 × 400,但大多数是 350 × 350。这是重新缩放的一种情况,一种可能的技术。但是,它们不限于图像数据。音频、文本和时间序列数据也存在其他策略。

标准化数据后,您必须将其提供给网络。不再可能将其简单地加载到 RAM 中,但编写自定义生成器是可行的。您不必在这里重新发明轮子;有很多资源可以帮助您获得动力。

这样的生成器也可以是自定义管道的一部分:在输入之前对生成器中的数据进行预处理;不需要名为 preprocessed_data 的单独文件夹。您的管道也可能对同学有所帮助;为什么不分享呢?

总而言之,该类别侧重于大型、复杂、不平衡的数据集,这些数据集带来了一些需要克服的挑战。

Custom projects

定制项目是中级的核心。根据我自己的经验,我保证你可以从它们中获得巨大的协同效应:

您从一个新数据集开始,甚至从头开始创建一个。为此,您必须编写自定义管道 (tick),处理大型数据集 (tick),并使用高级 (tick) 和自定义层 (tick)。

但是,自定义数据集不是强制性的。相反,您可以使用现有算法并尝试新算法。或者您可以参加(Kaggle)挑战并击败您的竞争对手。

你看,通过你自己的一些项目,你会学到大量的新东西。这就是我们所追求的。

总而言之,这个类别可能很短,但您的自定义项目中的内容列表很长。

Networks

在中间级别,使用的网络变得更加先进:

第一个趋势是网络变得更大。上一阶段的模型通常只有几 MB 大小,几层就可以了。现在这将变成数百 MB,通常使用超过 100、200、500 层。

第二个趋势是标准层被 BatchNormalization、Pooling 和 Attention 等操作所取代。这些是更复杂的,如果您缺少功能: 现在是编写自定义层的时候了。

说到更高级的功能,生成网络和语言模型现在已经出现。打好基础后,您现在可以玩弄它们了——如果您可以在本地运行它们(看看你,变形金刚)。如果您需要更多马力,请尝试切换到 Colab 并预留 GPU 甚至 TPU。没有必要仅仅为了玩而租用云计算实例。一旦你完成了你的模型并准备好训练一些时期,就这样做。

与其他网络一样,代码通常是可用的。例如,Hugginface 在他们的转换器库方面做得非常出色,TensorFlow 也有一些关于生成网络的教程。[0]

总之,使用更高级的网络和层与处理自定义项目是相互关联的。

Training

培训类别侧重于与培训模型相关的所有内容。

如果我们的资源有限,我们可能无法完全训练一个网络——但是,我们可以训练其中的一部分。这种技术是迁移学习的一部分:

我们只需加载一个在类似任务上预训练的模型,然后在我们自己的数据集上对其进行微调。当然,您也可以利用来自完全不同领域的模型(例如图像分类)对声音或文本数据进行分类。由于经典的预训练模型与主要的 DL 框架一起提供,因此您可以在此类网络之间快速切换。

下一点是自定义嵌入。嵌入是计算和使用存储在我们数据中的信息的一种智能方式。一个例子:

一张桌子和一把椅子相连。这反映在两个词的嵌入上,这两个词只是浮点数的向量,任意大小(通常约为 300)。上述单词的相似性被纳入它们的向量中。这个概念不限于文本数据——尽管它在该领域是直观的——但也可以扩展到音频和图像数据。

嵌入主要针对单个单词计算。因此,您可以下载最常见的嵌入,例如“the”、“like”、“you”、“car”。缺点是这些可能无法反映您数据中的知识:他们预先训练的数据集可能是关于汽车比赛的,因此具有不同类型之间的广泛关系:卡车、豪华轿车、跑车。另一方面,你自己的数据不关注汽车,所以不必要的信息太多,有用的信息太少。简而言之,预训练的嵌入并不反映数据点之间的相似性。解决方案是训练您自己的嵌入。这实际上是在神经网络的帮助下完成的!

一旦您训练了自定义嵌入,您可能也会对自定义回调感兴趣。循环学习率?可能的。提前终止模型?可能的。在训练期间提取中间层的输出?同样,可能但需要努力。当标准回调不能提供你需要的东西时,只需实现你自己的。

下一点,数据并行性和多 GPU 训练,是紧密相连的。一旦你幸运地使用了多个 GPU,或者一旦你的训练需要很长时间,这些概念就会提供一种补救措施。您无需使用单个 GPU 来处理数据,而是使用多个。输入在您的设备之间共享,每个设备运行相同的模型,并且它们的权重保持同步。

用更高级的模型实现这样的事情通常需要您编写自定义循环。不利的一面是,您必须从头开始编写训练逻辑,但会获得洞察力和大量自由作为回报。 PyTorch 和 TensorFlow 都提供了这方面的指南。

最后两项再次交织在一起:TPU 仅在云中可用,两者都需要一些努力才能开始。但它们很快:对于一年前的一个项目,我的团队最初在 CPU 上运行一个模型,每个 epoch 运行 8 小时。使用 GPU 将时间缩短到 15 分钟。经过一番折腾,我设法在 TPU 上运行了我们的代码,我们得到了每个 epoch 15 秒的奖励。那很快。

从迁移学习到云 TPU 训练,这一类别侧重于训练高级模型所附带的技术,通常是为了减少训练时间或实现自定义功能。

Theory

这个类别收集了这个级别的想法背后的概念。

反向传播是一切。一种计算网络更新的巧妙技术,即梯度。简单来说,就是连续多次应用链式法则。这是可能的,因为您的网络可以被视为简单功能的(复杂)链。这些简单的功能是您网络的操作,层的激活功能在这里起着至关重要的作用。

听说过 ReLU 吗?这就是一个激活函数——根本不使用(或只使用线性函数,例如 y = x+2)会将您的网络简化为线性分类器。 (有关更多信息,请参阅注释)。这方面的研究范围很广。以leaky ReLU 或 LReLU 为例:[0]

正常的 ReLU 是 y = max(x, 0)。如果您的输入低于 0,这会将导数设置为零。这意味着在向后传递之后的每个梯度(即之前的每个层)也为零。这就是 LReLUs 的原因:当 x < 0 时 y = αx,否则为 y = x。这是解决上述问题的简单方法。

还有更多功能可供查看:GeLU、swish、SeLU 等。只要你能得到它,你就可以了。

如上所述,需要导数来计算梯度。一旦你有了它们,优化器的任务就是应用更新。这就是学习率发挥作用的地方:

wᵘᵖᵈᵃᵗᵉᵈ = wᵒˡᵈ — 学习率 × 梯度

这就是普通梯度下降的更新规则,它与梯度成反比。其他优化器有自己的更新步骤,请查看 Adam 或 RMSProp 了解更多信息。

首先计算梯度需要一个损失函数。这个函数告诉你你的输出对于给定的输入有多好。标准损失是交叉熵、均方误差等,但对于更高级的任务,还有更高级的损失。

当仅靠准确性不再起作用时,这通常与更高级的指标一起使用。对于不平衡的数据集,准确性不是一个有意义的指标;在这种情况下切换到宏 F1。提示:要在以后计算任何缺失的指标,请保存网络的预测和基本事实。

掌握概率是此级别的必要步骤。说说我自己的经历吧:没关系。从许多来源了解统计数据和随机指标后,情况会变得更加清晰。在计算数据的平均值或正常数据范围时,您可能已经使用了一些方法。查看 Coursera 以了解更多信息,或浏览经常免费上传的顶级大学讲座。 (多么幸运,可以免费获得高质量的材料!)。

由于我们已经在处理高级主题,因此请尝试理解高级层的概念。 Dropout 是一个好的开始,BatchNorm 是下一个候选者。

学习正则化也是如此。一般来说,这些是在不影响测试结果的情况下减少训练误差的技术。换句话说:让您的网络在训练数据上表现良好,而不会在单独的测试数据上表现不佳。

理论类别的最后一点是相当模糊的:了解常见问题。我打算让你广泛了解与深度神经网络相关的所有内容。这包括梯度消失、模式崩溃和过度拟合等现象。您可能会在旅途中遇到其中一些,然后知道发生了什么是有利的。最终,这可以帮助您解决问题并让您下次避免它们。

总之,此类别涵盖了巩固您对机器学习的理解的相关主题。

General

这个广泛的类别涵盖了您将在此级别遇到的各种主题。

来自受监督的数据——(人类)注释可用的数据——,您现在扩展到无监督数据。当您使用生成技术时就是这种情况。您还可以结合两全其美:训练自动编码器以生成逼真的图像并在另一个分类器网络中使用学习的权重。这就是某种(高级)迁移学习。

处理任何数据,无论是否有监督,通常都需要将数据拆分为训练集(也是开发集或开发集)、验证集和测试集。将数据分成三部分很容易,但您通常需要分层拆分,其中类百分比在所有拆分中保持大致相似。例如,当您有 100 个数据点和 A 类和 B 类有 50 个数据点时,您希望在所有三个拆分中都保留此比率。

为了稍后追溯您所做的任何事情,不仅是在拆分数据集时,最好对代码进行版本控制。您不需要维护 100 个文件夹。使用可以帮助您的工具更轻松、更舒适:Git 是第一位的。

这与跟踪您的实验相结合。跟踪可以包括存储模型,但基本上意味着保存任何指标和设置。对于我几个月前进行的一些跑步,我最近不得不检查平均跑步时间。如果我没有使用 Weights&Biases 之类的工具来保存实验数据,我可能会手足无措。有了这个,很容易获得所需的信息。

模型配置也是如此:要复制运行或论文,您想知道每层的过滤器数量、内核大小、丢失概率等。因此,跟踪您的实验已成为强制性的事情。它不仅客观地告诉哪些运行效果最好,而且看到这些图表填充也很酷:

进一步进行实验跟踪,您还可以进行超参数搜索。要确定最佳值,您可以并行启动多个运行。每次运行使用一组不同的参数值,中央协调器决定哪些参数值会导致更好的分数。这是一个耗时和计算密集型的过程,需要一些初始设置。但是一旦你完成了一次搜索,你就可以为下一次做好准备了。

在花了很多时间确定最佳指标、最佳参数、最佳优化器之后,您不想让最终模型变得尘土飞扬。取而代之的是,使用像 streamlit.io 这样的工具来快速制作应用程序原型,然后使用您的云技能来部署您的模型。最后,记录代码并将您的发现发布在 GitHub 上。像我这样的人会为此感谢你的![0]

看了这么多模型,训练了很多模型,你肯定已经获得了一些问题思考的经验。我不确定这是否是一回事,但这只是意味着知道当 xyz 发生时该怎么做。这可能是为了简化问题、在 StackOverflow 上提问或咨询其他人。这是我们学习过程的重要组成部分:即使两个问题可能完全不同,但我们从之前的第三个问题中学到的东西,我们现在可以使用。

这对您的工作和为其他项目做出贡献都是一项有用的技能:像 Hugginface 和 PyTorch 这样的大型软件包依赖于社区的反馈来发展。使用您所学的进行协作。

最后,考虑到这一切,要知道这是一个持续不断的过程。提出新发现并伪造旧发现是研究领域的一部分。阅读论文是与这一进展保持联系的好方法,并且永远不会真正完成。

从摘要开始。这部分通常在实际论文之前提交,因此作者会在这里花费一些时间。它总结了一篇论文的故事。之后跳到结论。如果您认为本文适合您,那么您可以完全阅读它。对于那些受到大量媒体报道的论文,聪明的人可能已经写了一篇关于它的博客文章,并以他们的方式解释它。检查它们不会有什么坏处。

总之,这个类别涵盖了有关您的机器学习进展的广泛主题:从创建数据拆分到阅读论文,这里有很多事情要做。

Advanced level

和中级相比,这个显得矮。那是一个陷阱!这个领域很大。到目前为止,您所学的一切都在这里发挥作用。优化器?发明你自己的。自定义训练循环?现在创建一个全新的算法。为项目做贡献?发表你自己的论文。

以下所有类别都扩展了上一级的概念:

  • 数据处理现在专注于庞大的多模式数据集
  • 自定义项目现在具有生成技术
  • 训练建立在前一个的基础上,变得更加复杂
  • 理论扩展到全新的领域
  • 一般扩展到更广泛的主题

Data handling

此类别比中间级别的同类更进一步,并转移到更大的数据集。

形容词巨大是对数据集大小的相对模糊的描述。就 GB 而言,这是超过 100、200 GB。就纪元时间而言,这是单次通过一个多小时。这取决于您可用的计算能力——您对多 GPU 或 TPU 训练的了解会派上用场。您可以申请 TPU 研究云来加速您的训练。[0]

也可以通过运行分布式管道来实现加速。对于数据集预处理,Apache Beam 就是这样一个框架;对于 TensorFlow,我知道您还可以分发数据预处理(不是训练,而是实际预处理)。您当然希望在这里使用 Kubernetes 集群或类似的集群。大型云提供商(AWS、GCP、Azure)提供相关解决方案。

这些分布式管道在处理多模型数据集时很有用。它不再是您使用的单一数据类型,而是多种数据类型的组合。一个简单的例子是文本和图像在一起,其中文本描述了图像的内容。存储和解析此类数据可能很麻烦;您可能想编写一个自定义生成器以使事情变得更容易。

总之,此类别扩展到更大和更复杂的数据集。

Custom projects

此类别仅包含一个项目:

从事定制生成项目。 GAN 的领域已经变得相当大:BGAN、GAN、*GAN、CycleGAN,……选择一个并使用自定义数据集。上一层的很多东西都在这里汇集:正则化、高级损失、概率、自定义层。因此,这是一个将所学知识付诸实践的绝佳机会。

Training

培训类别现在侧重于加快培训。

随着数据集越来越大,训练时间越来越长。第一种方法是使用混合精度训练。该模型尝试使用 16 位精度,而不是使用 32 位精度。为确保数值稳定性(舍入误差等),部分权重保持其原始类型,并尽可能使用 16 位精度计算。最近的 GPU 有特殊的硬件,可以加速 float16 格式的计算;训练往往可以提速2到3倍。

降低训练时间的第二种方法是从多 GPU 扩展到多工人训练。这些设备不再安装在单个节点中,而是分布在多个节点上。如果您可以将它们全部安装在一个地方,请执行此操作,因为在运行多工作器设置时存在通信开销。但是,这通常限制为每个节点 8 或 16 个 GPU,如果这还不够,您仍然可以通过将训练负载分配给每个具有多个 GPU 的多个工作人员来扩展计算。

当然,如果您可以访问多个 TPU,那么训练时间也会减少。然后使用 TPU pod;谷歌在这里有大量的文档。从 8 个 TPU 内核到 2048 个内核有一些神奇之处。您肯定要确保您的代码高效,因为计算时间就是金钱。[0]

最后一步主要针对大于 RAM 的模型量身定制:模型并行训练。在此设置中,模型不再复制到特定设备上,而是放置在所有设备上。因此,例如,一组层可能由 GPU 0 到 4 处理,下一组由 4 到 8 处理,依此类推。当层激活大于可用 RAM 时,这也是一种技术。[0]

总之,训练侧重于速度。运行速度更快更好。

Theory

理论部分介绍了机器学习广泛领域中的一些全新领域,从图神经网络开始。

图可以对许多数据交互进行建模。考虑一张地图,其中顶点是特别感兴趣的地方,而边缘是它们之间的连接。这种结构也存在于分子和社交网络中。图神经网络使用 DL 中的技术来使用此图存储数据。有一个大的正在进行的研究领域。

开放性也是如此。这是迄今为止整个列表中最有趣的一点。想想大自然,想想经常经过你窗边的鸟儿。他们并不总是这样。他们也不会永远保持这种状态。进化在这里起作用,尽管这种措辞太弱了。进化不是一个过程;它是在工作中发明了一切的东西。你,我,电脑,鸟,鱼,树。而且它还没有完成。因此,进化是一种永不终止的算法(停止问题,有人吗?)。人工智能的一个希望是实现类似的东西,创造新事物。就像我们人类一样。[0]

进入这个方向的一个简短的第一个方法是进化算法,它创造了一些东西。但只是少量。与自然/进化相比,这简直是天方夜谭。我们每天所做的许多事情也是如此。一千个俯卧撑?当然可以,但是大自然创造了鸟类、植物、狗、猫、树——试着与之匹配。倒立?好吧,但大自然创造了鱼、牛、猪、花、细菌——与之相匹配。我们已经取得了很多成就,但还有很多东西要学习(和发明)。看看这篇文章,了解更多关于这个引人入胜的话题。[0]

一个更容易访问的领域是强化学习。为了不吓到初学者,我把它放在了高级级别。我是否会在早期看到 RL 的所有概念(事实上,我看到了),我会怀疑我是否能掌握这一切。这些概念并不难,但对于初学者到中级者来说太过分了。一旦你有一个坚实的基础,你就可以检查 RL。

理论类别的最后一点是将您的知识扩展到计算机科学之外。了解很多总是有益的,生物学、化学、心理学和物理学……都是你可以动手的好领域。不是你必须做一个完整的学习,更多的是这些领域的一两门课程就足够了。

生物学是我们研究的一个很好的例子:具有数十亿连接的 GPT-x、Turing NLG 和 Megatron LM,以及具有惊人的一万亿参数的 Switch Transformer。他们只能做一两件事。虽然我们人类无法插入额外的硬件或在几分钟内处理 TB 的数据,但我们可以做的更多。一边走路一边解数学?明白了。游泳和重播采访?明白了。写论文和吃零食?明白了。

在你睡觉、吃饭、走路、游泳、淋浴、哭、笑、跳跃、跌倒、潜水、攀爬、开车、想知道、学习、写作、作曲、创造、梦想、思考的时候跑步你的心脏?甚至不需要我们的注意。

与一个人和一群人可以做的事情相比,这些模型不足。这就是生物学、化学、物理学和其他领域可以帮助我们推进最先进技术的地方。

总之,您可以从标准 DL 任务扩展到那些宏大的任务。

General

此类别列出了出现在高级级别的一般模式。

高效的代码:很明显,这在早期很重要,但是当你在 5 天内在 3 台具有 128 个 GPU 的服务器上训练你的 5 亿参数模型时,你真的想确保你的代码是快速的。这不再是一个人的项目,而是一个集体的努力。看看变形金刚的论文告诉我们,是许多人的共同努力使事情顺利进行。[0]

诚然,从高效的代码到量子深度学习,这是一段相当长的时间。但是在这个级别上,你已经学到了太多东西,不能不看这个领域。它在 General 而不是 Theory 中列出,因为它是一个高度分离的领域。生物学可以促进算法的发展,但量子物理学是一个完全独立的领域。再一次,主要动机是做事,快。尝试按顺序组合密码是乏味的。同时尝试一千个是很快的。我们甚至不必看远;从候鸟身上,我们目前假设它们使用量子效应来感受地球的磁场。自然又来了。

如果您还没有完成它,那么实施论文是一个很好的做法:您学习新东西,巩固您的编码技能,甚至赚钱。[0]

说到论文,现在是时候从阅读论文转向理解(大部分)论文了。您自然会专注于几个领域并尝试掌握那里的东西。这是保持最新状态的一部分。人工智能研究领域发生了太多事情:

一年前,我有一个关于 NLP 与 ML 的讲座。我们有一些关于模型尺寸的图表,威震天 LM 被列为最大的模型之一。然后,在讲座结束后不久,GPT-3 出现了,炸开了天秤。而这只是一个域。有 GAN、音频模型、图像分类器等等。因此,归结为有一个总体概述,由 Andrew Ng 的 The Batch 等时事通讯提供,然后专注于您自己的领域。[0]

那就是研究。与前两点一样,这从未完全完成。

总之,您需要高效的代码并希望保持最新状态。

下一步去哪里?

你可以在 GitHub 和 Notion 上找到清单。复制并自定义它,然后逐渐勾选它。[0][1]

如果您正在寻找特定资源:

  • 大多数入门级都包含在 deeplearning.ai 的 TensorFlow 开发人员专业证书中,您可以将其用作 TF 考试的准备(在此处介绍)[0][1]
  • 伯克利的全栈深度学习课程涵盖了部分入门和中级和高级水平[0]
  • DeepMind 的高级深度学习和强化学习讲座涵盖了中级和高级水平的某些部分[0]
  • deeplearning.ai 的 TensorFlow:数据和部署专业化和 TensorFlow:高级技术专业化涵盖了部分中级和高级水平[0][1]

如果您正在寻找更具体的列表,您可以在此处查看 Daniel Bourke 的路线图。[0]

Further notes

  1. 这份清单因我自己的经验而有所偏差。
  2. RNN 可用于任何类型的数据。然而,消失的梯度和长周期使它们更难训练。
  3. PyTorch 或 TensorFlow 之间没有太大区别。作为初学者,没有任何压力可以选择其中一个。然而,一旦你有更多的进展,你可能会遇到一个问题,并注意到在其他框架中它可能更容易。这很常见,但让我这样说:
    遇到这样的问题,说明你深入材料;因此,切换框架会导致重新开始的巨大开销。因此,咬紧牙关咬紧牙关通常会更好。 (当我在 TensorFlow 中编写自定义层时,我也有过类似的经历。那是多么的努力啊!)。
  4. 嵌入不限于单个数据点。例如,您可以计算完整句子的嵌入。此外,预输出密集层也经常用作嵌入。
  5. 嵌入只是浮点数组:[0.1213, 0.542, 1.993, …],您可以经常检查它们。
  6. 我注意到不使用激活函数可以使您的网络可重现为单个线性分类器。这对于仅密集的神经网络是正确的。这样做的问题是你只能学习线性依赖,这通常不是你想要的。
  7. 生成技术可以扩展到处理有监督的数据,这就是 CycleGAN 所做的:您在两个已知域之间进行转换,因此每个域都需要标记数据。不过,最初的生成技术,即原始的 GAN 和 AE 和 VAE,并不依赖于这些标签。
  8. 我确实错过了一些东西。请留下评论,让我知道。
  9. 您不必去大学课程就可以学习所有这些。互联网已经使知识转移民主化,所以只要看看 YouTube、谷歌的博客、OpenAI 的博客、DeepMind 的博客等等。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年4月28日
下一篇 2022年4月28日

相关推荐