miracle11sno
上图计算过程为,首先我们可以将右边进行卷积的可以称为过滤器也可以叫做核,覆盖到左边第一个区域,然后分别按照对应位置相乘再相加,3*1+1*1+2*1+0*0+0*0+0*0+1*(-1)+8*(-1)+2*(-1)=-5; 按照上述的计算方法逐步按右移一个步长(步长可以设定为1,2,...等),然后按往下移,逐渐计算相应的值,得出最终的值。
如上图显示,对于第一个图像矩阵对应的图,一边是白色,一边是黑色,那么中间就会存在一个垂直的边缘,我们可以选择一个垂直边缘检测过滤器,如乘法右边的矩阵,那么两者做卷积后得出的图会显示如等号右边的结果矩阵对应的灰度图中间会有一个白色的中间带,也就是检测出来的边缘,那为什么感觉中间边缘带会比较宽呢?而不是很细的一个局域呢?原因是我们输入的图像只有6*6,过于小了,如果我们选择输出更大的尺寸的图,那么结果来说就是相对的一个细的边缘检测带,也就将我们的垂直边缘特征提取出来了。 上述都是人工选择过滤器的参数,随着神经网络的发展我们可以利用反向传播算法来学习过滤器的参数
我们可以将卷积的顾虑器的数值变成一个参数,通过反向传播算法去学习,这样学到的过滤器或者说卷积核就能够识别到很多的特征,而不是依靠手工选择过滤器。
- padding 操作,卷积经常会出现两个问题: 1.每经过一次卷积图像都会缩小,如果卷积层很多的话,后面的图像就缩的很小了; 2.边缘像素利用次数只有一次,很明显少于位于中间的像素,因此会损失边缘图像信息。 为了解决上述的问题,我们可以在图像边缘填充像素,也就是 padding 操作了。
如果我们设置在图像边缘填充的像素数为p,那么经过卷积后的图像是:(n+2p-f+1)x(n+2p-f+1). 如何去选择p呢 通常有两种选择: -Valid:也就是说不填充操作(no padding),因此如果我们有nxn的图像,fxf的过滤器,那么我们进行卷积nxn fxf=(n-f+1)x(n-f+1)的输出图像; -Same:也就是填充后是输出图像的大小的与输入相同,同样就有(n+2p)x(n+2p) fxf=nxn,那么可以算,n+2p-f+1=n,得到p=(f-1)/2。 通常对于过滤器的选择有一个默认的准则就是选择过滤器的尺寸是奇数的过滤器。 - 卷积步长设置(Strided COnvolution) 卷积步长也就是我们进行卷积操作时,过滤器每次移动的步长,上面我们介绍的卷积操作步长默认都是1,也就是说每次移动过滤器时我们是向右移动一格,或者向下移动一格。 但是我们可以对卷积进行步长的设置,也就是我们能够对卷积移动的格数进行设置。同样假如我们的图像是nxn,过滤器是fxf,padding设置是p,步长strided设置为s,那么我们进行卷积操作后输出的图像为((n+2p-f)/s+1)x((n+2p-f)/s+1),那么这样就会出现一个问题,如果计算结果不是整数怎么办?
一般是选择向下取整,也就是说明,只有当我们的过滤器完全在图像上能够覆盖时才对它进行计算,这是一个惯例。 实际上上述所述的操作在严格数学角度来说不是卷积的定义,卷积的定义上我们计算的时候在移动步长之前也就是对应元素相乘之前是需要对卷积核或者说我们的过滤器进行镜像操作的,经过镜像操作后再把对应元素进行相乘这才是严格意义上的卷积操作,在数学角度上来说这个操作不算严格的卷积操作应该是属于互相关操作,但是在深度学习领域中,大家按照惯例都省略了反转操作,也把这个操作叫做卷积操作
我们知道彩色图像有RGB三个通道,因此对于输入来说是一个三维的输入,那么对三维输入的图像如何进行卷积操作呢?
例子,如上图我们输入图像假设为6×6×3,3代表有RGB三个通道channel,或者可以叫depth深度,过滤器的选择为3×3×3,其中需要规定的是,顾虑器的channel必须与输入图像的channel相同,长宽没有限制,那么计算过程是,我们将过滤器的立体覆盖在输入,这样对应的27个数对应相乘后相加得到一个数,对应到我们的输出,因此这样的方式进行卷积后我们得出的输出层为4×4×1。如果我们有多个过滤器,比如我们分别用两个过滤器一个提取垂直特征,一个提取水平特征,那么输出图4×4×2 。也就是代表我们输出的深度或者说通道与过滤器的个数是相等的。
第l层的卷积标记如下:
加入我们的过滤器是3×3×3规格的,如果我们设定10个过滤器,那么需要学习的参数总数为每个过滤器为27个参数然后加上一个偏差bias那么每个过滤器的参数为28个,所以十个过滤器的参数为280个。从这里也就可以看出,不管我们输入的图片大小是多大,我们都只需要计算这些参数,因此参数共享也就很容易理解了。
为了缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们经常会使用池化层。池化层的计算方式与卷积类似,只是我们需要对每一个通道都进行池化操作。 池化的方式一般有两种:Max Pooling和Average Pooling。
上面为Max Pooling,那么计算方法与卷积类似,首先设定超参数比如过滤器的大小与步长,然后覆盖到对应格子上面,用最大值取代其值作为输出的结果,例如上图为过滤器选择2×2,步长选择为2,因此输出就是2×2的维度,每个输出格子都是过滤器对应维度上输入的最大值。如果为平均池化,那么就是选择其间的平均值作为输出的值。 因此从上面的过程我们看到,通过池化操作能够缩小模型,同时能让特征值更加明显,也就提高了提取特征的鲁棒性。
木秀于森林
神经网络 最早是由心理学家和神经学家提出的,旨在寻求开发和测试神经的计算模拟。 粗略地说, 神经网络 是一组连接的 输入/输出单元 ,其中每个连接都与一个 权 相关联。在学习阶段,通过调整权值,使得神经网络的预测准确性逐步提高。由于单元之间的连接,神经网络学习又称 连接者学习。 神经网络是以模拟人脑神经元的数学模型为基础而建立的,它由一系列神经元组成,单元之间彼此连接。从信息处理角度看,神经元可以看作是一个多输入单输出的信息处理单元,根据神经元的特性和功能,可以把神经元抽象成一个简单的数学模型。 神经网络有三个要素: 拓扑结构、连接方式、学习规则 神经网络的拓扑结构 :神经网络的单元通常按照层次排列,根据网络的层次数,可以将神经网络分为单层神经网络、两层神经网络、三层神经网络等。结构简单的神经网络,在学习时收敛的速度快,但准确度低。 神经网络的层数和每层的单元数由问题的复杂程度而定。问题越复杂,神经网络的层数就越多。例如,两层神经网络常用来解决线性问题,而多层网络就可以解决多元非线性问题 神经网络的连接 :包括层次之间的连接和每一层内部的连接,连接的强度用权来表示。 根据层次之间的连接方式,分为: 1)前馈式网络:连接是单向的,上层单元的输出是下层单元的输入,如反向传播网络,Kohonen网络 2)反馈式网络:除了单项的连接外,还把最后一层单元的输出作为第一层单元的输入,如Hopfield网络 根据连接的范围,分为: 1)全连接神经网络:每个单元和相邻层上的所有单元相连 2)局部连接网络:每个单元只和相邻层上的部分单元相连 神经网络的学习 根据学习方法分: 感知器:有监督的学习方法,训练样本的类别是已知的,并在学习的过程中指导模型的训练 认知器:无监督的学习方法,训练样本类别未知,各单元通过竞争学习。 根据学习时间分: 离线网络:学习过程和使用过程是独立的 在线网络:学习过程和使用过程是同时进行的 根据学习规则分: 相关学习网络:根据连接间的激活水平改变权系数 纠错学习网络:根据输出单元的外部反馈改变权系数 自组织学习网络:对输入进行自适应地学习摘自《数学之美》对人工神经网络的通俗理解:神经网络种类很多,常用的有如下四种: 1)Hopfield网络,典型的反馈网络,结构单层,有相同的单元组成 2)反向传播网络,前馈网络,结构多层,采用最小均方差的纠错学习规则,常用于语言识别和分类等问题 3)Kohonen网络:典型的自组织网络,由输入层和输出层构成,全连接 4)ART网络:自组织网络 深度神经网络: Convolutional Neural Networks(CNN)卷积神经网络 Recurrent neural Network(RNN)循环神经网络 Deep Belief Networks(DBN)深度信念网络 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合。深度学习从大类上可以归入神经网络,不过在具体实现上有许多变化。 深度学习的核心是特征学习,旨在通过分层网络获取分层次的特征信息,从而解决以往需要人工设计特征的重要难题。 Machine Learning vs. Deep Learning 神经网络(主要是感知器)经常用于 分类 神经网络的分类知识体现在网络连接上,被隐式地存储在连接的权值中。 神经网络的学习就是通过迭代算法,对权值逐步修改的优化过程,学习的目标就是通过改变权值使训练集的样本都能被正确分类。 神经网络特别适用于下列情况的分类问题: 1) 数据量比较小,缺少足够的样本建立模型 2) 数据的结构难以用传统的统计方法来描述 3) 分类模型难以表示为传统的统计模型 缺点: 1) 需要很长的训练时间,因而对于有足够长训练时间的应用更合适。 2) 需要大量的参数,这些通常主要靠经验确定,如网络拓扑或“结构”。 3) 可解释性差 。该特点使得神经网络在数据挖掘的初期并不看好。 优点: 1) 分类的准确度高 2)并行分布处理能力强 3)分布存储及学习能力高 4)对噪音数据有很强的鲁棒性和容错能力最流行的基于神经网络的分类算法是80年代提出的 后向传播算法 。后向传播算法在多路前馈神经网络上学习。 定义网络拓扑 在开始训练之前,用户必须说明输入层的单元数、隐藏层数(如果多于一层)、每一隐藏层的单元数和输出层的单元数,以确定网络拓扑。 对训练样本中每个属性的值进行规格化将有助于加快学习过程。通常,对输入值规格化,使得它们落入0.0和1.0之间。 离散值属性可以重新编码,使得每个域值一个输入单元。例如,如果属性A的定义域为(a0,a1,a2),则可以分配三个输入单元表示A。即,我们可以用I0 ,I1 ,I2作为输入单元。每个单元初始化为0。如果A = a0,则I0置为1;如果A = a1,I1置1;如此下去。 一个输出单元可以用来表示两个类(值1代表一个类,而值0代表另一个)。如果多于两个类,则每个类使用一个输出单元。 隐藏层单元数设多少个“最好” ,没有明确的规则。 网络设计是一个实验过程,并可能影响准确性。权的初值也可能影响准确性。如果某个经过训练的网络的准确率太低,则通常需要采用不同的网络拓扑或使用不同的初始权值,重复进行训练。 后向传播算法学习过程: 迭代地处理一组训练样本,将每个样本的网络预测与实际的类标号比较。 每次迭代后,修改权值,使得网络预测和实际类之间的均方差最小。 这种修改“后向”进行。即,由输出层,经由每个隐藏层,到第一个隐藏层(因此称作后向传播)。尽管不能保证,一般地,权将最终收敛,学习过程停止。 算法终止条件:训练集中被正确分类的样本达到一定的比例,或者权系数趋近稳定。 后向传播算法分为如下几步: 1) 初始化权 网络的权通常被初始化为很小的随机数(例如,范围从-1.0到1.0,或从-0.5到0.5)。 每个单元都设有一个偏置(bias),偏置也被初始化为小随机数。 2) 向前传播输入 对于每一个样本X,重复下面两步: 向前传播输入,向后传播误差 计算各层每个单元的输入和输出。输入层:输出=输入=样本X的属性;即,对于单元j,Oj = Ij = Xj。隐藏层和输出层:输入=前一层的输出的线性组合,即,对于单元j, Ij =wij Oi + θj,输出= 3) 向后传播误差 计算各层每个单元的误差。 输出层单元j,误差: Oj是单元j的实际输出,而Tj是j的真正输出。 隐藏层单元j,误差: wjk是由j到下一层中单元k的连接的权,Errk是单元k的误差 更新 权 和 偏差 ,以反映传播的误差。 权由下式更新: 其中,△wij是权wij的改变。l是学习率,通常取0和1之间的值。 偏置由下式更新: 其中,△θj是偏置θj的改变。Example人类视觉原理: 深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和Torsten Wiesel,以及Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”, 可视皮层是分级的 。 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。对于不同的物体,人类视觉也是通过这样逐层分级,来进行认知的:在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。 可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类呢?答案是肯定的,这也是许多深度学习算法(包括CNN)的灵感来源。 卷积神经网络是一种多层神经网络,擅长处理图像特别是大图像的相关机器学习问题。卷积网络通过一系列方法,成功将数据量庞大的图像识别问题不断降维,最终使其能够被训练。 CNN最早由Yann LeCun提出并应用在手写字体识别上。LeCun提出的网络称为LeNet,其网络结构如下:这是一个最典型的卷积网络,由 卷积层、池化层、全连接层 组成。其中卷积层与池化层配合,组成多个卷积组,逐层提取特征,最终通过若干个全连接层完成分类。 CNN通过卷积来模拟特征区分,并且通过卷积的权值共享及池化,来降低网络参数的数量级,最后通过传统神经网络完成分类等任务。 降低参数量级:如果使用传统神经网络方式,对一张图片进行分类,那么,把图片的每个像素都连接到隐藏层节点上,对于一张1000x1000像素的图片,如果有1M隐藏层单元,一共有10^12个参数,这显然是不能接受的。但是在CNN里,可以大大减少参数个数,基于以下两个假设: 1)最底层特征都是局部性的,也就是说,用10x10这样大小的过滤器就能表示边缘等底层特征 2)图像上不同小片段,以及不同图像上的小片段的特征是类似的,也就是说,能用同样的一组分类器来描述各种各样不同的图像 基于以上两个假设,就能把第一层网络结构简化 用100个10x10的小过滤器,就能够描述整幅图片上的底层特征。卷积运算的定义如下图所示: 如上图所示,一个5x5的图像,用一个3x3的 卷积核 : 101 010 101 来对图像进行卷积操作(可以理解为有一个滑动窗口,把卷积核与对应的图像像素做乘积然后求和),得到了3x3的卷积结果。 这个过程可以理解为使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。在实际训练过程中, 卷积核的值是在学习过程中学到的。 在具体应用中,往往有多个卷积核,可以认为, 每个卷积核代表了一种图像模式 ,如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。如果设计了6个卷积核,可以理解为这个图像上有6种底层纹理模式,也就是用6种基础模式就能描绘出一副图像。以下就是24种不同的卷积核的示例: 池化 的过程如下图所示: 可以看到,原始图片是20x20的,对其进行采样,采样窗口为10x10,最终将其采样成为一个2x2大小的特征图。 之所以这么做,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行采样。 即使减少了许多数据,特征的统计属性仍能够描述图像,而且由于降低了数据维度,有效地避免了过拟合。 在实际应用中,分为最大值采样(Max-Pooling)与平均值采样(Mean-Pooling)。LeNet网络结构: 注意,上图中S2与C3的连接方式并不是全连接,而是部分连接。最后,通过全连接层C5、F6得到10个输出,对应10个数字的概率。 卷积神经网络的训练过程与传统神经网络类似,也是参照了反向传播算法 第一阶段,向前传播阶段: a)从样本集中取一个样本(X,Yp),将X输入网络; b)计算相应的实际输出Op 第二阶段,向后传播阶段 a)计算实际输出Op与相应的理想输出Yp的差; b)按极小化误差的方法反向传播调整权矩阵。
优质英语培训问答知识库