卷积神经网络原理详解
文章结构
- 1.卷积网络
- 1.1卷积基本原理
- 1.2 卷积的数学定义
- 1.3 卷积网络的前向与反向传播
- 1.4 卷积网络是如何做到简化模型的
1.卷积网络
一般的全连接网络存在什么问题。 我们可以发现,在我们使用全连接网络的时候,输入数据的形状往往会被忽视掉。我们输入进全连接网络中的数据,都会被拉成一个一维的数据。但是在类似图像处理的领域中,我们非常重视数据的形状,因为每个邻近像素点之间的有着紧密的关系,如果使用全连接网络来处理这样的图像,这些特征将无法被使用。
从前面对全连接网络的描述中,可以发现全连接网络试图去描述整个有向图中所有元素之间的关系,因为每一个变量都会有自己的参数,这可能会导致参数量剧增。在机器学习领域中的研究经验告诉我们,如果一个模型的参数过多往往或导致过拟合。因为试图描述所有的变量本身就不实际,而且一般的全连接网络通常是一个锤型,意味着每一层隐层中神经元的数量会随着隐层数量的增长而增长,这也会导致计算量的剧增,比如在图像处理中,一个200*200像素的图片就有40000个像素点,若连接至一个神经元数量大于40000的隐层,那么仅仅一层的参数数量就已经十分惊人。虽然理论上已经证实一个三层的简单神经网络理论上是可以拟合所有的函数,但是不具有可行性。而且在一些特殊的领域,比如图像识别,我们其实不需要关注所有的变量。举个栗子,我们想知道一张图片中的动物是猫猫还是狗狗,我们关注的只是一个区域的信息,而对这张照片其他其余的信息没有兴趣。这也就是我们为什么要用到卷积神经网络的原因之一。他更加的关注局部信息,同时也可以起到简化模型的作用。后面会详细来说,卷积神经网络为什么可以做到简化模型。
1.1卷积基本原理
通常卷积网络由以下部分组成:输入层,卷积层,池化层,输出层。现在先描述卷积神经网络是如何工作的,在逐一深入解释。现在假设我们有一张灰度图片,有m*n个像素,其中每一个位置的值代表的这个位置的亮度。输入层获得数据之后,将其传输给卷积层。卷积层中,我们引入一个“核”的概念(或者叫滤波器),这里的核和SVM中的核是两个完全不同的东西。这里的核和输入数据一样的有形状的,具体如图1所示:
那在卷积层中做的事情当然是将输入的数据与卷积核做卷积啦。卷积具体过程是什么?开始之前,思考一个问题,这个卷积核中的数代表的是什么呢?这其实就是卷积网络中的权重,换句话来说,核的参数对应了卷积网络的权重。接下来,开始卷积,我们将卷积核的中心(也就是图中的origin) 对准我们的输入图像的第一个位置,如图中绿色箭头所示。这样一来,卷积核的中心C5与输入数据中的I1相对应,C6对应I2,C8对应I6,依次类推。我们会发现卷积核的一些位置在输入数据中没有相对应的位置。这个时候我们需要填充这些空着的位置,这个过程就叫做padding。填充的方法有很多种,且每一种都有不同的效果。为了容易阐述,假设这里使用了零填充。零填充的就是用0去填充空的位置,前面提到过,原图像中的这些数字表示的是该像素点的亮度,意味着用0所填充的部分将呈现黑色。那么卷积就是原图像与卷积核对应的部分相乘在相加。这一次卷积的结果是一个数,我们将它记录下来,作为输出特征图的第一个元素。之后将卷积核的中心向右移动一个单位,移动的这一个单位就叫做步幅 / 步长(stride),换句话说就是每一次使用核的位置间隔,步长可以根据实际需要进行修改。我们用上述的步骤遍历完原图像中所有的元素(假设这里的步长为1 )就完成了卷积。如果步长为1 的话,那么最后的卷积结果的尺寸应该和原来的输入尺寸一样大。我们可以由此推断,加大步长会导致输出图像的尺寸变小,因为我们跳过了更多的元素。那我们怎么知道经我们的数据变成什么形状了呢?我们可以使用下面的两个公式来计算输出的高和宽。
Houtput=H+P−FHS+1H_{output}=\frac{H+P-FH}{S}+1Houtput=SH+P−FH+1
Winput=H+P−FWS+1W_{input}=\frac{H+P-FW}{S}+1Winput=SH+P−FW+1
在卷积层之后,紧跟的通常是一个池化层。池化通常分为两种,一种是最大池化,一种是平均池化。现在最常用的池化方式,就应该是最大池化。最大池化所做的事情就是在一个固定的范围内选取最大的像素点的值。我们同样使用一个叫做滤波器的东西来控制这个范围,若滤波器的尺寸为2,步长为 2,就意味着我们从相邻的四个像素中选择值最大那一个。同样的依次遍历卷积层的输出,得到池化层的输出。通常在一个完整的卷积网络中,会有多个卷积池化层。将经过多个卷积池化层的处理之后的数据做扁平化(变成一维)送进一个全连接网络中,得到最终的输出结果。
1.2 卷积的数学定义
在了解了卷积网络的基本工作方式和概念之后,我们可以稍微的思考深一点的问题。如何来理解卷积这个概念。数学的定义又是什么?通常卷积可以定义成cross-correlation 和 convolution 两种形式。它们之间的差距仅在于卷积核是否翻转了180度。换一句话来说,将卷积核翻转180度在做cross-correlation 就是convolution。那cross-correlation又是怎么定义的呢?我们可以结合前面用自然语言描述的卷积来思考。它无非就是将图片I 和 卷积核K 的对应元素相乘在相加。遍历所有在I 中的像素点,意味着就是要遍历所有的行和列。那么我们可已给出:
cross-correlation:
上述式子表达的是,图片P与卷积核K相互卷积之后,第I行,第j列的元素。为什么这里会有两个累加符号?两次累加其实是在遍历卷积核,一次遍历行,一次遍历列。然后根据cross-correlation和convolution的关系,我们可以给出数学上对于卷积的定义:
我们常用的TensorFlow和pytorch做卷积的时候就是使用的convolution的定义。
1.3 卷积网络的前向与反向传播
卷积网络中的前向和反向传播是如何进行的? 我们定义一个简单的卷积网络,来研究一下卷积网络的前向与反向传播的细节。
我们定义一个尺寸为 H∗*∗W 的输入P,紧接着一个使用一个尺寸为k1*k2的卷积核K与输入发生卷积,设K的参数为www,得到输出特征图X之后,将特征图输入至一个激活函数fff中之后得到最终的结果(暂不考虑池化层)。将层与层之间的关系画出来我们可以得到
上图可以理解成是这个简单卷积网络的前向传播过程!他和全连接的前向传播其实很类似。这里还是要再一次强调前向传播之所以叫前向传播,不是因为它不能向后运算,而是因为在这个网络中没有回路。
接下来看看反向传播应该如何计算。为了方便记录,我们假设模型输出结果是O,真实的标签是Y,设该网络的损失函数为 E = 12(O−Y)2\frac{1}{2}(O-Y)^221(O−Y)2。 反向传播的目的一定是通过调整网络参数来改变最终的输出。对于卷积网络而言,参数在卷积层中,我们需要知道,卷积层中的www的影响是如何一层一层传递到输出层的。从图中可以清楚的看到,数据P与卷积核发生卷积之后的得到了卷积层的输出特征图X,然后X被激活函数fff接受,得到了最后的输出。从而我们可以从后向前,写出反向传播的表达式:
上述式中的wm,nlw^l_{m,n}wm,nl 还有 xi,jlx^l_{i,j}xi,jl中的 lll 意思是在网络中的第几层。而下标表示的第几行和第几列。因为卷积网络的输入和卷积核都是有形状的!我们假设在第lll层的误差已知,也就是∂E∂xi,jl\frac{\partial E}{\partial x^l_{i,j}}∂xi,jl∂E已知,用δi,jl\delta^l_{i,j}δi,jl来代表。那么我们现在最关心的就是xxx针对www求偏导的结果是多少?根据前面卷积的定义,我们可以很轻松的写出以下式子 (blb^lbl 是第 lll 层的偏置):
上述式是求 lll 层的输出关于lll层的www的偏导。而lll层的输出等于l−1l-1l−1层的输出与lll层的www的卷积。仔细看这个式子,我们会发现每一次的偏导,我们只针对一个www进行求导,因为在位置m,n上的www永远只有一个,这就意味着,其余的www不参与求导。那么整个过程就可以简化成下面的式子对wm,nlw^l_{m,n}wm,nl求偏导:
所以,我们可以将最终的求导结果整理成:
那么我们到这里可以看到上述式子其实就是我们先前定义的cross-corelation! 这就意味着,如果我们想求第 lll 层的www对E的偏导,其实就是将第lll层的损失与l−1l-1l−1层的输出做卷积(也可以说将lll层的损失当做了一个卷积核。同样的,如果我们用convolution的定义我们只需要将“卷积核”翻转180度即可:
1.4 卷积网络是如何做到简化模型的
前面提到卷积网络可以对模型进行简化。那他具体是怎么做到的呢? 首先先明确一下,到底什么是简化。我认为的简化的意义是在保证性能的前提下,尽可能的减少参数。在一般的全连接网络中,我们可以发现每一个特征都会与隐层的神经元连接。通过什么连接的?权重矩阵!这不可避免的会出现大量的参数。而我们仔细观察一下卷积网络中,卷积层的工作原理,我们会发现,它其实是在复用权重!为什么?前面说到,卷积层的核的参数就可以理解成是卷积网络的权重,而他是通过卷积的方式将层与层连接起来的。然而每一层卷积核的大小是不变的。比如第lll层的卷积核大小是3*3那么这一层就只有9 个参数,不管输入有多少,他都会用这个九个参数去连接。这样就大大的减少了每一层的参数量。
第二,我们会发现卷积层与上一层是一种局部连接的方式,为了个更好的我们假设下图是一个4 * 4的灰度图像与一个2*2的卷积核做卷积,图中红色的框代表卷积核,红色的数组代表了卷积核参数,绿色的数字代表了灰度图像中的每一个像素点。
结合上图和卷积的原理,我们发现每一次卷积的输出只和卷积核覆盖的几个像素有关系,和其他的像素点没有关系,它只和局部的几个值连接,相对于全连接网络而言,卷积网络的连接就少很多。
综上,相对于全连接网络而言的话,卷积网络模型更加的简单,更不容易过拟合。因为参数的数量的被卷积核的大小限制,加上卷积的特点,使得连接相比于全连接网络而言大幅下降。
卷积神经网络原理详解相关推荐
- 《深度学习》 之 AlexNet卷积神经网络 原理 详解
AlexNet卷积神经网络 一.背景介绍 (图片来自网络) lexNet 经常被认为是这一波人工智能浪潮的起点,该网络在 ImageNet 挑战赛中的错误率与前一届冠军相比减小了 10% 以上,比亚军 ...
- 卷积神经网络(CNN)详解与代码实现
目录 1.应用场景 2.卷积神经网络结构 2.1 卷积(convelution) 2.2 Relu激活函数 2.3 池化(pool) 2.4 全连接(full connection) 2.5 损失函数 ...
- FCN(全卷积神经网络)详解
文章目录 1. 综述 简介 核心思想 2. FCN网络 2.1 网络结构 2.2 上采样 Upsampling 2.3 跳级结构 3 FCN训练 4. 其它 4.1 FCN与CNN 4.2 FCN的不 ...
- 卷积神经网络CNNs详解参考----MNIST
mnist实例--卷积神经网络(CNN) 使用TensorFlow编写识别数字的CNN训练程序详解 深度学习之卷积神经网络CNN及tensorflow代码实现示例 CNN笔记:通俗理解卷积神经网络
- 通俗易懂:图卷积神经网络入门详解
作者 | 蝈蝈 来源 | 转载自知乎用户蝈蝈 [导读]GCN问世已经有几年了(2016年就诞生了),但是这两年尤为火爆.本人愚钝,一直没能搞懂这个GCN为何物,最开始是看清华写的一篇三四十页的综述,读 ...
- 深度学习 CNN卷积神经网络 LeNet-5详解
卷积神经网络( Convolutional Neural Network, CNN): 是一种常见的深度学习架构,受生物自然视觉认知机制(动物视觉皮层细胞负责检测光学信号)启发而来,是一种特殊的多层前 ...
- 图卷积神经网络入门详解
图卷积缘起 在开始正式介绍图卷积之前,我们先花一点篇幅探讨一个问题:为什么研究者们要设计图卷积操作,传统的卷积不能直接用在图上吗? 要理解这个问题,我们首先要理解能够应用传统卷积的图像(欧式空间)与图 ...
- vgg16卷积层的计算量_卷积神经网络VGG16详解
VGG网络图如下,本文要深入讲解的是很常用的VGG16网络.在看懂VGG16网络之前,先补一下卷积神经网络的知识,然后用代码实例来更好说明VGG16网络 VGG网络 图片数据如何输入? 彩色图像有RG ...
- 卷积神经网络CNN详解
一.全连接神经网络 1.全连接网络:网络层的每一个结点都与上一层的所有结点相连. 对于每个神经元: 2.如果没有激活函数,我们的求和函数拟合能力均为线性的,而激活函数的作用在于,为我们的模型提供了非线 ...
- 《深度学习》之 前馈神经网络 原理 详解
前馈神经网络 1. 深度学习: **定义:**深度学习是机器学习的一个研究方向,它基于一种特殊的学习机制.其特点是建立一个多层学习模型,深层级将浅层级的输出作为输入,将数据层层转化,使之越来越抽象.是 ...
最新文章
- 附录2:Numpy实例记录
- 新特性的副产品--从11g的DEFERRED SEGMENT CREATION说起
- selenium的三种等待时间
- Lombok的@Data生成的hashCode和equals方法坑
- java web应用程序_如何构建Java Web 应用程序 - Spring Boot?
- Bing与DuckDuckGo搜索结果惊人一致?Google展现强势差异
- 自动化系统计算机网络期末考试题,模拟试卷_计算机网络试题B-自动化-孙璐
- linux内核进程抢占,Re: Linux中进程能否被抢占
- linux查看内网命令,nmap命令查看内网信息的几个...-centos6.3中lspci查看硬件信息提...-学习linux cut 命令的用法_169IT.COM...
- OpenCV-Android平台应用实战 - 银行卡卡号识别(01、环境搭建)
- html 必填设置,html如何设置必填项
- VMware虚拟机下Ubuntu系统安装VMware Tools
- 基于CST电磁仿真软件的波导弯头设计
- Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?
- 测试大佬带你揭秘功能测试的内幕
- 透视变换(perspective transformation)和射影(投影)变换(projective transformation)
- 万字拆解自嗨锅:造价近百万的直播间,是单场直播GMV破100万的法门吗?
- 【SAP消息号L9006】
- .NET3.5 GDI+ 图形操作1
- 耶鲁大学的心态 ,送给正在奋斗的人!
热门文章
- 蒙特卡罗仿真(1):入门求生指南(Python实例)
- 运动目标检测_帧差法
- Linux软件源镜像修改
- 【EmmyLua插件】Rider无法跳转lua文件解决
- bak 服务器备份文件怎么恢复,bak文件怎么还原
- MDK(Keil) 自动生成bin文件、汇编文件或者HEX文件、ASM文件
- 符号函数sgn python_sgn符号函数matlab
- 帝国CMS仿《游戏资讯网》优化版整站源码/专业游戏资讯网站系统模版
- 中石油职称计算机报名,中石油职称计算机考试题库(单选).doc
- 山寨杂志《Nature and Science》