人工智能和 TensorFlow 的前世今生

1.深度学习的起源阶段

1943年,心里学家麦卡洛克和数学逻辑学家皮兹发表论文《神经活动中内在思想的逻辑演算》,提出了MP模型。MP模型是模仿神经元的结构和工作原理,构成出的一个基于神经网络的数学模型,本质上是一种“模拟人类大脑”的神经元模型。MP模型作为人工神经网络的起源,开创了人工神经网络的新时代,也奠定了神经网络模型的基础。

1949年,加拿大著名心理学家唐纳德·赫布在《行为的组织》中提出了一种基于无监督学习的规则——海布学习规则(Hebb Rule)。海布规则模仿人类认知世界的过程建立一种“网络模型”,该网络模型针对训练集进行大量的训练并提取训练集的统计特征,然后按照样本的相似程度进行分类,把相互之间联系密切的样本分为一类,这样就把样本分成了若干类。海布学习规则与“条件反射”机理一致,为以后的神经网络学习算法奠定了基础,具有重大的历史意义。

20世纪50年代末,在MP模型和海布学习规则的研究基础上,美国科学家罗森布拉特发现了一种类似于人类学习过程的学习算法——感知机学习。并于1958年,正式提出了由两层神经元组成的神经网络,称之为“感知器”。感知器本质上是一种线性模型,可以对输入的训练集数据进行二分类,且能够在训练集中自动更新权值。感知器的提出吸引了大量科学家对人工神经网络研究的兴趣,对神经网络的发展具有里程碑式的意义。

但随着研究的深入,在1969年,“AI之父”马文·明斯基和LOGO语言的创始人西蒙·派珀特共同编写了一本书籍《感知器》,在书中他们证明了单层感知器无法解决线性不可分问题(例如:异或问题)。由于这个致命的缺陷以及没有及时推广感知器到多层神经网络中,在20世纪70年代,人工神经网络进入了第一个寒冬期,人们对神经网络的研究也停滞了将近20年。

图1 “AI之父”马文·明斯基

2.深度学习的发展阶段


1982年,著名物理学家约翰·霍普菲尔德发明了Hopfield神经网络。Hopfield神经网络是一种结合存储系统和二元系统的循环神经网络。Hopfield网络也可以模拟人类的记忆,根据激活函数的选取不同,有连续型和离散型两种类型,分别用于优化计算和联想记忆。但由于容易陷入局部最小值的缺陷,该算法并未在当时引起很大的轰动。

直到1986年,深度学习之父杰弗里·辛顿提出了一种适用于多层感知器的反向传播算法——BP算法。BP算法在传统神经网络正向传播的基础上,增加了误差的反向传播过程。反向传播过程不断地调整神经元之间的权值和阈值,直到输出的误差达到减小到允许的范围之内,或达到预先设定的训练次数为止。BP算法完美的解决了非线性分类问题,让人工神经网络再次的引起了人们广泛的关注。

图2 深度学习之父杰弗里·辛顿

但是由于八十年代计算机的硬件水平有限,如:运算能力跟不上,这就导致当神经网络的规模增大时,再使用BP算法会出现“梯度消失”的问题。这使得BP算法的发展受到了很大的限制。再加上90年代中期,以SVM为代表的其它浅层机器学习算法被提出,并在分类、回归问题上均取得了很好的效果,其原理又明显不同于神经网络模型,所以人工神经网络的发展再次进入了瓶颈期。


3.深度学习的爆发阶段

2006年,杰弗里·辛顿以及他的学生鲁斯兰·萨拉赫丁诺夫正式提出了深度学习的概念。他们在世界顶级学术期刊《科学》发表的一篇文章中详细的给出了“梯度消失”问题的解决方案——通过无监督的学习方法逐层训练算法,再使用有监督的反向传播算法进行调优。该深度学习方法的提出,立即在学术圈引起了巨大的反响,以斯坦福大学、多伦多大学为代表的众多世界知名高校纷纷投入巨大的人力、财力进行深度学习领域的相关研究。而后又在迅速蔓延到工业界中。

2012年,在著名的ImageNet图像识别大赛中,杰弗里·辛顿领导的小组采用深度学习模型AlexNet一举夺冠。AlexNet采用ReLU激活函数,从根本上解决了梯度消失问题,并采用GPU极大的提高了模型的运算速度。同年,由斯坦福大学著名的吴恩达教授和世界顶尖计算机专家Jeff Dean共同主导的深度神经网络——DNN技术在图像识别领域取得了惊人的成绩,在ImageNet评测中成功的把错误率从26%降低到了15%。深度学习算法在世界大赛的脱颖而出,也再一次吸引了学术界和工业界对于深度学习领域的关注。

随着深度学习技术的不断进步以及数据处理能力的不断提升,2014年,Facebook基于深度学习技术的DeepFace项目,在人脸识别方面的准确率已经能达到97%以上,跟人类识别的准确率几乎没有差别。这样的结果也再一次证明了深度学习算法在图像识别方面的一骑绝尘。

2016年,随着谷歌公司基于深度学习开发的AlphaGo以4:1的比分战胜了国际顶尖围棋高手李世石,深度学习的热度一时无两。后来,AlphaGo又接连和众多世界级围棋高手过招,均取得了完胜。这也证明了在围棋界,基于深度学习技术的机器人已经超越了人类。

图3 AlphaGo大战李世石

2017年,基于强化学习算法的AlphaGo升级版AlphaGo Zero横空出世。其采用“从零开始”、“无师自通”的学习模式,以100:0的比分轻而易举打败了之前的AlphaGo。除了围棋,它还精通国际象棋等其它棋类游戏,可以说是真正的棋类“天才”。此外在这一年,深度学习的相关算法在医疗、金融、艺术、无人驾驶等多个领域均取得了显著的成果。所以,也有专家把2017年看作是深度学习甚至是人工智能发展最为突飞猛进的一年。


4.TensorFlow 发展历程


下面是 Tensorflow 的发展图解


12.png


Tensorflow是由谷歌大脑团队于2015年11月开发的第二代开源的机器学习系统。Tensorflow支持python、C++、java、GO等多种编程语言,以及CNN、RNN和GAN等深度学习算法。Tensorflow除可以在Windows、Linux、MacOS等操作系统运行外,还支持Android和iOS移动平台的运行、以及适用于多个CPU/GPU组成的分布式系统中。


TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。


6.TensorFlow 的特征

1)高度的灵活性

TensorFlow 不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用Tensorflow。你来构建图,描写驱动计算的内部循环。我们提供了有用的工具来帮助你组装“子图”(常用于神经网络),当然用户也可以自己在Tensorflow基础上写自己的“上层库”。定义顺手好用的新复合操作和写一个python函数一样容易,而且也不用担心性能损耗。当然万一你发现找不到想要的底层数据操作,你也可以自己写一点c++代码来丰富底层的操作。

 

2)真正的可移植性(Portability)

Tensorflow 在CPU和GPU上运行,比如说可以运行在台式机、服务器、手机移动设备等等。想要在没有特殊硬件的前提下,在你的笔记本上跑一下机器学习的新想法?Tensorflow可以办到这点。准备将你的训练模型在多个CPU上规模化运算,又不想修改代码?Tensorflow可以办到这点。想要将你的训练好的模型作为产品的一部分用到手机app里?Tensorflow可以办到这点。你改变主意了,想要将你的模型作为云端服务运行在自己的服务器上,或者运行在Docker容器里?Tensorfow也能办到。Tensorflow就是这么拽 :)

 

 

3)将科研和产品联系在一起

过去如果要将科研中的机器学习想法用到产品中,需要大量的代码重写工作。那样的日子一去不复返了!在Google,科学家用Tensorflow尝试新的算法,产品团队则用Tensorflow来训练和使用计算模型,并直接提供给在线用户。使用Tensorflow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。

 

 

4)自动求微分

基于梯度的机器学习算法会受益于Tensorflow自动求微分的能力。作为Tensorflow用户,你只需要定义预测模型的结构,将这个结构和目标函数(objective function)结合在一起,并添加数据,Tensorflow将自动为你计算相关的微分导数。计算某个变量相对于其他变量的导数仅仅是通过扩展你的图来完成的,所以你能一直清楚看到究竟在发生什么。

 

 

 

5)多语言支持

Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和执行你的graphs。你可以直接写python/c++程序,也可以用交互式的ipython界面来用Tensorflow尝试些想法,它可以帮你将笔记、代码、可视化等有条理地归置好。当然这仅仅是个起点——我们希望能鼓励你创造自己最喜欢的语言界面,比如Go,Java,Lua,Javascript,或者是R。

 

6)性能最优化

比如说你又一个32个CPU内核、4个GPU显卡的工作站,想要将你工作站的计算潜能全发挥出来?由于Tensorflow 给予了线程、队列、异步操作等以最佳的支持,Tensorflow 让你可以将你手边硬件的计算潜能全部发挥出来。你可以自由地将Tensorflow图中的计算元素分配到不同设备上,Tensorflow可以帮你管理好这些不同副本。

 




7.TensorFlow 应用场景举例


1. 垃圾邮件过滤,监督学习,需要训练数据;


2.提取访客人群的特征数据,非监督学习,无需训练数据。

例如,收集到自己博客的访客信息之后,在没有训练数据的前提下,自动提取特征。例如,

  • 男女比例

  • 男性更喜欢哪些分类的文章

  • 周末女性更喜欢哪些分类的文章

  • 凌晨时分哪些分类更受关注


3. 超市商品相关度

非监督学习,无需训练数据。

根据结算时顾客的购物清单,推算出关联性高的商品,例如,红酒和红酒起子。方便超市运营人员,调整货架,将关联度高的商品距离拉近。


4. 图片自动分类

半监督学习,即提供大部分的 labeled 数据及小部分 unlabeled 数据。

用户上传照片为 unlabeled 数据,google 照片服务通过非监督学习将图片按照其中的人脸进行自动分类。只需要用户输入标签,就可以标识某张图片里的人具体是谁。(输入标签为训练过程)

 

5.alpha 狗

还有一堆高大上的算法分类名,虽然有各种知名的案例,例如 alpha 狗,


6.图像识别

而机器学习在做图像识别上,完全可以跟咱们身边的行业产生联系,例如,苹果上有几个虫眼,自动对苹果进行分类;包装上是否有划痕;摄像头前的手势控制等。这些在机器学习里都是非常简单的应用。目前比较流行的人脸识别,验证码识别等。


Tensorflow是目前最火的深度学习框架,广泛应用于自然语言处理、语音识别、图像处理等多个领域。不仅深受全球深度学习爱好者的广泛欢迎,Google、eBay、Uber、OPenAI等众多科技公司的研发团队也都在使用它。

相较于其它的深度学习框架,如:Caffe、Torch、Keras、MXnet、Theano等,Tensorflow的主要优势有以下几点:高度的灵活性、支持python语言开发、可视化效果好、功能更加强大、运行效率高、强大的社区。



全部评论(0)