深度学习算法完整指南:从基础到前沿技术

19 阅读14分钟

深度学习算法 - 完整指南

深度学习在科学界和企业界获得了惊人的普及。自2012年卷积神经网络在图像识别竞赛(ImageNet大规模视觉识别挑战赛)中达到前所未有的准确率以来,每年都有越来越多的研究论文发表,越来越多的公司开始将神经网络融入其业务。据估计,深度学习目前是一个25亿美元的市场,预计到2023年将达到181.6亿美元。

什么是深度学习?

根据维基百科的定义:"深度学习(也称为深度结构化学习或微分编程)是基于具有表示学习的人工神经网络的更广泛机器学习方法家族的一部分。学习可以是监督式、半监督式或无监督式"。

在我看来,深度学习是一系列受人类大脑处理数据和创建决策模式工作方式启发的算法集合,这些算法正在扩展和改进称为人工神经网络的单一模型架构的概念。

神经网络

就像人脑一样,神经网络由神经元组成。每个神经元接收信号作为输入,将其乘以权重,求和并应用非线性函数。这些神经元彼此堆叠并组织在层中。

事实证明,神经网络是优秀的函数逼近器。我们可以假设每个行为和每个系统最终都可以表示为数学函数(有时是极其复杂的函数)。如果我们以某种方式找到了那个函数,我们基本上就能理解关于该系统的一切。但找到这个函数可能极其困难。所以,我们需要估计它。这就是神经网络的作用。

反向传播

神经网络能够使用大量数据和称为反向传播的迭代算法来学习期望的函数。我们向网络提供数据,它产生输出,我们将该输出与期望输出进行比较(使用损失函数),然后根据差异重新调整权重。

然后重复。再重复。权重的调整使用称为随机梯度下降的非线性优化技术执行。

一段时间后,网络将变得非常擅长产生输出。因此,训练结束。因此,我们成功逼近了我们的函数。如果我们向网络传递一个具有未知输出的输入,它将基于逼近的函数给我们一个答案。

让我们用一个例子来使这一点更清楚。假设由于某种原因,我们想要识别带有树木的图像。我们向网络提供各种图像,它产生输出。由于我们知道图像是否实际有树,我们可以将输出与我们的真实情况比较并调整网络。

当我们传递越来越多的图像时,网络将犯越来越少的错误。现在我们可以向它提供未知图像,它将告诉我们图像是否包含树。很酷,对吧?

多年来,研究人员对原始想法提出了惊人的改进。每个新架构都针对特定问题,并且一个实现了更好的准确性和速度。我们可以将所有新模型分类到特定类别中:

前馈神经网络(FNN)

前馈神经网络通常是全连接的,这意味着层中的每个神经元都与下一层中的所有其他神经元连接。所描述的结构称为多层感知器,起源于1958年。单层感知器只能学习线性可分的模式,但多层感知器能够学习数据之间的非线性关系。

它们在分类和回归等任务上表现异常出色。与其他机器学习算法相反,它们不容易收敛。它们拥有的数据越多,准确性就越高。

卷积神经网络(CNN)

卷积神经网络采用称为卷积的函数。它们背后的概念是,不是将每个神经元与所有下一个神经元连接,而是只将其与少数几个连接(感受野)。

在某种程度上,它们试图规范化前馈网络以避免过拟合(当模型仅学习预先看到的数据而无法泛化时),这使得它们在识别数据之间的空间关系方面非常出色。

这就是它们的主要用例是计算机视觉和图像分类、视频识别、医学图像分析和自动驾驶汽车等应用的原因,在这些应用中它们确实实现了超人的性能。

它们也非常适合与循环网络和自编码器等其他类型的模型结合。手语识别就是这样一个例子。

循环神经网络(RNN)

循环网络非常适合与时间相关的数据,并用于时间序列预测。它们使用某种形式的反馈,将输出返回到输入。您可以将其视为从输出到输入的循环,以便将信息传递回网络。因此,它们能够记住过去的数据并在其预测中使用该信息。

为了实现更好的性能,研究人员将原始神经元修改为更复杂的结构,如GRU单元和LSTM单元。LSTM单元已广泛用于自然语言处理中的任务,如语言翻译、语音生成、文本到语音合成。

递归神经网络

递归神经网络是循环网络的另一种形式,不同之处在于它们以树状形式结构化。因此,它们可以在训练数据集中建模层次结构。

由于它们与二叉树、上下文和基于自然语言的解析器的联系,它们传统上用于NLP中的音频到文本转录和情感分析等应用。然而,它们往往比循环网络慢得多。

自编码器

自编码器主要用作无监督算法,其主要用例是降维和压缩。它们的技巧是试图使输出等于输入。换句话说,它们试图重建数据。

它们由编码器和解码器组成。编码器接收输入并将其编码在较低维度的潜在空间中。解码器获取该向量并将其解码回原始输入。

这样我们可以从网络中间提取具有较少维度的输入表示。天才,对吧?

当然,我们可以使用这个想法来重现相同但略有不同甚至更好的数据(训练数据增强、数据去噪等)。

深度信念网络和受限玻尔兹曼机

受限玻尔兹曼机是具有生成能力的随机神经网络,因为它们能够学习其输入的概率分布。与其他网络不同,它们仅由输入层和隐藏层组成(无输出层)。

在训练的前向部分,它们获取输入并产生其表示。在后向传递中,它们从表示中重建原始输入。(完全像自编码器,但在单个网络中)。

多个RBM可以堆叠形成深度信念网络。它们看起来完全像全连接层,但它们的训练方式不同。这是因为它们成对训练层,遵循RBM的训练过程(如前所述)。

然而,DBN和RBM已被科学界抛弃,转而支持变分自编码器和GAN。

生成对抗网络(GAN)

GAN于2016年由Ian Goodfellow引入,它们基于一个简单而优雅的想法:您想生成数据,比如图像。您做什么?

您构建两个模型。您训练第一个模型生成假数据(生成器),第二个模型区分真假数据(判别器)。然后让它们相互竞争。

生成器在图像生成方面变得越来越好,因为其最终目标是欺骗判别器。判别器在区分假图像和真实图像方面变得越来越好,因为其目标是不被欺骗。结果是我们现在从判别器获得了令人难以置信的逼真假数据。

生成对抗网络的应用包括视频游戏、天文图像、室内设计、时尚。基本上,如果您的领域中有图像,您可能可以使用GAN。哦,您记得深度伪造吗?是的,那都是GAN制作的。

变换器

变换器也非常新,它们主要用于语言应用,因为它们开始使循环网络过时。它们基于称为注意力的概念,用于强制网络专注于特定数据点。

不是使用过于复杂的LSTM单元,而是使用注意力机制根据其重要性权衡输入的不同部分。注意力机制不过是另一个带有权重的层,其唯一目的是以优先考虑输入段同时降低其他段优先级的方式调整权重。

事实上,变换器由许多堆叠的编码器(来自编码器层)、许多堆叠的解码器(解码器层)和一堆注意力层(自注意力和编码器-解码器注意力)组成。

变换器设计用于处理有序的数据序列,例如自然语言,用于各种任务,如机器翻译和文本摘要。如今,BERT和GPT-2是两个最突出的预训练自然语言系统,用于各种NLP任务,它们都基于变换器。

图神经网络

非结构化数据通常不太适合深度学习。在许多现实应用中,数据是非结构化的并以图格式组织。想想社交网络、化学化合物、知识图、空间数据。

图神经网络的目的是对图数据进行建模,这意味着它们识别图中节点之间的关系并产生其数值表示。就像嵌入一样。因此,它们以后可以用于任何其他机器学习模型中,用于聚类、分类等所有类型的任务。

自然语言处理中的深度学习

词嵌入

词嵌入是将词表示为数值向量的方式,以捕捉它们之间的语义和句法相似性。这是必要的,因为神经网络只能从数值数据中学习,所以我们必须找到一种将词和文本编码为数字的方法。

Word2Vec是最流行的技术,它试图通过基于上下文预测词(CBOW)或基于词预测周围词(Skip-Gram)来学习嵌入。Word2Vec不过是一个简单的两层神经网络,以词作为输入和输出。词以独热编码的形式馈送到神经网络。

在CBOW的情况下,输入是相邻词,输出是期望词。在Skip-Gram的情况下,则相反。

GloVe是另一个模型,通过将其与矩阵分解技术(如潜在语义分析)结合来扩展Word2Vec的想法,这些技术已被证明在全局文本统计方面非常出色,但无法捕捉局部上下文。因此,这两者的结合给了我们两全其美的结果。

某机构的FastText采用不同的方法,利用字符级表示而不是词。

上下文词嵌入用循环神经网络替换Word2Vec来预测,给定句子中的当前词,下一个词。这样我们可以捕捉词之间的长期依赖关系,每个向量包含当前词和过去词的信息。最著名的版本称为ELMo,它由一个两层双向LSTM网络组成。

注意力机制和变换器通过加权最相关的词并忘记不重要的词,正在使RNN过时(如前所述)。

序列建模

序列模型是自然语言处理的一个组成部分,因为它出现在许多常见应用中,如机器翻译、语音识别、自动完成和情感分类。序列模型能够处理输入或事件序列,如文档词。

例如,假设您想将句子从英语翻译成法语。

要做到这一点,您需要一个序列到序列模型(seq2sec)。Seq2sec模型包括编码器和解码器。编码器获取序列(英语句子)并产生输出,即输入在潜在空间中的表示。该表示被馈送到解码器,解码器给我们新的序列(法语句子)。

编码器和解码器最常见的架构是循环神经网络(主要是LSTM),因为它们擅长捕捉长期依赖关系,以及变换器,它们往往更快且更容易并行化。有时它们还与卷积网络结合以获得更好的准确性。

BERT和GPT-2被认为是两种最佳的语言模型,它们实际上是基于变换器的序列模型。

计算机视觉中的深度学习

定位和目标检测

图像定位是在图像中定位对象并用边界框标记它们的任务,而目标检测还包括对象的分类。

这些相互关联的任务由计算机视觉中的基本模型(及其改进)R-CNN解决。RCNN及其前身Fast RCNN和Faster RCNN利用区域提议和卷积神经网络。

外部系统或网络本身(在Faster RCNN的情况下)以固定大小框的形式提议一些可能包含对象的感兴趣区域。这些框通过CNN(如AlexNet)进行分类和校正,CNN决定框是否包含对象、对象是什么并修复边界框的尺寸。

单次检测器

单次检测器及其最著名成员YOLO(You Only Look Once)摒弃了区域提议的想法,它们使用一组预定义的框。

这些框被馈送到CNN,CNN为每个框预测多个带有置信度得分的边界框,检测其中中心的一个对象,并将对象分类到类别中。最后,我们只保留得分高的边界框。

多年来,YOLOv2、YOLOv3和YOLO900在原始想法上改进了速度和准确性。

语义分割

计算机视觉中的基本任务之一是根据上下文将图像中的所有像素分类到类别中,也称为语义分割。在这个方向上,全卷积网络(FCN)和U-Net是两个最广泛使用的模型。

全卷积网络(FCN)是一种编码器-解码器架构,具有一个卷积网络和一个反卷积网络。编码器对图像进行下采样以捕捉语义和上下文信息,而解码器进行上采样以检索空间信息。这样我们以较小的时间和空间复杂度检索图像的上下文。

U-Net基于巧妙的想法跳跃连接。它们的编码器与解码器大小相同,跳跃连接将信息从前者传递到后者以提高最终输出的分辨率。

姿态估计

姿态估计是在图像和视频中定位人体关节的问题,它可以是2D或3D。在2D中,我们估计每个关节的(x,y)坐标,而在3D中估计(x,y,z)坐标。

PoseNet主导了该领域(它是大多数智能手机应用程序的首选模型),它使用卷积神经网络(没想到吧?)。我们将图像馈送到CNN,并使用单姿态或多姿态算法来检测姿态。每个姿态与置信度得分和一些关键点坐标相关联。最后,我们保留得分最高的那些。

总结

您已经了解了当前所有基本的深度学习算法。

当然,我无法包括所有已发布的架构,因为它们确实有数千个。但大多数都基于这些基本模型之一,并通过不同的技术和技巧进行改进。

我也相信我将很快需要更新本指南,因为新的论文正在我们说话时不断发表。但这就是深度学习的美丽之处。有新突破的空间如此之大,以至于有点可怕。

如果您认为我忘记了什么,请随时通过社交媒体或电子邮件联系我们。我希望这篇文章尽可能完整。

现在是您的时间了。去使用这些算法构建您自己的惊人应用程序。或者甚至创建一个新的,这将使我们的列表入选。为什么不呢?

玩得开心,继续学习AI。