1.1 人工智能
现今每天都有很多人工智能的文章发表,并且在最近两年愈演愈烈。网络上关于人工智能的定义有几种说法,我最喜欢的一个是,通常由人完成的智能任务的自动化。
1.1.1 人工智能发展史
1956年,约翰·麦肯锡(John McCarthy)主持召开了第一次人工智能的学术会议,并创造了人工智能这个术语。然而早在此之前,关于机器是否会思考的讨论就已经开始。人工智能发展初期,机器已经可以解决对于人类比较困难的问题。
例如,德国制造了在第二次世界大战后期用于军事通信的恩尼格玛密码机(Enigma machine)。阿兰·图灵(Alan Turing)则构建了一个用于破解恩尼格玛密码机的人工智能系统。人类破译恩尼格玛密码是一个非常有挑战性的任务,并往往会花费分析员数周的时间。而人工智能机器几个小时就可以完成破译。
计算机解决一些对人类很直接的问题,却一度非常艰难。如区分猫和狗,朋友对你参加聚会迟到是否生气(情绪),区分汽车和卡车,为研讨会写纪要(语音识别),或为你的外国朋友将笔记转换成对方的语言(例如,从法语转成英语)。这些任务中的大多数对于我们都很直接,但过去我们却无法通过给计算机硬编码一个程序来解决这类问题。早期计算机人工智能的实现都是硬编码的,如可以下棋的计算机程序。
人工智能发展初期,许多研究人员相信,人工智能可以通过对规则硬编码来实现。这类人工智能称为符号人工智能(symbolic AI),它适于解决明确的逻辑性问题,然而对于那些复杂的问题,如图像识别、对象检测、语言翻译和自然语言的理解等任务,它却几乎无能为力。人工智能的新方法,如机器学习和深度学习,正是用于解决这类问题的。
为更好理解人工智能、机器学习和深度学习的关系,我们画几个同心的圆圈,人工智能位于最外层,人工智能最早出现,范畴最大,然后向内是机器学习,最后是驱动今天人工智能迅速发展的深度学习,它位于另两个圆圈内部,如图1.1所示。
图1.1 人工智能、机器学习和深度学习的关系
1.2 机器学习
机器学习是人工智能的一个子领域,它在过去10年变得非常流行,这两个词有时会交换使用。除机器学习外,人工智能还包括很多其他的子领域。与通过对规则进行硬编码的符号人工智能不同,机器学习系统通过展示大量实例来构造。从更高层面上说,机器学习系统通过检视大量数据得出可以预测未见数据结果的规则,如图1.2所示。
图1.2 机器学习对比传统编程
大多数机器学习算法在结构化数据上运行良好,如销售预测、推荐系统和个性化营销等。所有机器学习算法中都涉及的一个重要方面是特征工程,数据科学家花费大量时间来获取机器学习算法运行的正确特征。在某些领域,如计算机视觉(Computer Vision)和自然语言处理(Natural Language Processing,NLP),因为具有较高维度,特征工程非常具有挑战性。
直到现在,由于诸如特征工程和高维度方面的原因,对于使用经典机器学习技术(如线性回归、随机森林等)来解决这类问题的机构都非常具有挑战性。考虑一张大小为224×224×3(高×宽×通道)的图片,其中3表示彩色图片中红、绿、蓝色彩通道的个数。为了在计算机内存中存储这张图片,对应的矩阵要包含150,528个维度。假设要基于1000张224×224×3大小的图片构建分类器,维度就会变成1000个150,528大小。机器学习中一个被称为深度学习的特别分支,让我们得以借助现代技术和硬件解决这些问题。
1.2.1 机器学习实例
下面是使用机器学习技术实现的出色应用。
- 例1:Google Photos使用了机器学习中的一类深度学习照片分组(deep learning for grouping photos)技术。
- 例2:推荐系统,这是一类可用于推荐电影、音乐和产品的机器学习算法,很多大公司,如Netflix、Amazon和iTunes都在使用。
1.3 深度学习
传统机器学习算法使用手写的特征提取代码来训练算法,而深度学习算法使用现代技术自动提取这些特征。
例如,一个用于预测图像是否包含人脸的深度学习算法将在第一层检查边缘,第二层检测鼻子和眼睛等形状,最后一层检测面部形状或者更复杂的结构(见图1.3)。每一层都基于前一层的数据表示进行训练。如果大家觉得上面的解释理解起来有些困难,请不要担心,本书的后续章节会更直观地构造和详细解释这样的网络。
得益于GPU、大数据、云提供商如 Amazon Web Services(AWS)和Google Cloud,以及Torch、TensorFlow、Caffe和PyTorch这些框架的出现,深度学习的应用在过去几年出现了巨大的增长。除此之外,一些大型公司还分享了已在庞大的数据集上训练好的算法,因而使得后来者可以经过很少的改动就能够以几种用例为基础构建最先进的系统。
1.3.1 深度学习的应用
深度学习一些流行的应用如下:
- 接近人类水平的图像分类;
- 接近人类水平的语音识别;
- 机器翻译;
- 自动驾驶汽车;
- Siri、Google语音和Alexa在最近几年更加准确;
- 日本农民的黄瓜智能分拣;
- 肺癌检测;
- 准确度高于人类的语言翻译。
图1.4 计算机生成的本文摘要
接下来,我们把图1.5作为普通的图片输入给计算机,并不告知计算机图像中展示的是什么。借助对象检测技术和词典的帮助,我们得到的图像描述是:两个小女孩正在玩乐高玩具。计算机太聪明了,不是吗?
图1.5 对象检测和图像标注
1.3.2 深度学习的浮夸宣传
媒体人士和人工智能领域外的人士,以及那些并非真正的人工智能和深度学习参与者,一直暗示说,随着人工智能和深度学习的进步,电影Terminator 2: Judgement Day中的场景会成为现实。有些甚至在谈论人类终将被机器人控制的时代,那时机器人将决定什么对人类有益。目前而言,人工智能的能力被过分夸大了。现阶段,大多数深度学习系统都部署在一个非常受控的环境中,并给出了有限的决策边界。
我的想法是,当这些系统能够学会做出智能决策,而非仅仅完成模式匹配,当数以千百计的深度学习算法可以协同工作,那时也许我们有希望见到类似科幻电影中一样表现的机器人。事实上,我们尚不能实现通用的人工智能,即机器可以在没有指示的情况下做任何事。现在的深度学习大多是关于如何寻找现有数据的模式并预测未来结果。作为深度学习业者,我们应该像区别信号和噪声一样区分这些不实说法。
1.3.3 深度学习发展史
尽管深度学习在最近几年才开始广为流行,但其背后的理论早在20世纪50年代就开始形成了。表1.1给出了现今深度学习应用中最受欢迎的技术和出现的大概的时间点。
深度学习这个术语过去有几种不同的叫法。20世纪70年代我们称之为控制论(cybernetics),20世纪80年代称之为联结主义(connectionism),而现在称之为深度学习或神经网络。我们将交替使用深度学习和神经网络这两个术语。神经网络通常指的是那些受人脑运作启发的算法。然而,作为深度学习的从业者,我们应明白神经网络主要是由强大的数学理论(线性代数和微积分)、统计学(概率)和软件工程激励和支持的。
1.3.4 为何是现在
为何现在深度学习这么流行?一些关键原因如下:
- 硬件可用性;
- 数据和算法;
- 深度学习框架。
1.3.5 硬件可用性
深度学习要在数百万甚至数十亿的参数上进行复杂的数学运算。尽管过去这些年有所提高,但仅依靠现在的CPU执行这些运算极其耗时。一种叫作图形处理单元(Graphics Processing Unit,GPU)的新型硬件在完成这些大规模的数学运算(如矩阵乘法)时可以高出几个数量级。
GPU最初是Nvidia和AMD公司为游戏产业而开发的。事实证明这种硬件极其高效。Nvidia最近的一款产品1080ti,仅用了几天时间就构建了一个基于ImageNet
数据集的图像分类系统,而此前这需要大概1个月的时间。
如果打算购买用于深度学习的硬件,建议用户根据预算选择一款Nvidia的内存较大的GPU。记住,计算机内存和GPU内存并不相同,1080ti带有大约11GB的内存,它的价格在700美元左右。
你也可以使用各种云服务,如AWS、Google Cloud或Floyd(这家公司提供专为深度学习优化的GPU机器)。如果刚开始深度学习,或在财务受限的情况下为公司的应用配置机器时,使用云服务就很经济。
优化后的系统性能可能有较大提升。
图1.6所示为不同CPU和GPU的性能基准的对比。
1.3.6 数据和算法
数据是完成深度学习最重要的组成部分,由于互联网的普及和智能手机应用的增长,一些大公司,如Facebook和Google,可以收集到大量不同格式的数据,特别是文本、图片、视频和音频这类数据。在计算机视觉领域,ImageNet竞赛在提供1,000种类别中的140万张图片的数据集方面发挥了巨大作用。
这些图像类别是手工标注的,每年都有数百个团队参与竞赛。过去比赛中一些成功的算法有VGG、ResNet、Inception、DenseNet等。现在这些算法已在行业中得到应用,用于解决各种计算机视觉问题。深度学习领域还有其他一些流行的数据集,这些数据集常被用于建立不同算法的性能基准:
- MNIST;
- COCO数据集;
- CIFAR;
- The Street View House Numbers;
- PASCAL VOC;
- Wikipedia dump;
- 20 Newsgroups;
- Penn Treebank;
- Kaggle。
各种不同算法的发展,如批规一化、激活函数、跳跃式连接(skip connection)、长短期记忆网络(LSTM)、dropout等,使得最近几年可以更快并更成功地训练极深度网络。本书接下来的章节中,我们将深入每种技术的细节,以及如何使用这些技术构建更好的模型。
1.3.7 深度学习框架
在早期,人们需要具备C++和CUDA的专业知识来实现深度学习算法。现在随着很多公司将它们的深度学习框架开源,使得那些具有脚本语言知识(如Python)的人,也可以开始构建和使用深度学习算法。今天,这个行业中流行的深度学习框架有TensorFlow、Caffe2、Keras、Theano、PyTorch、Chainer、DyNet、MXNet和CNTK。
如果没有这些框架,深度学习的应用也不会如此广泛。它们抽象出许多底层的复杂度,让我们可以专注于应用。我们尚处于深度学习的早期阶段,很多组织机构都在对深度学习进行大量研究,几乎每天都有突破性的成果,因而,各种框架也都各有利弊。
PyTorch
PyTorch以及其他大多数深度学习框架,主要用于两个方面:
- 用GPU加速过的运算替代与NumPy类似的运算;
- 构建深度神经网络。
让PyTorch越来越受欢迎的是它的易用性和简单性。不同于其他大多数流行的使用静态计算图的深度学习框架,PyTorch使用动态计算,因此在构建复杂架构时可以有更高的灵活性。
PyTorch大量使用了Python概念,例如类、结构和条件循环,允许用户以纯面向对象的方式构建深度学习算法。大部分的其他流行框架引进了自己的编程风格,有时编写新算法会很复杂,甚至不支持直观的调试。后续章节将详细讨论计算图。
尽管PyTorch新近才发布并且还处于β版本,由于它的简单易用和出色的性能、易于调试性,以及来自不同公司如SalesForce等的强大支持,PyTorch受到了数据科学家和深度学习研究人员的巨大欢迎。
由于PyTorch最初主要为研究目的而构建,因此不建议用于那些对延迟要求非常高的生产环境。然而,随着名为Open Neural Network Exchange(ONNX)的新项目的出现,这种情况正在发生改变,该项目的重点是将在PyTorch上开发的模型部署到适用于生产的Caffe2这样的平台上。在本书写作时,这个项目刚刚启动,因而过多的定论还为时尚早。该项目了得到Facebook和微软的支持。
在本书的其余部分,我们将学习用于构建计算机视觉和自然语言处理领域的强大深度学习应用的各种模块(较小的概念或技术)。
1.4 小结
作为介绍性章节,本章探讨了什么是人工智能、机器学习和深度学习,以及三者之间的差异。我们也在日常生活中看到了由这些技术开发的应用程序。本章然后更深入地讨论了为什么深度学习在现在才变得那么流行,最后对深度学习的框架PyTorch做了一个简单介绍。
标签:机器,人工智能,PyTorch,学习,算法,奥秘,深度 From: https://blog.csdn.net/anan6699/article/details/139698793