先上图,如图,X是一张照片,方框里的数字是他的像素数字化了,W是卷积核,图像通过卷积层的映射运算之后,输出Y。
这个可能更直观,看右上角公式,他是每一块对应相乘再相加,最后多个像素点被整合到了一个像素点上
这个动态图的步长为1,还可能是2或其他,如果越界,一般在input图像外再加一些像素,其值一般为0。
多层卷积这个和一层的是一样的,都是x与w对应相乘再相加然后三层得到的值再相加,最后还要加上基值,用偏差抵消结果
**经过不同卷积核卷积后效果也不一样(这是个重点,为什么说重点,因为CNN里面卷积核的大小就是有讲究的)。**可以发现同样是锐化,下图5x5的卷积核要比上图3x3的卷积核效果细腻不少。
(1)原始图像通过与卷积核的数学运算,可以提取出图像的某些指定特征(features)。
(2)不同卷积核,提取的特征也是不一样的。
(3)提取的特征一样,不同的卷积核,效果也不一样。
数学公式之后再说,我也不太懂。
全连接层就是它把特征representation整合到一起,输出为一个值,这样可以大大减少特征位置对分类带来的影响
全连接层的组成如下:
那么全连接层对模型影响参数就是三个:
在保证网络中层与层之间最大程度的信息传输的前提,直1接所有层连接起来。为了能够保证前馈的特性,每一层将之前所有层的输进行拼接,之后将输出的特征图传递给之后的所有层。Dense就是常用的全连接层。
下图为一个dense block结构图,可以看出,现在有5层网络,他有(5+4+3+2+1)个两节,即若有L层,则有(L*(L-1)/2个连接。下图中,x0是input,H1的输入是 x0(即input),输出x1,H2的输入是x0和x1,输出x2………
来撸波猫,撸完后发现了猫的几个特征,只要找到这几个特征,差不多就可以判断是不是猫了。
红色的神经元表示这个特征被找到了(激活了)同一层的其他神经元,要么猫的特征不明显,要么没找到
当我们把这些找到的特征组合在一起,发现最符合要求的是猫
那我们现在往前走一层那们现在要对子特征分类,也就是对猫头,猫尾巴,猫腿等进行分类
比如找猫头。
道理和区别猫一样当我们找到这些特征,神经元就被激活了(上图红色圆圈)
这细节特征又是怎么来的?就是从前面的卷积层,下采样层来的。
优点:
使得特征和梯度的传递更加有效,网络也就更加容易训练。每一层都可以直接利用损失函数的梯度以及最开始的输入信息,从而减轻梯度消失的影响,有助于训练更深的网络。
加强了特征的传递,更有效地利用了特征
一定程度上较少了参数数量
缺点:
学习能力太好容易造成过拟合。
缺点运算时间增加,效率变低。
也要注意约束条件。如多分类问题,若有45个类别,其中间层的维度就要大于45,可以是64维,但不能是32,因为32维较小,可能造成信息瓶颈,在前面就永久地丢失相关信息,后面的预测肯定不好。
密集连接层和卷积层的根本区别在于,Dense 层从输入特征空间中学到的是全局模式(比如对于 MNIST 数字,全局模式就是涉及所有像素的模式),而卷积层学到的是局部模式,对于图像来说,学到的就是在输入图像的二维小窗口中发现的模式。在上面的例子中,这些窗口的大小都是 3×3(原图大小为28×28)。
视觉世界从根本上具有平移不变性。简单地说,图像经过平移,相应的特征图上的表达也是平移的。
假如人脸特征在图像的左上角,那么卷积后对应的特征也在特征图的左上角,即使下一张在右下角,他也可以识别,即可以在任何地方识别这个模式。
而对于密集连接网络来说,如果模式出现在新的位置,它只能重新学习这个模式。
在神经网络中,卷积被定义为不同位置的特征检测器,也就意味着,无论目标出现在图像中的哪个位置,它都会检测到同样的这些特征,输出同样的响应。比如人脸被移动到了图像左下角,卷积核直到移动到左下角的位置才会检测到它的特征。
视觉世界从根本上具有空间层次结构
如下图,第一个卷积层将学习较小的局部模式(比如边缘),第二个卷积层将学习由第一层特征组成的更大的模式,以此类推。这使得卷积神经网络可以有效地学习越来越复杂、越来越抽象的视觉概念。
**输入层:**就是输入的图像,有可能是三通道的有可能是单通道的。 比如28281或者28283 分别代表的是大小为28*28,通道数分别为单通道(灰度值)和三通道(RGB)的图片。
过滤器 (filter)实质上是一堆卷积核(kernel),一般卷积核是2的多少次方。卷积核(kernel)也被叫做滤波器(filter)
输出层就是filter遍历输入层后的的计算结果。
上图第一个卷积层表示这一层有16个卷积核,一个卷积核为7x7的矩阵,这些就构成了一个过滤器。
在 MNIST 示例中,第一个卷积层接收一个大小为 (28, 28, 1) 的特征图,并输出一个大小为 (26, 26, 32) 的特征图,即它在输入上计算 32 个过滤器。对于这 32 个输出通道,每个通道都包含一个 26×26 的数值网格,它是过滤器对输入的响应图(response map),表示这个过滤器模式在输入中不同位置的响应(见图 5-3)。这也是特征图这一术语的含义:深度轴的每个维度都是一个特征(或过滤器),而 2D 张量 output[:, :, n] 是这个过滤器在输入上的响应的二维空间图(map)。
batch是深度学习的优化算法,说白了这个优化算法就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后计算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,找不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,所以计算量也不是很大。
基本上现在的梯度下降都是基于mini-batch的,所以Keras的模块中经常会出现batch_size,注意Keras中用的优化器SGD是stochastic gradient descent的缩写,但不代表是一个样本就更新一回,而是基于mini-batch的。
个样本就更新一回,而是基于mini-batch的。
在每个卷积层,数据都是以三维形式存在的。你可以把它看成许多个二维图片叠在一起,其中每一个称为一个feature map。在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝各是一个二维张量)。下图则是有6个feature map。
怎么得到feature map呢?在卷积的过程中,每个卷积层的Feature Map和Kernel进行矩阵乘积操作,得到下一个卷积层的若干Feature Map,而这个若干则取决于卷积核的数量,只要有N个卷积核,就会在下一层产生N个Feature Map。
###1.1.5 两个关键参数
池化是使用某一位置的相邻输出的总体统计特征代替网络在该位置的输出,其好处是当输入数据做出少量平移时,经过池化函数后的大多数输出还能保持不变。比如:当识别一张图像是否是人脸时,我们需要知道人脸左边有一只眼睛,右边也有一只眼睛,而不需要知道眼睛的精确位置,这时候通过约化某一片区域的像素点来得到总体统计特征会显得很有用。由于池化之后特征图会变得更小,如果后面连接的是全连接层,能有效的减小神经元的个数,节省存储空间并提高计算效率。
这是均值池化和最大值池化两中示意图
池化层是模仿人的视觉系统对数据进行降维,用更高层次的特征表示图像。
实施池化的目的:
如图,特征图的尺寸是4×4,但最大池化运算将其减半为 2×2,池化后的特征值是对应最大输入特征值。这就是最大池化的作用:对特征图进行下采样,与步进卷积类似。
这是最大池化的数据效果。
最大池化是从输入特征图中提取窗口,并输出每个通道的最大值。它的概念与卷积类似,但是最大池化使用硬编码的 max 张量运算对局部图块进行变换,而不是使用学到的线性变换(卷积核)。最大池化与卷积的最大不同之处在于,最大池化通常使用 2×2 的窗口和步幅 2,其目的是将特征图下采样 2 倍。与此相对的是,卷积通常使用 3×3 窗口和步幅 1。
随机池化的方法非常简单,只需对特征区域元素按照其概率值大小随机选择,元素值大的被选中的概率也大。随机位置池化则集成了随机池化与最大值池化两者。
下采样(缩小图像)的主要目的有两个:.*
上采样(放大图像)的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。
使用下采样的原因,一是减少需要处理的特征图的元素个数,二是通过让连续卷积层的观察窗口越来越大(即窗口覆盖原始输入的比例越来越大),从而引入空间过滤器的层级结构。
一般最大值池化比均值池化好。最合理的子采样策略是首先生成密集的特征图(通过无步进的卷积),然后观察特征每个小图块上的最大激活,而不是查看输入的稀疏窗口(通过步进卷积)或对输入图块取平均,因为后两种方法可能导致错过或淡化特征是否存在的信息。
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值经激活函数变换再传递给下一层。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
如图是一个单层感知机(就是一个神经单元),他只能分离线性的,即使有多个感知机组合用,若没有激活函数,
他也只能这样,还是线性划分的,
但如果我们加个非线性的激活函数如sigmoid函数,他最终的输出可能就是这样的
很多,先不写了
https://www.zhihu.com/question/22334626
反向传播将包括:
如图,在 3D 输入特征图上滑动这些 3×3 的窗口,在每个可能的位置停止并提取周围特征的 3D 图块[形状为 (height, width, input_depth)]。然后每个 3D 图块与学到的同一个权重矩阵[也就是卷积核(convolution kernel)]做张量积,转换成形状为(output_depth,) 的 1D 向量。然后对所有这些向量进行空间重组,使其转换为形状为 (height, width, output_depth) 的 3D 输出特征图。输出特征图中的每个空间位置都对应于输入特征图中的相同位置(比如输出的右下角包含了输入右下角的信息)。举个例子,利用 3×3 的窗口,向量 output[i, j, :] 来自 3D 图块 input[i-1:i+1, j-1:j+1, :]。
卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx。子采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。
图像边界卷积时的问题:图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。
如下图,有一个 5 ∗ 5 5*5 5∗5的图片,现在用 2 ∗ 2 2*2 2∗2的卷积核卷积,若步长为2,那么就还剩一行一列没有与卷积核重叠,这就出现了边界效应。
还有一个是在经过过滤器逐步的卷积之后,图像的大小可能会越来越小直到1,所以也要填充。
但边缘的数据我们一般不能舍弃,所以要进行填充,因为每个像素格子都是数据,我们填充的数字一般是0。
小白我才大一,刚接触神经网络,文章不足之处还望指出。若有侵权,无意冒犯,还望大佬体谅,毕竟这只是我的一篇笔记。