当前位置: 首页 > news >正文

终于有人把卷积神经网络(CNN)讲明白了

导读:深度学习作为人工智能的一个分支,在计算机视觉处理方面取得的巨大成就,与深度学习中的算法及方法密切相关,如卷积神经网络、反向传播算法、正则化方法、迁移方法等。其中很多方法具有普遍性,在自然语言处理中也得到了广泛应用。本文将介绍卷积神经网络。

作者:吴茂贵 王红星

来源:大数据DT(ID:hzdashuju)

传统神经网络层之间都采用全连接方式,如果采样数据层数较多,且输入又是高维数据,那么其参数数量可能将是一个天文数字。

比如训练一张1000×1000像素的灰色图片,输入节点数就是1000×1000,如果隐藏层节点是100,那么输入层到隐藏层间的权重矩阵就是1000000×100!如果还要增加隐藏层,进行反向传播,那结果可想而知。不止如此,采用全连接方式还容易导致过拟合。

因此,为更有效地处理图片、视频、音频、自然语言等数据信息,必须另辟蹊径。经过多年不懈努力,人们终于找到了一些有效方法及工具。其中卷积神经网络就是典型代表。

01 卷积网络的一般架构

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,最早在1986年BP算法中提出。1989年LeCun将其运用到多层神经网络中,但直到1998年LeCun提出LeNet-5模型,神经网络的雏形才基本形成。

在接下来近十年的时间里,对卷积神经网络的相关研究一直处于低谷,原因有两个:一是研究人员意识到多层神经网络在进行BP训练时的计算量极大,以当时的硬件计算能力完全不可能实现;二是包括SVM在内的浅层机器学习算法也开始崭露头角。

2006年,Hinton一鸣惊人,在《科学》上发表名为Reducing the Dimensionality of Data with Neural Networks的文章,CNN再度觉醒,并取得长足发展。2012年,CNN在ImageNet大赛上夺冠。

2014年,谷歌研发出20层的VGG模型。同年,DeepFace、DeepID模型横空出世,直接将LFW数据库上的人脸识别、人脸认证的正确率提高到99.75%,超越人类平均水平。

卷积神经网络由一个或多个卷积层和顶端的全连接层(对应经典的神经网络)组成,同时也包括关联权重和池化层(Pooling Layer)等。与其他深度学习架构相比,卷积神经网络能够在图像和语音识别方面给出更好的结果。这一模型也可以使用反向传播算法进行训练。

相比其他深度、前馈神经网络,卷积神经网络可以用更少的参数获得更高的性能。图3-1就是一个简单的卷积神经网络架构。

▲图3-1 卷积神经网络示意图

如图3-1所示,该架构包括卷积神经网络的常用层,如卷积层、池化层、全连接层和输出层;有时也会包括其他层,如正则化层、高级层等。接下来我们就各层的结构、原理等进行详细说明。

图3-1是用一个比较简单的卷积神经网络对手写输入数据进行分类的架构示意图,由卷积层、池化层和全连接层叠加而成。下面我们先用代码定义这个卷积神经网络,然后介绍各部分的定义及实现原理。

02 增加通道的魅力

增加通道实际就是增加卷积核,它是整个卷积过程的核心。比较简单的卷积核或过滤器有垂直边缘过滤器(Vertical Filter)、水平边缘过滤器(Horizontal Filter)、Sobel过滤器(Sobel Filter)等。

这些过滤器能够检测图像的垂直边缘、水平边缘,增强图片中心区域权重等。下面我们通过一些图来简单演示这些过滤器的具体作用。

1. 垂直边缘检测

垂直边缘过滤器是3×3矩阵(注意,过滤器一般是奇数阶矩阵),特点是有值的是第1列和第3列,第2列为0,可用于检测原数据的垂直边缘,如图3-2所示。

▲图3-2 过滤器对垂直边缘的检测

2. 水平边缘检测

水平边缘过滤器也是3×3矩阵,特点是有值的是第1行和第3行,第2行为0,可用于检测原数据的水平边缘,如图3-3所示。

▲图3-3 过滤器对水平边缘的检测

以上两种过滤器对图像水平边缘检测、垂直边缘检测的效果图如图3-4所示。

▲图3-4 过滤器对图像水平边缘检测、垂直边缘检测后的效果图

上面介绍的两种过滤器比较简单,在深度学习中,过滤器除了需要检测垂直边缘、水平边缘等,还需要检测其他边缘特征。

那么,如何确定过滤器呢?过滤器类似于标准神经网络中的权重矩阵W,W需要通过梯度下降算法反复迭代求得,所以,在深度学习中,过滤器也需要通过模型训练得到。卷积神经网络计算出这些过滤器的数值,也就实现了对图片所有边缘特征的检测。

03 加深网络的动机

加深网络的好处包括减少参数的数量,扩大感受野(Receptive Field,给神经元施加变化的某个局部空间区域)。

感受野是指卷积神经网络每一层输出的特征图(Feature Map)上的像素点在输入图片上映射的区域大小。通俗点说,感受野是特征图上每一个点对应输入图上的区域,如图3-5所示。

▲图3-5 增加网络层扩大感受野示意图

由图3-5可以看出,经过几个卷积层之后,一个特征所表示的信息量越来越多,一个s3表现了x1、x2、x3、x4、x5的信息。

此外,叠加层可进一步提高网络的表现力。这是因为它向网络添加了基于激活函数的“非线性”表现力,通过非线性函数的叠加,可以表现更加复杂的内容。

不同层提取图像的特征是不一样的,层数越高,表现的特征越复杂,如图3-6所示。

▲图3-6 不同层表现不同的特征

从图3-6可以看出,前面的层提取的特征比较简单,是一些颜色、边缘特征。越往后,提取到的特征越复杂,是一些复杂的几何形状。这符合我们对卷积神经网络的设计初衷,即通过多层卷积完成对图像的逐层特征提取和抽象。

在ELMo预训练模型中也会存在类似情况,如图3-7所示,随着层数的增加,其表示的内容越复杂、抽象。

▲图3-7 ELMo模型

04 残差连接

网络层数增加了,根据导数的链式法则,就容易出现梯度消散或爆炸等问题。例如,如果各网络层激活函数的导数都比较小,那么在多次连乘后梯度可能会越来越小,这就是常说的梯度消散。对于深层网络来说,传到浅层,梯度几乎就没了。

在解决这类问题时,除了采用合适的激活函数外,还有一个重要技巧,即使用残差连接。图3-8是残差连接的简单示意图。

▲图3-8 残差连接示意图

如图3-8所示,图中的每一个导数都加上了一个恒等项1,dh/dx = d(f + x)/dx = 1 + df/dx。此时就算原来的导数df/dx很小,误差仍然能够有效地反向传播,这也是残差连接的核心思想。

关于作者:吴茂贵,资深大数据和人工智能技术专家,在BI、数据挖掘与分析、数据仓库、机器学习等领域工作超过20年。在基于Spark、TensorFlow、PyTorch、Keras等的机器学习和深度学习方面有大量的工程实践实践,对Embedding有深入研究。

王红星,高级数据科学家,任职于博世(中国)投资有限公司苏州分公司,负责BOSCH数据湖,数据分析与人工智能相关的产品与服务的设计和开发。在大数据、机器学习、人工智能方面有丰富的实践经验。

本文摘编自《深入浅出Embedding:原理解析与应用实践》。

延伸阅读《深入浅出Embedding》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:这是一本系统、全面、理论与实践相结合的Embedding技术指南,由资深的AI技术专家和高级数据科学家撰写,得到了黄铁军、韦青、张峥、周明等中国人工智能领域的领军人物的一致好评和推荐。

更多精彩回顾

书讯 | 6月书讯 | 初夏,正好读新书

资讯 | 《数据安全法》表决通过!最新解读来了

书单 | 8本书助你零基础转行数据分析岗

干货 | 阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验

收藏 | 手把手教你利用JS给图片打马赛克

上新 | 【新书速递】深入浅出联邦学习

赠书 | 【第61期】盘点云计算领域不可不读的9本书

点击阅读全文购买

相关文章:

  • 7月书讯(下)| 读书开启下半年
  • 数据中台、标签、数据资产相关的15个名词解释
  • 【新书速递】深入理解Nginx底层原理与设计,轻松应对高并发
  • CSAPP,永远滴神!
  • 周志明:《凤凰架构:构建可靠的大型分布式系统》
  • 【第62期】学会数据分析,抢占职场风口机遇
  • 腾讯数据科学家详解用户选择行为分析核心模型
  • 【新书速递】人人可懂的深度学习
  • 开发人工智能为什么要用Python?
  • 【新书速递】首本零代码书籍问世
  • MySQL 十大常用字符串函数
  • 手把手教你用Python求最大值和最小值
  • TIOBE 7 月编程语言排行榜:C、Java 和 Python 争夺第一
  • 【新书速递】嵌入式Linux驱动领域开发的实战指南
  • 2021半年盘点,这些经典更新了!
  • ES6指北【2】—— 箭头函数
  • “大数据应用场景”之隔壁老王(连载四)
  • 0x05 Python数据分析,Anaconda八斩刀
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android组件 - 收藏集 - 掘金
  • flask接收请求并推入栈
  • HTTP请求重发
  • HTTP中GET与POST的区别 99%的错误认识
  • js作用域和this的理解
  • SpringBoot几种定时任务的实现方式
  • Vue小说阅读器(仿追书神器)
  • 从setTimeout-setInterval看JS线程
  • 大数据与云计算学习:数据分析(二)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 服务器从安装到部署全过程(二)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 精彩代码 vue.js
  • 爬虫模拟登陆 SegmentFault
  • 如何优雅地使用 Sublime Text
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 收藏好这篇,别再只说“数据劫持”了
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 移动端高清、多屏适配方案
  • ​虚拟化系列介绍(十)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #pragma once与条件编译
  • $$$$GB2312-80区位编码表$$$$
  • (145)光线追踪距离场柔和阴影
  • (23)Linux的软硬连接
  • (function(){})()的分步解析
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (区间dp) (经典例题) 石子合并
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET4.0并行计算技术基础(1)
  • .NET分布式缓存Memcached从入门到实战
  • .net网站发布-允许更新此预编译站点