翻译原文来自于:http://cs231n.github.io/convolutional-networks/
有翻译错误理解错误的请指正!
卷积神经网络
卷积神经网络由能够学习权重和偏置的神经元构成。每个神经元接收一些输入,执行点乘,并且在其后可以跟着一个非线性操作(也可以没有,optionally 选择性的。原文:optionally follows it with a non-linearity)。整个网络仍然是表达了一个可微的得分方程:从一端的原始的图像像素,到另一端对应一个类别得分。CNNs的最后一层(全连接层)也具有一个损失函数(例如,SVM/Softmax),并且所有在常规网络中采用的技巧都适用于CNNs。
CNNs相比于其他网络的重大改变在哪里?在CNNs中有一个非常明确的假设:输入是图像,这样就允许把某些特性编码进网络结构中。这样就使前向方程(forward funtion)更有效地实现,并且极大地减少网络的参数。
ArchitectureOverview(结构概览)
回顾:常规神经网络中,输入的是单个向量,并且通过一系列隐藏层对这个向量进行变换。每个隐藏层由一系列神经元组成,并且这些神经元与前面一层的所有神经元都是全连接的;在同一层内的神经元,彼此之间没有联系,其方程是完全独立的。最后一层全连接层称为“输出层”,在分类情况时,输出表示类别得分。
常规神经网络并没有缩放到完整图像大小。很明显,全连接不仅浪费并且大量的参数会很快导致过拟合。
3D神经元。ConvNet受益于输入是由图像组成的,并且网络结构的约束更为合理。特别地,与常规神经网络不同,ConvNet 的神经元具有3个维度:宽度(width),高度(height)和深度(depth)。注意,这里的深度指的是激活量(an activation volume)的第三个维度,而不是全部网络的所有层数。例如,输入图像是CIFAR-10图像,是一个激活的输入量(an input volume of activations),这个量的维度是32*32*3(分别对应宽、高和深)。我们很快会看到,一层里的神经元至于前面一层的一个小区域相连,而不是与前一层的所有神经元相连。而且,对于CIFAR-10数据库而言,输出层的维度是1*1*10,这是因为在ConvNet的结构最后,将从全图像减少到一个表示类别得分的向量,沿着深度这个维度排列(译者注arranged along the depth dimension,这里的深度指网络的层数)。图示如下。
图中,左侧是常规的3层神经网络;右侧是ConvNet的神经元的3维排列(宽度、高度和深度)。可视化其中一层。ConvNet的每一层都将3D的输入量转换成激活的3D输出量。本例中,红色的输入层表示图像,因此它的宽度和高度就是原图像的宽度和高度,而深度是3,因为彩色图像有RGB3通道。
ConvNet由神经层构成。每一层都完成一个简单的API:用一些可微分的方程(可以有参数也可以没有参数)将输入的3D量转换成输出的3D量。
构建ConvNets的神经层
用于构建ConvNets的神经层主要有3种:卷积层、采样层和全连接层。
结构实例:概述。用于CIFAR-10数据的ConvNet的结构如下:
【输入层-卷积层-RELU层-采样层-全连接层】。细节如下:
1) 输入[32*32*3]是原始图像的像素值,即原图像宽度是32,高度是32, 具有RGB3个通道。
2) 卷积层计算与输入的局部区域相连接的神经元的输出。计算权重与输入量相连的局部区域的点乘。如果用12个滤波器,在输出的结果是32*32*12的量。(译者注:参考后面的讲解,其实一个filter也是3通道的,每个通道的filter与输入的对应通道卷积,最后3个通道的结果组合成一个1维的量,所以输出就是32*32的量)
3) RELU层是对每个元素应用激活函数,例如max(0,x),阈值是0。对每个元素使用激活函数的目的是保持结果量的大小不变。(仍为[32*32*12])
4) 采样层在空间维度(宽度和高度)上进行下采样操作,结果量的大小例如[16*16*12]。
5) 全连接层计算类别得分,其结果量的大小是[1*1*10],10个数字中的每一个对应一个类别得分(class score),就像在CIFAR-10数据库中的10个类别。正如全连接层的名称一样,这一层的每一个神经元与前一层的神经都是全连接关系。
ConvNets就是以这种方式将原始图像层逐层由原始的像素值,转变成为最后的类别得分。注意,有些层有参数,有些层则没有。特别地,卷积层/全连接层实现转换的方程,不仅是输入量的激活函数,而且是参数(神经元的权重和偏置)的函数。另外,RELU层/采样层使用固定的函数。卷积层/全连接层的参数是通过梯度下降训练得到,因此ConvNets计算的每一类的类别得分,与训练集中每个图像的类别标签一致。
小结:
1) ConvNets结构在最简单的情况下就是一些层的组合,这些层能够把图像量转换成输出量。
2) 这些层的类型都是确定的,并且类型很少。(例如,目前最流行的CONV/FC/RELU/POOL)
3) 每一层接收一个3D量,并且通过一个可微分方程将它转换成输出的3D量。
4) 每一层可能有参数也可能没有。(例如,卷积层/全连接层有参数,RELU/采样层没有)
5) 每一层可能有额外的超参数,也可能没有。(例如,卷积层/全连接层/采样层有RELU层没有)
ConvNet结构实例的激活。左侧是原始输入量,存储的是原始的图像像素,右侧存储的是类别得分。沿着处理路径,每一个激活量如图所示组成一列(原文为column列,疑其笔误。译者注)。由于可视化3D量比较困难,我们把每个量的切片按照行排列(原文为row行,疑其笔误。译者注)。最后一层的量存储每一类别的得分,这里我们只显示最高的5个得分,并且把每一个对应的类别表示出来。演示程序http://cs231n.stanford.edu/。这个结构是一个小的VGG网络,后续会讨论。