我们暂且不管深度学习是什么,深度学习有多强大。作为信息行业的杰出的工程师,首先需要知道深度学习真正带来的是什么?未来,深度学习对社会以及各个行业会带来什么影响?拥有大量深度学习人才的中国企业将会在世界上充当何种角色?深度学习又会给我们带来什么样的机遇与挑战?

 “路漫漫其修远兮”。深度学习需要大量的数据和庞大的计算资源,而这就将我们的视线带入 GPU 的世界。如果时至今日,你还以为英伟达(NVIDIA)只是一家卖显卡的公司,那就显得有点孤陋寡闻了。因为如今的特斯拉自动驾驶系统 Autopilot 2.0、行车预警系统、无人采集系统、智能物流系统等,到处都充斥着 NVIDIA 的身影。正是因为深度学习,NVIDIA才会成为新一轮人工智能公司中的独角兽。

 深度学习在各个领域带来的变革才刚刚开始,如黎明破晓一样让人心潮澎湃。近期关于无人驾驶、辅助驾驶、智能音箱的新闻越来越多,无论大公司,还是新创公司都在谈人工智能,为什么呢?因为深度学习极大地降低了技术的门槛。只要拥有充足的数据,加点硬件成本和时间成本,就可以利用深度学习这一技术实现各种方案,这是新创公司实现弯道超车的机会。

 在深度学习领域最权威的书是Ian Goodfellow 、Yoshua Bengio和Aaron Courville 编写的《深度学习》。但与深度学习相关,且将知识原理与案例实践相结合的书籍在市场上并不多见。《深度学习原理与实践》的创作初衷就是帮助更多的人了解深度学习,并投身于人工智能领域。

《深度学习原理与实践》

陈仲铭,彭凌西 著

一年多以来,作者业余时间几乎都用于写作、编写示例代码,也曾经想过放弃,但都坚持了下来。成功不就是一次次坚持而成就的吗?人生,多多少少也有些梦想,值得我们去付出!

《深度学习原理与实践》学习建议

我们努力提高自己的能力、学习深度学习和人工智能,并不是为了与别人一决高下,而是超越自己。成功的路上会有很多建议,而针对本书的学习,有下面几条建议。

学习Python基础知识。贯穿全书中的代码由Python编程语言编写而成,但是本书并没有对Python代码进行过多的解释,而是围绕和专注于讲解深度学习的原理和思想。因此希望读者先自行安装Python 3,了解Python编程语言的特性和基本使用方法,有一定的了解后即可直接使用本书的示例代码,这对于理解深度学习会有所帮助。

实践是检验真理的唯一标准。每一行代码和函数都是作者亲自实现过的,尽管不同服务器和不同版本的框架会存在一些差异,也可能读者看到本书代码时已经稍显过时,但我仍然希望读者亲自去尝试实现书中的代码,毕竟“纸上得来终觉浅”,实践才是检验真理的唯一标准。

不要纠结于框架。深度学习好比“菜谱”,数据就是“肉和青菜”,深度学习框架就是“炒菜的锅和铲”。谁说红烧土豆一定要用“Caffe”牌的锅,香煎莲藕一定要用“Google”牌的铲?我们只要学会菜谱,研究“锅”和“铲”的属性并多加实践练习,就可以炒出一盘香喷喷的菜。希望读者不要纠结于本书所用的是Keras框架,还是Tensorflow框架,而是将所有的目光都聚焦在深度学习的原理和案例实践上。

多阅读相关文献。读杰出的书籍,有如和杰出的人物促膝交谈。深度学习的知识日新月异,在知识更新迭代迅速的时代,我们需要掌握知识的本质内容,而掌握本质内容的最好方法之一就是阅读与知识点相关的论文文献,去理解与思考为什么要这样,这样做的优缺点是什么。多阅读相关的文献,我们就会更好地把握住深度学习知识的本质。

《深度学习原理与实践》特色

大量图例,简单易懂。作者亲自绘制了大量插图,力求还原深度学习的算法思想,分解和剖析晦涩的算法,用图例来表示复杂的问题。生动的图例也能给读者带来阅读乐趣,快乐地学习算法知识,体会深度学习的算法本质。

简化公式,生动比喻。深度学习和机器学习类的书中通常会有大量复杂冗长的算法公式,为了避免出现读者读不懂的情况,本书尽可能地统一了公式和符号,简化相关公式,并加以生动的比喻进行解析。在启发读者的同时,锻炼读者分析问题和解决问题的能力。

算法原理,代码实现。在介绍深度学习及相关算法的原理时,不仅给出了对应的公式,还给出了实现和求解公式的代码,让读者明确该算法的作用、输入和输出。原理与代码相结合,使得读者对深度学习的算法实现更加具有亲切感。

深入浅出,精心剖析。理解深度学习需要一定的机器学习知识,本书在第1章介绍了深度学习与机器学习的关系,并简要介绍了机器学习的内容。在内容安排上,每章依次介绍模型框架的应用场景、结构和使用方式,最后通过真实的案例去全面分析该模型结构。目的是让读者可以抓住深度学习的本质。

入门实践,案例重现。每一章最后的真实案例不是直接堆砌代码,而是讲解使用该算法模型的原因和好处。从简单的背景知识出发,使用前文讲解过的深度学习知识实现一个实际的工程项目。实践可以用于及时检验读者对所学知识的掌握程度,为读者奠定深度学习的实践基础。

什么是深度学习

2016 年年初,由 Google DeepMind 开发的AlphaGo在围棋大战中打败了韩国的围棋大师李世石。就如同 1997 年 IBM 的“深蓝”计算机战胜了世界首席国际象棋大师卡斯帕罗夫一样,媒体开始铺天盖地般地宣传人工智能时代的来临。同时,资本开始追捧与人工智能产业相关的公司,一时间收购并购人工智能企业的狂潮席卷而来。

在描述 DeepMind 胜利的时候,很多媒体都会把人工智能(Artificial Intelligence)、机器学习(Machine Learning)和深度学习(Deep Learning)混为一谈。虽然从严格定义上来说,DeepMind 在 AlphaGo 程序中对上述3种技术都有所使用,但其真正使用得更多的是深度学习。

下面来了解人工智能、机器学习、深度学习这三者之间的关系。如图1所示,人工智能包含着机器学习,而深度学习则是机器学习的重要分支之一,它们三者是包含与被包含的关系。

从20世纪50年代,人工智能第一次提出至今,人工智能的问题基本上已经定型,大致分为6个具体的方向:问题求解、知识推理、规划问题、不确定性推理、通信感知与行动、学习问题。而机器学习主要有 3 个方向:分类、回归、关联性分析。最后到深度学习则是对机器学习中的神经网络进行深度拓展。

图 1  深度学习、机器学习、人工智能之间关系

人工智能的概念从 1950 年左右开始被提出,而机器学习则是在 1980 年左右被提出的,最近热门的深度学习则是在 2010 年左右被提出的。

人工智能实际上包含了我们经常使用到的算法,例如在问题求解方面,最经典的算法是 A* 搜索算法和 a-b 剪枝算法,又如人工智能中的学习问题则包含了机器学习的大部分内容。现阶段已经有很多资料介绍机器学习相关的算法,较为著名的机器学习十大算法有:决策树、支持向量机 SVM、随机森林算法、逻辑回归、朴素贝叶斯、KNN 算法、K-means 算法、Adaboost 算法、Apriori 算法、PageRank 算法。

图 2  深度神经网络示例图

深度学习的定义在过去的十年一直在不断变化,其中大部分学者认为深度学习应该“具有两层以上的神经网络”,图2所示为深度学习的神经网络示例,其特点是:

· 具有更多的神经元;

· 具有更复杂的网络连接方式;

· 拥有惊人的计算量;

· 能够自动提取数据高维特征。

本文介绍的深度网络主要是指具有深层的神经网络,包括:人工神经网络(ANN)、卷积神经网络(CNN)、循环神经网络(RNN)

机器学习的一般方法

机器学习按照方法主要可以分为两大类:监督学习和无监督学习。其中监督学习主要由分类和回归等问题组成,无监督学习主要由聚类和关联分析等问题组成。深度学习则属于监督学习当中的一种

机器学习中的监督学习是指使用算法对结构化或者非结构化的有标注的数据进行解析,从数据中学习,获取数据中特定的结构模型,然后使用这些结构或者模型来对未知的新数据进行预测。通俗来说,监督学习就是通过对数据进行分析,找到数据的表达模型,有了这个模型就可以对新输入的数据套用该模型来做决策。

在训练阶段(对数据进行分析的阶段),首先需要根据原始的数据进行特征提取,这个过程叫作特征工程。得到特征后,我们可以使用决策树、随机森林等模型算法去分析数据之间的特征或者关系,最终得到关于输入数据的模型(Model)。在预测阶段,同样按照特征工程的方法提取了数据后,使用训练阶段得到的模型对特征向量进行预测,最终得到所属的标签(Labels)。

图 3  监督学习一般方法

机器学习算法中的每一种不同的模型都有其自身的规则去解释输入的数,然后对新输入的数据进行预测和判断。例如决策树的模型,就是构建一个树形结构,每一个节点代表一种数据的类型,每一个叶子节点则代表一种类别。线性回归模型则利用线性回归方程创建一组参数来表示输入的数据之间的关系,而神经网络则有一组权重参数向量来代表节点之间的关系。

到目前为止,我们有各种各样的机器学习算法可以对数据进行建模。通过算法对数据进行建模后,我们可以学习到数据之间的关联性,提取数据的高维特征,并且训练完的新模型可以对相类似的新数据进行预测。可现实情况真的会这么理想吗?图3中对应的每一个步骤所花费的时间是相同的吗?

机器学习领域当中最出彩的莫过于计算机视觉,这里我们暂且抛开计算机视觉的图像获取需要通过硬件编码而获取彩色或者灰度图像等一系列硬件的工作。举一个例子,如果我们想要识别道路上的停车牌,首先不是直接对图片进行滑动窗口,而是先进行边缘检测、中值滤波、高斯滤波等图像预处理操作,待得到工程师们认为可以使用的图像之后,才开始对图像进行分析,产生一系列的物体候选框。

然后通过图像检测的算法对各个窗口进行特征检测,通过机器学习的算法提取每个窗口的特征,或者可以通过数据挖掘的算法对数据进行压缩,从而提取到更加抽象的特征数据信息。接着我们需要定义分类器,对停车牌中的字母进行判断,例如可以使用简单的 SVM 分类器对“STOP”4 个字母的抽象信息进行分类。到此为止,算是能够使用机器学习的算法去感知图像,识别输入的图像是否为停车牌。

虽然上面的图像分类结果基本可用,但是还远远达不到全自动化识别的目的。当遇到雨雪天气时,马路一旁的标志牌已经不是那么清晰可见,抑或标志牌被树木遮挡时,标志牌的特征也会改变。这时传统机器学习算法就不是那么有效了,这也是一直困扰学者们的一大难题,因此各种旋转不变性、光照不变性算法相继被提出,但始终没有某一种算法特别奏效。

随着时间的推移,深度学习迅速地改变了这一切。

选择深度学习的原因

在深度学习出现之前,机器学习的工程师们往往需要花费数天、数周,甚至数月的时间去收集数据,然后对数据进行筛选,尝试各种不同的特征提取方法对数据进行提取,或者结合几种不同的特征对数据进行分类和预测。作者曾经使用传统机器学习检测数据时,就花费了大量的时间尝试使用各种不同的算法、特征提取方式和分类器,对数据进行特征提取。经过大量的尝试,才找到满足业务要求的特定方法模型。

随着深度学习的爆发,最新的深度学习算法已经远远超越了传统的机器学习算法对于数据的预测和分类精度。深度学习不需要我们自己去提取特征,而是自动地对数据进行筛选,自动地提取数据高维特征。深度学习的一般方法(见图4)与传统机器学习中的监督学习一般方法(见图3)相比,少了特征工程,节约了工程师们大量工作时间。

图 4 深度学习一般方法

选择深度学习,一方面因为它节省工程师们的时间,降低工程师的工作量,提高工作效率,从而让工程师们把更多的时间和精力投入在更有价值的研究方向上;另一方面是深度学习的效果,已经在众多领域开始超越传统的机器学习算法,甚至在某些领域能够获得比人类预测的更好的效果;此外,深度学习还可以与大数据无缝结合,输入庞大的数据集进行大数据端到端的学习过程,这种大道至简的理念吸引着无数的研究者。

深度学习已经不仅仅是计算机科学领域的问题,它结合了更多关于神经网络的问题,涉及生物学、神经科学等众多领域,仍有非常巨大的发展空间。深度学习就像一座宝矿,我们看到的或许只是冰山一角……

深度学习前的思考

听上去显得有点高端大气,但想要正确开启深度学习之门,最好的方法是先回答下面 4 个问题:

· 需要给深度网络模型输入什么样的数据?

· 想要从深度网络模型中提取什么样类型的数据?

· 选择哪种深度网络模型更加适用于手头上的数据?

· 根据这个深度网络模型我们希望从新的数据得到一个什么样的结果?

第一个问题是给模型输入什么样的数据,回答这个问题的时候我们就大概知道应该选择什么样的数据作为样本,样本的形式是图片、文档,还是语音。明确了要从模型中提取什么类型的数据体后,我们就会更加清晰地定义网络模型的损失函数。

第三个问题可以让我们进一步理清脉络,将问题落实到神经网络的细节中,例如卷积神经网络 CNN 中大概是用多少层的网络,循环神经网络 RNN 中应该定义多少层循环和时间步等。最后一个问题将更加有利于我们把深度学习的算法与模型结合到工程项目当中,真正帮助我们解决实际问题。

如果我们能够很好地回答上述这 4 个问题,表明我们对所遇到的问题有了充分的理解和分析,也就能够针对特定的任务(数据和场景)去寻找到合适的工作流程或者工作方式,快速建立属于自己的深度学习模型了!

《深度学习原理与实践》

陈仲铭,彭凌西 著

本书系统全面、循序渐进地介绍了深度学习的各方面知识,包括技术经验、使用技巧和实践案例。本书详细介绍了目前深度学习相关的常用网络模型(ANN、DNN、CNN、RNN),以及不同网络模型的算法原理和核心思想。本书利用大量的实例代码对网络模型进行了分析,这些案例能够加深读者对网络模型的认识。

此外,本书还提供完整的进阶内容和对应案例,让读者全面深入地了解深度学习的知识和技巧,达到学以致用的目的。