《TensorFlow技术解析与实战》第1章 人工智能概述

第1章 人工智能概述

有人说,人工智能在世界范围的流行,是因为那盘围棋。2016年3月,谷歌公司的AlphaGo向韩国棋院围棋九段大师李世石发起挑战,而这棋局走法的可能性有361!种,最终AlphaGo战胜了这场“棋局数比可见宇宙中的原子数还多”的智力游戏。2015年11月9日(在距这场比赛前4个月),谷歌公司开源了它的第二代深度学习系统TensorFlow,也就是AlphaGo的基础程序。

什么是人工智能(artificial intelligence,AI)?要了解这个问题,我们先来看看人工智能的几个应用。

1.微软小冰

相信很多朋友手机里都有关注“微软小冰”的公众号,这是微软(亚洲)互联网工程院的一款人工智能伴侣虚拟机器人,跟它聊天时你会发现,小冰有时回答得非常切中你的心意,而有时逻辑上表达却有点儿对不上上下文,所以你觉得它时而回答得不错像人,时而又一眼看穿它是个机器人。这种能否判断对方究竟是人还是机器人的思维实验,叫作“图灵测试”。

图灵测试是计算机科学之父英国人艾伦·图灵提出的,这是一种测试机器是否具备人类智能的方法。图灵设计了一种“模仿游戏”:远处的人在一段规定的时间内,根据两个实体——电脑和人类对他提出的各种问题来判断对方是人类还是电脑。[1]具体过程如图1-1所示。C向A和B提出问题,由C来判断对方是人类还是电脑。通过一系列这样的测试,从电脑被误判断为人的概率就可以测出电脑的智能程度,电脑越被误判成人,说明智能程度就越高。

《TensorFlow技术解析与实战》第1章 人工智能概述_第1张图片

图1-1

这种情感对话能力就是人工智能的一个方向。而现在微软小冰更是可以通过文本、图像、视频和语音与人类展开交流,逐渐具备能看、能听和能说的各种人工智能感官,并且能够和人类进行双向同步交互。

2.人脸识别

现在许多电脑开机密码、支付宝的刷脸支付、客流的闸机通行都有采用人脸识别技术。目前市面上也有许多人脸识别考勤机。很多公司已经采用了人脸闸机打卡签到技术,当有人刷脸打卡签到时,识别出这个人的面部特征,考勤机会将其与公司的员工信息进行比对,完成身份识别,确认后,便可开闸放行。

更进一步讲,人脸识别中还可以识别出人物的年龄、性别、是否佩戴眼镜、是否有笑容、情绪欢乐或悲伤,以及眼睛、鼻子、嘴等关键部位,这就是人脸关键点检测。图1-2就是人脸关键点检测的一个示例。

《TensorFlow技术解析与实战》第1章 人工智能概述_第2张图片

图1-2

国内有一些公司在人脸识别上已经达到了先进水平,如云从科技、旷视科技、商汤科技等。旷视科技的Face++有目前世界一流的人脸追踪、识别、分析等服务应用,面向开发者的云平台及API、SDK,已经可以直接调用。

以上是人工智能应用的两个例子。百度百科上给出的人工智能的解释是:“它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。”[2]

简而言之,人工智能就是研究用计算机来实现人类的智能,例如,去模仿人类的知觉、推理、学习能力等,从而让计算机能够像人一样思考和行动,有图像识别(机器识别出猫猫狗狗)、人机对话(机器感知到人类的语义和情感,并给出反馈)、围棋的人机对弈(AlphaGo、Master等让机器自己思考去下棋)等。

国际上的谷歌、苹果、亚马逊、微软等巨大公司都在“两条腿走路”,一方面在做研发项目,如“谷歌大脑”(Google Brain),另一方面同时发力智能家居,如“Google Home智能音箱”,希望把设备当成人来交流。国内的阿里、腾讯、百度、搜狗、地平线等公司以及很多不同领域的创业公司也都在积累的大量数据上,开始尝试训练出高效的模型,不断优化业务指数。

那么,机器是如何实现人类的智力的呢?其实,机器主要是通过大量的训练数据进行训练,程序不断地进行自我学习和修正来训练出一个模型,而模型的本质就是一堆参数,用上千万、上亿个参数来描述业务的特点,如“人脸”“房屋地段价格”“用户画像”的特点,从而接近人类智力。这个过程一般采用的是机器学习以及机器学习的子集——深度学习(deep learning),也就是结合深度神经网络的方法来训练。所以说,深度学习方法是能够迅速实现人工智能很有效的工具。

《TensorFlow技术解析与实战》第1章 人工智能概述_第3张图片 

AlphaGo的原理 

20年前,IBM的“深蓝”计算机打败人类象棋高手的情景仿佛还历历在目。20年后,人工智能挑战最难的棋类——围棋棋局也成功了。那么AlphaGo是如何下棋的呢?我们知道,传统计算机的下棋方法,一般采取贪婪算法,用Alpha-Beta修剪法配合Min-Max算法。而AlphaGo采用了蒙特卡洛树搜索法(Monte Carlo tree search,MCTS)和深度卷积神经网络(deep convolutional neural network,DCNN)相结合。模型中涉及的主要网络及作用如下。

● 估值网络(value network,也称盘面评估函数):计算出盘面的分数。

● 策略网络(policy network):计算对于下每一个棋子的概率和胜率。它评估对手和自己可能下的位置,对可能的位置进行评估和搜寻。

训练模型的主要过程分为以下4步。

(1)采用分类的方法得到直接策略。

(2)直接策略对历史棋局资料库进行神经网络学习,得到习得策略。

(3)采用强化学习的方法进行自我对局来得到改良策略。

(4)用回归的方法整体统计后得到估值网络。

这里的神经网络部分都采用的是深度卷积神经网络,在自我对局的部分采用的是蒙特卡洛树状搜寻法(MCTS)。

更详细的论文见谷歌公司发表在《自然》(Nature)上的论文《Mastering the game of Go with deep neural networks and tree search》。

深度学习,顾名思义,需要从“深度”和“学习”两方面来谈。

1.深度

深度学习的前身是人工神经网络(artificial neural network,ANN),它的基本特点就是试图模仿人脑的神经元之间传递和处理信息的模式。神经网络这个词本身可以指生物神经网络和人工神经网络。在机器学习中,我们说的神经网络一般就是指人工神经网络。

图1-3给出的是一个最基本的人工神经网络的3层模型。

《TensorFlow技术解析与实战》第1章 人工智能概述_第4张图片

图1-3

人工神经网络由各个层组成,输入层(input layer)输入训练数据,在输出层(output layer)输出计算结果,中间有1个或多个隐藏层(hidden layer),使输入数据向前传播到输出层。“深度”一词没有具体的特指,一般就是要求隐藏层很多(一般指5层、10层、几百层甚至几千层)。

人工神经网络的构想源自对人类大脑的理解——神经元的彼此联系。二者也有不同之处,人类大脑的神经元是按照特定的物理距离连接的,而人工神经网络有独立的层和连接,还有数据传播方向。

例如,我们拿一张图片,对它做一些预处理,如图像居中、灰度调整、梯度锐化、去除噪声、倾斜度调整等,就可以输入到神经网络的第一层。然后,第一层会自己提取这个图像的特征,把有用的特征向下传递,直到最后一层,然后输出结果。这就是一次前向传播(forword propagation)。

最后一层的输出要给出一个结论,例如,在分类问题中,要告诉我们到底输入的图像是哪个类别,一般它会给出一个“概率向量”。如图1-4所示,列出了这只猫所属品种的前5个概率值。

《TensorFlow技术解析与实战》第1章 人工智能概述_第5张图片

图1-4

人工神经网络的每一层由大量的节点(神经元)组成,层与层之间有大量连接,但是层内部的神经元一般相互独立。深度学习的目的就是要利用已知的数据学习一套模型,使系统在遇见未知的数据时也能够做出预测。这个过程需要神经元具备以下两个特性。

(1)激活函数(activation function):这个函数一般是非线性函数,也就是每个神经元通过这个函数将原有的来自其他神经元的输入做一个非线性变化,输出给下一层神经元。激活函数实现的非线性能力是前向传播(forward propagation)很重要的一部分。

(2)成本函数(cost function):用来定量评估在特定输入值下,计算出来的输出结果距离这个输入值的真实值有多远,然后不断调整每一层的权重参数,使最后的损失值最小。这就是完成了一次反向传播(backward propagation)。损失值越小,结果就越可靠。

神经网络算法的核心就是计算、连接、评估、纠错和训练,而深度学习的深度就在于通过不断增加中间隐藏层数和神经元数量,让神经网络变得又深又宽,让系统运行大量数据,训练它。

2.学习

什么是“学习”?有一些成语可以概括:举一反三、闻一知十、触类旁通、问牛知马、融会贯通等。计算机的学习和人类的学习类似,我们平时大量做题(训练数据),不断地经过阶段性考试(验证数据)的检验,用这些知识和解题方法(模型)最终走向最终(测试数据)的考场。

最简单也最普遍的一类机器学习算法就是分类(classification)。对于分类,输入的训练数据有特征(feature),有标记(label),在学习中就是找出特征和标记间的映射关系(mapping),通过标记来不断纠正学习中的偏差,使学习的预测率不断提高。这种训练数据都有标记的学习,称为有监督学习(supervised learning)。

无监督学习(unsupervised learning)则看起来非常困难。无监督学习的目的是让计算机自己去学习怎样做一些事情。因此,所有数据只有特征而没有标记。

无监督学习一般有两种思路:一是在训练时不为其指定明确的分类,但是这些数据会呈现出聚群的结构,彼此相似的类型会聚集在一起。计算机通过把这些没有标记的数据分成一个个组合,就是聚类(clustering);二是在成功时采用某种形式的激励制度,即强化学习(reinforcement learning,RL)。对强化学习来说,它虽然没有标记,但有一个延迟奖赏与训练相关,通过学习过程中的激励函数获得某种从状态到行动的映射。强化学习一般用在游戏、下棋(如前面提到的AlphaGo)等需要连续决策的领域。(6.7.1节会讲解强化学习的应用。)

有人可能会想,难道就只有有监督学习和无监督学习这两种非黑即白的关系吗?二者的中间地带就是半监督学习(semi-supervised learning)。对于半监督学习,其训练数据一部分有标记,另一部分没有标记,而没标记数据的数量常常极大于有标记数据的数量(这也符合现实,大部分数据没有标记,标记数据的成本很大)。它的基本规律是:数据的分布必然不是完全随机的,通过结合有标记数据的局部特征,以及大量没标记数据的整体分布,可以得到比较好的分类结果。

因此,“学习”家族的整体构造如图1-5所示[3]。

《TensorFlow技术解析与实战》第1章 人工智能概述_第6张图片

图1-5

关于有监督学习和无监督学习在实战中的应用,会在本书“实战篇”中介绍。

要想入门深度学习,需要两个工具,即算法知识和大量的数据,外加一台计算机,如果有GPU就更好了,但是因为许多入门初学者的条件有限,没有GPU也可以,本书的许多讲解都是基于Mac笔记本完成的。

我把深度学习的入门过程整理成图1-6所示的7个步骤。

《TensorFlow技术解析与实战》第1章 人工智能概述_第7张图片

图1-6

下面就来详细介绍一下这7个步骤。

1.学习或者回忆一些数学知识

因为计算机能做的就只是计算,所以人工智能更多地来说还是数学问题[4]。我们的目标是训练出一个模型,用这个模型去进行一系列的预测。于是,我们将训练过程涉及的过程抽象成数学函数:首先,需要定义一个网络结构,相当于定义一种线性非线性函数;接着,设定一个优化目标,也就是定义一种损失函数(loss function)。

而训练的过程,就是求解最优解及次优解的过程。在这个过程中,我们需要掌握基本的概率统计、高等数学、线性代数等知识,如果学过就最好,没学过也没关系,仅仅知道原理和过程即可,有兴趣的读者可以涉猎一些推导证明。

2.掌握经典机器学习理论与基本算法

这些基本算法包括支持向量机、逻辑回归、决策树、朴素贝叶斯分类器、随机森林、聚类算法、协同过滤、关联性分析、人工神经网络和BP算法、PCA、过拟合与正则化等。[5]

在本书“实战篇”的第8章到第13章的例子中也有贯穿这些算法知识,保证读者可以用它写出一个小的TensorFlow程序。

3.掌握一种编程工具(语言)

Python语言是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python是很多新入门的程序员的入门编程语言,也是很多老程序员后来必须掌握的编程语言。我们需要重点掌握使用线性代数库和矩阵的操作,尤其是Numpy、Pandas第三方库,也要多试试机器学习的库,如sklearn,做一些SVM及逻辑回归的练习。这对直接上手写TensorFlow程序大有裨益。

有些工业及学术领域的读者还可能擅长MATLAB或R,其实现算法的思想和Python也很类似。

同时考虑到许多读者是使用C++、Java、Go语言的,TensorFlow还提供了和Python“平行语料库”的接口。虽然本书是主要是基于Python讲解的,对于其他语言的原理和应用API也都非常类似,读者把基础掌握后,只需要花很短的时间就能使用自己擅长的语言开发。另外对于Java语言的同学,本书第18章会讲解TensorFlowOnSpark,第19章会讲到TensorFlow的移动端开发。

4.研读经典论文,关注最新动态和研究成果

一些经典论文是必读的。例如,要做手写数字识别,若采用LeNet,要先阅读一下LeNet的学术论文;要做物体目标检测的训练,若选定MSCNN框架,可以先读MSCNN相关的论文。那么,论文从哪里找呢?那么多论文应该读哪篇呢?

下面以GoogleNet的TensorFlow实现为例。在GitHub[6]上,一般在开头的描述中就会说明这个模型所依据的论文,如图1-7所示。

顺着这篇论文阅读,可以大致了解这个网络的实现原理,对迅速上手应用有很大的作用。同时,我在第6章也会对LeNet、AlexNet、ResNet这几个常见的网络进行讲解,帮助读者举一反三。

《TensorFlow技术解析与实战》第1章 人工智能概述_第8张图片

图1-7

很多做模式识别的工作者之所以厉害,是因为他们有过很多、很深的论文积累,对模型的设计有很独到的见解,而他们可能甚至一行代码也不会写,而工程(写代码)能力在工作中很容易训练。许多工程方向的软件工程师,工作模式常常在实现业务逻辑和设计架构系统上,编码能力很强,但却缺少论文积累。同时具有这两种能力的人,正是硅谷一些企业目前青睐的人才。

读者平时还可以阅读一些博客、笔记,以及微信公众号、微博新媒体资讯等,往往一些很流行的新训练方法和模型会很快在这些媒体上发酵,其训练神经网络采用的一些方法可能有很大的启发性。

5.自己动手训练神经网络

接着,就是要选择一个开源的深度学习框架。选择框架时主要考虑哪种框架用的人多。人气旺后,遇到问题很容易找到答案;GitHub上关于这个框架的项目和演示会非常多;相关的论文也会层出不穷;在各个QQ群和微信群的活跃度会高;杂志、公众号、微博关注的人也会很多;行业交流和技术峰会讨论的话题也多;也能享受到国内外研究信息成果的同步。

目前这个阶段,TensorFlow因为背靠谷歌公司这座靠山,再加上拥有庞大的开发者群体,而且采用了称为“可执行的伪代码”的Python语言,更新和发版速度着实非常快。目前TensorFlow已经升级到1.1版,在性能方面也有大幅度提高,而且新出现的Debugger、Serving、XLA特性也是其他框架所不及的。此外,一些外围的第三方库(如Keras、TFLearn)也基于它实现了很多成果,并且Keras还得到TensorFlow官方的支持。TensorFlow支持的上层语言也在逐渐增多,对于不同工程背景的人转入的门槛正在降低。

在GitHub[7]上有一个关于各种框架的比较,从建模能力、接口、模型部署、性能、架构、生态系统、跨平台等7个方面进行比较,TensorFlow也很占综合优势。截至2017年1月,TensorFlow的star数已经超过了其他所有框架的总和,如图1-8所示。

因此,从目前来看,投身TensorFlow是一个非常好的选择,掌握TensorFlow在找工作时是一个非常大的加分项。

《TensorFlow技术解析与实战》第1章 人工智能概述_第9张图片

图1-8

接下来就是找一个深度神经网络,目前的研究方向主要集中在视觉和语音两个领域。初学者最好从计算机视觉入手,因为它不像语音等领域需要那么多的领域知识,结果也比较直观。例如,用各种网络模型来训练手写数字(MNIST)及图像分类(CIFAR)的数据集。

6.深入感兴趣或者工作相关领域

人工智能目前的应用领域很多,主要是计算机视觉和自然语言处理,以及各种预测等。对于计算机视觉,可以做图像分类、目标检测、视频中的目标检测等;对于自然语言处理,可以做语音识别、语音合成、对话系统、机器翻译、文章摘要、情感分析等,还可以结合图像、视频和语音,一起发挥价值。

更可以深入某一个行业领域。例如,深入医学行业领域,做医学影像的识别;深入淘宝的穿衣领域,做衣服搭配或衣服款型的识别;深入保险业、通信业的客服领域,做对话机器人的智能问答系统;深入智能家居领域,做人机的自然语言交互;等等。

7.在工作中遇到问题,重复4~6步

在训练中,准确率、坏案例(bad case)、识别速度等都是可能遇到的瓶颈。训练好的模型也不是一成不变的,需要不断优化,也需要结合具体行业领域和业务进行创新,这时候就要结合最新的科研成果,调整模型,更改模型参数,一步步更好地贴近业务需求。

想想,在机器学习流行之前,我们是如何做与语音和图像相关的识别的?大多数是基于规则的系统。例如,做自然语言处理,需要很多语言学的知识;再如,1997年的IBM的深蓝计算机对战国际象棋,也需要很多象棋的知识。

当以统计方法为核心的机器学习方法成为主流后,我们需要的领域知识就相对少了。重要的是做特征工程(feature engineering),然后调一些参数,根据一些领域的经验来不断提取特征,特征的好坏往往就直接决定了模型的好坏。这种方法的一大缺点是,对文字等抽象领域,特征还相对容易提取,而对语音这种一维时域信号和图像这种二维空域信号等领域,提取特征就相对困难。

深度学习的革命性在于,它不需要我们过多地提取特征,在神经网络的每一层中,计算机都可以自动学习出特征。为了实现深度学习中运用的神经网络,TensorFlow这样的深度学习开源工具就应运而生。我们可以使用它来搭建自己的神经网络。这就有点儿类似于PHP开发当中的CodeIgniter框架,Java开发当中的SSH三大框架,Python开发当中的Tornado、Django框架,C++当中的MFC、ACE框架。框架的主要目的就是提供一个工具箱,使开发时能够简化代码,呈现出来的模型尽可能简洁易懂。

首先,TensorFlow的一大亮点是支持异构设备分布式计算(heterogeneous distributed computing)。

何为异构?信息技术当中的异构是指包含不同的成分,有异构网络(如互联网,不同厂家的硬件软件产品组成统一网络且互相通信)、异构数据库(多个数据库系统的集合,可以实现数据的共享和透明访问[8])。这里的异构设备是指使用CPU、GPU等核心进行有效地协同合作;与只依靠CPU相比,性能更高,功耗更低。

那何为分布式?分布式架构目的在于帮助我们调度和分配计算资源(甚至容错,如某个计算节点宕机或者太慢),使得上千万、上亿数据量的模型能够有效地利用机器资源进行训练。

图1-9给出的是开源框架TensorFlow的标志。

《TensorFlow技术解析与实战》第1章 人工智能概述_第10张图片

图1-9

TensorFlow支持卷积神经网络(convolutional neural network,CNN)和循环神经网络(recurrent neural network,RNN),以及RNN的一个特例长短期记忆网络(long short-term memory,LSTM),这些都是目前在计算机视觉、语音识别、自然语言处理方面最流行的深度神经网络模型。

下面参考《The Unreasonable Effectiveness of Recurrent Neural Networks》[9]这篇文章梳理了一个有效框架应该具有的功能。

  • Tensor库是对CPU/GPU透明的,并且实现了很多操作(如切片、数组或矩阵操作等)。这里的透明是指,在不同设备上如何运行,都是框架帮用户去实现的,用户只需要指定在哪个设备上进行哪种运算即可。
  • 有一个完全独立的代码库,用脚本语言(最理想的是Python)来操作Tensors,并且实现所有深度学习的内容,包括前向传播/反向传播、图形计算等。
  • 可以轻松地共享预训练模型(如Caffe的模型及TensorFlow中的slim模块)。
  • 没有编译过程。深度学习是朝着更大、更复杂的网络发展的,因此在复杂图算法中花费的时间会成倍增加。而且,进行编译的话会丢失可解释性和有效进行日志调试的能力。

在我看来,在目前的深度学习的研究领域主要有以下3类人群。

  • 学者。主要做深度学习的理论研究,研究如何设计一个“网络模型”,如何修改参数以及为什么这样修改效果会好。平时的工作主要是关注科研前沿和进行理论研究、模型实验等,对新技术、新理论很敏感。
  • 算法改进者。这些人为了把现有的网络模型能够适配自己的应用,达到更好的效果,会对模型做出一些改进,把一些新算法改进应用到现有模型中。这类人主要是做一些基础的应用服务,如基础的语音识别服务、基础的人脸识别服务,为其他上层应用方提供优良的模型。
  • 工业研究者。这类人群不会涉及太深的算法,主要掌握各种模型的网络结构和一些算法实现。他们更多地是阅读优秀论文,根据论文去复现成果,然后应用到自己所在的工业领域。这个层次的人也是现在深度学习研究的主流人群。

我相信本书的读者也大都是第二类和第三类人群,且以第三类人群居多。

而在工业界,TensorFlow将会比其他框架更具优势。工业界的目标是把模型落实到产品上,而产品的应用领域一般有两个:一是基于服务端的大数据服务,让用户直接体验到服务端强大的计算能力(谷歌云平台及谷歌搜索功能);二是直接面向终端用户的移动端(Android系统)以及一些智能产品的嵌入式。

坐拥Android的市场份额和影响力的谷歌公司,在这两个方向都很强大。此外,谷歌力推的模型压缩和8位低精度数据存储(详见第 19 章)不仅对训练系统本身有优化作用,在某种程度上也能使算法在移动设备上的部署获益,这些优化举措将会使存储需求和内存带宽要求降低,并且使性能得到提升,对移动设备的性能和功耗非常有利。

如果一个框架的用户生态好,用的人就会很多,而用的人多会让用户生态更繁荣,用的人也就会更多。这庞大的用户数就是TensorFlow框架的生命力。

截至2017年1月,与Caffe、Theano、Torch、MXNet等框架相比,TensorFlow在GitHub上Fork数和Star数都是最多的,如图1-10所示。

图1-10

图1-11展示了截至2017年2月,近些年几大机器学习框架的流行程度。

《TensorFlow技术解析与实战》第1章 人工智能概述_第11张图片

图1-11

在TensorFlow官方网站[10]上,着重介绍了TensorFlow的6大优势特性。

  • 高度的灵活性(deep flexibility)。TensorFlow是一个采用数据流图(data flow graph),用于数值计算的开源软件库。只要计算可以表示为一个数据流图,就可以使用TensorFlow,只需要构建图,书写计算的内部循环即可。因此,它并不是一个严格的“神经网络库”。用户也可以在TensorFlow上封装自己的“上层库”,如果发现没有自己想要的底层操作,用户也可以自己写C++代码来丰富。关于封装的“上层库”,TensorFlow现在有很多开源的上层库工具,极大地减少了重复代码量,在第7章中会详细介绍。
  • 真正的可移植性(true portability)。TensorFlow可以在CPU和GPU上运行,以及在台式机、服务器、移动端、云端服务器、Docker容器等各个终端运行。因此,当用户有一个新点子,就可以立即在笔记本上进行尝试。
  • 将科研和产品结合在一起(connect research and production)。过去如果将一个科研的机器学习想法应用到商业化的产品中,需要很多的代码重写工作。现在TensorFlow提供了一个快速试验的框架,可以尝试新算法,并训练出模型,大大提高了科研产出率。
  • 自动求微分(auto-differentiation)。求微分是基于梯度的机器学习算法的重要一步。使用TensorFlow后,只需要定义预测模型的结构和目标函数,将两者结合在一起后,添加相应的数据,TensorFlow就会自动完成计算微分操作。
  • 多语言支持(language options)。TensorFlow提供了Python、C++、Java接口来构建用户的程序,而核心部分是用C++实现的,如图1-12所示。第4章中会着重讲解TensorFlow的架构。用户也可以使用Jupyter Notebook[11]来书写笔记、代码,以及可视化每一步的特征映射(feature map)。用户也可以开发更多其他语言(如Go、Lua、R等)的接口。

《TensorFlow技术解析与实战》第1章 人工智能概述_第12张图片

图1-12

  • 最优化性能(maximize performance)。假如用户有一台32个CPU内核、4个GPU显卡的机器,如何将计算机的所有硬件计算资源全部发挥出来呢?TensorFlow给予线程、队列、分布式计算等支持,可以让用户将TensorFlow的数据流图上的不同计算元素分配到不同的设备上,最大化地利用硬件资源。关于线程和队列,将在4.9节中介绍;关于分布式,将在第14章介绍。

除了谷歌在自己的产品线上使用TensorFlow外,国内的京东、小米等公司,以及国外的Uber、eBay、Dropbox、Airbnb等公司,都在尝试使用TensorFlow。图1-13是摘自TensorFlow官方网站的日益壮大的公司墙。

《TensorFlow技术解析与实战》第1章 人工智能概述_第13张图片

图1-13

2016年4月,TensorFlow的0.8版本就支持了分布式、支持多GPU运算。2016年6月,TensorFlow的0.9版本改进了对移动设备的支持。2017年2月,TensorFlow的1.0正式版本中,增加了Java和Go的实验性API,以及专用编译器XLA和调试工具Debugger,还发布了tf.transform,专门用来数据预处理。并且还推出了“动态图计算”TensorFlow Fold,这是被评价为“第一次清晰地在设计理念上领先”[12]。

用户还可以使用谷歌公司的PaaS TensorFlow产品Cloud Machine Learning来做分布式训练。现在也已经有了完整的TensorFlow Model Zoo。

另外,TensorFlow出色的版本管理和细致的官方文档手册,以及很容易找到解答的繁荣的社区,应该能让用户用起来相当顺手。

截至2017年3月,用TensorFlow作为生产平台和科研基础研发已经越来越坚实可靠。

说到机器学习,不得不提到每年的一些挑战赛。近年来取得好成绩的队伍,常常是使用深度学习的方法的。正是这些赛事激励着全世界科学家不断采用更优化的方法提高算法结果的准确率,也引领着年度的深度学习探索方向。

ILSVRC(ImageNet Large Scale Visual Recognition Challenge,大规模视觉识别挑战赛)是用来大规模评估对象检测和图像识别的算法的挑战赛。从2010年开始,至2016年已举办7届。ImageNet是目前世界上最大的图像识别数据库,拥有超过1500万张有标记的高分辨率图像的数据集,这些图像分属于大概22 000个类别。ILSVRC使用ImageNet的一个子集,分为1 000种类别,每种类别中都有大约1 000张图像。总之,大约有120万张训练图像,5万张验证图像和15万张测试图像。[13]图1-14所示为ImageNet的官方网站。

《TensorFlow技术解析与实战》第1章 人工智能概述_第14张图片

图1-14

ILSVRC每年邀请谷歌、微软、百度等IT企业使用ImageNet,测试他们图片分类系统运行情况。过去几年中,该系统的图像识别功能大大提高,出错率仅为约5%(比人眼还低,人眼的识别错误率大概在5.1%[14])。在2015年,ILSVRC的错误率已经降低到了3.57%[15],采用152层的ResNet获得了2015年分类任务的第一名。ILSVRC历年的Top-5错误率如图1-15所示。

在ImageNet上,习惯性地报告两个错误率:Top-1和Top-5。Top-1错误率是指,预测输出的概率最高的类别,是否和人工标记的类别一致,如果不一致,此时的概率。Top-5错误率是指,预测输出的概率最高的前5个类别当中,有没有和人工标记的类别一致,当5个都不一致时的概率。例如在图片分类任务下,对一张图片进行预测,输出这张图片分类概率最高的5个类别,只要有一个预测的类别和人工标注的类别标记一致,就是认为正确。当5个都不一致发生的概率就是Top-5错误率。

《TensorFlow技术解析与实战》第1章 人工智能概述_第15张图片

图1-15

值得自豪的是,在刚刚过去的ILSVRC 2016上,中国学术界和工业界科研团队包揽了多项冠军[16]。

  • CUImage(商汤科技联合港中文):目标检测第一。
  • Trimps-Soushen(公安部三所):目标定位第一。
  • CUvideo(商汤科技联合港中文):视频中物体检测子项目第一。
  • NUIST(南京信息工程大学):视频中的物体探测两个子项目第一。
  • Hikvvision(海康威视):场景分类第一。
  • SenseCUSceneParsing(商汤科技联合港中文):场景分析第一。

如果说ILSVRC企业参加的居多,那Kaggle这个平台则更多地面向个人开发者。图 1-16展示的是Kaggle的官方网站首页。

Kaggle成立于2010年,是一个进行数据发掘、数据分析和预测竞赛的在线平台。与Kaggle合作之后,一家公司可以提供一些数据,进而提出一个问题,Kaggle网站上的计算机科学家和数学家(也就是现在的数据科学家)将领取任务,提供潜在的解决方案。最终胜出的解决方案可以获得3万美元到25万美元的奖励。也就是说,Kaggle也是一个众包理念,利用全世界的人才来解决一个大问题。

《TensorFlow技术解析与实战》第1章 人工智能概述_第16张图片

图1-16

Kaggle这个比赛非常适合学生参加,因为一般在校学生可能拿不到很多数据。此外,Kaggle不仅对参赛者有算法能力上的要求,而且能锻炼参赛者对数据的“嗅觉”,使参赛者从数据本身问题出发来寻求解决方案。

“天池”是阿里搭建的一个大数据竞赛平台,图1-17展示的是它的官方网站页面。

《TensorFlow技术解析与实战》第1章 人工智能概述_第17张图片

图1-17

这个平台上一般会有一些穿衣搭配挑战、新浪微博互动预测、用户重复购买行为预测等赛事。平台提供的“赛题攻略”对新手入门有很大的引领作用。如果在一些项目上取得不错的成绩,还有丰厚的奖金,以及进入阿里巴巴的工作机会。

近年来,国内涌现出一批做人工智能的公司,很多原有的互联网公司也开始试水人工智能方向。虽然不可否认人工智能领域还是有一些泡沫存在,但是这个技术领域的井喷点确实来临了,确切地说是科研成果的井喷点。我们要做的就是加快科研成果向产品的转化速度。

国内的腾讯、阿里、百度三大公司在人工智能研究和商业化探索方面走得最早。腾讯优图是腾讯的人工智能开放平台;阿里云ET是阿里巴巴的智能机器人;百度主要在无人驾驶汽车和手机百度客户端的基于“自然语言的人机交互界面”的“度秘”上发力。这些都是人工智能在产业界应用的探索。此外,还有搜狗、云从科技、商汤科技、昆仑万维、格灵深瞳等公司,都在人工智能领域纷纷发力。

下面我们就来介绍国内几家比较有特色的做人工智能的公司。

(1)陌上花科技:衣+(dress+)。提供图像识别、图像搜索、物体追踪检测、图片自动化标记、图像视频智能分析、边看边买、人脸识别和分析等服务。其官方网站的首页如图1-18所示。

《TensorFlow技术解析与实战》第1章 人工智能概述_第18张图片

图1-18

(2)旷视科技:Face++。以人脸识别精度著称,并且提供人工智能开放平台。目前已经和美图秀秀、魔漫相机合作,实现美白、瘦脸、五官美化等美颜效果。此外,还和支付宝合作,未来有望推出“Smile to Pay”。其官方网站首页如图1-19所示。

《TensorFlow技术解析与实战》第1章 人工智能概述_第19张图片

图1-19

(3)科大讯飞。主要提供语音识别解决方案,以及语音合成、语言云(分词、词性标注、命名实体识别、依存句法分析、语义角色标注等)等语音扩展服务,有完善的SDK及多种语言实现的API。其官方网站首页如图1-20所示。

《TensorFlow技术解析与实战》第1章 人工智能概述_第20张图片

图1-20

(4)地平线。嵌入式人工智能的领导者,致力于提供高性能、低功耗、低成本、完整开放的嵌入式人工智能解决方案。其官方网站首页如图1-21所示。

《TensorFlow技术解析与实战》第1章 人工智能概述_第21张图片

图1-21

本章主要介绍了人工智能、机器学习、深度学习的关系,以及深度学习的学习步骤,分析了这个领域的相关人群,以及这个领域的重要赛事。然后,全面介绍了TensorFlow的作用、特性,并介绍了国内做人工智能的公司,讲述了目前在产业界进行的探索,和提供给开发者的一些基础平台。


[1] 参考百度百科 “图灵测试”。

[2] 参考百度百科 “人工智能”。

[3] 参考威斯康星大学麦迪逊分校一个ppt的第14页:http://pages.cs.wisc.edu/~jerryzhu/pub/sslicml07.pdf。

[4] 这里,一些人担心人工智能超越人类还会产生哲学和伦理问题。我认为做这种讨论还为时尚早,严谨的数据基础是要突破的主要方向。

[5] 推荐读者阅读李航老师的《统计学习方法》,很快就能入门。

[6] https://github.com/tensorflow/models/tree/master/inception

[7]https://github.com/zer0n/deepframeworks

[8] 参考百度百科 “异构数据库”。

[9] http://karpathy.github.io/2015/05/21/rnn-effectiveness/

[10] https://www.tensorflow.org/

[11] http://ipython.org/notebook.html

[12] 参考论文《Deep Leaning with Dynamic Computation Graphs》:https://openreview.net/pdf?id=ryrGawqex。

[13] 参考论文《ImageNet Classification with Deep Convolutional Neural Networks》:http://www.cs.toronto.edu/~fritz/absps/ imagenet.pdf。

[14] 数据出自论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》:https://arxiv.org/abs/1502.01852。

[15] 数据出自论文《Deep Residual Learning for Image Recognition》:https://arxiv.org/abs/1512.03385。

你可能感兴趣的:(《TensorFlow技术解析与实战》第1章 人工智能概述)