cs231 CNN笔记

cs231的CNN讲义的笔记

cs231 CNN笔记

结构概述

常规的神经网络不适合大尺寸的图片。图大导致参数很多,造成浪费与增加过拟合的风险。

神经元的三维排列。充分利用了图像的特点,更合理的构建网络、

用来构建卷积神经网络的各种层

卷积层,池化层,全连接层

cs231 CNN笔记

卷积层

概述和直观介绍:在没有大脑和生物意义上的神经元之类的比喻下,直观的说,网络会学习到一种滤波器,这种滤波器当见到某一类视觉特征时就会**。

大脑作比喻:多维的每一个输出都可以当作一个神经元观察输入的一个小区域的输出。

局部连接性:神经元只与上一层的部分神经元连接。连接的尺寸是称为神经元感受野(即滤波器大小)的超参数。连接性在长与宽的空间上是局部的,但在深度上是与输入数据一致的(比如一个filter要应用在RGB三个维度,则这个filter有三个子filter)

空间管理:1、输出层的深度是超参数,对应了使用多少个滤波器。我们把关注相同感受野的神经元称为深度列(deepth column),或者(纤维)fibre

                  2、步长

                  3、0填充。0填充的尺寸是超参数。好处是让我们能够控制输出数据的空间大小(最常用的是用来使传递数据一直保持相同的大小)

输出数据空间大小:(W-F+2P)/S+1。输入数据大小(W),感受野尺寸(F),步长(S),零填充(P)。(均考虑正方形的时候)

步长限制:考虑整除。

参数分享:将深度维度上一个单独的2维切片看做深度切片(depth slice)。反向传播时,同一个深度切片上的所有神经元对权重的梯度累加,得到共享权重的梯度。参数共享假设的道理:平移不变性

cs231 CNN笔记

矩阵乘法实现:

1将卷积层的前向传播变成巨大的矩阵乘法,称为img2col。如输入为227×227×3。filter 11×11×3,stride 4。首先将11×11×3的感受野变为列向量。输出的长宽为(227-11)/4+1=55,则输出有3025个神经元即filter遍历输入3025次。所以img2col结果维X_col=363×3025。因为感受野很多重叠的地方,不同的列会有很多重复的数字

2、filter的权重也变为列向量,与感受野的变化方式一样。假设96个 11×11×3的filter,则得到W_row 96乘363

3、结果即为np.dot(W_row,X_col),然后reshape到正常的尺寸 55×55×96

缺点:占用很多内存。优点:矩阵乘法很快

 

后向传播

扩张卷积:filter处理的神经元可以是有间隙的,称为扩张。和普通的filter结合在一起可以用更少的层数更快更暴力融合输入空间上的信息或大尺度特征。

池化层

降低数据体的空间尺寸来减少参数的数量,同时控制过拟合。

cs231 CNN笔记

只有两种常见的最大池化的变形:F=3,S=2(重叠池化);F=2,S=2。而更大感受野的池化层丢失的数据太多。

后向传播:在反向传播中,max(x,y),只有沿着输入中更大的那一个传播梯度。类似的,池化层的前向传播中会记住最大**值的位置(switches),因此梯度的传播很高效。

把全连接层转化为卷积层:全连接层转换为卷积层很有用。这种变换允许我们更高效将之前的网络当做一个滑动窗口(filter)在更大的一张图片上进行前向传播。比如,224×224的图片输出7×7×512(除以32)。然后用384×384的图片作为输入,得到12×12×512(384/32=12)。然后经过由三个全连接层转化的卷积层,取F=7,S=1,则得到6×6×1000,相当于将384×384图片的不同位置进行了之前的神经网络的前向传播。这种方式与让原始的神经网络(带全连接层)以32的步长在384×384的图片上遍历的效果是一致的。自然,前者的方式要高效很多,因为前者只进行了一次复杂的前向传播,共享了很多计算资源,而后者在初始的卷积层上有着太多重复的计算。

卷积神经网络的结构

排列规律:

最常见的:cs231 CNN笔记

                               cs231 CNN笔记

                              cs231 CNN笔记,在每个池化层前有两个卷积层,更大更深的网络经常这样做,因为这样在具有破坏性的池化层前提取出更完整的特征。

相比于一个大的感受野倾向于几个小的滤波器:堆叠的的卷积层包含非线性,提取出更深更好的特征,含更少的参数。但后向传播时,需要更多内存去保存中间层的结果

 

尺寸规律:

输入层能被2整除很多次

卷积层用小尺寸滤波器,S=1,用零填充保持数据尺寸不变。

池化层,F=2,过大会损失太多信息

为什么卷积层S=1?实践如此,能整合更多信息,且仅在池化层进行下采样。

为什么使用零填充?保存图片边缘信息(不是很能理解了,大概是使边缘单独发生作用吧)