原标题:深度学习领域四个不可不知的重大突破
本文由 【AI前线】原创,原文链接: http://dwz.cn/77ZT39
为何阅读本文?
无论该领域中的从业者,或是企业组织,为了运用深度学习技术,首先需要做好两个准备:
“能做什么”:了解深度学习领域的最新进展能够用来做什么。
“怎么做”:训练新模型,或将现有模型用于生产环境的技术能力。
在开源社区的努力下,第二个问题正变得越来越容易。目前已经有大量优秀的教程在告诉大家,如何使用诸如 TensorFlow 等库训练并使用深度学习模型,很多教程甚至每周都会发布新的内容,例如 Towards Data Science。
因此一旦你明确了自己打算如何使用深度学习技术,那么就可以努力让想法变为现实,虽然这一过程不那么简单,但只需要进行标准化的“开发”工作,例如按照本文介绍的各种教程按图索骥,结合自己的特定用途和 / 或数据进行修改,根据大家在 StackOverflow 等网站进行的讨论进行排错,这就可以实现了。这也可以避免很多麻烦的事情,例如并不需要成为(或者雇佣)能够从零开始自行开发神经网络的专家,而且还必须同时具备娴熟的软件工程经验。
这一系列随笔会试图解答上文提出的第一个问题:从较高层面概括谈谈深度学习技术到底能够做些什么,同时会为希望进一步了解的人提供一些资源,并 / 或通过展示代码进一步解决第二个问题。更具体来说,本文将涉及:
那些使用开源的架构和数据集所取得的最新成果。
那些促成这些成果的重要架构或其他见解。
如果要在你自己的项目中使用类似技术,着手进行前可能需要的最佳资源。
这些突破的共同之处
这些重大突破虽然涉及很多新的架构和创意,但都是从机器学习中常见的“监督式学习(Supervised Learning)”过程中涌现的。尤其是,都涉及下列步骤:
收集一个足够庞大,并且恰当的训练数据集。
搭建一个神经网络架构(一种复杂的方程组,可通过松散的方式模拟我们的大脑),网络中通常会包含数百万个名为“权重(Weight)”的参数。
将数据反复不断送入神经网络,并对每次迭代后神经网络的预测结果与正确结果进行比较,根据差异的具体程度和方向对神经网络的每个权重进行调整。
神经网络就是这样训练的:这一过程将重复很多很多次。图源。
类似的过程已经应用于很多领域,并且都已产生了非常“博学”的神经网络。每个领域我们将涉及:
训练模型所需的数据
所使用的模型架构
结果
图片分类
神经网络通过训练可以识别图片中包含的物体。
所需数据
图片分类器的训练需要用到带标签的图片,其中每张图片均属于数量有限的类别中的一种或几种。例如,CIFAR 10 数据就是训练图片分类器所用的一种标准化数据集,其中已正确添加了标签的图片共属于 10 个类别:
CIFAR-10 数据中的图片示例。图源
深度学习架构
本文涉及的所有神经网络架构都源自对人类学着解决问题的方法所进行的思考。人类是如何检测图片的?当人类看到一张图片后,我们首先会查看一些最顶层的视觉特征,例如分支、鼻子或车轮。然而为了检测出这些特征,我们需要在潜意识里确定一些底层特征,例如颜色、线条以及其他形状。实际上,为了从原始像素中识别出人类可以认出的复杂特征,例如眼睛,我们必须首先检测像素特征,随后检测像素特征的特征,以此类推。
在深度学习技术诞生前,研究人员会尝试手工提取这些特征,并将其用于预测。就在深度学习技术诞生前一刻,研究人员还在试图使用技术手段(主要是 SVM)找出这些手工提取的特征之间蕴含的复杂的非线性关系,据此才能确定图片中包含的到底是猫还是狗。
卷积神经网络(CNN)在每一层提取的特征。图源
现在,研究人员开发的神经网络架构可以从原始像素中学习这些特征,尤其是深度卷积神经网络更是非常适合此类任务。这些网络可以提取像素特征,随后提取像素特征的特征,以此类推,最终将结果送入常规的神经网络层(类似于逻辑回归)并做出最终预测。
针对 ImageNet 数据集中的图片进行预测的 CNN 架构预测结果范例。
随后我还将另行撰文,深入介绍如何将卷积神经网络用于图片分类。
重大突破
这些技术催生的结果在于,对于这些架构着力所要解决的问题,即图片分类,可以通过算法实现远胜于人类的效果。例如著名的 ImageNet 数据集已被广泛用作卷积架构的评测基准,经过训练的神经网络可以获得比人类更准确的图片分类效果:
早在 2015 年,计算机经过训练已可实现比人类更出色的图中物体分类能力。图源
此外,研究人员已经明白如何拍摄一张图片但不立即进行分类,而是首先将图片中最有可能代表物体的区域划分为多个矩形,将每个矩形送入 CNN 架构,随后对图片中的每个物体进行分类,并在图片中框出每个物体的位置(这种做法也叫做“边界框 [Bounding box]”):
使用“Mask R-CNN”进行物体检测。图源
这一系列过程可从技术上总称为“物体检测”,不过大部分最困难的环节都用到了“图片分类”技术。
资源
理论 :如果要深入理解 CNN 的工作原理等理论知识,可参加 Andrej Karpathy 的 Stanford 课程。如果希望从更偏重数学知识的角度进一步了解,可参考 Chris Olah 有关卷积的文章。
代码:如果希望尽快着手构建图片分类器,可以参阅 TensorFlow 文档提供的这篇介绍范例。
文本生成
神经网络通过训练可以模仿输入的内容生成文本。
所需数据
任何类型的文本均可,例如莎士比亚作品全集。
深度学习架构
神经网络可以对一系列元素中的下一个元素建模,可以查看序列中的上一个字符,并且对于指定的过往序列,还可以判断随后最有可能出现哪个字符。
解决这个问题所用的架构与图片分类所用的架构有很大差异。由于架构本身的差异,我们需要让网络学习不同的东西。之前,我们让网络学习图片中的重要特征,但现在,我们需要让网络关注字符序列并预测序列中的下一个字符。因此网络需要采取与图片分类不同的做法,通过某种方式持续追踪自己的“状态”。例如,如果看到的前序字符分别是“c-h-a-r-a-c-t-e”,此时网络应“存储”该信息,并预测下一个字符应该是“r”。
递归神经网络架构可以做到这一点:可在下一次迭代时将每个神经元的状态重新装入网络,借此学习整个序列(实际过程远比这个复杂,下文再详述)。
递归神经网络架构图。图源
然而为了真正胜任文本生成的任务,网络还必须能决定要在序列中“回顾”到多远的位置。有时候,例如正处在某个单词中间时,网络只需要“回顾”前面的几个字符就可以确定随后出现的字符,但有时候可能需要“回顾”很多字符才能做出决定,例如正处在句子末尾时。
有一种名叫“LSTM”(Long Short Term Memory,长短期记忆)的特殊 Cell 很适合这种任务。每个 Cell 可根据 Cell 本身的内部权重决定是否要“记住”还是“忘记”,而网络每看到一个新字符后,这个权重都会更新。
LSTM Cell 的内部工作原理。图源
重大突破
简而言之:我们可以生成类似于“characature”这样的文本,不过需要解决一些拼写错误和其他问题,让生成的结果看起来是正确的英语。Andrej Karpathy 的这篇文章举了几个有趣的例子,通过莎士比亚的剧本生成了 Paul Graham 风格的随笔。
这样的架构还可用于通过连续生成的横轴和纵轴坐标生成手写文字,这种做法与通过一个个字符生成语言的方法不谋而合。感兴趣的读者可以试试这个演示。
神经网络的手写笔迹。不过,真的还能叫“手”写吗?图源
随后我还将另行撰文,深入介绍递归神经网络和 LSTM 的工作原理。
资源
理论:Chris Olah 有关 LSTM 的这篇文章是经典中的经典。同样经典的还有 Andrej Karpathy 这篇有关 RNN 的文章,此文介绍了 RNN 的功能和工作原理。
代码:这里提供了详细的指导,可以告诉我们如何着手构建端到端文本生成模型,以及数据的预处理操作。这个 GitHub 代码库可以帮助我们用训练好的 RNN-LSTM 模型生成手写文字。
语言翻译
机器翻译(翻译为另一种语言的能力) 长久以来一直是人工智能领域研究人员最大的梦想。深度学习让这个梦想距离现实更进一步。
所需数据
使用不同语言写出的词句对。例如“I am a student”和“je suis étudiant”这样成对句子组成的数据集,可以训练神经网络实现英语和法语的互译。
深度学习架构
与其他深度学习架构类似,研究人员已经从“理论上”确定了计算机学习翻译语言的最佳方式,并开发出一种可以模仿这种方式的架构。对于语言翻译,从本质上来说需要将一句话(由一系列单词编码而成)翻译为所要表达的基本“含义”,随后将翻译出来的含义翻译为使用另一种语言的单词组成的序列。
句子从单词“转换”成含义的方式必须使用能胜任序列处理的架构,也就是上文提到的“递归神经网络”。
编码器 - 解码器架构示意图。图源
人们最初在 2014 年发现这种架构非常适合用于语言翻译,随后以此为基础在不同方向上进行了扩展,尤其是对“注意力”的处理,随后我们将单独撰文介绍。
重大突破
Google 的这篇博客文章介绍了这种架构在语言翻译方面所实现的效果,这一技术让其他语言翻译技术显得大为逊色。当然,毕竟 Google 有大量资源,可以将丰富的训练数据用于这种任务!
Google Sequence to Sequence 模型的表现。图源
资源