《TensorFlow深度学习算法原理与编程实战》笔记---Part1

《TensorFlow深度学习算法原理与编程实战》笔记

《TensorFlow深度学习算法原理与编程实战》笔记—Part1

这本书是笔者自学深度学习时的第一本参考书,希望在写作的过程中能够将自己学习的历程记录下来,故写成博客的形式,既方便了自己也可能会帮助到其他人,一举两得甚至多得。话不多说,直接切入正题。

综述

首先简单介绍一下这本书。这本书作者为蒋子阳先生,他具有丰富的深度学习项目经验和多年的编程经验,对TensorFlow有着独特的认识和深入的理解。书共有14章,主要内容有:人工智能、大数据、机器学习和深度学习概述;深度学习及TensorFlow框架的相关背景TensorFlow的安装;TensorFlow编程策略;深度前馈神经网络;优化网络的方法;全连接神经网络的经典实践;卷积神经网络的基础知识;经典卷积神经网络的Tensorflow实现;循环神经网络及其应用;深度强化学习概述;TensorFlow读取数据的API;TensorFlow持久化模型的API;可视化工具TensorBoard的使用;TensorFlow使用多GPU或并行的方式加速计算等内容。

大致可以将书分为三个部分。

  1. 第一部分包括1-3章内容,为深度学习方法的开始。
    第1章主要介绍了人工智能的发展、机器学习与深度学习之间的关系以及人工智能的过去。另外还涉及到一些关于TensorFlow及深度学习框架的介绍;
    第2章介绍了安装TensorFlow的方法;
    第3章介绍了一些基本TensorFlow的编程策略,可将这一章看作TensorFlow的说明书,计算图、张量和会话是在使用TensorFlow框架前必须了解的一些机制;
  2. 第二部分包括4-10章内容,讲用TensorFlow实现深度网络。
    第4章介绍了深度前馈神经网络。该网络涵盖的范围比较广,在介绍网路的前向传播过程以及激活函数、损失函数等网络的基本组件时,都选择了比较简明的全连接形式的网络;
    第5章介绍的是优化网络的方法。用一些优化方法优化网络是必须的。这一章的开始涉及了梯度下降、反向传播的理论;在后续,还针对网络会出现的过拟合现象介绍了一些相应的优化方法。可以说这一章介绍的方法比较常用,也有关于TensorFlow的实现;
    第6章给出了一个全连接神经网络的静待你时间案例,其主要内容是通过全连接形式的神经网络实现基于MNIST数据集的手写数组识别。在这个实践中用到了第4,5章的绝大多数内容;
    第7章介绍了卷积神经网络。卷积神经网络同样是一种前馈神经网络。卷积神经网络与全连接方式不同,是稀疏连接的。这一章介绍了卷积神经网络卷积层和池化层的TensorFlow实现,并在之后以一个使用了Cifar-10数据集的简单循环神经网络作为本章中要实践的内容。作为一些补充,最后还加入了一些TensorFlow中关于图像处理的API应用;
    第8章给出了经典卷积神经网络的TensorFlow实现方式。在第7章的基础上,这一章介绍了LeNet-5、AlexNet、VGGNet、inceptionNet-V3和ResNet5个经典的卷积神经网络。这些卷积神经网络是按照出现时间的先后顺序进行组织的,并且每一个卷积神经网络都提出了一些新的想法,章内会尽可能分享这些想法;
    第9章介绍了循环神经网络。循环神经网络已经不再属于前馈神经网络的范畴,其应用多见于自然语言处理领域。除了介绍循环神经网络本身,本章也适当加入了一些其在自然语言处理领域应用的例子;
    第10章是一些深度强化学习的内容,深度强化学习是现代通用人工智能的实现方法,本章使用较短的篇幅概述了深度强化学习的相关内容;
  3. 第三部分包括11-14章内容。
    第11章介绍了使用TensorFlow进行数据读取的方法。网络需要数据的输入,为了方便这一过程,TensorFlow本身提供了一些API。本章介绍的就是这些API;
    第12章介绍了TensorFlow模型持久化。将训练好的模型存储起来并在使用时加载存储好的模型,因为模型的训练过程一般是比较耗时的。本章除了给出模型持久化的实例外,还适当介绍了TensorFlow模型持久化的原理,内容比较全面;
    第13章介绍了TensorFlow自带的TensorBoard可视化工具。网络模型中的一些标量数据、图片或者音频都可以通过TensorBoard工具可视化出来,甚至模型的计算图也可以,这大大方便了我们的调试过程;
    第14章介绍了TensorBorad加速计算。深度神经网络模型的训练过程中会产生大量的计算,TensorFlow支持使用多个GPU设备或者分布式的方式来进行并行加快计算的过程。本章先是介绍了并行计算的一些模式,然后重点放在了如何通过代码实现TensorFlow使用多个GPU设备或者分布式的方式加速计算。

第1章 开篇

本章的知识架构如下:
Fig 1.1 第一章知识架构

1.1 人工智能的发展

1.1.1 萌芽

这一阶段发生在20世纪50年底代至70年代。1956年可称为人工智能元年,这一年,美国达特茅斯学院举行了一场由其数学系助理教授John McCarthy主持的会议,会上McCarthy提出了人工智能定义:人工智能就是让机器的行为看起来就像是人所表现出来的智能行为一样。此后,人工智能迎来了第一段高峰期,计算机被广泛应用于数学和自然语言领域,用来解决代数、几何和英语问题。但是,随之而来的一些失败使得这一时期的人工智能走向低谷。

1.1.2 复苏

20世纪60年代末到70年代,“专家系统(Expert System)”出现,专家系统的出现使得人工智能的应用实际化。专家系统即一个(或一组)针对特定领域,应用大量的专家知识配合推理方法来求解复杂问题的一种人工智能计算机程序。由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分组成。

在这里插入图片描述
专家系统也属于人工智能的一个分支。其研究目标是模拟人类专家的推理思维过程,一般是将领域专家的知识和经验用一种形式化的语言进行编码并存入计算机,计算机可以使用逻辑推理规则来自动地理解这些形式化语言中的声明,对输入的事实进行逻辑推理,做出判断和决策。这就是广为人知的知识库方法(Knowledge Base)。
20世纪80年代末,一些机器学习算法开始出现,并迅速成为人工智能领域研究的热点。比较典型的代表就是用于人工智能神经网络的反向传播算法(Back Propagation,简称BP算法)。
1997年IBM的深蓝国际象棋软件战胜国际象棋世界冠军可以看成人工智能领域里一个里程碑式的成果。20世纪末,各种经典机器学习算法相继被提出,比如支持向量机(Support Vector Machine,SVM)、随机森林(Random Forests)、逻辑回归(Logistic Resgression,LR)等。
21世纪以来,Internet技术高速发展,机器学习算法模型需要的大量数据可以从互联网中更容易的获得。一些机器学习算法模型也被应用到互联网服务中。

1.1.3 现代实践:大数据+深度神经网络模型

2006年Geoffrey Hinton教授(公认机器学习领域三大泰斗,另外两位是Yann LeCun和Yoshua Bengio)何其学生在《SCIENCE》上发表了一篇基于神经网络深度学习理念的文章《Reducing the dimensionality of data with neural networks》,这篇文章使得深度学习技术成为了机器学习的主要研究方向,并开启了人工智能又一轮新的浪潮。
随着今年来计算机硬件的高速发展,尤其是基于通用GPU并行运算速度提升,深度学习在业界持续升温,一些具有代表性的深度学习算法被相继提出。首先是在语音识别领域。2011年以来,微软研究院和Google的语音识别研究人员先后采用基于深度学习的深度神经网络(Deep Neural Network,DNN)技术降低语音识别错误率达20%-30%,取得了在该领域十多年来最好的突破性进展。其次是在图像识别领域,基于深度学习的卷积神经网络(Convolutional Neural Network,CNN)同样取得了惊人的效果。2012年,CNN网络模型在ImageNet图像数据集上首次将错误率从26%降低到15%。
2014年,尤金-古斯特曼(Eugene Goostman)首次通过了图灵测试。
2016年3月,Alpha Go赢得人机对弈。

1.2 大数据

大数据通俗来讲,可以称为“巨量资料”。指以多元形式,从许多来源(如互联网)搜集而来的庞大数据组,具有实时性。专业化解释为:需要新的处理模式才能产生更强的决策力、洞察力和流程优化能力的海量、高增长率和多样化的信息资产。

1.3 机器学习与深度学习

1.3.1 机器学习

按照学习形式分类,可以将机器学习分为监督学习和无监督学习。
监督学习(Supervised Learning)也被称为有教师学习或有监督学习。学习的过程是从带有标记的训练数据中学习到如何对训练数据特征进行判断。这种形式的学习主要用于分类和预测;
无监督学习(Unsupervised Learning)是从没有标记的训练数据中学习数据的特征或是信息。强化学习是典型的无监督学习,主要用于连续决策的场合。

1.3.2 深度学习

传统机器学习算法需要在样本数据输入模型前经历一个人工特征提取的步骤,之后通过算法更新模型的权重参数。而深度学习不需要在样本数据输入模型前经过人工特征提取的步骤,将样本输入算法模型中后,模型会从样本中自动提取出基本的特征(如图像的像素)。随着模型的逐步深入,从这些基本特征中组合出了更为高层的特征,比如线条、简单形状等。简单形状可以被进一步组合,在模型越深入的地方,这些简单形状会被逐步转化为更为复杂的特征。这时,将这些提取到的特征再经历类似机器学习算法中的更新模型权重参数等步骤,也就可以得到一个令人满意的预测结果。

1.3.3 同人工智能的关系

机器学习深度学习人工智能三者之间的关系如下:

在这里插入图片描述

1.4 人工神经网络与TensorFlow

人工神经网络历史由来已久甚至要早于机器学习。TensorFlow是编写深度学习算法时需要拥到的一个框架,封装了许多类或函数,省去了我们造轮子的时间。

1.4.1 人工神经网络

人工神经网络(Artificial Neural Networks,ANNs),简称神经网络(NNs)或是连接模型(Connection Model),是一种模仿动物神经网络行为特征,进行分布式信息处理的数学算法模型。近代对ANNs的研究。始于1890年美国著名心理学家W.James对人脑结构功能的研究,过了半个世纪才逐渐形成星星之火。
1943年,心理学家W.S.McCulloch和数理学家W.Pitts建立了神经网络的数学模型,称为M-P模型。
在这里插入图片描述
由M-P模型可以看出,对于某一个神经元 j j j j j j,用来标识某一个神经元),它可能同时接收了多个输入信号(输入信号用 x n x_n xn 表示)引入权重值 w i , j w_{i,j} wi,j的目的是为了模拟突触的这种表现,其正负代表了生物神经元中突触的兴奋或是抑制,其大小则表示突触间的不同连接强度。 θ i \theta_i θi 表示一个阈值(Threshold)。
考虑到神经元的累加性,我们对全部输入信号进行累加整合,相当于生物神经元中膜电位的变化总量,其值可以表示为: n e t j ( t + 1 ) = ∑ i = 1 n w i , j x i ( t ) − θ j net_j(t+1)=\sum_{i=1}^{n}w_{i,j}x_i(t)-\theta_j netj(t+1)=i=1nwi,jxi(t)θj生物神经元的激活与否取决于输入信号与某一阈值电平的比较。M-P神经元模型也是相似的, t t t时刻 ( t = 0 , 1 , 2 , 3 , 4... t=0,1,2,3,4... t=0,1,2,3,4...) 神经元得到输入 x j ( t ) x_j(t) xj(t),只有当其输入总和超过阈值 θ j \theta_j θj 时,神经元才会在 t + 1 t+1 t+1时刻被激活,否则神经元不会被激活。
M-P神经元输出过程可以用下面的函数来表示: y i = f ( n e t j ) y_i=f(net_j) yi=f(netj)其中, y j y_j yj 表示神经元 j j j 最后的输出(输出0或者1)。函数 f f f 称为神经元的相应函数。响应函数由3个基本的作用:首先是控制输入对输出的激活作用,其次是可以对输入、输出进行函数转换;最后是将可能无限域的输入变换成指定的有限范围的输出。
可以将 n e t j net_j netj 称为净激活(net activation)。为了简化公式,可以将阈值看成是神经元 j j j 的一个输入 x 0 x_0 x0 ( x 0 = − 1 x_0=-1 x0=1)的权重 w 0 , j w_{0,j} w0,j,这样的话M-P神经元模型可以简化为:
在这里插入图片描述

公式 n e t j net_j netj则可以简化为: n e t j ( t + 1 ) = ∑ i = 0 n x i ( t ) w i , j net_j(t+1)=\sum_{i=0}^{n}x_i(t)w_{i,j} netj(t+1)=i=0nxi(t)wi,j接下来用数学知识来建模,令 X \boldsymbol{X} X 表示输入向量,用 W \boldsymbol{W} W表示权重向量,即: X = [ x 0 , x 1 , x 2 , x 3 , . . . , x n ] \boldsymbol{X}=\begin{bmatrix} x_{0},x_{1},x_{2},x_{3},...,x_{n} \end{bmatrix} X=[x0,x1,x2,x3,...,xn]
W = [ x 0 x 1 x 2 x 3 ⋮ x n ] \boldsymbol{W}=\begin{bmatrix} x_{0} \\ x_{1} \\ x_{2 } \\ x_{3} \\\vdots\\ x_{n} \end{bmatrix} W=x0x1x2x3xn可得: n e t j = X W net_j=\boldsymbol{XW} netj=XW y j = f ( n e t j ) = f ( X W ) y_j=f(net_j)=f(\boldsymbol{XW}) yj=f(netj)=f(XW)若神经元的净激活 n e t j net_j netj 为正,则称该神经元为激活状态或兴奋状态(fire),否则称为抑制状态。M-P模型知道就是“阈值加权和"的神经元模型。
1949年,Donald Hebb提出”Hebb学习规则“,即两个神经元交流越多,它们连接的效率就越高,反之就越低。
20世纪50年代末到60年代,人工神经网络得到进一步发展,更加完善的神经网络模型被提出,其中包括感知机(perception)模型和自适应线性元件。以感知机模型为例,它是由美国康奈尔大学心理学家Frank Rosenblatt受Donald Hebb的启发于1957年提出来的。感知机基于M-P模型,是一种具有单层计算单元的神经网络。它由两层神经元组成,输入层接受外界信号,输出层是许多并列的M-P神经元,这些M-P神经元被称为感知机模型的阈值逻辑单元,也称为处理单元或是计算单元。感知机模型的拓扑结构非常简单,其实就是基于M-P神经元的输入和输出两层神经元之间的简单全连接。

在这里插入图片描述
感知机的训练机制如下:给定一个数据集,它由若干个输入输出实例组成。对于每个实例,若感知机的输出值比实例输出值低太多或是高太多,则调整它的权重参数以适应这个实例。其实这就是早期网络的训练过程,在经过大量实例的过程后,感知机就“学习”到了一个函数。
感知机的工作过程可以概况如下:

  1. 首先给权重系数赋初值;
  2. 将训练集中一个实例的输入值传递到输入层,通过感知机计算输出值(0或1);
  3. 比较感知机的输出值和实例中正确的输出值是否相同:若输出1但应该为0,则减少输入值是1的例子的权重;若输出0但是应为1,增加输入值是1的例子的权重。即,若输出值小于期望值,则向着输出值更大的方向增加相应的权重;若输出值大于期望值,则向着输出值更次小的方向减少相应的权重;
  4. 对训练集中的下一个例子,重复 2、3 多次,直到感知机不再出错为止。

但是单层感知机具有一定的局限性,即它仅对线性问题具有分类能力。例如与、或、非这样的逻辑门可以称为线性门,而例如异或、同或这样的逻辑门可以称为非线性门。

为了能够解决非线性问题的分类,多层感知机被提出。所谓多层感知机,就是在输入层和输出层之间加入隐层,以形成能够将样本正确分类的凸域。多层感知机的结构拓扑图如下:

在这里插入图片描述
随着隐层层数的增多,凸域可以形成任意的形状,因此可以解决任何复杂的问题。尽管如此,由于其实现充满难度,隐层权值的训练等问题使得多层感知机无法满足当时人们的实际需要。20世纪80年代的两个杰出理论的出现使得事情出现转机。美国加州工学院物理学家J.J.Hopfield于1982年提出可用作联想存储器的互联网络—Hopfield神经网络,该模型属于循环神经网络,在其中引入了“计算能量”的概念,并给出了网络稳定性判断,开创了神经网络用于联想记忆和优化计算的新途径。另外一个理论是David E.Rumerlhart以及James L.McCelland研究小组在1986年发表的《并行分布式处理》,主要分析了具有非线性连续变换函数的多层感知机的误差反向传播(Error Back Propagation,或简称反向传播)。反向传播算法即BP算法,基于BP算法的多层感知机网络就是BP网络。这两个成果使人们对于模仿脑信息处理的智能计算机的研究重新充满了希望。从此,人工神经网络进入复兴时期。

1.4.2 TensorFlow

TensorFlow是在进行深度学习过程中用到的的一个框架工具。2015年11月在Github上开源。

1.5 其他主流深度学习框架介绍

除了TensorFlow之外,还有许多其他优秀框架。例如:Keras、Caffe、Theano、Torch、MXNet、CNTK等框架。

1.6 机器学习的常见任务

机器学习可以完成多种类型的任务,常见的任务有分类、输入缺失分类、回归、去噪、转录、机器翻译、异常检测、结构化输出等。

1.6.1 分类

分类任务的最终目的是通过机器学习算法将输入的数据按预设的类别进行划分。
MNIST手写字识别是一个入门深度学习必须掌握的、最基础的任务。该任务输入的是几万张28$\times$28像素的黑白图片,上面标有0-9十个数字。要求将这些手写图片根据其上所写数字进行分类。
对象识别是计算机进行人脸识别的基本技术,属于分类任务中较为复杂的一种。

1.6.2 回归

回归任务源于概率论与数理统计中的回归分析。在这类任务中,需要对给定的输入预测数值。回归分析研究的是变量与变量之间的相关关系。

1.6.3 去噪

去噪任务会将含有噪声的输入样本经过某一算法得到未经损坏的样本,或者在得到干净的输入样本后进行其他任务。

1.6.4 转录

机器学习任务中,转录(Transcription)会对一些非结构化或难以描述的数据进行转录,使其呈现为相对简单或结构化的形式。例如:输入文字的图片输出字符或是输入语音输出字符。

1.6.5 机器翻译

机器翻译任务通常适用于对自然语言处理,比如输入汉语,计算机通过机器学习算法可以将其转化为另一种语言,如英语、德语等。机器翻译与自然语言处理(Natural Language Processing,NLP)的区别主要在于自然语言处理主要目的是实现人机通信。

1.6.6 异常检测

计算机会根据正常的标准在一组事件或对象中进行筛选,并对不正常或不典型的个体进行标记。

1.6.7 结构化输出

结构化输出指的是这类任务输出数据包含多个独立的值,而每个值之间存在重要的关系,只是对于输出数据的结构没有过多限制。

1.7 深度学习的现代应用

深度学习的应用最早见于图像识别,这可以追溯到2012年,DNN(Deep Neural Networks,深度神经网络)技术在图像识别领域取得在Imagenet评测上将错误率由26%降低到15%的惊人效果。其他关于深度学习的应用主要有以下几个方面:

  1. 计算机视觉;
  2. 光学字符识别;
  3. 人脸识别;
  4. 自然语言处理;
  5. 语音识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值