1. 卷积层(Convolutional Layer)

卷积层,也可以称之为特征提取层,是CNNs最重要的部分。卷积层需要训练的参数是一系列的过滤器(我更喜欢卷积核这个词),这些过滤器的大小一致,通常都是正方形。假设我们有n个过滤器,每个过滤器的大小为kxk(k通常取3或5),那么这一层我们需要训练的参数就有nxkxk+n/c个(这里的c表示通道数,如果是灰度图像c=1,如果是彩色图像c=3)。权值共享告诉我们,一个过滤器只能提取一种特征,即当过滤器在图像上卷积(滑动)的过程中,只提取了该图像全局范围内的同一个特征。所以,n个过滤器可以提取图像的n个不同特征。每个卷积核的大小为k*k*n(维度)。

2. 构建选择



1、对于输入层(图像层),我们一般会把图像大小resize成边长为2的次方的正方形。比如CIFAR-10是32x32x3,STL-10是64x64x3,而ImageNet是224x224x3或者512x512x3。

2、实际工程中,我们得预估一下内存,然后根据内存的情况去设定合理的值。例如输入是224x224x3得图片,过滤器大小为3x3,共64个,zero-padding为1,这样每张图片需要72MB的内存(这里的72MB囊括了图片以及对应的参数、梯度和激活值在内的,所需要的内存空间),但是在GPU上运行的话,内存可能不够(相比于CPU,GPU的内存要小得多),所以需要调整下参数,比如过滤器大小改为7x7,stride改为2(ZF net),或者过滤器大小改为11x11,stride改为4(AlexNet)。


3、构建一个实际可用的深度卷积神经网络最大的瓶颈是GPU的内(显)存。现在很多GPU只有3/4/6GB的内存,单卡最大的也就12G(NVIDIA),所以我们应该在设计卷积神经网的时候,多加考虑内存主要消耗在哪里:

  • 大量的激活值和中间梯度值;
  • 参数,反向传播时的梯度以及使用momentum,Adagrad,or RMSProp时的缓存都会占用储存,所以估计参数占用的内存时,一般至少要乘以3倍;
  • 数据的batch以及其他的类似信息或者来源信息等也会消耗一部分内存。


我们假设某一个batch里的第一张图片为x[0, :, :, :],有RGB三个通道,每个通道大小为7x7,padding为1,stride为2,那么x[0, :, :, :]的大小为1x3x9x9;此外,我们假设有3个过滤器,每个大小为3x3,用w表示所有过滤器中的权重(如第一个滤波器的第一个通道为w[0, 0, :, :]);偏置b的大小为1x3;activation maps用out来表示,大小为3x4x4(如第一个map为out[0, :, :])。

以刚才的假设为例,给出前向传播和后向传播的具体计算过程(反向传播的那张图片分辨率较高,请在新的标签页打开图片并放大,或者下载后观看)



卷积神经网络梯度更新 卷积神经网络梯度计算_ide



卷积神经网络梯度更新 卷积神经网络梯度计算_ide_02


作者:Deepool