一、深度学习的发展及其应用
1.1 深度学习的发展历程
1956年,John McCarthy(约翰·麦卡锡)等人在美国达特茅斯学院(Dartmounth College)开会探讨如何使用机器模拟人的智能时,提出了“人工智能”这一概念。
这标志着人工智能学科的诞生,这一年也称为人工智能元年。
作为人工智能最重要的一个分支,深度学习近年来发展迅速,在国内外都引起了广泛的关注。
1.2 深度学习的起源阶段
1943年,心理学家Warren Mcculloch和数理逻辑学家Walter Pitts在合作的论文中提出并给出了人工神经网络的概念及人工神神经元的数学模型,从而开创了人类神经网络研究的时代。
1956年,心理学家Frank Rosenblatt受到这种思想的启发,认为这个简单想法足以创造一个可以学习识别物体的机器,并设计了算法和硬件。直到1957年,Frank Rosenblatt在《New York Times》上发表文章《Electronic ‘Brain’ Teaches Itself》,首次提出了可以模型人类感知能力的机器,并称之为感知机(Perceptron)
感知机是有单层计算单元的神经网络,由线性元件及阈值元件组成。感知机的逻辑图如图
1969年,美国数学家及人工智能先驱Marvin Minsky(马文·明斯基)在其著作中证明感知器本质上是一种线性模型,只能处理线性分类的问题,这使得神经网络的研究陷入近20年的停滞。
1.3 深度学习的发展阶段
沉寂了多年后,关于神经网络的研究开始慢慢复苏。
1986年,Geoffrey Hinton(杰弗里·辛顿)提出一种适用于多层感知器的反向传播算法———BP算法。
BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。
其算法基本思想为:在前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
BP算法完美解决了非线性分类的问题,人人工神经网络再次引起人们广泛关注。
1989年,Robert Hecht-Nielsen(罗伯特·赫克特-尼尔森)证明了多层感知器的万能逼近原理。
此博文中介绍的论文是 1990 年 Le Page 组织的一个会议的 Invited paper.
-
一维阶梯函数的线性组合能逼近任何连续一维连续函数。
-
Sigmoidal 函数可以逼近阶梯函数。因此,一维Sigmoidal函数的线性组合能逼近任何连续函数。
-
把坐标轴在R^{n}中沿各个方向旋转 (如同CT原理),在每一射线上,构造Sigmoidal函数的线性组合,就可以逼近R^{n}中任何连续函数。
-
优点:用一个简单到不能再简单的函数的线性组合和叠合可以逼近任何连续函数。
-
缺点:天下没有免费的午餐。
-
为了R^{n} 中函数达到精度1/N。需要识别 O(n^{N}) 个参数。这是无法承受的。
-
无论用阶梯函数还是Sigmoidal 函数,关键是利用其跳跃部分。因此,在用梯度法时,经常会发生导数不可控。
-
上述两个致命缺点长期阻碍了神经网络的发展和应用。深度学习就是围绕着这些问题来做的。通俗的讲,是实现神经网络逼近能力的技术
由于20世纪80年代计算机的硬件水平有限,运算能力跟不上,导致神经网络规模增大时使用BP算法出现了“梯度消失”问题,这导致BP算法的发展受到了限制,人工神经网络的发展再次进入到瓶颈期。
1.4 深度学习的爆发阶段
2006年是深度学习元年。这一年,Geoffey Hinton(杰弗里·辛顿)提出了深度学习的概念,并提出了深层网络训练中梯度消失问题的解决方案———通过无监督预训练对权值进行初始化,再加上有监督训练微调。
1、无监督预训练是用来训练的数据不包含输出目标,需要学习算法自动学习到一些有价值的信息。
2、有监督训练,又称监督学习,是一个机器学习中的方法,可以由训练资料中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练资料是由输入物件(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。
2012年,Geoffey Hinton 课题组为了证明深度学习的潜力,首次参加ImageNet图像识别比赛,其构建的卷积神经网络模型AlexNet一举夺冠,且再分类准确率和分类速度上碾压第二名SVM(支持向量机模型)。
2014年,Facebook公司基于深度学习技术的DeepFace项目,在人脸识别方面的准确率已经达到97%以上,跟人眼识别的准确率几乎没有差别,再一次证明了深度学习算法在图像识别方面的领先性。
2016年,Google公司基于深度学习开发的AlphaGo以4:1的比分战胜了国际顶尖围棋高手李世石,使得深度学习在世界范围内再次掀起狂潮。
又一年,2017年,世界第一的中国棋手柯洁九段与AlphaGo进行对抗
1.5深度学习的应用领域
1、计算机视觉
1、什么是计算机视觉(Computer vision)?
计算机视觉(Computer Vision),人靠视觉来做饭、越过障碍等等,Computer Vision就是让计算机有视觉,目的是让计算机看懂图像(image)和视频(video),手机或相机固然可以拍出很精细和细节的照片,比人看的远,清除,但是李飞飞教授说过:“
hear is the not the same as to listen, To take pictures is not the same as to see”,所以计算机视觉目的是看懂。
看-------看是很简单的,计算机比人更会看(image, video)
懂-----我认为懂是让计算机能够在image和video中,根据人的命令来做相应的动作。就像人看懂一样,首先人要看到东西(image or video),然后大脑根据东西做出相关动作。由于计算机不能够像人一样global地分析image or video,所以我们要做image process :为存储、除数和表示而对image data进行处理,以便计算机自动理解。自动理解后,我们向其发送指令,它便可以和人一样。
2、自然语言处理
自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分
1.6深度学习框架简介
1、TensorFlow
TensorFlow是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。
ensorFlow 是一个用于研究和生产的开放源代码机器学习库。TensorFlow 提供了各种 API,可供初学者和专家在桌面、移动、网络和云端环境下进行开发。
TensorFlow是采用数据流图(data flow graphs)来计算,所以首先我们得创建一个数据流流图,然后再将我们的数据(数据以张量(tensor)的形式存在)放在数据流图中计算. 节点(Nodes)在图中表示数学操作,图中的边(edges)则表示在节点间相互联系的多维数据数组, 即张量(tensor)。训练模型时tensor会不断的从数据流图中的一个节点flow到另一节点, 这就是TensorFlow名字的由来。
张量(Tensor):张量有多种. 零阶张量为 纯量或标量 (scalar) 也就是一个数值. 比如 [1],一阶张量为 向量 (vector), 比如 一维的 [1, 2, 3],二阶张量为 矩阵 (matrix), 比如 二维的 [[1, 2, 3],[4, 5, 6],[7, 8, 9]],以此类推, 还有 三阶 三维的 …
张量从流图的一端流动到另一端的计算过程。它生动形象地描述了复杂数据结构在人工神经网中的流动、传输、分析和处理模式。
在机器学习中,数值通常由4种类型构成:
(1)标量(scalar):即一个数值,它是计算的最小单元,如“1”或“3.2”等。
(2)向量(vector):由一些标量构成的一维数组,如[1, 3.2, 4.6]等。
(3)矩阵(matrix):是由标量构成的二维数组。
(4)张量(tensor):由多维(通常)数组构成的数据集合,可理解为高维矩阵。
使用TensorFlow的优点主要表现在如下几个方面:
(1)TensorFlow有一个非常直观的构架,顾名思义,它有一个“张量流”。用户可以很容易地看到张量流动的每一个部分(借助TensorBoard,在后面的章节会有所提及)。
(2)TensorFlow可轻松地在CPU/GPU上部署,进行分布式计算。
(3)TensorFlow跨平台性高,灵活性强。TensorFlow不但可以在Linux、Mac和Windows系统下运行,甚至还可以在移动终端下工作。
当然,TensorFlow也有不足之处,主要表现在它的代码比较底层,需要用户编写大量的代码,而且很多相似的功能,用户还不得不“重造轮子”。但“瑕不掩瑜”,TensorFlow还是以雄厚技术积淀、稳定的性能,一骑红尘,“笑傲”于众多深度学习框架之巅。
2、Caffe
Caffe是一个深度学习框架,Caffe在BSD许可下开源,使用C++编写,带有Python接口。是贾扬清在加州大学伯克利分校攻读博士期间创建了Caffe项目。项目托管于GitHub,拥有众多贡献者。Caffe应用于学术研究项目、初创原型甚至视觉、语音和多媒体领域的大规模工业应用。雅虎还将Caffe与Apache Spark集成在一起,创建了一个分布式深度学习框架CaffeOnSpark。2017年4月,Facebook发布Caffe2,加入了递归神经网络等新功能。2018年3月底,Caffe2并入PyTorch。
特点
Caffe 完全开源,并且在有多个活跃社区沟通解答问题,同时提供了一个用于训练、测试等完整工具包,可以帮助使用者快速上手。此外 Caffe 还具有以下特点:
模块性:Caffe 以模块化原则设计,实现了对新的数据格式,网络层和损失函数轻松扩展。
表示和实现分离:Caffe 已经用谷歌的 Protocl Buffer定义模型文件。使用特殊的文本文件 prototxt 表示网络结构,以有向非循环图形式的网络构建。
Python和MATLAB结合: Caffe 提供了 Python 和 MATLAB 接口,供使用者选择熟悉的语言调用部署算法应用。
GPU 加速:利用了 MKL、Open BLAS、cu BLAS 等计算库,利用GPU实现计算加速。
结构
简单来讲,Caffe 中的数据结构是以 Blobs-layers-Net 形式存在。其中,Blobs 是通过 4 维向量形式(num,channel,height,width)存储网络中所有权重,激活值以及正向反向的数据。作为 Caffe 的标准数据格式,Blob 提供了统一内存接口。Layers 表示的是神经网络中具体层,例如卷积层等,是 Caffe 模型的本质内容和执行计算的基本单元。layer 层接收底层输入的 Blobs,向高层输出 Blobs。在每层会实现前向传播,后向传播。Net 是由多个层连接在一起,组成的有向无环图。一个网络将最初的 data 数据层加载数据开始到最后的 loss 层组合为整体。
3、PyTorch
PyTorch是一个的Python机器学习开源库,基于Torch,用于自然语言处理等应用程序。
2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络。
PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。
PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用
优点:
-
PyTorch是相当简洁且高效快速的框架
-
设计追求最少的封装
-
设计符合人类思维,它让用户尽可能地专注于实现自己的想法
-
与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新
-
PyTorch作者亲自维护的论坛 供用户交流和求教问题
-
入门简单
4、MXNet
MXNet 是亚马逊(Amazon)选择的深度学习库。它拥有类似于 Theano 和 TensorFlow 的数据流图,为多 GPU 配置提供了良好的配置,有着类似于 Lasagne 和 Blocks 更高级别的模型构建块,并且可以在你可以想象的任何硬件上运行(包括手机)。对 Python 的支持只是其冰山一角—MXNet 同样提供了对 R、Julia、C++、Scala、Matlab,和 Javascript 的接口。
增强了sparse.dot运算符的性能。
MXNet自动设置OpenMP,以便在未设置NUM_OMP_THREADS时使用所有可用的CPU内核以最大限度地提高CPU利用率。
一元运算符和二元运算符可以避免在小型阵列上使用OpenMP,因为使用OpenMP实际上会损害多线程开销。
在CPU上显着提高了broadcast_add,broadcast_mul等的性能 。
使用NCCL 2.1版或更新版本时,建议将环境变量NCCL_LAUNCH_MODE设置为PARALLEL。
MXNet可以加速任何数值计算。神经网络中,每一层由一个线性函数和一个非线性变换组成。
开发环境搭建链接:
https://blog.csdn.net/weixin_45626468/article/details/114692986?spm=1001.2014.3001.5501