本文作者Ajit Jaokar是futuretext的创始人。
这篇文章主要讲述一个正在演化的论题。现在,我将主要解释深度学习的基础,以及深度学习算法如何应用于物联网及智慧城市等。尤其是,像我接下来论述的一样,我对于使用物联网数据来完善深度学习算法很感兴趣。我在物联网数据科学课程项目中阐述过这些想法,这个课程的目的是培养物联网数据科学家(与我在牛津大学和马德里理工大学的课程类似)。我还会在上海同济大学城市科学国际会议、旧金山物联网大会(IoTworld event)上针对这些理论进行论述。如果你希望获得最新信息,请在我的 linkedin上联系我。
深度学习
深度学习经常会被认为是模仿大脑的一系列算法。但更加精确的定义应该是「利用神经层进行学习」的算法。深度学习涉及通过让计算机从简单概念之上建立起复杂概念的神经层进行学习。
深度学习逐渐从黑暗中摸索出了光明的道路,谷歌的研究员为他们的试验性深度学习系统输入了数千万张来自于YouTube的随机图像,继而指导系统去识别图像的基本元素,以及如何将这些元素相互整合。这个有着16000个CPU的系统能够识别出有着共同特点的图像(例如猫咪的图像)。谷歌权威性的实验展示了深度学习的无限潜力。深度学习算法可以应用在多种领域,包括计算机视觉、图像识别、模式识别、语音识别以及行为识别等。
计算机如何学习?
为了理解深度学习算法的惊人之处,首先必须了解计算机如何思考和学习。从很早以来,研究员就尝试过创造可以思考的计算机。直至最近,这种努力最近已经成为了「自上而下」方法的规则。这种方法包括了为所有可能的情况写出足够的规则。但是此方法很明显受限于规则的数量,以及其有限的规则依据。
为了克服这些限制,一个由下至上的方法被提出来。这种想法是从经验中学习。「标识数据」提供这些经验。标识数据输入到系统中,系统基于回应进行训练。这种方法对过滤垃圾邮件这样的应用十分有效。然而,大部分数据(图像、视频、语言等)并没有标识,即使有,也并不完善。
另一个问题是解决无限的问题域。例如,国际象棋的问题域非常复杂,但是有限,因为它有着有限的基元(32个棋子)以及有限的可采取步骤(在64个格子上)。但是在真实生活中,无论何时,我们都有着无限多的变量。问题域因此而变得非常大。
像国际象棋这样的问题可以根据一系列形式化规则向电脑进行描述。而反过来,许多真实世界的问题能够被人们容易地理解(直觉)但是却不是那么容易地向计算机表达。像这样需要直觉的例子包括了在图片上识别文字与脸。这样的问题很难向计算机表达,因为问题域是无限的。因此,问题描述承受着维度的诅咒——当维度增加,空间的体积会增加得非常迅速,使可用的数据变得稀疏。计算机无法在稀疏数据中训练。这样的情景很难描述,因为没有足够的数据去合适地表达由维度代表的组合。即使如此,这样「无限的选择」问题在日常生活中也很常见。
深度学习算法如何学习?
深度学习涉及「困难/直觉性」的高维度无规则问题。在此,系统必须在不知道规则的前提下学习去处理未预料的情况。许多现存的系统例如Siri的语音识别与Facebook的脸部识别就在这些宗旨下运作。深度学习系统现在有着完善的可能,因为三个原因:高CPU配置,更好的算法,以及更多的数据。在接下去的许多年,这些因素会带来深度学习算法更多的应用。
深度学习算法基于大脑的运作进行模拟。大脑可能会被视为一种大规模并行模拟计算机,有着 10^10个简单处理器(神经元)——每一个都只需要几毫秒去对输入进行回应。为了从理论上模拟大脑的运行,每个神经元都被设计为一个小型电子设备,有着与生物神经元相似的传输功能。我们继而可以连接这些神经元,模拟大脑的运作方式。从实践上来说,这证明了这个模型并不是那么容易去完善,并且很难训练。
因此我们制作了一些模型的简化版本。这类神经网络叫做「前馈反向传播网络」。简化和限制在于:我们改变了神经元之间的相连方式,这样它们可以位于不同层。每层中的每个神经元都与下一层的每个神经元相连。信号只能在一个方向上传播。最终,我们简化了神经元的设计,使其基于其他神经元传来的简单、权重驱动的输入做出反应。这样简化的网络(前馈神经网络模型)在更容易构建和使用。
这样:
每个神经元都收到上一层神经元传来的信号
每个信号都乘上了一个权重
加权后的输入值加总起来,通过一个限制的功能,将输出值的范围缩小为一个固定范围。
通过限制器后的输出值继而向下一层的所有神经元传播
人工神经网络最常见的学习算法叫做反向传播(Back Propagation,简称BP),即「误差反向传播」。为了利用神经网络,我们给第一层施加输入值,让信号通过网络传播,读取输出。一个BP网络通过例子学习,也就是说,我们必须提供一套学习模式,由一些输入值和已知的正确输出值组成。这样,我们将这些输入-输出的例子展示给网络,告诉它哪些行为是我们期望得到的。BP算法通过网络反向传播误差值,调整权重值,并以此让网络适应。这些神经元的每个链接都有着独一无二的权重值。网络的「智能」就隐藏于权重的值中。随着每个误差迭代返回,权重以此得到调整。每个案例中整个过程都在重复。因此,为了检测目标函数,程序员将会通过迅速发送许多包含目标的数字化数据版本(例如图片)来训练网络。如果网络没有准确识别一个具体的模式,权重就会被调整。训练的最终目的是去让网络能始终如一地识别我们能够识别的模式(例如猫咪)。
深度学习如何帮助解决直觉问题?深度学习的总体目标还是要去解决一个「直觉」问题,也就是以高维度和无规则为特征的问题。前文介绍的机制展示了一个基于有限神经元模型的监督式学习算法——但是我们需要理解更多。
深度学习让计算机解决直觉问题,这是因为:
有了深度学习,计算机可以不仅从经验中学习,还可以根据概念的层级结构来理解世界——这个层级结构中,每个概念都由更简单的概念来定义。
概念的层级结构是通过解决「表示问题」而「自下而上」地构建,并没有提前定义好的规则。
这与孩子们学习「狗狗是什么」的方式相似,通过理解概念中的一个组成部分,如行为(例如狗吠),脑袋的形状,尾巴,皮毛等等,继而将这些概念组成为一个更大的概念,也就是狗本身。
(知识)表征问题在计算机科学中是一个重复出现的主题。
知识表征与心理学中的理论相结合,后者主要研究理解人们如何解决问题,以及表征知识。这个想法是:如果像人类一样,计算机可以从经验中整合知识,它就不再需要人类操作者正式指定解决问题所需的所有知识。
对于计算机来说,表征的选择对机器学习算法的成果有着巨大的影响。例如,基于音调的高低可以知道讲话者是一个男人、女人还是孩子。然而,对于很多应用来说,知道哪些特征表示着准确的信息并不容易。例如,在检测汽车图像中,轮子应该是圆形的——但是实际上轮子的照片有着很多不同的部分(例如金属部分)。因此,表征学习的概念就是要同时找到映射与表征。
如果我们能够自动(即没有人类的干预)找到知识的表征和它们的映射,我们就有了一个灵活的设计去解决直觉问题。我们可以适应新的任务,甚至可以不需观察就可以产生新见解。举个例子,基于音调的高低我们可以知道其主人的口音,从而了解种族。这种机制是自我学习。深度学习最适用于数据庞大、参数之间关系复杂的环境。训练一个神经网络涉及重复地向它展示:「给定一个输入,就会有一个正确的输出」。如果这个过程被进行了足够多次,这个网络就拥有了有效的训练,它就能模仿出你所模拟的方程。它会忽视与解无关的输入。但反过来,如果你没有给出关键性的输入,它就无法给出一个正确的解。这种模型可以应用于很多情况,如以下所给出的简单案例。