深度学习笔记第一篇

所借鉴到的blog如下:
链接:https://blog.csdn.net/abc200941410128/article/details/79269386
https://blog.csdn.net/qq_41598072/article/details/81750349
https://blog.csdn.net/zheyanyishhi/article/details/78452596

https://blog.csdn.net/on2way/article/details/50094845

1.1 了解深度学习

机器学习是人工智能的一个分支,是实现人工智能的方法。而深度学习是一种实现机器学习的技术,深度神经网络是实现深度学习的一种具体的实现工具。在这里插入图片描述

1.2 为什么学习深度学习?

很多年前机器学习很强调“做特征”。但是随着数据的不断累积,有了另外一种选择,就是构建一个足够复杂的可训练系统,让系统自身去完成特征的学习过程——深度学习。它简化了特征工程的难度。并且机器学习能完成的任务,深度学习都可以完成。深度学习尤其擅长处理图像识别、物体检测、自然语言翻译、语音识别和趋势预测等。

  • 传统机器学习:算法由于可训练参数数量的限制,导致它所能学到的特征有限,在一些情况下可能无法形成足够复杂的曲面,因此它十分依赖特征工程去增加复杂度。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习等。
  • 深度学习:可以形成足够复杂的曲面用于拟合特征,换一种说法就是深度神经网络具有强大的表达能力。这种特征的习得是以海量数据为基础的。因此在数据量较少时使用深度学习很难得到理想的结果。(因为学习模型在做数据拟合或回归,或者是在做统计)它是高度数据依赖型的算法,它的性能通常随着数据量的增加而不断增强,也就是说它的可扩展性(Scalability)显著优于传统的机器学习算法。
    在这里插入图片描述

1.3 什么是深度学习?

机器自己学习出来的特征,它们存在于机器空间。为了提高神经网络的学习性能,人们不断地进行大量重复的网络参数调整。网络进一步加深,出现了多层次的“表示学习”,它把学习的性能提升到另一个高度。以至于学习的层次变多——Deep Learning(深度学习)。 深度学习的学习对象同样是数据。与传统机器学习所不同的是,它需要大量的数据,也就是“大数据(Big Data)”。

传统的机器学习建模方式所得的曲面(线)复杂度不足,无法用来拟合数据。
在这里插入图片描述

  • 数据拟合:通过诸如采样、实验等方法获得若干离散的数据(称为样本数据点),然后根据这些数据,希望能得到这些变量之间的函数关系,这个过程称为数据拟合(Data fitting),在数理统计中也称为回归分析(Regression analysis)。
  • 分类(Classification)问题:在实际应用中,输出的结果是离散型的(比如识别图片里是人、猫、狗等标签的一种)。

1.4 神经元

  • 生物神经元
    ① 神经元间通过突触两两相连
    ② 树突接收来自多个神经元的信号
    ③ 轴突根据树突传递过来的综合信号的强弱是否超过某一阈值来决定是否将该信号传递给下一个神经元

在这里插入图片描述
生物神经元的启示
① 每个神经元都是一个多输入单输出的信号处理单元
② 神经元具有阈值特性

  • 人工神经元
    在这里插入图片描述
    在这里插入图片描述

1.5 人工神经网络(Artificial Neural Network,ANN)

下面列举从神经网络的观点来看传统的拟合函数和曲线曲面。

一元函数:有三层神经网络,其中只有一个隐层。隐层上有n个节点,激活函数分别为ψ1ψ2…ψn基函数(从这里我们将基函数称为“激活函数”)。输入层到隐层的权设为常值1,隐层到输出层的权为基函数的组合系数。
中间隐层的输出节点所形成的{ψ1ψ2…ψn}向量可看作为输入量的“特征”。
在这里插入图片描述
多元函数和向量值函数:隐层的激活函数都是m维函数,从输入层到隐层是直接代入用虚线连接。输出层的各个分量共享隐层的激活函数。
在这里插入图片描述
拟合曲线曲面:输入层(样本点)到参数化是一个变换,可看成为一个神经网络;参数化到输出层是一个变换(单变量基函数组合),也是一个神经网络。输出层的两个分量共享基函数。隐层1的激活函数为双变量基函数{ψ1(x,y)…ψn(x,y)};隐层3的激活函数为单变量基函数{μ1(t),μm(t)}。中间隐层(隐层1、2、3)的输出节点所形成的向量均可分别看作为输入量在不同维数空间的“特征”。在这里插入图片描述
同理:多层神经网络
在这里插入图片描述
全连接神经网络:全连接/前馈神经网络是能解决很多问题,但是本身存在一个问题,对于某些数据而言,一是参数量巨大,二是不能充分应用数据的某些特性。前馈/全连接神经网络以每层每个节点均和上一层的所有节点相连的方式连接。在这里插入图片描述

2.1 典型网络结构

  • CNN卷积神经网络
    1.引入特性:局部连接(图像局部上下文)。
    2.输入层: 不是向量,而是一个三维数组(图像)。
    3.卷积层: 对三维数组及其权重的计算方式。卷积核(参
    数)在通过逐一滑动窗口计算而得。
    4.池化/采样层: 直接抽样选取极小局部的某一元素作为
    下一层的元素。
    5.经典CNN网络:
    LeNet、AlexNet、VGG、GoogLeNet、ResNet
    在这里插入图片描述
    补充:

卷积神经网络是一个多层的神经网络,其基本运算单元包括:卷积运算、池化运算、全连接运算和识别运算。

在这里插入图片描述

  • 卷积运算:前一层的特征图与一个可学习的卷积核进行卷积运算,卷积的结果经过激活函数后的输出形成这一层的神经元,从而构成该层特征图,也称特征提取层,每个神经元的输入与前一层的局部感受野相连接,并提取该局部的特征,一旦该局部特征被提取,它与其它特征之间的位置关系就被确定。

  • 池化运算:能很好的聚合特征、降维来减少运算量。它把输入信号分割成不重叠的区域,对于每个区域通过池化(下采样)运算来降低网络的空间分辨率,比如最大值池化是选择区域内的最大值,均值池化是计算区域内的平均值。通过该运算来消除信号的偏移和扭曲。

  • 全连接运算:输入信号经过多次卷积核池化运算后,输出为多组信号,经过全连接运算,将多组信号依次组合为一组信号。
    识别运算:上述运算过程为特征学习运算,需在上述运算基础上根据业务需求(分类或回归问题)增加一层网络用于分类或回归计算。

  • RNN循环神经网络
    1.引入特性:时序,处理序列数据(文本上下文)。
    2.对序列数据的处理:每次输入序列中的一个单元,然后保存每一个隐层神经元的计算结果,留给下一个输入时该神经元进行使用。

  • 历史信息:保存的隐层单元计算结果,含有上一
    次输入的信息。
    4.经典RNN网络:
    LSTM、GRU、Bi-RNN、Seq2Seq在这里插入图片描述
    补充:

  • 在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身。
    即:(t+1)时刻网络的最终结果O(t+1)是该时刻输入和所有历史共同作用的结果。RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说,“梯度消失”现象又要出现了,只不过这次发生在时间轴上 。为了解决时间上的梯度消失,机器学习领域发展出了长短时记忆单元(LSTM),通过门的开关实现时间上记忆功能,并防止梯度消失。

  • “输入层=>隐藏层=>输出层”的三层结构,但是图中多了一个非常陌生的闭环,也就是说输入到隐藏层之后,隐藏层还会输入给自己,使得该网络可以拥有记忆能力。我们说递归神经网络拥有记忆能力,而这种能力就是通过W将以往的输入状态进行总结,而作为下次输入的辅助。可以这样理解隐藏状态:h=f(现有的输入+过去记忆总结)。

  • 混合结构:双向RNN、双向LSTM,同时利用历史和未来的信息。双向RNN、双向LSTM,同时利用历史和未来的信息。

2.2 CNN和RNN的比较

RNN的重要特性是可以处理不定长的输入,得到一定的输出。当你的输入可长可短, 比如训练翻译模型的时候, 你的句子长度都不固定,你是无法像一个训练固定像素的图像那样用CNN搞定的。而利用RNN的循环特性可以轻松搞定。

  • 在序列信号的应用上,CNN是只响应预先设定的信号长度(输入向量的长度),RNN的响应长度是学习出来的。

  • CNN对特征的响应是线性的,RNN在这个递进方向上是非线性响应的。这也带来了很大的差别。

  • CNN 专门解决图像问题的,可用把它看作特征提取层,放在输入层上,最后用MLP 做分类。
    RNN 专门解决时间序列问题的,用来提取时间序列信息,放在特征提取层(如CNN)之后。

  • CNN应该侧重空间映射,图像数据尤为贴合此场景。
    RNN,递归型网络,用于序列数据,并且有了一定的记忆效应,辅之以lstm。

  • CNN 卷积擅长从局部特征逼近整体特征,
    RNN 擅长对付时间序列。

2.3 深度神经网络专用芯片

深度神经网络专用芯片(使用GPU+DNN的专用芯片)是一种特殊用途的处理器,它能够使得深度神经网络的训练更快,具有更高的性能和更低的功耗。DNN 专用芯片在性能和能源消耗方面的好处是显著的,DNN专用芯片的广泛使用还需要神经网络体系结构的标准化和对不同DNN框架的支持。国外的一些公司,包括Google、Nvidia、Intel等公司,已经开发和部署了DNN专用芯片,为基于DNN的应用程序提供了极高的性能。国内也有不少公司(如寒武纪、阿里巴巴等)在从事DNN专用芯片的研发,也已经达到国际前沿水平。

2.4 深度学习开发工具

在这里插入图片描述
常用的深度学习开发工具包
(1) TensorFlow, 由Google公司发布。支持多CPU及多GPU并行化运行,并支持CNN,RNN等主要的深度学习模型。Github社区人气最火的深度学习开源项目。

(2) Caffe,由加拿大Berkeley BVLC实验室发布。使用最广泛的深度学习工具之一,提供C++,Python,Matlab等语言接口。

(3) Torch,基于 Lua 脚本语言的工具,支持 iOS、 Android 等嵌入式平台。

(4) Theano,基于Python语言开发的深度学习开源仿真平台。

(5) Keras,基于Python语言开发的,底层库使用Theano或TensorFlow。其模块化特性非常适合刚入门的初学者快速实验并测试深度学习网络的性能,同时也开放提供对底层的修改。

2.5 7种深度学习工具介绍

原文地址:https://blog.csdn.net/tcict/article/details/76891561
1)TensorFlow
TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。
–Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图像的一端流动到另一端的计算过程。
–TensorFlow是将复杂的数据结构,传输至人工智能神经网中进行分析和处理过程的系统。
TensorFlow表达了高层次的机器学习计算,可被用于语音识别或图像识别等多项机器深度学习领域。
–TensorFlows对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,可在小到一部智能手机,大到数千台数据中心服务器的各种设备上运行。
–TensorFlow完全开源。

2)Caffe
Caffe是一个清晰而高效的深度学习框架,作者是毕业于UC Berkeley的贾扬清。
–Caffe的全称应该是Convolutional Architecture for Fast Feature Embedding,
–它是开源的,核心语言是C++,支持命令行、Python和MATLAB接口
–既可以在CPU上运行也可以在GPU上运行。License是BSD 2-Clause。
–Caffe可以应用在视觉、语音识别、机器人、神经科学和天文学领域。

3)Torch
Torch已有十多年,是一个广泛支持机器学习算法的科学计算框架,具有简单和快速的脚本语言LuaJIT和底层C/CUDA实现, Facebook开源了Torch深度学习库包
Torch的特点:
–1具有强大的n维数组;
–2具有丰富的索引、切片和transposing的例程
–3通过LuaJIT的C接口:
–4线性代数例程;
–5基于能量的神经网络模型;
–6数值优化例程;
–7支持快速高效的GPU;
–8 可移植嵌入到iOS、Android和FGPA平台。

4)Keras
Keras是一个简约的、高度模块化的神经网络库,是基于Theano的一个深度学习框架,其设计参考了Torch,用Python语言编写,支持GPU和CPU,其特点为:
–(1)使用简单,能够快速实现原理;
–(2)支持卷积网络和递归网络,以及两者的组合;
–(3)无缝运行在CPU和GPU上:
–(4)支持任意连接方式,包括多输入多输出训练。
Keras库与其他采用Theano库的区别是:
–编码风格非常简约、清晰。它把所有的要点使用小类封装起来,能够很容易地组合在一起,并创造出一种全新的模型。

5)MXNet
MXNet是一个轻量化分布式可移植的深度学习计算平台,它支持多机多节点、多GPU的计算
–openMP+MPI/SSH+Cuda/Cudnn的框架的计算速度很快,且能够与分布式文件系统结合,实现大数据的深度学习。MXNet支持从单机到多GPU.多集群的计算能力
MXNet特点如下:
–(1)基于赋值表达式建立计算图;
–(2)支持内存管理,并对两个不交叉的变量重复使用同一内存空间;
–(3)使用C++实现,并提供C风格的头文件。支持Python、R、Julia、Go和JavaScript;
–(4)支持Torch;
–(5)支持移动设备端发布。

6)CNTK
CNTK ( Computational Network Toolkit)是微软用于搭建深度神经网络的计算网络工具包,已在Github开源
–CNTK有一套极度优化的运行系统,来训练和测试神经网络,它以抽象的计算图形式构建的。
–CNTK支持CPU和GPU模型。
–CNTK支持两种方式来定义网络:一种是使用“Simple Network Builder”,通过设置少量参数,就能生成一个的标准神经网络;另一种是使用网络定义语言(NDL)。
–CNTK相比Caffe、Theano. TensoFlow等主流工具性能更强,灵活性也要好,可扩展性高。
–CNTK支持CNN. LSTM. RNN等流行的网络结构,支持CPU和GPU模式,但CNTK目前Bug比较多。

7)Theano
Theano是BSD许可证下发布的一个开源项目,是由LISA(现MILA)在加拿大魁北克的蒙特利尔大学,开发的基于Python的深度学习框架
–专门用于定义、优化、求值数学表达式,其效率比较高,适用于多维数组。
–Python的核心Theano是一个数学表达式的编译器。Theano获取用户数据结构
–使之成为一个使用Numpy、高效本地库的非常高效的代码,并能在CPU或GPU上尽可能快地运行。

猜你喜欢

转载自blog.csdn.net/LZL2020LZL/article/details/106296916