其他
费良宏 | 程序员的深度学习入门指南
本文根据费良宏在2016QCon全球软件开发大会(上海)上的演讲整理而成。本文超长干货,推荐先收藏本文,然后细细品读!
在这样的背景之下,我今天的的话题可以归纳成三点:第一,我们为什么要学习深度学习;第二,深度学习最核心的关键概念就是神经网络,那么究竟什么是神经网络;第三,作为程序员,当我们想要成为深度学习开发者的时候,我们需要具备怎样的工具箱,以及从哪里着手进行开发。
请大家注意,这个深度学习的模型只经过了短短几个月、3千英里的训练。如果我们不断完善这种模型的话,这种处理能力将会变得何等的强大。这个场景里面最重要的技术无疑就是深度学习。我们可以得出一个结论:深度学习可以为我们提供强大的能力,如果程序员拥有了这个技术的话,无异于会让每个程序员如虎添翼。
利用神经网络构建分类器,这个神经网络的结构是怎样的?
Caffe专注在卷及神经网络以及图像处理。不过Caffe已经很久没有更新过了。这个框架的一个主要的开发者贾扬清也在今年跳槽去了Google。也许曾经的霸主地位要让位给他人了。
Theano是一个非常灵活的Python机器学习的库。在研究领域非常流行,使用上非常方便易于定义复杂的模型。Tensorflow的API非常类似于Theano。我在今年北京的QCon大会上也分享过关于Theano的话题。Jupyter Notebook是一个很强大的基于IPython的Python代码编辑器,部署在网页上,可以非常方便的进行交互式的处理,很适合进行算法研究和数据处理。 Torch是一个非常出色的机器学习的库。它是由一个比较小众的Lua语言实现的。但是因为LuaJIT的使用,程序的效率非常出色。Facebook在人工智能领域主打Torch,甚至现在推出了自己的升级版框架Torchnet。 深度学习的框架非常之多,是不是有一种乱花渐欲迷人眼的感觉?我今天向各位程序员重点介绍的是将是TensorFlow。这是2015年谷歌推出的、开源的面向机器学习的开发框架,这也是Google第二代的深度学习的框架。很多公司都使用了TensorFlow开发了很多有意思的应用,效果很好。 用TensorFlow可以做什么?答案是它可以应用于回归模型、神经网络以深度学习这几个领域。在深度学习方面它集成了分布式表示、卷积神经网络(CNN)、递归神经网络(RNN)以及长短期记忆人工神经网络(Long-Short Term Memory,LSTM)。关于Tensorflow首先要理解的概念就是Tensor。在辞典中对于这个词的定义是张量,是一个可用来表示在一些向量、标量和其他张量之间的线性关系的多线性函数。实际上这个表述很难理解,用我自己的语言解释Tensor就是“N维数组”而已。
白俄罗斯的现代印象派艺术家Leonid Afremov善于用浓墨重彩来表现都市和风景题材,尤其是其雨景系列作品。他习惯用大色块的铺陈来营造光影效果,对反光物体和环境色的把握非常精准。于是我就找到了一张上海东方明珠电视塔的一张摄影作品,我希望通过Tensorflow去学习一下Leonid Afremov的绘画风格,并将这张东方明珠的照片处理成那种光影色彩丰富的作品风格。利用Tensorflow以及上面提到的那个项目的代码,在一个AWS的p2类型的实例上进行了一个一千次的迭代,于是就得到了下图这样的处理结果。