深刻易懂地理解:卷积、卷积在图像处理中的应用、从全连接到卷积(二)

系列文章目录

深刻易懂地理解:卷积、卷积在图像处理中的应用、从全连接到卷积(一)
深刻易懂地理解:卷积、卷积在图像处理中的应用、从全连接到卷积(二)



三、从全连接到卷积

1.为什么到卷积

MLP是指多层感知机,是全连接网络(前馈神经网络、BP神经网络)的前生,将MLP的激活函数改成其他的函数并且层层相连就形成了全连接网络。

神经网络最开始的模型是感知模型,实质是对各个输入值的先行组合,比如出行有人更关心日期,而另一些人更关心天气,那么其对不同输入的关心程度不一样,这就是早期模型的直观解释。神经单元相互组合,那么其输入和输出有相同的形式,因此可以层层相加,为了避免退化,之间加入非线性函数,这样前馈网络(mlp)就产生了,但问题来了,将很小的图像作为输入,简单叠加几层参数就爆炸了(算力大幅提升后的现在,mlp又重新成为热点),于是节省参数的想法自然出现了,通过共享参数,将一层的神经单元通过滑动的方式处理大得多的输入,这就是一维卷积,显然输入向量被当作同质的东西被处理了,二维卷积于此类似。

通俗的讲MLP这种网络处理图像数据会带来参数量过多的问题,所以才提出了卷积神经网络,利用卷积核去处理完整的特征图,降低了参数量。

2.转化过程

CNN的两个原则:

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

2.1卷积层推导

首先,多层感知机的输入是二维图像 X X X,其隐藏表示 H H H在数学上是一个矩阵,在代码中表示为二维张量。其中 X X X H H H具有相同的形状。为了方便理解,我们可以认为,无论是输入还是隐藏表示都拥有空间结构。

使用 [ X ] i , j [X]_{i,j} [X]i,j [ H ] i , j [H]_{i,j} [H]i,j分别表示输入图像和隐藏表示中位置 ( i , j ) (i,j) i,j处的像素。为了使每个隐藏神经元都能接收到每个输入像素的信息,我们将参数从权重矩阵(如同我们先前在多层感知机中所做的那样)替换为四阶权重张量W。假设 U U U包含偏置参数,我们可以将全连接层形式化地表示为:
在这里插入图片描述
我们令(形式上的转化,因为在这两个四阶张量的元素之间存在一一对应的关系):
[ W ] i , j , k , l = [ V ] i , j , a , b [W]_{i,j,k,l}=[V]_{i,j,a,b} [W]i,j,k,l=[V]i,j,a,b
再令 k = i + a , l = j + b k=i+a,l=j+b k=i+al=j+b得:
[ H ] i , j = [ U ] i , j + ∑ k ∑ l [ W ] i , j , k , l [ X ] k , l [H]_{i,j}=[U]_{i,j}+\sum_{k}\sum_{l}[W]_{i,j,k,l}[X]_{k,l} [H]i,j=[U]i,j+kl[W]i,j,k,l[X]k,l

                               = [ U ] i , j + ∑ a ∑ b [ V ] i , j , a , b [ X ] i + a , j + b \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;=[U]_{i,j}+\sum_{a}\sum_{b}[V]_{i,j,a,b}[X]_{i+a,j+b} =[U]i,j+ab[V]i,j,a,b[X]i+a,j+b

索引 a a a b b b 通过在正偏移和负偏移之间移动覆盖了整个图像。对于隐藏表示中任意给定位置 ( i , j ) (i,j) i,j处的像素值 [ H ] i , j [H]_{i,j} [H]i,j,可以通过在 x x x 中以 ( i , j ) (i, j) (i,j)为中心对像素进行加权求和得到,加权使用的权重为 [ V ] i , j , a , b [V]_{i,j,a,b} [V]i,j,a,b

现在引用第一个原则:平移不变性。这意味着检测对象在输入 X X X 中的平移,应该仅导致隐藏表示H中的平移。也就是说, V V V U U U实际上不依赖于 ( i , j ) (i, j) (i,j)的值,即 [ V ] i , j , a , b = [ V ] a , b [V]_{i,j,a,b} = [V]_{a,b} [V]i,j,a,b=[V]a,b。并且 U U U是⼀个常数,比如u。因此,我们可以简化 H H H 定义为:
[ H ] i , j = u + ∑ a ∑ b [ V ] a , b [ X ] i + a , j + b [H]_{i,j}=u+\sum_{a}\sum_{b}[V]_{a,b}[X]_{i+a,j+b} [H]i,j=u+ab[V]a,b[X]i+a,j+b

这就是卷积(convolution)。我们是在使用系数 [ V ] a , b [V]_{a,b} [V]a,b对位置 ( i , j ) (i, j) (i,j)附近的像素 ( i + a , j + b ) (i + a, j + b) (i+a,j+b)进行加权得到 [ H ] i , j [H]_{i,j} [H]i,j
注意, [ V ] a , b [V]_{a,b} [V]a,b的系数比 [ V ] i , j , a , b [V]_{i,j,a,b} [V]i,j,a,b少很多,因为前者不再依赖于图像中的位置。这就是显著的进步!

现在引用第二个原则:局部性。如上所述,为了收集用来训练参数 [ H ] i , j [H]_{i,j} [H]i,j的相关信息,我们不应偏离到距 ( i , j ) (i, j) (i,j)很远的地方。这意味着在 ∣ a ∣ > ∆ |a| > ∆ a> ∣ b ∣ > ∆ |b| > ∆ b>的范围之外,我们可以设置 [ V ] a , b = 0 [V]_{a,b} = 0 [V]a,b=0。因此,我们可以将 [ H ] i , j [H]_{i,j} [H]i,j重写为:
[ H ] i , j = u + ∑ a = − Δ Δ ∑ b = − Δ Δ [ V ] a , b [ X ] i + a , j + b [H]_{i,j}=u+\sum_{a=-\Delta}^\Delta\sum_{b=-\Delta}^\Delta[V]_{a,b}[X]_{i+a,j+b} [H]i,j=u+a=ΔΔb=ΔΔ[V]a,b[X]i+a,j+b

这就是一个卷积层了,而卷积神经网络是包含卷积层的一类特殊的神经网络。在深度学习研究社区中,V被称为卷积核(convolution kernel)或者滤波器(filter),亦或简单地称之为该卷积层的权重,通常该权重是可学习的参数。当图像处理的局部区域很小时,卷积神经网络与多层感知机的训练差异可能是巨大的:以前,多层感知机可能需要数十亿个参数来表示网络中的一层,而现在卷积神经网络通常只需要几百个参数,而且不需要改变输入或隐藏表示的维数。

定义多个通道的卷积层为:
[ H ] i , j , d = u + ∑ a = − Δ Δ ∑ b = − Δ Δ ∑ c [ V ] a , b , c , d [ X ] i + a , j + b , c [H]_{i,j,d}=u+\sum_{a=-\Delta}^\Delta\sum_{b=-\Delta}^\Delta\sum_c[V]_{a,b,c,d}[X]_{i+a,j+b,c} [H]i,j,d=u+a=ΔΔb=ΔΔc[V]a,b,c,d[X]i+a,j+b,c

c c c 为输入通道数,其中隐藏表示 H H H 中的索引 d d d 表示输出通道,而随后的输出 H H H 将作为输入进入下⼀个卷积层。

可观看沐神讲解:
19 卷积层【动手学深度学习v2】

2.2图示

这里参考了知乎上的一篇文章,很直观

c i c_i ci c 0 c_0 c0 分别表示输入和输出通道的数目,并让 k h k_h kh k w k_w kw 为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为 c i × k h × k w c_i×k_h×k_w ci×kh×kw 的卷积核张量,这样卷积核的形状是 c 0 × c i × k h × k w c_0×c_i×k_h×k_w c0×ci×kh×kw 。在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

图解:在这里插入图片描述
假设有一张 ( 2 , 2 ) (2,2) (2,2)的单通道(Input Channel为1)灰度图片,特征展开后进入全连接层,即图中所示的Hidden layer,假设隐藏层的神经元个数与输入特征数量相同都为4个,那参数W的维度为(4,4),一共16个参数,我们用不同颜色表示与每个神经元相连的参数,隐藏层的输出就是一个(4,1)的矩阵。
现在观察上图的下半部分,我们可以重新排列每个神经元的4个参数,变成与输入一样的(2,2)矩阵,可以看成是宽、高与输入图片一样的Kernel,共4个Output Channel,通过卷积操作得到一个(4,1)的输出(确切说应该是 ( 4 , 1 , 1 , 1 ) (4,1,1,1) (4,1,1,1)),和全连接的输出是一致的。到这里,我们就了解了全连接是如何转化为卷积的。
沐神讲解了一个1*1的kernel卷积层如何等效于全连接层【视频11分钟起】

2.3卷积

在数学中,卷积被定义为:
在这里插入图片描述
离散的为:
在这里插入图片描述
对于⼆维张量,则为 f f f的索引 ( a , b ) (a, b) (a,b) g g g的索引 ( i − a , j − b ) (i − a, j − b) (ia,jb)上的对应加和:

在这里插入图片描述
这看起来类似于上面的:
在这里插入图片描述
但有⼀个主要区别:这里不是使用 ( i + a , j + b ) (i + a, j + b) (i+a,j+b),而是使用差值。然而,这种区别是表面的,因为我们总是可以匹配两式之间的符号。我们在 [ H ] i , j [H]_{i,j} [H]i,j式中的原始定义更正确地描述了互相关(cross-correlation)


总结

分享一个CNN过程可视化的网页:
Learn Convolutional Neural Network (CNN) in your browser!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值