面向非专家的DL系列之一:深度学习的4个突破

来源:互联网 发布:linux系统下载iso mac 编辑:程序博客网 时间:2024/06/06 03:23

为什么要阅读本文?

无论你是个人还是机构,如果要开始在产品中应用深度学习技术,都需要先了解两部分的信息:

  1. 深度学习能做什么 :首先需要了解深度学习领域最新的发展,知道它现在的能力所及
  2. 如何运用深度学习 :还需要了解如何训练新涌现的模型,或如何将现有模型运用到生产中去

由于开源社区的优势,第二部分(即如何运用)现在已经变得越来越简单。 关于如何使用TensorFlow之类的框架来训练和使用深度学习模型,已经很多很好的教程 - 比如像Towards Data Science每周都会推出新的教程。

这意味着,一旦你对如何使用深度学习有了一个想法,要实现你的想法虽说不容易,但涉及到的也都是标准的“开发”工作:跟着教程一步步走、针对特定用途和数据集做一些修改、通过阅读StackOverflow上的帖子进行故障排除等等。 例如,他们不需要成为(或者雇用)一个能够从头开始编写原始的神经网络架构的博士大牛,也不需要是一位经验丰富的软件工程师。

这一系列的文章将试图填补第一部分的空白:在高层次上(不过分深入数学)介绍现阶段深度学习已经具备的各种能力,同时为那些想要进一步深入的人提供资源来解决第二部分的问题。 更具体地说,我会涵盖以下内容:

  • 开源深度学习架构和数据集的最新成就有哪些?
  • 是哪些关键的架构或深刻的洞察促进了这些成果的产生?
  • 在自己的项目中使用类似技术的最佳资源是什么?

这些突破有哪些共同之处?

这些突破虽然涉及到许多新的体系结构和创意,但都是通过机器学习中常见的“监督学习”过程实现的。 具体的步骤是:

  1. 收集大量的训练数据
  2. 建立一个神经网络结构,即一个复杂的方程式系统,可视为大脑的粗糙模拟 - 通常有数以百万计的称为权重(weight)的参数。
  3. 反复将数据输入神经网络; 在每次迭代中,将神经网络的预测结果与正确结果进行比较,并且根据误差的大小和方向来调整网络中的每个权重。
    neural netowork whole picture

这个过程已经被应用到了许多不同的领域,神经网络看起来就像从数据中“学习”到了一些东西。 在每个领域,我们都将涵盖:

  1. 训练这些模型所需的数据
  2. 所使用的模型架构
  3. 结果

1. 图像分类

可以训练神经网络来让它确定图像中包含的物体(一个或多个)。

数据需求

要训​​练图像分类器,需要标注过的图像,其中每个图像属于约定的多个类别中的一个。 例如,用于训练图像分类器的标准数据集之一是CIFAR 10数据,该数据已正确标记了10类图像:

image classifier data

深度学习架构

我们将介绍的所有的神经网络架构,都是通过思考人类是如何真正学会解决问题而受到启发。 我们人类是如何进行图像识别的? 当人类确定图像中有什么内容时,首先会寻找高级视觉特征,如分叉、鼻子或轮子。 然而,为了检测这些,我们下意识地需要确定颜色、线条、形状等较低级的特征。 事实上,从原始像素到人类可以识别的复杂特征(如眼睛),我们需要检测像素特征,然后检测像素特征的特征等等。

在深度学习之前,研究人员需要手动尝试提取这些特征并将其用于预测。 在深度学习出现之前,研究人员就已经开始SVM之类的技术,尝试找出这些手动提取的特征之间复杂的非线性关系,例如确定图像中是猫还是狗。

CNN

现在,研究人员已经开发了深度卷积神经网络,可以自己学习出原始像素的这些特征。 这些网络提取像素的特征,然后提取像素的特征的特征等,然后通过常规的神经网络层(类似于逻辑回归)来做出最终的预测。
CNN2

在后续的文章中,我们将深入研究卷积神经网络如何用于图像分类。

突破

深度卷积神经网络(DCNN)是特别针对图像分类这一任务设计的网络架构,这一模型现在可以取得比人类更好的结果。 对于著名的ImageNet数据集 (常被用作卷积神经网络的基准数据),训练好的卷积神经网络在图像分类这一任务上已经超过人类了:

imagenet top5

另外,研究人员已经找到了如何对那些未做适当预处理的图像进行识别的方法,可以将最可能代表特定类别物体的矩形区域分割出来, 然后将每个矩形框输入卷积神经网络分别进行分类:

image segement

上述整个过程在技术上被称为物体检测(object dection),尽管“图像分类”是其中最具挑战性的环节。

资源

理论 :为了更深入地了解卷积神经网络的原理,可以阅读斯坦福大学的Andrej Karpathy 的教程。 如果需要更偏研究性质(数学多一点)的版本,请查看Chris Olah关于卷积的帖子。

代码 :要快速构建图像分类器,请查看TensorFlow文档中的这个介绍性示例。

2. 文本生成

可以训练神经网络来生成模仿给定风格的文本。

数据需求

一个给定风格的文本。 例如,莎士比亚的所有作品。

深度学习架构

神经网络可以对一个序列中的下一个元素进行建模。 它可以查看字符序列的历史,并且对于给定的历史序列,它可以确定最有可能出现的下一个字符是哪个。

用于此问题的体系结构与用于图像分类的不同。 在不同的体系结构下,我们要求网络学习不同的东西。 之前,我们要求它了解图像的特征。 在这里,我们要求它关注字符序列以便预测序列中的下一个字符。 要做到这一点,与图像分类不同,网络需要一种可以跟踪自身“状态”的方式。 例如,如果之前看到的字符是“characte”,则网络应该“存储”该信息并预测下一个字符应该是“r”。

递归神经网络(recurrent neural network)体系结构能够做到这一点:它在下一次迭代期间将每个神经元的当前状态输入网络,从而允许它学习序列(除此之外还有很多其他的东西,但我们稍后会介绍) 。

rnn

然而,为了真正能生成文本,网络还必须决定在这个序列中往历史看多远。 有时候,就像在文字中间一样,网络只需要查看最后几个字符来确定下一个字符,而其他时候(例如在一句话的结尾时)则可能需要回头查看很多历史字符才能决定下一个字符。

有一种称为长程短期记忆单元(LSTM cell)的特殊类型的神经单元,特别适合这一应用场景。 每个单元根据期内部的权重决定是否“记住”或“忘记”之前的历史状态,这些权重将利用网络看到的每一个新的字符来更新。

LSTM

突破

简而言之:我们可以生成看起来像是我们人类创作的文本,可能会有少量的拼写错误。 来自Andrej Karpathy的这个帖子中有一些有趣的例子,例如自动生成莎士比亚的戏剧或保罗·格雷厄姆的散文。

正如逐字地生成文本,同样的网络架构也可以通过顺序生成xy坐标来生成手写文本。 你可以看看这个演示。

rnn handwriting

在后续的文章中,我们将进一步探讨递归神经网络和LSTM的工作机制。

资源

理论: Chris Olah的这篇文章是关于LSTM的经典之作,Andrej Karpathy的这篇关于RNN的一般性介绍也同样的出色,其中谈到了RNN可以做什么以及它的工作原理。

代码: 这个代码包含了构建端到端的文本生成模型的完整过程,其中也包含了数据预处理环节。 这个GitHub仓让使用一个训练好的RNN-LSTM模型来生成手写文本变得轻而易举。

3. 语言翻译

机器翻译 - 翻译语言的能力 - 一直是人工智能研究人员的梦想。 深度学习使这一梦想更接近现实。

数据需要

不同语言之间的成对的句子。 例如,I am a studentje suis étudiant是数据集中的一对句子,可以使用这样的数据集(平行语料库)来训练一个神经网络,实现英语和法语之间的翻译。

深度学习架构

与其他深度学习架构一样,研究人员通过“假设”计算机如何学会翻译语言,建立了一个模仿这种机制的架构。 通过语言翻译,从根本上来说,一个句子(编码为一个单词序列)应该被翻译成其基本的“意义”。 那么这个意思应该被翻译成新语言的一系列词汇。

句子从单词“转化”为意义的方式应该是一个善于处理序列的体系结构 - 这就是上述的“递归神经网络”体系结构。

seq2seq

在2014年,这个架构首次被发现在语言翻译方面的效果很好,之后在很多方面又有所扩展,特别是注意力(attention),一个我们将在后续的文章中深入探讨的思路。

突破

这个Google博客文章显示,这个架构的确完成了它所要完成的任务,将其他语言翻译技术远远抛在了后面。 当然,Google使用了超级棒的训练数据才完成这项任务并不会让这一模型的威力减色!

nmt

资源

代码和理论:应当感谢谷歌,他们在这里发表了一个出色的seq2seq架构的教程 。 这个教程给出了seq2seq模型的目标和理论的概述,并指导你如何在TensorFlow中实际编写代码。 它还涵盖了“注意力”,这是我在详细讨论“seq2seq”时要涉及的基本“seq2seq”体系结构的扩展。

生成对抗网络

可以训练神经网络来生成看起来与给定类型的图像类似的图像 - 例如虚构的面部图像。

数据需要

一个特定的类的图像 - 例如,一堆脸的图像。

深度学习架构

GANs是一个令人惊讶的也是重要的成果 - 世界领先的人工智能研究人员之一Yann LeCun说,他认为这是“ 机器学习在过去10年中最有趣的想法。 “事实证明,我们可以生成看起来像训练图像、但实际上并不是来自该训练集的图像:例如,看起来像面部但实际上不是真实面部的图像。 这是通过同时训练两个神经网络来完成的:一个试图产生看似真实的假图像,一个试图检测图像是否真实。 如果你训练这两个网络,让他们“以相同的速度学习” - 这是构建GAN的难点 - 尝试生成假图像的网络实际上可以生成看起来相当真实的图像。

让我们深入一点细节:我们想要用GAN训练的主要网络被称为发生器(generator):它将学习接收一个随机的噪声矢量,并将其转换成逼真的图像。 该网络具有卷积神经网络的“逆”结构,因此被适当地命名为去卷积(deconvolutional)结构:

deconvolutional

另一个试图区分真实图像和伪造图像的网络就和在图像分类中使用的卷积神经网络一样,被称为鉴别器(discriminator):

discriminator

GAN模型中,神经网络都是卷积神经网络,因为这些神经网络特别擅长从图像中提取特征。

突破与资源

gan demo

代码 : 这个[ GitHub仓](https://github.com/carpedm20/DCGAN-tensorflow)既是一个关于使用TensorFlowGAN培训教程,也包含了一些由GAN生成的醒目图像,比如上面的那个。

理论 :Irmak Sirer的这个演讲是对GAN的一个有趣的介绍,也涵盖了许多监督学习的概念,这些概念也将帮助你理解上面的发现。

最后,Arthur Juliani还有一个有趣的文章,包括GANs的可视化解释,以及在TensorFlow中的实现的代码。

总结

这是对深度学习在过去五年取得的重大突破的高度概括。 我们讨论的这些模型都有许多开源实现。 这意味着你几乎总是可以下载一个“预先训练”的模型并将其应用于你的数据 - 例如,你可以下载预先训练好的图像分类器,可以将数据输入网络来分类图像,或者给框出识别出的物体。 由于大部分工作都是已经完成,所以使用这些尖端技术所必需的工作并不是在“深入学习”本身 - 研究人员已经在很大程度上为你完成了这个部分 - 而是获得他人开发的模型来通过“开发”解决你的实际问题。

希望现在你对深度学习模型的功能有了更深入的了解,并且离实际使用它们更近了一步!

阅读全文
0 0