卷积和池化(CS231n)

用不是特别严谨但是比较通俗的语言描述整个过程

卷积神经网络是从卷积层开始介绍的,而卷积层的介绍是从全连接层开始介绍的
全连接层的处理方式是一次性处理一张图片的全部信息,处理的方式是将图片信息和权重矩阵做乘积,得到一个评分结果。
在细节层面上:
我们会把一张图的全部信息拉成一个一维的向量,一张图的全部信息原始的状态像一个长方体方体(32 X 32 X 3)
权重矩阵和这个图片信息的矩阵乘法,本质上来说其实是一次性进行多个点积运算,因为你可以把权重矩阵的每一行想想成某一类图像的典型特征,本质上,没有什么矩阵乘法只有点积,或者一次性多个批量的点积,点积才是能说出意义的操作。
最后得到一个评分结果是一个向量,这个向量的纬度和图像的类别数一样,而每一个个分量代表这个图片在这个类别上的评分,如果评分越高,这个图片属于这个类别的可能性就越大。于是就有了softmax回归,softmax回归本质上,其实是在线性的回归的基础上,进行了归一化处理,从评分变成了可能性,看起来更直观嘛。

本质上来说,全连接层的提取特征是整体一次性,而卷积层的特征提取是一点一点的提取。

卷积层的处理的方法,在最核心的数学处理方是没有本质不同的,都需要借助“点积”这个数学工具,但是在整个处理流程上是进行了很多的改进的。
首先它改对图像的整体一次性处理为局部的多次处理。它背后的深意其实是一开始我们认为图片的特征信息可以一次性就能全部提取的出来,变为我们认为需要将特征需要进行分割和组合,经过多次粗到精的细化才能提取出来的。背后其实对特征的内在结构有了更加深刻的认识。
具体的做法是,我们把之前整个大W变为一个一个小的W,让每一个小的W和图片上的每一个区域都进行匹配测试(匹配的方式就是用点积),并把匹配的结果进行记录到一个矩阵中去 (这些小的权重,通俗而不失专业一点的说法叫做“过滤器”(filter),还有一个更加专业的说法称之为卷积核)之后再拿一个小的W和图片的上的每个区域都进行匹配测试又得到一个矩阵,就这么反反复复吧,得到6个这样的矩阵。
之后这些矩阵再经过**函数的处理ReLU,处理结果应该是还是一个矩阵。
之后再在这些矩阵合并到一起,又合成一个长方体(从初始的数据长方体到生成一个新的数据长方体,这个过程一次处理过程)
类似于一开始在输入图片的操作,接下来在这个新生成的长方体的上继续之前的操作,利用一系列小的w在这个长方体上进行匹配的操作(这些小的权重的深度会根据新的长方体的深度进行调整)。
之后又得到一堆矩阵平面,这个矩阵平面再通过**层的处理,之后在叠在一起又构成了一个新的数据长方体,
之后再重复以上的操作若干次,LeNet重复了3次,
每一次处理过程相较于上一次的处理过程还是有一些变化的,比如小权重的的个数会增多,第一次一般是6个小权重,第二次是16个,第三次是120个
最后一次处理的过程之后,把所有结果连接到一个全连接层,又相当于整体的提出特征,最后得到结果。

知识点

知识点1:图片的存储信息的形象表达方式

  1. 矩阵表示
    典型是灰度图
  2. 向量表示
    卷积和池化(CS231n)
    图像的展示是这样的,但是这张图别扭的一点在于,它把待检测的数据展开成了行向量而不是列向量
  3. 长方体表示(volume)
    一张RGB的图片
    卷积和池化(CS231n)
    一张图片真的会用张量来进行表示吗,其实不一定,除了Google开发的TPU,能把张量安装张量的方法进行处理,其他的计算机体系结构在存储三维的数据结构的时候底层还是一维的,但是三维的数据结构便于我们思考问题,是一个比较好的抽象层次
    那么这个深度又具体怎么理解呢?我觉得还是可以按照R、G、B三个通道来分成三个平面,可以参考卷积的结果来理解
    卷积和池化(CS231n)

知识点2:小权重

2.1 到底是翻译成“卷积核”(kernel)还是“过滤器”(filter)

卷积和池化(CS231n)
其实讲到这里的时候,还没有出卷积核的概念,更加合适的翻译是“过滤器”,卷积是从数学运算的角度上来命名的,但是从公用上来说其实是“过滤器”
什么叫过滤器,就是符合我特征的我能够把它筛选出来,不符合我特征的我把它过滤掉,这个就是过滤器。很明显,这个过滤器其实就是某种图像特征的数学表达,通过点积这种运算我们能筛选出和我这种特征匹配度最高的那个图像部分。
卷积核的话应该用“kernel”

2.2 过滤器的空间特性

过滤器是一个三维的小空间
我们虽然是用二维的过程来展示,其实实际的数据结构是三维的
“Filters always extend the full depth of the input volume”
过滤器会延展到输入空间的完整深度,volume有一个“某种东西的总量”这样一个概念

2.3 运算

过滤器与图像的一部分进行点积运算(其实还要加上一个偏置)得到一个标量数字
卷积和池化(CS231n)
其实就是把以前整张图片和权重进行运算的过程变成小权重和图像的一部分进行运算的过程
运算的本质没有变

2.4 到底是点击还是卷积

when we do the dot product do we turn the 5 by 5 by 3 into on vector?
In essence that’s what you’re doing , you can think of it as just plopping it on and doing the element-wise multiplication at each location, but this is going to give you the same result as if you stretched out the filter at that point , stretched out the input volume that it’s laid over, and then took the dot product.
其实这句话的意思是这样的:
我们做的是“卷积”,理论其运算的方式是,filter和它覆盖的图像,它们在空间位置上一一对应地方的元素相乘,结果是和把filter以其覆盖的图像分别展成一个一维的向量再做点击结果是一样的。而在计算机实际的实现过程中,我们就是按照展开成一维向量再做点积的方式进行处理的。
那么其实这里的“卷积”和“点积”本质上其实是一样的。

有一个学生提问,我们是否应该把核旋转180度,这样更加符合“卷积”的定义
杨老师说:这里我们用“卷积”这个说法是“广义”上的卷积。
如果我们真去抠“卷积”的定义的时候,其实应该是空间位置具有共轭关系位置上的元素一一对应,但是这里我们仍然用空间位置一致的地方来进行一一对应。

2.5 卷积核里的参数是训练出来的

卷积核就是小一点的权重,而权重都是训练出来的,那么卷积核的权重也是训练出来的。
虽然网络架构是人为设计出来的,但是里面的参数是训练得到的。

2.6 卷积层的动态属性

技术问题:如果一个小权重一次只能对一个图片的局部进行分析,那么我们通过怎样的方式才能实现小权重对整个图片的完整分析呢?
直观上来说立刻就能想到两种:
一种是将核从左到右,从上到下,一个像素一个像素的滑动
还有一种是也是从左到右,从上到下,但是下一次核覆盖的范围和上一次没有重叠,也就是第二次核所待的位置,其左边缘和第一次核所待的位置的右边缘重合
其实这两种是滑动的下界和上界,其实滑动的方式的总数是有限制的,上限就是核的尺寸,你要超过核的尺寸,中间就有部分会被漏过去了。
而步长从1一直到核的尺寸这之间的数都可以吗?不一定,有些步长,特别是数大一点的步长可能会出现越过边界的情况,比如原尺寸为7,核为3,如果步长为3的话,最后剩两个像素的时候核的覆盖越过边界了
其实步长的选择可以牵扯出池化层的引入目的了,如果我们步子比较大,其实是一种变相的采样。
默认情况下我们会用1为步长,这样得到的信息最多,之后再用一个专门的采样层来进行采样,而不是在分析的同时进行采样。

另外这个问题连带的一个问题是:每一次分析会形成一个数据,等分析完成之后结果数据以什么样的方式保存呢。
根据遍历方式的不同,这个连带问题的结果展示也会有区别
我们先回答第二个问题,假设我们就按照一个像素一个像素挪动的方式来遍历整个图像,当我们遍历完图像的第一行时,我们会得到28个结果(因为核是5X5的嘛,相当于5个像素才出一个结果),如果我们按照从上到下的顺序遍历一列的话,得到也是28个数,因此我们最后会得到28 X 28个数,很自然的,我们把这个28 X 28个数放到一个28 X 28的矩阵里,这个就是按照一个像素一个像素的进行分析的方式得到最终输出结果,这个矩阵我们称之为“**映射”(activation map)

每个核对图像扫描会形成一个**映射,多个核就会形成多个**映射,多个**映射堆叠在一起又形成了一个输出空间,也是一个长方体,其深度和卷积核的核数一样。

ReLU函数什么时候用的
得到输出空间之后,**函数会从前往后一层接一层,每一层内部一个元素一个元素的进行**,最后又得到用车新的输出空间,但是纬度不变。

2.6 数量关系

从动态特征里可以总结出数量之间的关系,有几个常用的表示方法
卷积和池化(CS231n)

2.7 感受野

从脑科学神经的角度来理解,卷积核也可以成为“感受野”

3 池化层

  1. 池化层的作用就是采样以降低数据量
  2. 只缩减高度和宽度但不改变深度
    卷积和池化(CS231n)
  3. 最大池化
    卷积和池化(CS231n)
    从这张图就能看出来
    3.1 采样的方法其实还是局部扫描的方法(这点和卷积过程一样)
    3.2 和卷积不同的地方在于第一,步长采用最高的上限,第二运算的方法是取每个局部的最大值
  4. 为什么是最大池化而不是均值池化
    其实每个局部区域中的每一个值都是经过激发函数激发以后产生的值,它提现了这个局部的某一种特征,我们就拿这个局部特征最明显的那个作为这个局部的代表就可以了。
  5. 既然设定步长和池化都能做采样,能否只用步长不用池化或者只用池化而不用步长?
    可以这么做,确实在工业界有人这么做过
  6. UFLDL中对于池化的解释

知识点4 全连接层

这个没有啥好说的吧,基本的神经网络也这么用

知识点5:卷积层重复的次数

LeNet重复了3次
卷积和池化(CS231n)

slide的例子重复了6次
卷积和池化(CS231n)

知识点6:核以及卷积层的视觉化理解

卷积和池化(CS231n)

个人对于卷积核的比喻

其实可以把卷积核看成人类的显微镜,
显微镜的视野是有限的,每次只能看到培养液的一部分,我们如果需要在整个培养液中寻找我们培养的菌落,需要挪动培养液