热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习之卷积神经网络(ConvolutionalNeuralNetworks,CNN)

前面,我们介绍了DNN及其参数求解的方法(BP算法),我们知道了DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸的问题.那么,人们又是怎么解决这个问题

前面, 我们介绍了DNN及其参数求解的方法(BP算法),我们知道了DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸的问题.那么,人们又是怎么解决这个问题的呢?本节的卷积神经网络(Convolutional Neural Networks, CNN)就是一种解决方法.

    我们知道神经网络主要有三个部分组成, 分别为: 



  1. 网络结构--- 描述神经元的层次与连接神经元的结构.

  2. **函数(激励函数)--- 用于加入非线性的因素, 解决线性模型所不能解决的问题.

  3. 参数学习方法的选择(一般为权重值W和偏置项b)---如BP算法等.

我们将主要从这几个方面进行讲述.


一 CNN的应用领域

CNN在以下几个领域均有不同程度的应用:



  1. 图像处理领域(最主要运用领域)--- 图像识别和物体识别,图像标注,图像主题生成,图像内容生成,物体标注等。

  2. 视频处理领域--- 视频分类,视频标准,视频预测等

  3. 自然语言处理(NLP)领域--- 对话生成,文本生成,机器翻译等

  4. 其它方面--- 机器人控制,游戏,参数控制等


二 CNN的网络结构  


2.1 传统神经网络


上图为传统的神经网络的结构, 它是一种全连接的结构, 这也就造成了参数训练的难度加深. 还有BP求解中的可能出现的梯度爆炸和梯度消失的现象等.此外,深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源. 这些因素都造成了传统的神经网络的不适用性,所以没有较为广泛的运用.


2.2 CNN神经网络


上图为CNN的网络结构,卷积神经网络(Convolutional Neural Networks,CNN),CNN可以有效的降低反馈神经网络(传统神经网络)的复杂性,常见的CNN结构有LeNet-5、AlexNet、ZFNet、VGGNet、GoogleNet、ResNet等等,其中在LVSVRC2015冠军ResNet是AlexNet的20多倍,是VGGNet的8倍;从这些结构来讲CNN发展的一个方向就是层次的增加,通过这种方式可以利用增加的非线性得出目标函数的近似结构,同时得出更好的特征表达,但是这种方式导致了网络整体复杂性的增加,使网络更加难以优化,很容易过拟合。

CNN的网络结构和传统神经网络结构异同点有: 



  1. CNN主要有数据输入层, 卷积层, RELU激励层, 池化层, 全连接层, Batch Normalization Layer(不一定存在). 传统神经网络主要有数据输入层, 一个或多个隐层以及数据输出层. 比较可以发现CNN仍然使用传统神经网络的层级结构. 

  2. CNN的每一层都具有不同的功能, 而传统神经网络每一层都是对上一层特征进行线性回归, 再进行非线性变换的操作.

  3. CNN使用RELU作为**函数(激励函数) , 传统神经网络使用sigmoid函数作为**函数.

  4. CNN的池化层实现数据降维的作用,提取数据的高频信息.传统神经网络没有这个作用.


CNN的主要层次介绍



  • 数据输入层:Input Layer

  • 卷积计算层:CONV Layer

  • ReLU激励层:ReLU Incentive Layer

  • 池化层:Pooling Layer

  • 全连接层:FC Layer

  • 备注:Batch Normalization Layer(可能有)


2.2.1 数据输入层 (Input Layer)

和神经网络/机器学习一样,需要对输入的数据需要进行预处理操作,需要进行预处理的主要原因是:



  • 输入数据单位不一样,可能会导致神经网络收敛速度慢,训练时间长

  • 数据范围大的输入在模式分类中的作用可能偏大,而数据范围小的作用就有可能偏小

  • 由于神经网络中存在的**函数是有值域限制的,因此需要将网络训练的目标数据映射到**函数的值域

  • S形**函数在(0,1)区间以外区域很平缓,区分度太小。例如S形函数f(X),f(100)与f(5)只相差0.0067

常见的数据预处理的方式有以下几种:



  1. 均值化处理 --- 即对于给定数据的每个特征减去该特征的均值(将数据集的数据中心化到0)

  2. 归一化操作 --- 在均值化的基础上再除以该特征的方差(将数据集各个维度的幅度归一化到同样的范围内)

  3. PCA降维 --- 将高维数据集投影到低维的坐标轴上, 并要求投影后的数据集具有最大的方差.(去除了特征之间的相关性,用于获取低频信息)

  4. 白化 --- 在PCA的基础上, 对转换后的数据每个特征轴上的幅度进行归一化.用于获取高频信息.

  5.  http://ufldl.stanford.edu/wiki/index.php/白化

                             



  • x = x - np.mean(x, 0) x = (x - np.mean(x, 0)) / np.std(x, 0)



  • x -= np.mean(x, axis=0) #  去均值

  • cov = np.dot(x.T, x) / x.shape[0] #  计算协方差

  • u, s, v = np.linalg.svd(cov) #  进行 svd 分解

  • xrot = np.dot(x, u)

  • x = np.dot(x, u[:, :2]) #  计算 pca   

  • x = xrot / np.sqrt(s + 1e-5) #  白化

备注:虽然我们介绍了PCA去相关和白化的操作,但是实际上在卷积神经网络中,一般并不会适用PCA和白化的操作,一般去均值和归一化使用的会比较多.

建议:对数据特征进行预处理,去均值、归一化


2.2.2 卷积计算层(CONV Layer)

这一层就是卷积神经网络最重要的一层,也是“卷积神经网络”的名字由来。  

人的大脑在识别图片的过程中,会由不同的皮质层处理不同方面的数据,比如:颜色、形状、光暗等,然后将不同皮质层的处理结果进行合并映射操作,得出最终的结果值,第一部分实质上是一个局部的观察结果,第二部分才是一个整体的结果合并.

还有,对于给定的一张图片, 人眼总是习惯性的先关注那些重要的点(局部), 再到全局. 局部感知是将整个图片分为多个可以有局部重叠的小窗口, 通过滑窗的方法进行图像的局部特征的识别. 也可以说每个神经元只与上一层的部分神经元相连, 只感知局部, 而不是整幅图像.

基于人脑的图片识别过程,我们可以认为图像的空间联系也是局部的像素联系比较紧密,而较远的像素相关性比较弱,所以每个神经元没有必要对全局图像进行感知,只要对局部进行感知,而在更高层次对局部的信息进行综合操作得出全局信息;即局部感知



  • 局部关联:每个神经元看做一个filter

  • 窗口(receptive field)滑动,filter对局部数据进行计算

  • 相关概念:深度:depth,步长:stride,填充值:zero-padding

CONV过程参考:http://cs231n.github.io/assets/conv-demo/index.html

一个数据输入,假设为一个RGB的图片

在神经网络中,输入是一个向量,但是在卷积神经网络中,输入是一个多通道图像(比如这个例子中有3个通道)

1) 局部感知

在进行计算的时候,将图片划分为一个个的区域进行计算/考虑;

那么,为什么可以使用局部感知呢?

我们发现, 越是接近的像素点之间的关联性越强, 反之则越弱. 所以我们选择先进行局部感知, 然后在更高层(FC层)将这些局部信息综合起来得到全局信息的方式.

2) 参数共享机制

所谓的参数共享就是就是同一个神经元使用一个固定的卷积核去卷积整个图像,也可以认为一个神经元只关注一个特征. 而不同的神经元关注多个不同的特征.(每一个神经元都可以看作一个filter)

3) 滑动窗口的重叠

滑动窗口重叠就是在进行滑窗的过程中对于相邻的窗口有局部重叠的部分,这主要是为了保证图像处理后的各个窗口之间的边缘的平滑度。降低窗口与窗口之间的边缘不平滑的特性。

固定每个神经元的连接权重,可以将神经元看成一个模板;也就是每个神经元只关注一个特性

需要计算的权重个数会大大的减少

4)) 卷积计算

卷积的计算就是: 对于每一个神经元的固定的卷积核矩阵与窗口矩阵的乘积(对应位置相乘)再求和之后再加上偏置项b的值, 就得到了代表该神经元所关注的特征在当前图像窗口的值.

如图2.4所示, 可以看出卷积计算的过程.动态图点击这里查看.



2.2.3 RELU激励层

这一层就是**层, 在CNN中一般使用RELU函数作为**函数.它的作用主要是将卷积层的输出结果做非线性映射.

1) 常见的几种**函数

**函数之 Sigmoid、tanh、ReLU、ReLU变形和Maxout



  1. sigmoid函数(S函数)

  2. Tanh函数(2S函数)

  3. RELU函数 ----> 线性修正单元 ---> max{ 0, x } ==>无边界, 易出现'死神经元'

  4. Leaky ReLU 函数 ---> 若x> 0 , 则输出x ; 若x<0,则 alpha*x, 其中 0 对RELU的改进

  5. ELU 函数 ---> 若x> 0 , 则输出x ; 若x<0,则 alpha*(e^x - 1), 其中 0 也是一种对RELU的改进

  6. Maxout函数 ---> 相当于增加了一个**层

2) **函数的一些建议



  1. 一般不要使用sigmoid函数作为CNN的**函数.如果用可以在FC层使用.

  2. 优先选择RELU作为**函数,因为迭代速度快,但是有可能效果不佳

  3. 如果2失效,请用Leaky ReLU或者Maxout,此时一般情况都可以解决啦

  4. 在极少的情况下, tanh也是有不错的效果的


2.2.4 池化层 (Poling Layer)

在连续的卷积层中间存在的就是池化层,主要功能是:通过逐步减小表征的空间尺寸来减小参数量和网络中的计算;池化层在每个特征图上独立操作。使用池化层可以压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

池化层中的数据压缩的策略主要有:



  1. Max Pooling(最大池化)---> 选择每个小窗口中最大值作为需要的特征像素点(省略掉不重要的特征像素点)

  2. Average Pooling(平均池化) --->  选择每个小窗口中平均值作为需要的特征像素点

    池化层选择较为重要的特征点, 可以降低维度, 能够在一定程度上防止过拟合的发生.


2.2.5 FC全连接层

类似传统神经网络中的结构,FC层中的神经元连接着之前层次的所有**输出;换一句话来讲的话,就是两层之间所有神经元都有权重连接;通常情况下,在CNN中,FC层只会在尾部出现

通过全连接结构,将前面输出的特征重新组合成一张完整的图像.

一般的CNN结构依次为:



  • INPUT

  • [[CONV -> RELU] * N -> POOL?]*M

  • [FC -> RELU] * K

  • FC


    2.2.6 Batch Normalization Layer(一般用于卷积层后面,主要是使得期望结果服从高斯分布,使用较少!!)


三 CNN的优缺点

最后, 简单总结下CNN的优缺点.

    优点:

    ① 使用局部感知和参数共享机制(共享卷积核), 对于较大的数据集处理能力较高.对高维数据的处理没有压力

    ② 能够提取图像的深层次的信息,模型表达效果好.

    ③ 不需要手动进行特征选择, 只要训练好卷积核W和偏置项b, 即可得到特征值.

    缺点:

    ① 需要进行调参, 模型训练时间较长, 需要的样本较多, 一般建议使用GPU进行模型训练.

    ② 物理含义不明, 每层中的结果无法解释, 这也是神经网络的共有的缺点. 

 



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 开发笔记:图像识别基于主成分分析算法实现人脸二维码识别
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于主成分分析算法实现人脸二维码识别相关的知识,希望对你有一定的参考价值。 ... [详细]
  • ICRA2019最佳论文  Making Sense of Vision and Touch: SelfSupervised Learning of Multimodal Representatio
    文章目录摘要模型架构模态编码器自监督预测控制器设计策略学习控制器设计实验结论和展望会议:ICRA2019标题:《MakingSenseofVision ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  •   数据挖掘作为近年来新兴的一门计算机边缘学科,其在国内外引起了越来越多的关注。并且随着数据挖掘技术的不断改进和数据挖掘工具的不断完善,数据挖掘必将在各行各业中得到广泛的应用。   ... [详细]
  • 打出三张牌的联想Edge AI,正在跨越物联网“J型曲线”拐点
    文|曾响铃来源|科技向令说(xiangling0815)在业务加速转型升级下,对于“联想”两个字,近些年业界旧有认知不断 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
JKNx2602931435
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有