基本理解
CNN降低训练参数的2大法宝
局部感受野、权值共享
局部感受野:就是输出图像某个**节点(像素点)**的响应所对应的最初的输入图像的区域就是感受野。
权值共享:比如步长为1,如果每移动一个像素就有一个新的权值对应,那么太夸张了,需要训练的参数爆炸似增长,比如从32x32的原图到28x28经过convolve的图,如果后者的每一个像素对应前面的一个参数,那参数实在是多。权值共享就是将每次覆盖区域的图像所赋给的权值都是卷积核对应的权值。就是说用了这个卷积核,则不管这个卷积核移到图像的哪个位置上,图像的被覆盖区域的所赋给的权值都是该卷积核的参数。
从全连接到CNN经历了什么?
演化进程: 全连接------->(全连接加上局部感受野了进化成)局部连接层---------->(局部连接层加上权值共享了)卷积神经网络。
比如简单点就用2维图像,100x100 到 100x100,那么如果全连接第一层所有点都与第二层所有点相连,就有 1 0 8 10^8 108个连接,加上局部感受野了。不精确的计算(不考虑边缘带来的问题),假设局部为3x3大小。那么第一层的每个点都与3x3的局部有连接,就是说,有 1 0 4 ∗ 3 ∗ 3 10^4*3*3 104∗3∗3个连接,才能得到下一层100x100(假设加了padding)。此时局部连接网络的权值数和连接数是一样的,都是 1 0 4 ∗ 3 ∗ 3 10^4*3*3 104∗3∗3, 如果再加上权值共享,形成卷积神经网络,那么这 1 0 4 10^4 104个点不是每个都有自己独立的3x3个权值,而是这 1 0 4 10^4 104共享这3x3个点。因此最终卷积网络的权值只有3x3大小!
更多信息可以参考 这里, 对于局部感受野和权值共享写的很详细。其实 Convolutional layers are technically locally connected layers. To be precise, they are locally connected layers with shared weights.
##啥叫feature map啊?
同一种滤波器卷积得到的向量组合。一种滤波器提取一种特征,下图使用了6种滤波器,进行卷积操作,故有6层feature map.
C1层用了6个5x5的卷积核,这里的步长为1,因此每个feature map是(32-5+1)x(32-5+1)=28x28.
CNN训练的参数是啥啊?
其实就是卷积核!!!当然还有偏置。
比如上面的6个5x5的卷积核的训练参数是6x(5x5+1),当然咯,每个卷积核对应的偏置自然是不同的。
某篇论文的卷积网络表示:
F w ( ∂ I ) = W n ∗ F n − 1 ( ∂ I ) + b n , n = 3 F_w(\partial I) = W_n*F^{n-1}(\partial I)+b_n , n = 3 Fw(∂I)=Wn∗Fn−1(∂I)+bn,n=3
F n ( ∂ I ) = σ ( W n ∗ F n − 1 ( ∂ I ) + b n ) , n = 1 , 2 F_n(\partial I) =\sigma(W_n*F^{n-1}(\partial I)+b_n) , n = 1,2 Fn(∂I)=σ(Wn∗Fn−1(∂I)+bn),n=1,2
F 0 ( ∂ I ) = ∂ I , n = 0 F_0(\partial I) = \partial I, n = 0 F<