![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDo3xzbBsrtPd7tI8DC9libSsSIbIYa07h1ULCY0R5VplIZUzewVGcc5A/640?wx_fmt=png)
为什么要学习深度学习?
Andrew Ng(吴恩达)曾经用过的一个比喻,他把深度学习比喻成一个火箭。这个火箭有一个最重要的部分,就是它的引擎,引擎的核心是神经网络。火箭除了引擎之外还需要有燃料,这个燃料是大数据。
以往我们谈到大数据的时候,更多是强调存储和管理数据的能力,但是这些方法和工具更多是对于以往历史数据的统计、汇总。而对于今后未知的东西,这些传统的方法并不能够帮助我们可以从大数据中得出预测的结论。
如果考虑到神经网络和大数据结合,我们才可能看清楚大数据真正的价值和意义。Andrew Ng就曾经说过“我们相信(神经网络代表的深度学习)是让我们获得最接近于人工智能的捷径”。这就是我们要学习深度学习的一个最重要的原因。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDwMCYml5oJCiaJl9OGjHnuiaGfBgXqibHl1ibXtgmvDFoYqB6X2ia1QlOcWQ/640?wx_fmt=png)
其次,随着我们进行数据处理以及运算能力的不断提升,深度学习所代表的人工智能技术和传统意义上人工智能技术比较起来,在性能上有了突飞猛进的发展。这主要得益于在过去几十间计算机和相关产业不断发展带来的成果。在人工智能的领域,性能是我们选择深度学习另一个重要的原因。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDibLcrbx7MRv6VNQ7wfwPlsIhK4KWsbngQ9U9E3LsoeSTje0ECGibZsKQ/640?wx_fmt=png)
神经网络快速入门
需要掌握什么样的知识才能进入到这个领域?这里面最重要的关键技术就是“神经网络”。
神经网络如果放到简单概念上,可以理解成帮助我们实现一个分类器。对于绝大多数人工智能需求其实都可以简化成分类需求。更准确的描述就是绝大多数与智能有关的问题,都可以归结为一个在多维空间进行模式分类的问题。
例如,识别一封邮件,可以告诉我们这是垃圾邮件或者是正常的邮件;或者进行疾病诊断,将检查和报告输入进去实现疾病的判断。所以说,分类器就是神经网络最重要的应用场景。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDDjF71FrWKC5Gd0TfTVrjeo478790tmiaMdoSyf6lAXxGNAJPaYDZI6g/640?wx_fmt=png)
利用神经网络构建分类器,这个神经网络的结构是怎样的?
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDibLsricRjrgL3fM69ykDWr1ic7d5uz8lMvMxviaibNvDTDBroibMTb7xWFtQ/640?wx_fmt=png)
神经网络本质上就是一种“有向图”。图上的每个节点借用了生物学的术语就有了一个新的名词 – “神经元”。连接神经元的具有指向性的连线(有向弧)则被看作是“神经”。这个图上神经元并不是最重要的,最重要的是连接神经元的神经。每个神经部分有指向性,每一个神经元会指向下一层的节点。节点是分层的,每个节点指向上一层节点。同层节点没有连接,并且不能越过上一层节点。每个弧上有一个值,我们通常称之为“权重”。通过权重就可以有一个公式计算出它们所指的节点的值。这个权重值是多少?我们是通过训练得出结果。它们的初始赋值往往通过随机数开始,然后训练得到的最逼近真实值的结果作为模型,并可以被反复使用。这个结果就是我们说的训练过的分类器。
节点分成输入节点和输出节点,中间称为隐层。简单来说,我们有数据输入项,中间不同的多个层次的神经网络层次,就是我们说的隐层。之所以在这样称呼,因为对我们来讲这些层次是不可见的。输出结果也被称作输出节点,输出节点是有限的数量,输入节点也是有限数量,隐层是我们可以设计的模型部分,这就是最简单的神经网络概念。
简单来说,神经网络并不神秘,它就是有像图,利用图的处理能力帮助我们对特征的提取和学习的过程。有了计算、数据、模型这三点,就可以实现一个深度学习的系统。
程序员需要的工具箱
对于程序员来说,掌握理论知识是为了更好的编程实践。那就让我们我们来看看,对于程序员来说,着手深度学习的实践需要准备什么样的工具。
硬件
常用的神经网络硬件加速器有四种,对于普通程序员来说,现实中普遍采用的计算资源就还是CPU以及GPU的模式,其中GPU是最热门的领域。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDzkI4Ms6oVKHvWoB2o7vxnGCBQyUdLpcJjKqhBkiaby0koOQXmmAm0vQ/640?wx_fmt=png)
为什么是GPU?与CPU处理能力做一个对比,虽然CPU的主频要远远高过GPU的主频,例如目前GPU在主频在0.5GHz到1.4gHz,处理单元达到3584个;而且最常见的CPU,比如Intel的处理器,大约只有20几个处理单元。这种差别是仅仅在处理单元的数量上就已经存在了巨大的差别。所以深度学习具备大量处理能力计算要求的情况下,GPU无疑具有非常强大的优势。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZAND9w1r5kGdlwFeDeNibGDTB9TRXGVJrr5a0QXbichD51ufvH1rRRoZBEKw/640?wx_fmt=png)
对于程序员来讲,我们也应该了解到GPU天生的不足。
第一,这种技术需要绑定特定的硬件、对编程语言的有一定的限制。第二,在GPU领域不同厂商提供了不兼容的框架,应用的算法需要针对特定的硬件进行开发、完善。第三,目前GPU是通过PCIe外部配件的方式和计算机集成在一起。PCIe 3.0 频宽不过7.877 Gbit/s,这个频宽的瓶颈对于性能而言就是一个很大的制约。最后,就是有限的内存容量的限制。
AWS 发布了一款深度学习的EC2实例类型,叫做p2。这个实例的类型使用了NVIDIA 的 K80的GPU,包括三种不同规格,第一种2xlarge,第二种是8xlarge,第三种是16xlarge。以p2.16xlarge为例,提供了16块K80 GPU ,GPU 显存达到了192G,并行处理单元的数量达到了惊人的39,936个。当你在考虑去开发一个应用、去着手进行深度学习尝试的时候,可以试试这种方式,能很轻松的帮助你计算资源以及硬件上各种麻烦的问题。
软件
深度学习除了硬件的基础环境外,程序员会更关心与开发相关的软件资源。这里我罗列了一些自己曾经使用过的软件框架和工具。
l Scikit-learn是最为流行的一个Python机器学习库。它具有如下吸引人的特点:简单、高效且异常丰富的数据挖掘/数据分析算法实现;基于NumPy、SciPy以及matplotlib,从数据探索性分析,数据可视化到算法实现,整个过程一体化实现;开源,有非常丰富的学习文档。
Caffe专注在卷及神经网络以及图像处理。不过Caffe已经很久没有更新过了
Theano 是一个非常灵活的Python 机器学习的库。在研究领域非常流行,使用上非常方便易于定义复杂的模型。Tensorflow 的API 非常类似于Theano。
Jupyter notebook 是一个很强大的基于ipython的python代码编辑器,部署在网页上,可以非常方便的进行交互式的处理,很适合进行算法研究合数据处理。
Torch 是一个非常出色的机器学习的库。它是由一个比较小众的lua语言实现的。但是因为LuaJIT 的使用,程序的效率非常出色。Facebook在人工智能领域主打Torch,甚至现在推出了自己的升级版框架Torchnet。
深度学习的框架非常之多,今天向各位程序员重点介绍的是将是TensorFlow。这是2015年谷歌推出的开源的面向机器学习的开发框架,这也是Google第二代的深度学习的框架。很多公司都使用了TensorFlow开发了很多有意思的应用,效果很好。
TensorFlow可以应用于回归模型、神经网络以深度学习这几个领域。
在深度学习方面它集成了分布式表示、卷积神经网络(CNN)、递归神经网络(RNN) 以及长短期记忆人工神经网络(Long-Short Term Memory, LSTM)。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDG0ZCxyhprdvNdFu4Vq3aHcLNwo9KeXWYCzdGlq5ImtoLovuTlCm0gA/640?wx_fmt=png)
使用 TensorFlow, 作为程序员必须明白 TensorFlow这样几个基础概念:它使用图 (Graph) 来表示计算任务;在被称之为 会话 (Session) 的上下文 (context) 中执行图;使用 Tensor 表示数据;通过 变量 (Variable) 维护状态;使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据。
一句话总结就是,TensorFlow 就是有状态图的数据流图计算环境,每个节点就是在做数据操作,然后提供依赖性和指向性,提供完整数据流。
常规的Tensorsorflow的安装很简单,一条命令足矣:
$pip3install—upgrade
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-cp35m-linux_x86_64.whl
如果想评估一下或者简单学习一下,还可以通过Docker进行安装,安装的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多优点。首先,目前为止,深度学习的开发框架里面TensorFlow的文档做的最好,对程序员学习而言是非常好的一点。第二,TensorFlow有丰富的参考实例,作为参考学习起来非常容易。第三,开发者社区活跃,在任何一个深度学习的社区里,都有大量关于TensorFlow的讨论。第四,谷歌的支持力度非常大,从2015年到现在升级速度非常快,这是其他开源框架远远达不到的结果。
在这里给大家展示一个应用Tensorflow 的例子。这个例子的代码托管在这个网址上 :
https://github.com/anishathalye/neural-style
白俄罗斯的现代印象派艺术家Leonid Afremov善于用浓墨重彩来表现都市和风景题材,尤其是其雨景系列作品。他习惯用大色块的铺陈来营造光影效果,对反光物体和环境色的把握非常精准。于是我就找到了一张上海东方明珠电视塔的一张摄影作品,我希望通过Tensorflow 去学习一下Leonid Afremov 的绘画风格,并将这张东方明珠的照片处理成那种光影色彩丰富的作品风格。利用Tensorflow 以及上面提到的那个项目的代码,在一个AWS 的p2类型的实例上进行了一个一千次的迭代,于是就得到了下图这样的处理结果。
![](https://mmbiz.qpic.cn/mmbiz_png/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDMCxbaIiatnotsCyOjQ8ou5KyhNfvd65mZ7AkTia3GOjRfWEl5ptuIz9g/640?wx_fmt=png)
这个处理的代码只有350行里,模型使用了一个成名于2014年ImageNet比赛中的明星 VGG。这个模型非常好,特点就是“go depper”。
TensorFlow 做出这样的作品,并不仅仅作为娱乐供大家一笑,还可以做更多有意思的事情。将刚才的处理能力推广到视频当中,就可以看到下图这样的效果,用梵高著名的作品“星月夜”的风格就加工成了这样新的视频风格。
可以想象一下,如果这种处理能力在更多领域得以应用,它会产生什么样的神奇的结果?前景是美好的,让我们有无限遐想。事实上我们目前所从事的很多领域的应用开发都可以通过使用神经网络和深度学习来加以改变。对于深度学习而言,掌握它并不是难事。每一个程序员都可以很容易的掌握这种技术,利用所具备的资源,让我们很快成为深度学习的程序开发人员。
作者
费良宏
亚马逊AWS首席云计算技术顾问,拥有超过20年在IT行业以及软件开发领域的工作经验。
Amazon Web Services(亚马逊AWS)一直是世界上服务丰富、应用广泛的云服务平台。通过位于美国、澳大利亚、巴西、加拿大、中国、法国、德国、印度、爱尔兰、日本、韩国、新加坡、瑞典和英国等22个地理区域、69个可用区(AZ),AWS向客户提供超过165项功能全面的服务,涵盖计算、存储、数据库、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实等方面。
![](https://mmbiz.qpic.cn/mmbiz_gif/xP7JY2OM4TSJ101RicD2c1xezxAaOZANDJ6qwwaIQDbL4XXnA4XVfBnVB3qWCqgibGqOe3f9lic4ulrq9sy3tYqqA/640?wx_fmt=gif)
看过这篇,还想了解更多深度学习的知识?
现在,w3cschool上已上线AWS云计算课程,完全免费。涵盖云计算、云存储、数据库、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实等热门内容。
通过学习此系列课程,实现从AWS产品基础知识入门到产品使用案例实操能力提升,从“零”开始,开启你在AWS上的云计算之旅,掌握前沿云计算技术。
![](https://mmbiz.qpic.cn/mmbiz_gif/xP7JY2OM4TRt5AagPx5WPRgHianZ1hjy9JtJk0ZnqMK35vkZQXGF8buhOu0vanGXyP4gOrm6h625gjRvrMN5v3w/640?wx_fmt=gif)
点击下方“阅读原文”马上开始学习