独家连载 | 覃秉丰深度学习重磅新书首发抢读!!!(1)

前言:在很早以前我就跟电子工业出版社签约,要出版一本深度学习相关的入门书籍,书籍的内容会从深度学习基础开始讲解,面向0基础读者,尽量通俗易懂,讲解清晰。书中代码是使用python,深度学习框架tensorflow。

本着认真负责的态度,这本书写了很久(其实是懒)。

如今内容已经写了一些,估计2019年年后新书会出版,所以打算先做一些书籍内容的连载。以后每周二会在我的各个平台同步更新,觉得我的内容写得不错的话,欢迎点赞转发收藏关注。

第01章-深度学习介绍

对于一些人类比较擅长的任务,比如图像识别,语音识别,自然语言处理等,计算机却完成得很差。人类的视觉从眼睛采集信息开始,但起到主要作用的是大脑。人类的每个脑半球中都有着非常复杂的视觉皮层,包含着上亿个神经元以及几百亿条神经元之间的连接。人类的大脑就像是一台超级计算机,可以轻松处理非常复杂的图像问题。神经元之间的电信号可以快速传递,但是就像前面说到的,对于复杂的问题,计算速度只是一方面。人类的视觉能力是通过几亿年地不断进化,不断演变最终才得到的。人类视觉和听觉的能力很强,因为从人类诞生,人类的视觉能力就一直在运用,不断地在锻炼。更强的视觉和听觉能力使得人类可以拥有更强的生存能力。

在人工智能的早期阶段,计算机的智能通常是基于人工制定的“规则”,我们可以通过详细的规则去定义下棋的套路,推理的方法,以及路径规划的方案。但是我们却很难用规则去详细描述图片中的物体,比如我们要判断一张图片中是否存在猫。那我们首先要通过规则去定义一只猫,如图1.1所示。

图1.1猫
图1.1猫

观察图1.1中的猫,我们可以知道猫有一个圆脑袋,两个三角形的耳朵,又胖又长的身体,和一条长尾巴,然后可以定义一套规则在图片中寻找猫。这看起来好像是可行的,但是如果我们遇到的是图1.2,图1.3中的猫该怎么办?

图1.2藏起来的猫
图1.2藏起来的猫
图1.3 姿势奇怪的猫标题

有些猫可能只露出身体的一部分,有些猫可能会摆出奇怪的造型,那么我们又要针对这些情况定义新的规则。从这个例子中大家应该能看得出来,即使是一只很普通的家养宠物,都可能会出现无数种不同的外形。如果我们使用人工定义的规则去定义这个物体,那么可能需要设置非常大量的规则,并且效果也不一定会很好。仅仅一个物体就这么复杂,而现实中常见的各种物体成千上万,所以在图像识别领域,使用使用人为定义的规则去做识别肯定是行不通的。很多其他的领域也同样存在这种问题。

1.1机器学习

由于人们没有办法设计出足够复杂的规则来精确描述世界,所以AI系统需要具备自我学习的能力,即从原始数据中获取有用的知识。这种能力被称为机器学习(Machine Learning)

机器学习其实与人类学习的过程类似。打个比方:假如我们现在都是原始人,并不知道太阳和月亮是什么东西。但是我们可以观察天上的太阳和月亮,并且把太阳出来时候的光线和温度记录下来,把月亮出来时候的光线和温度记录下来(这就相当于是收集数据)。观察了100天之后,我们进行思考,总结这100天的规律我们可以发现,太阳和月亮是交替出现的(偶尔同时出现可以忽略)。出太阳的时候光线比较亮,温度比较高。月亮出来的时候光线比较暗,温度比较低(这相当于是分析数据,建立模型)。之后我们看到太阳准备落山,月亮准备出来的时候我们就知道温度要降低可能要多穿衣服,光线也准备要变暗了(预测未来的情况)。机器学习也可以利用已有的数据进行学习,获得一个训练好的模型,然后可以利用此模型预测未来的情况。

图1.4中表现了机器学习与人类思维的对比。我们可以使用历史数据来训练一个机器学习的模型,模型训练好之后,再放入新的数据,模型就可以对新的数据进行预测分析。人类也善于从以往的经验中总结规律,当遇到新的问题时,我们可以根据之前的经验来预测未来的结果。

图1.4机器学习与人类思维的对比

1.1.1 训练数据,验证数据和测试数据

通常我们在做机器学习分析的时候,会把数据分成两大部分。一部分是训练数据(Training Data),可以用来训练,构建模型。另一部分是测试数据(Testing Data),可以用来验证模型的好坏。这两部分就有点像我们上学时课本中的习题。正文中的例题是训练数据,有答案和详细讲解,是用来教我们学习新知识的,可以看作是用来对我们进行训练。而课后习题是测试数据,我们要先做题,做完之后再对答案,是用来检查我们学习效果的。

有时我们会把数据分成三部分,1.训练集(Training Set);2.验证集(Validation Set);3.测试集(Testing Set)。训练集还是用来训练,构建模型。验证集是用来进一步确定模型的参数(或结构)的。等模型训练好,并且结构和参数都调整好之后,再用测试集来评估模型的好坏。通常我们可以把所有数据的60%分配给训练集,20%分配的验证集,20%分配给测试集。或者80%分配给训练集,10%分配给验证集,10%分配给测试集。

K折交叉检验(K-fold cross-validation)—— K折交叉检验的大致思想是把数据集分成K份,每次取一份作为测试集,取余下的K-1份作为训练集。重复训练K次,每次训练都从K个部分中选一个不同的部分作为测试集(要保证K个部分的数据都分别做过测试),剩下的K-1份做训练集。最后把得到的K个结果做平均。

1.1.2 学习方式

在机器学习或者人工智能领域,不同的问题可能会有不同的学习方式。主要的学习方法有:监督学习(Supervised Learning)—— 监督学习也称为有监督学习,通常可以用于分类(Classification)以及回归(Regression)的问题。它的主要特点是,所有的数据都有与之相对应的标签(Label)。比如我们想做一个识别手写数字的模型,那么我们的数据集就是大量手写数字的图片,并且每一张图片都有对应的标签,如图1.5:

标题图1.5

图片是一个手写数字3,所以这张图片的标签可以设置为3。同样的,如果是一张手写数字8的图片,那么该图片的标签就可以是8。或者我们要建立一个判别垃圾邮件的模型,那我们先要对邮件进行标记,标记出哪些属于垃圾邮件,哪些不属于垃圾邮件,然后建立模型。

监督学习在建模过程中,会将预测结果与训练数据的实际结果(也就是标签)做对比,如果预测结果跟实际结果不符合,将通过一些方式去调整模型的参数,直到模型的预测结果能达到比较高的准确率。

非监督学习(Unsupervised Learning)—— 非监督学习也称为无监督学习,通常可以用于聚类(Clustering)的问题。非监督学习中,所有的数据都是没有标签的。可以使用机器学习的方法让数据自动聚类。例如许多公司都拥有庞大的客户信息数据库,使用非监督学习的方法就可以自动对客户进行市场分割,将客户分到不同的细分市场中,从而有助于我们对不同细分市场的客户进行更有效的销售或者广告推送。或许我们事先并不知道有哪些细分市场,也不知道哪些客户属于细分市场一,哪些客户属于细分市场二。不过没关系,我们可以让非监督学习算法在数据中挖掘这一切信息。

半监督学习(Semi-supervised Learning)—— 半监督学习是监督学习和非监督学习相结合的一种学习方式,通常可以用于分类以及回归问题。。主要是用来解决使用少量带标签的数据和大量没有标签的数据进行训练和分类的问题。此类算法首先试图对没有标签的数据进行建模,然后再对带有标签的数据进行预测。

强化学习(Reinforcement Learning)—— 强化学习灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能够获得最大利益的习惯性行为。强化学习没有任何的标签来告诉算法应该怎么做,它会先去尝试做一些动作,然后得到一个结果,通过判断这个结果是对还是错来对之前的动作进行反馈。特别值得一提的是,AlphaGo用到的学习方式就是强化学习。

1.1.3 机器学习常用算法

机器学习的算法有很多,下面给大家简单介绍一些机器学习中常用的算法。

决策树(Decision Tree)—— 决策树是一种简单但又使用广泛的监督学习分类算法。它是一种分而治之的决策过程,把一个复杂的预测问题,通过树的分支节点,划分成两个或多个较为简单的子集,从结构上划分为不同的子问题。当分支节点满足一定停止规则时,该分支节点就会停止分叉,得到分类结果。一颗简单的决策树如图1.6:

图1.6 决策树(Decision Tree)

线性回归(Linear Regreesion)—— 线性回归是一种监督学习的算法。在线性回归中,数据使用线性预测函数来建模,模型建立好之后可以用来预测未知的值。也就是可以根据现在,预测未来。举个例子,假入我们有一组房屋面积跟房屋价格的数据,我们可以利用这些数据来建立回归模型,如图1.7所示:

标题图1.7线性回归(Linear Regreesion)

模型建立好之后,我们可以得到一条最符合房屋面积跟房屋价格关系的直线。根据这个模型,我们可以把一个新的房屋面积输入,就能得到该房屋的价格预测值。

KNN(Linear Regreesion)—— KNN算法又称为k近邻分类(k-nearest neighbor classification)算法\cite{Hastie1994},是一种监督学习算法。最简单的最近邻算法就是遍历所有已知标签的样本集中的数据,计算它们和需要分类的样本之间的距离(这里的距离一般指的是欧氏距离(Clustering)\cite{Deza2009}),同时记录目前的最近点。KNN查找的是已知标签的样本集中跟需要分类的样本最邻近的K个样本,需要分类的样本最终的标签是由这K个样本的标签决定的,采用的方式是“多数表决”,也就是在这K个样本中哪种标签最多,那么需要分类的样本就归为哪一类。

下图中,方形表示分类1,圆形表示分类2,图中正中心的五角星表示需要分类的样本。

当K等于1时,其实就是计算距离五角星最近的样本属于哪一个分类。图1-8中我们可以看到距离五角星最近的是方形,属于分类1。

所以我们可以把五角星归为分类1。

图1.8 KNN分类,K等于1

当我们取K=5时,其实就是找出距离五角星最近的5个样本,然后统计这5个样本哪种分类比较多。图1-9中我们可以看到,有1个方形和4个圆形,那么圆形比较多,所以我们可以把五角星归为分类2。

图1.9 KNN分类,K等于5

这里我们可以看到,五角星最终的分类跟K的取值有很大关系。K值取多少,模型的效果才比较好呢?这可能需要对模型进一步调试,才能得到答案,比如我们可以不断改变K值,然后用测试集来做测试,最终选取一个可以使得测试误差比较小的K值。

K-Means —— K-Means是一种无监督学习算法,通常可以用于聚类分析。所谓聚类问题,就是给定一个元素集合A,集合中的每个元素有n个可观测的属性。我们需要使用某种方法把A划分为k个子集,并且要使得每个子集内部元素之间的差异尽可能小,不同子集之间元素的差异尽可能大。K-Means算法的计算过程比较直观也比较简单:

1.先从没有标签的元素集合A中随机取k个元素,作为k个子集各自的重心。

2.分别计算剩下的元素到k个子集重心的距离(这里的距离也可以使用欧氏距离),根据距离将这些元素分别划归到最近的子集。

3.根据聚类结果,重新计算重心(重心的计算方法是计算子集中所有元素各个维度的算数平均数)。

4.将集合A中全部元素按照新的重心然后再重新聚类。

5.重复第4步,直到聚类结果不再发生变化。

K-Means运行过程如图1.10,图1.11,图1.12所示:

图1.10 K-Means算法,第1次迭代 
图1.11  K-Means算法,第5次迭代
图1.12 K-Means算法,第9次迭代

聚类模型一共迭代了9次,最终收敛。从图中我们可以看得出来第1次迭代的时候,模型的聚类效果是很差的,一看就不太合理。迭代了5次之后,模型有了一些改善,聚类的效果已经不错了,不过看得出来还有一些提高的空间。迭代9次之后,模型就训练好了,很好地把没有标签的数据分成了4类。相同类别之间的差距比较小,不同类别之间的差距比较大。

神经网络(Neural Network)—— 神经网络是一种模拟人类大脑神经网络结构构建出来的算法。神经网络的结构可以有多层,多层的神经网络可以由输入层(Input Layer)隐藏层(Hidden Layers)以及输出层(Output Layer)组成。其中隐藏层可能有0到多个,所以最简单的神经网络就只有输入层和输出层。神经网络的每一层都由若干个神经元(Neuron)节点组成。

信号从输出层传入网络,与神经元的权值(Weights)作用后再经过激活函数(Activation Function)传入下一层。每一层信号的输出都是下一层的输入,直到把信号传到输出层得出结果。网络结构如图1.13所示:

图1.13神经网络(Neural Network)

神经网络是深度学习的重要基础,在后面的章节中我们会从头开始详细学习神经网络的搭建以及应用,这里只是先做一个简单介绍。

除了上面介绍的这些算法以外,机器学习领域还有很多其他的算法,如朴素贝叶斯(Naive Bayes)支持向量机SVM(Support Vector Machine)Adaboost等等。

1.2人工智能,机器学习,神经网络以及深度学习之间的关系

新闻媒体在报道AlphaGo的时候,可能人工智能,机器学习,神经网络和深度学习这几个词都有用到过。对于初学者来说,难免容易混淆。

人工智能—— 我们先说说人工智能,人工智能是这几个词中最早出现的。1956年,在美国达特茅斯会议(Dartmouth Conference)上被提出。人工智能其实是一种抽象的概念,并不是指任何实际的算法。人工智能可以对人的意识、思维进行模拟,但又不是人的智能。有时候我们还会把人工智能分为弱人工智能强人工智能

弱人工智能是擅长于单个方面技能的人工智能。比如AlphaGo能战胜了众多世界围棋冠军的,在围棋领域所向披靡,但它只会下围棋,做不了其他事情。我们目前的人工智能相关的技术,比如图像识别,语言识别,自然语言处理等等,基本都是处于弱人工智能阶段。

强人工智能指的是在各方面都能和人类智能差不多的人工智能,人类能干的脑力劳动它都能干。创造强人工智能比创造弱人工智能难度要大很多,我们现阶段还做不到,只有在一些科幻电影中才能看到。著名的教育心理学教授Linda Gottfredson 把智能定义为“一种宽泛的心理能力,能够进行思考、计划、解决问题、抽象思维、理解复杂理念、快速学习和从经验中学习等操作。”强人工智能在进行这些操作时应该跟人类一样得心应手。

机器学习 —— 机器学习是最近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近学、凸分析、计算复杂性理论等多门学科。关于机器学习,上一章节我们已经做了一些讨论说明,我们可以发现机器学习包含很多具体的算法。既然人工智能是飘在天上的概念,那我们就需要一些具体的算法使得人工智能可以落地应用,而一般来说,这些具体的算法可以统称为机器学习算法。

神经网络—— 神经网络是众多机器学习算法中的其中一个,是模仿人类大脑神经结构构建出来的一种算法,构建出来的网络称为人工神经网络(Artificial Neural Networks,ANN)。神经网络算法在机器学习中并不算特别出色,所以一开始的时候并没有引起人们的特别关注。神经网络的发展已经经历了三次发展浪潮:20世纪40年代到60年代神经网络的雏形出现在控制论(Cybernetics)中,20世纪80年代到90年代表现为联结主义(Connectionism)。直到2006年神经网络重新命名为深度学习,再次兴起。

深度学习—— 深度学习的基础其实就是神经网络,之所以后来换了一种叫法,主要是由于之前的神经网络算法中网络的层数不能太深,也就是不能有太多层网络,网络层数过多会使得网络无法训练。随着神经网络理论的发展,科学家研究出了多种方式使得训练深层的网络也成为可能,深度学习由此诞生。如卷积神经网络(Convolutional Neural Network, CNN)长短时记忆网络(Long Short Term Memory Network, LSTM)深度残差网络(Deep Residual Network)等都属于深度学习,其中深度残差网络的深度可以到达1000层,甚至10000层或更多。深层的网络有助于挖掘数据中深层的特征,可以使得网络拥有更强大的性能。

图1.14描绘了人工智能,机器学习,神经网络,深度学习之间的关系。

写在最后的话:如果你也是个深度学习爱好者,或者有任何的疑问,可以加我的个人微信号:sdxxqbf

猜你喜欢

转载自blog.csdn.net/t5131828/article/details/84856825