关于卷积网络的题目

一个卷积层,输入是h1, w1, c1,输出是h0, w0, c0,卷积核k×k,不考虑bias,参数有多少?考虑bias,会增加多少参数,一次forward计算需要做多少次乘法,多少次加法?

对于k×kk\times k的卷积核,在hi×wih_i×w_i上做卷积,这样的操作涉及c1c_1个维度,所以过滤器的shape是k×k×c1k×k×c_1,一个过滤器在一个输入上得到一层feature map,共有c0c_0个feature maps,所以一共有c0c_0个过滤器。那么参数总量为k×k×c1×c0k\times k\times c_1 \times c_0

考虑bias,每个过滤器增加一个参数,总参数量为(k×k×c1+1)×c0(k\times k\times c_1 + 1)\times c_0

乘法次数=h0×w0×c0×k×k×c1h_0 \times w_0 \times c_0 \times k \times k \times c1
加法次数=h0×w0×c0×k×k×c1h_0 \times w_0 \times c_0 \times k \times k \times c1(考虑bias)。

同上一问题的卷积层,如果考虑stride和padding(stride步长s和padding宽度p),请问输出大小ho,wo如何计算?

h0=h1+2×pks+1h_0 = \lfloor \frac{h_1 + 2×p - k}{s} + 1 \rfloor
w0=w1+2×pks+1w_0 = \lfloor \frac{w_1 + 2×p - k}{s} + 1 \rfloor

同上一问题的卷积层,MSRA策略如何初始化它的权重?

卷积核的初始化参数的方差为2k×k×c1\frac{2}{k\times k\times c_1},在N(0,2k×k×c1)N(0, \frac{2}{k\times k\times c_1})中采样得到。

如果让你调节超参数momentum和learning rate,你会用什么样的策略?

先把momentum固定,按0.001, 0.01, 0.1, 1等配置试验learning rate。找出最佳learning rate之后,固定它,按照一定的梯度试验momentum,直到找到最佳的值。

在试验最佳learning rate时,每做一次实验画出loss随训练时间变化的曲线。如果曲线开始下降很快,后期不断震荡,说明learning rate太大。如果曲线下降太慢,或者保持在很高的loss不下降,说明learning rate太小。

在最新的CNN中,1x1卷积核很常见,它的用处是?

降维或升维。

假设1x1卷积的输入是一个形状为(N,F,H,W)(N,F,H,W)的张量,其中NN是batch size,FF是channel个数,HHWW分别是高度和宽度。

通过一个stride为1, padding为0的1x1卷积,得到的结果是(N,F1,H,W)(N,F1,H,W)

其中F1由做1x1卷积的过滤器个数决定。所以1x1卷积相当于改变channel这一维的大小。

为什么较大的卷积核(大于5x5)越来越少见?

相同大小的感受野,大卷积核的参数量多于小卷积核级联的参数量。

例如,一个5x5的卷积核有25个参数,两个3x3卷积核级联有18个参数,但两者的感受野(reception field)是一样的——这其实就是VGG在AlexNet上做的改进之一。

经过5x5卷积得到的feature map上的每个点来自输入空间中25个点;经过两层3x3卷积得到的feature map的每个点,可以对应经过一次3x3卷积得到的feature map上的9个点,而后者的每个点对应原输入空间中的9个点。由于kernel的形状是矩形,第一层feature map的9个点在原输入空间中有重叠的感受野,在第二层feature map看来,感受野相当于第一层的感受野只在边缘扩增了一个像素,所以感受野大小是5x5=25。

随着卷积核越来越小,卷积层级联得越来越深,模型能获得比起相同参数量的大卷积核更大的感受野。

一个例子来自空洞卷积(dilated convolution),引进dilation使得同一层feature map的感受野之间的重叠减小,感受野进一步增大。如下图所示,一个普通3x3卷积(a),级联一个3x3的2-dilated卷积(b),再级联一个3x3的4-dilated卷积©,能够达到15x15=225的感受野,而参数只有3x3x3=27(不算bias)。

而相同参数量的大卷积核不能做到这么大的感受野。相同感受野的大卷积核不能做到这么少参数。