1、深度学习介绍目录 深度学习概述 深度学习常见场景 深度学习常用算法介绍 深度学习常用框架介绍 TensorFlow入门 深度学习未来和展望21.1 深度学习概述3深度学习(Deep Learning,DL)由Hinton等人于2006年提出,是机器学习(MachineLearning,ML)的一个新领域。深度学习起源于人工神经网络,它的定义:通过组合低层特征形成更加抽象的高层特征或类别,从而从大量的输入数据中学习有效特征表示,并把这些特征用于分类、回归和信息检索的一种技术。深度学习被引入机器学习使其更接近于最初的目标-人工智能AI,Artificial Intelligence。深度学习是学习
2、样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字、图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。1.2 与机器学习关系4如上图,人工智能是最早出现的,也是最大、最外侧的同心圆;其次是机器学习,稍晚一点;最内侧,是深度学习,当今人工智能大爆炸的核心驱动。1.3 根本概念5深度学习(Deep Learning,DL):通过组合低层特征形成更加抽象的高层特征或类别,从而从大量的输入数据中学习有效特征表示,并把这些特征用于分类、回归和信息检索的一种技术。人工神经网络:是一种模仿动物神经网络行为特征,进行分布式并行信
3、息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而到达处理信息的目的。深度神经网络:包含多个隐含层的神经网络。模型:可以理解成算法和数据的合集。模型训练:利用模型的算法,使用深度神经网络进行权值的训练,最终得出一个最优解。模型预测:使用训练完成的模型进行预测,得出分类识别结果。目录 深度学习概述 深度学习常见场景 深度学习常用算法介绍 深度学习常用框架介绍 TensorFlow入门 深度学习未来和展望62 深度学习场景7当前深度学习使用的场景主要在无人驾驶,人脸识别,拍照购,智能客服,文字识别,语音识别,目标检测,图片分类等方面。深度学习无人驾驶人脸
4、识别拍照购智能客服文字识别目标检测图像分类语音识别2.1 深度学习场景-无人驾驶8无人驾驶:深度学习利用其深层的神经网络,通过一定的算法能训练出一个识别率非常高的分类器,从而能够使环境感知局部高精度的完成,为驾驶决策模块提供正确的环境信息,保证无人驾驶正常的完成。2.2 深度学习场景-人脸识别9人脸识别:人脸信息的识别,是对人脸的信息加以提取然后进行识别的方法,一个最重要的目标就是分辨不同人的信息,区分身份。面部识别的主要方式有:几何结构、子空间局部特征以及深度学习。安防领域开户审核考勤门禁.2.3 深度学习场景-文字识别10文字识别:基于深度学习的文字识别系统的实现方法,属于图像处理技术领域
5、,将包含文字的图片进行预处理、切分、识别,重组成一段文本,从而实现图片到文本的转换。涉及到图像预处理、图片切分、图片识别和文字重组。审核车牌识别文档识别.2.4 深度学习场景-图像识别11图片识别:图像识别与人脸及文字识别类似,主要流程包括图像预处理,图像分割,图像特征提取和图像分类。图像审核拍照购工业医疗检测目标识别.2.5 深度学习场景-语音识别12语音识别:一个完整的语音识别系统可大致分为3局部:语音特征提取、声学模型与模式匹配和语言模型与语言处理。其中声学模型是识别系统的底层模型,并且是语音识别系统中最关键的一局部。语音审核语音转文字语音控制.目录 深度学习概述 深度学习常见场景 深度
6、学习常用算法介绍 深度学习常用框架介绍 TensorFlow入门 深度学习未来和展望133.1 人工神经网络ANN14人工神经网络Artificial Neural Networks是一种模仿生物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点神经元之间相互连接的权重,从而到达处理信息的目的。3.1 人工神经网络ANN15神经网络3.1 人工神经网络ANN16人工神经网络的重要概念:1 权值矩阵:相当于神经网络的记忆!在训练的过程中,动态调整和适应。2 鼓励函数:3.1 人工神经网络ANN17人工神经网络的重要概念:鼓励函数很重要,无论是
7、对建立神经网络的模型,还是理解神经网络。首先要了解,它有以下几个影响:1 如何能更好的求解目标函数的极值!高等数学中求解函数极值的知识!可微,单调!2 如何提升训练效率,让梯度的优化方法更稳定;3 权值的初始值,不影响训练结果!3.1 卷积神经网络CNN18卷积神经网络Convolutional Neural Networks/CNNs/ConvNets与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。与普通神经网络不同之处:卷积神经网络默认输入是
8、图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。3.1 卷积神经网络CNN19卷积操作:对图像不同的数据窗口数据和滤波矩阵一组固定的权重:因为每个神经元的权重固定,所以又可以看做一个恒定的滤波器filter做内积逐个元素相乘再求和的操作就是所谓的卷积操作,也是卷积神经网络的名字来源。3.1 卷积神经网络CNN203.1 卷积神经网络CNN213.1 卷积神经网络CNN22卷积层Convolutional layer,卷积神经网路中每层卷积层由假设干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一
9、层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。线性整流层Rectified Linear Units layer,ReLU layer,这一层神经的鼓励函数Activation function使用线性整流Rectified Linear Units,ReLUf(x)=max(0,x)。池化层Pooling layer,通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。全连接层 Fully-Connected layer,把所有局部特征结合变成全局特征,用来计算最后每一类的得分。3
10、.1 卷积神经网络CNN233.1 卷积神经网络CNN24在图像处理中,往往把图像表示为像素的向量,比方一个10001000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为10000001000000=1012,这样就太多了,根本没法训练。所以图像处理要想练成神经网络大法,必先减少参数加快速度。就跟辟邪剑谱似的,普通人练得很挫,一旦自宫后内力变强剑法变快,就变的很牛了。3.1 卷积神经网络CNN25卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知。在下方右图中,假设每个神经元
11、只和1010个像素值相连,那么权值数据为1000000100个参数,减少为原来的万分之一。而那1010个像素值对应的1010个参数,其实就相当于卷积操作。3.1 卷积神经网络CNN26这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。怎么理解权值共享呢?我们可以这100个参数也就是卷积操作看成是提取特征的方式,该方式与位置无关。这其中隐含的原理那么是:图像的一局部的统计特性与其他局部是一样的。这也意味着我们在这一局部学习的特征也能
12、用在另一局部上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。3.1 卷积神经网络CNN27上面所述只有100个参数时,说明只有1个100*100的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比方32个卷积核,可以学习32种特征。在有多个卷积核时,如以下图所示:3.1 卷积神经网络CNN28池化,也称作下采样,可以实现降维。常用有最大值池化和均值池化。3.1 卷积神经网络CNN29全连接层:连接所有的特征,将输出值送给分类器如softmax分类器,最终得出识别结果。3.2 常见网络模型30LeNet3.2 常见网络模型31AlexNet3.2 常见网络模型32VGG1
13、64 计算图 Computational Graph深度学习起源于人工神经网络,它的定义:通过组合低层特征形成更加抽象的高层特征或类别,从而从大量的输入数据中学习有效特征表示,并把这些特征用于分类、回归和信息检索的一种技术。深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon等等。线性整流层Rectified Linear Units layer,ReLU layer,这一层神经的鼓励函数Activation functi
14、on使用线性整流Rectified Linear Units,ReLUf(x)=max(0,x)。Google、Microsoft、Facebook等巨头都参与了这场深度学习框架大战,此外,还有毕业于伯克利大学的贾扬清主导开发的Caffe,蒙特利尔大学LisaLab团队开发的Theano,以及其他个人或商业组织奉献的框架。部署模型,提供预测效劳square(linear_model-y)Tensorflow编程包含两个步骤:与普通神经网络不同之处:卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。print(node1,node2
15、)以下图是各个开源框架在GitHub上的数据统计2021年初。构造一个简单的计算图:每个节点将0或多个tensor作为输入,输出一个tensor。adder_node:Tensor(add:0,dtype=float32)在有多个卷积核时,如以下图所示:首先要了解,它有以下几个影响:评估一个节点,必须在一个会话Session中运行计算图,会话封装了Tensorflow运行时的状态和控制核心层面向机器学习的研究人员,以及对模型控制精细的相关人员。3.2 常见网络模型33GoogleNet InceptionV43.2 常见网络模型34比较3.3 其他深度学习算法35自动编码器AutoEncode
16、r稀疏编码Sparse Coding限制玻尔兹曼机RBM目录 深度学习概述 深度学习常见场景 深度学习常用算法介绍 深度学习常用框架介绍 TensorFlow入门 深度学习未来和展望364.1 开源框架概述37深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon等等。以下图是各个开源框架在GitHub上的数据统计2021年初。4.1 开源框架概述38Google、Microsoft、Facebook等巨头都参与了这场深度学
17、习框架大战,此外,还有毕业于伯克利大学的贾扬清主导开发的Caffe,蒙特利尔大学LisaLab团队开发的Theano,以及其他个人或商业组织奉献的框架。下表是主流深度学习框架在各个维度的评分。4.2 TensorFlow39TensorFlow最初是由研究人员和Google Brain团队针对机器学习和深度神经网络进行研究所开发的,目前开源之后可以在几乎各种领域适用。TensorFlow灵活的架构可以部署在一个或多个CPU、GPU的台式以及效劳器中,或者使用单一的API应用在移动设备中。4.3 Caffe40Caffe由加州大学伯克利的PHD贾扬清开发,全称Convolutional Arch
18、itecture for Fast Feature Embedding,是一个清晰而高效的开源深度学习框架,目前由伯克利视觉学中心Berkeley Vision and Learning Center,BVLC进行维护。贾扬清曾就职于MSRA、NEC、Google Brain,他也是TensorFlow的作者之一,目前任职于Facebook FAIR实验室。Caffe2脸书(Facebook)出品,为生产环境设计,提供在各种平台包括移动设备的运行。4.4 Torch41Torch是一个有大量机器学习算法支持的科学计算框架,其诞生已经有十年之久,但是真正起势得益于Facebook开源了大量Tor
19、ch的深度学习模块和扩展。Torch另外一个特殊之处是采用了编程语言Lua(该语言曾被用来开发视频游戏)。PyTorch是基于Torch的衍生,支持Python语言,实现了机器学习框架 Torch 在 Python 语言环境的执行。4.5 Theano422021年诞生于蒙特利尔理工学院,Theano派生出了大量深度学习Python软件包,最著名的包括Blocks和Keras。Theano的核心是一个数学表达式的编译器,它知道如何获取你的结构。并使之成为一个使用numpy、高效本地库的高效代码,如BLAS和本地代码C+在CPU或GPU上尽可能快地运行。它是为深度学习中处理大型神经网络算法所需的
20、计算而专门设计的,是这类库的首创之一开展始于2007年,被认为是深度学习研究和开发的行业标准。4.6 Deeplearning4j43Deeplearning4j是“for Java的深度学习框架,也是首个商用级别的深度学习开源库。Deeplearning4j由创业公司Skymind于2021年6月发布,使用 Deeplearning4j的不乏埃森哲、雪弗兰、博斯咨询和IBM等明星企业。DeepLearning4j是一个面向生产环境和商业应用的高成熟度深度学习开源库,可与Hadoop和Spark集成,即插即用,方便开发者在APP中快速集成深度学习功能。Variable(.run(fixW,fi
21、xb)3#0阶张量,一个标量scalar with shape当前深度学习使用的场景主要在无人驾驶,人脸识别,拍照购,智能客服,文字识别,语音识别,目标检测,图片分类等方面。面部识别的主要方式有:几何结构、子空间局部特征以及深度学习。如上图,人工智能是最早出现的,也是最大、最外侧的同心圆;run(loss,x:1,2,3,4,y:0,-1,-2,-3)全连接层:连接所有的特征,将输出值送给分类器如softmax分类器,最终得出识别结果。可视化开发,开发框架会越来越普遍,入门更加简单。print(linear_model:,linear_model)损失函数测量当前模型与真实数据之间的差距,对于
22、线性模型,我们使用标准损失函数,求模型预测结果与实际数据之间差值的平方和sum the squares of the deltas它是为深度学习中处理大型神经网络算法所需的计算而专门设计的,是这类库的首创之一开展始于2007年,被认为是深度学习研究和开发的行业标准。上面所述只有100个参数时,说明只有1个100*100的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比方32个卷积核,可以学习32种特征。变量Variable允许我们为计算图添加训练参数。部署模型,提供预测效劳minimize(loss)4.7 MXNet44出自CXXNet、Minerva、Purine 等工程的开发
23、者之手,主要用C+编写。MXNet 强调提高内存使用的效率,甚至能在智能 上运行诸如图像识别等任务。4.8 CNTK45CNTKComputationalNetworkToolkit是微软研究院MSR开源的深度学习框架。它最早由startthedeeplearningcraze的演讲人创立,目前已经开展成一个通用的、跨平台的深度学习系统,在语音识别领域的使用尤其广泛。目录 深度学习概述 深度学习常见场景 深度学习常用算法介绍 深度学习常用框架介绍 TensorFlow入门 深度学习未来和展望465.1 引言47TensorFlow的API主要分两个层次,核心层和基于核心层的高级API。核心层面
24、向机器学习的研究人员,以及对模型控制精细的相关人员。高级API使用和学习相对容易,简化重复性任务,使不同的用户之间保持一致性。注意,一些高级API的方法名中包含contrib,意味着这些API依然处于开发过程中,这些方法在后续的TensorFlow版本中可能改变或者不再使用5.2 安装48推荐使用Anaconda环境安装,集成了Python,numpy等。Windows要求Python版本为3.5。在线环境直接使用pip install tensorflow tensorflow_gpu离线环境可下载whlpip install xx.whl进行安装,安装过程中假设提示缺少依赖包可下载安装后再
25、继续安装。推荐Python开发工具 PyCharm安装成功后验证安装是否成功$pythonimport tensorflow as tftf._version_#查看TF版本tf._path_#查看TF安装路径5.3 张量Tensor49数据的核心单元,一个tensor是一个包含任意维度的数组,张量的阶Tensor rank是数组的维度,如下:3#0阶张量,一个标量scalar with shape1.,2.,3.#1阶张量;一个向量vector with shape 31.,2.,3.,4.,5.,6.#2阶 张量;一个矩阵matrix with shape 2,31.,2.,3.,7.,8
26、.,9.#3阶 张量tensor with shape 2,1,32 是指1.,2.,3.和 7.,8.,9.1 是指1.,2.,3.中有1个 1.,2.,3.3 是指 1.,2.,3.中有3个:1.,2.,3.5.4 计算图 Computational Graph50Tensorflow编程包含两个步骤:1.构造计算图 2.运行计算图计算图是什么?计算图是一系列的计算操作抽象为图中的节点。构造一个简单的计算图:每个节点将0或多个tensor作为输入,输出一个tensor。一种类型的节点是常量节点constant,就如同tensorflow中的常数,它有0个输入,输出一个值。构建两个浮点型te
27、nsor:node1和node25.4 计算图 Computational Graph51构造一个简单的计算图:每个节点将0或多个tensor作为输入,输出一个tensor。一种类型的节点是常量节点constant,就如同tensorflow中的常数,它有0个输入,输出一个值。构建两个浮点型tensor:node1和node2node1=tf.constant(3.0,tf.float32)node2=tf.constant(4.0)#also tf.float32 implicitly print(node1,node2)输出结果:Tensor(Const:0,shape=(),dtype=
28、float32)Tensor(Const_1:0,shape=(),dtype=float32)5.4 计算图 Computational Graph52需要说明,打印结果并不是我们期待的3.0,4.0,因为这是打印的节点属于计算操作,当评估运行之后,才是我们期待的值。评估一个节点,必须在一个会话Session中运行计算图,会话封装了Tensorflow运行时的状态和控制接下来创立一个Session会话对象,调用run方法,运行计算图,去评估node1和node2sess=tf.Session()print(sess.run(node1,node2)输出结果:3.0,4.0 5.4 计算图 C
29、omputational Graph53可以使用计算操作将多个节点组合,构建更复杂的计算,例如将两个常量节点相加,产生一个新的计算图:node3=tf.add(node1,node2)print(node3:,node3)print(sess.run(node3):,sess.run(node3)输出结果:node3:Tensor(Add:0,shape=(),dtype=float32)sess.run(node3):7.0 5.4 计算图 Computational Graph54计算图可以使用占位符placeholder参数化的从外部输入数据,placeholder的作用是在稍后提供一个
30、值#构造计算图 a=tf.placeholder(tf.float32)b=tf.placeholder(tf.float32)adder_node=a+b#运行计算图 print(adder_node:,adder_node)print(sess.run(adder_node,a:3,b:4.5)print(sess.run(adder_node,a:1,3,b:2,4)输出结果:adder_node:Tensor(add:0,dtype=float32)7.5 3.7.5.4 计算图 Computational Graph55在机器学习中,需要模型可以任意输入,为了模型具有可训练能力,需要
31、修正计算图,使对于同样的输入得到新的输出。变量Variable允许我们为计算图添加训练参数。构造一个变量,需要提供类型和初始值:W=tf.Variable(.3,tf.float32)b=tf.Variable(-.3,tf.float32)x=tf.placeholder(tf.float32)linear_model=W*x+b 5.4 计算图 Computational Graph56常量节点在调用tf.constant时就被初始化,而变量在调用tf.Variable时并不初始化,必须显性的执行如下操作:init=tf.global_variables_initializer()sess
32、.run(init)意识到init对象是Tensorflow子图初始化所有全局变量的句柄是重要的,在调用sess.run(init)方法之前,所有变量都是未初始化的。因为x是一个占位符,我们可以指定几个值来评估linear_model模型训练print(linear_model:,linear_model)print(sess.run(linear_model,x:1,2,3,4)得到输出:linear_model:Tensor(add_1:0,dtype=float32)0.0.30000001 0.60000002 0.90000004 5.4 计算图 Computational Grap
33、h57我们创立了一个模型,但是不知道这个模型的效果怎么样,基于训练数据来评估模型,还需要一个placeholder y 来提供期望值,我们需要一个损失函数loss function损失函数测量当前模型与真实数据之间的差距,对于线性模型,我们使用标准损失函数,求模型预测结果与实际数据之间差值的平方和sum the squares of the deltasy=tf.placeholder(tf.float32)squared_deltas=tf.square(linear_model-y)loss=tf.reduce_sum(squared_deltas)print(loss:,loss)pri
34、nt(sess.run(loss,x:1,2,3,4,y:0,-1,-2,-3)输出结果:loss:Tensor(Sum:0,dtype=float32)23.66 5.4 计算图 Computational Graph58fixW=tf.assign(W,-1.)fixb=tf.assign(b,1.)sess.run(fixW,fixb)print(fix loss:,sess.run(loss,x:1,2,3,4,y:0,-1,-2,-3)输出结果:fix loss:0.0 我们猜测最优的W和b值,但是在机器学习中,就是自动的寻找这些最优的模型参数。5.5 API tf.train59T
35、ensorflow提供了优化器Optimizer慢慢改变每个变量来最小化损失函数。最简单的Optimizer是梯度下降gradient descent,它根据损失函数相对于该变量的导数大小来修改参数值,一般来讲,手动计算导数是乏味且易出错的,Tensorflow可以使用方法tf.gradients自动的为给定模型计算导数。优化器通常做这个工作。5.5 API tf.train60train=optimizer.minimize(loss)print(train:n,trian)sess.run(init)#重置变量到初始化值 for i in range(1000):sess.run(trai
36、n,x:1,2,3,4,y:0,-1,-2,-3)print(sess.run(W,b)输出结果:train:name:GradientDescent op:NoOp array(-0.9999969,dtype=float32),array(0.99999082,dtype=float32)5.6 作业-图像分类61根本:使用TensorFlow对商品图像进行训练,模型可自己选择,或自定义使用TensorBoard查看训练过程输出商品分类模型进阶:使用测试样本集验证模型准确率部署模型,提供预测效劳目录 深度学习概述 深度学习常见场景 深度学习常用算法介绍 深度学习常用框架介绍 TensorFlow入门 深度学习未来和展望626.1 未来与展望63无监督半监督学习所占比重会越来越大。用于学习的硬件设备会越来越强大,效率越来越高。有向移动端转移的趋势。可视化开发,开发框架会越来越普遍,入门更加简单。小数据样本的训练所占比重会增大。