文章目录
本篇博客主要是讲解一些本人对于卷积的理解,包括:
- 为什么会出现卷积操作?
- 最基本的卷积操作?
- 卷积的优缺点。
- 空洞卷积等等。
- 卷积操作牵扯的分辨率等问题。
- 灰度值,RGB值等
卷积
卷积到底是什么?卷积到底卷了个啥?
- 卷积是一个数学概念,公式如下:
∫ − ∞ + ∞ f ( τ ) g ( x − τ ) d τ \int_{-\infty }^{+\infty } f(\tau )g(x-\tau )d\tau ∫−∞+∞f(τ)g(x−τ)dτ- 如何理解该公式:举一个例子
假设 f ( t ) f(t) f(t)表示到 t t t时刻一个人进食量, g ( t ) g(t) g(t)表示t时刻胃对食物的消化率。如果要求下午两点还剩多少食物改怎么求呢?
∫ 0 t f ( x ) g ( t − x ) d x \int_{0}^{t} f(x )g(t-x )dx ∫0tf(x)g(t−x)dx
所以卷积其实就是两个函数的积分,一个不稳定的输入函数 f ( x ) f(x) f(x) ,还有一个相对稳定的输出函数 g ( x ) g(x) g(x) ,求这两个函数乘积的积分。
卷积还可以理解为t时刻发生的事件受前面x事件的影响程度。- 图像卷积过程:
首先有一个卷积核,我们可以理解为g(x),还有一个输入f(x)。卷积核所覆盖的部分对应点相乘再相加。然后输出一个点,填入到中心位置。
- 如何理解卷积过程?
第一种理解:周围点对于中心点的影响。例如平滑卷积,一个 3 × 3 3\times 3 3×3的卷积核,数值全部为 1 / 9 1/9 1/9,这样的话就相当于这九个数相加求平均,可以缩小像素点之间的差异,使像素点更加平滑,效果如下:
第二种理解:过滤器,中心点对于周围点的试探。对于卷积核所覆盖的9个点,进行筛选。所以卷积操作可以提取局部特征,具体例子如下:
总结:神经网络中的卷积层可以通过卷积核提取特征。
卷积的特点:
参考链接:卷积神经网络中的稀疏交互和参数共享
稀疏交互
对于全连接网络,任意一对输入与输出神经元之间都产生交互,形成稠密的连接结构。在下图中可以看到, s i s_i si , i = 1 , . . . , 5 i = 1,...,5 i=1,...,5 与输入的所有神经元 x i x_i xi , i = 1 , . . . , 5 i = 1,...,5 i=1,...,5都有连接。
具体来讲,假设网络中相邻两层分别具有 m m m个输入和 n n n个输出,全连接网络中的权值参数矩阵将包含 m ∗ n m*n m∗n个参数。对于稀疏交互的卷积网络,如果限定每个输出与前一层神经元的连接数为 k k k,那么该层的参数总量为 k ∗ n k*n k∗n。在实际应用中,一般 k k k值远小于 m m m就可以取得较为可观的效果;而此时优化过程的时间复杂度将会减小几个数量级,过拟合的情况也得到了较好的改善。
稀疏交互的物理意义是,通常图像、文本、语音等现实世界中的数据都具有局部的特征结构,我们可以先学习局部的特征,再将局部的特征组合起来形成更复杂和抽象的特征。
参数共享
参数共享是指在同一个模型的不同模块中使用相同的参数,它是卷积运算的固有属性。全连接网络中,计算每层的输出时,权值参数矩阵中的每个元素只作用于某个输入元素一次;而在卷积神经网络中,卷积核中的每一个元素将作用于每一次局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每个位置的每个参数都进行优化,从而大大降低了模型的存 储需求。
参数共享的物理意义是使得卷积层具有平移等变性。假如图像中有一只猫, 那么无论它出现在图像中的任何位置,我们都应该将它识别为猫,也就是说神经网络的输出对于平移变换来说应当是等变的。
池化层
- 为什么要做池化操作
卷积操作的为了提取特征,卷积操作的结果是获取特征图,但是通常 3 × 3 3 \times 3 3×3的卷积核获取的特征图包含的数据量还是很大,计算量很大。例如在自动驾驶的时候要在几毫秒内做出判断,因此为了减少计算量,我们应该在保留特征的前提下降低计算量,也就是降低数据量。这就需要池化操作。
总结:池化可以在不改变特征的情况下降低数据量,减少计算量。
- 有哪些池化操作?
max pooling: 只保留最大值。
average pooling: 求平均值保留。
全连接层
全连接层就是每个节点都与上一个节点相连接。一般是在最后与softmax层一起用。就是计算每个节点的得分,然后判断属于哪一类。
转置卷积
- 上面说的卷积层,池化层等都是对于分类问题的。但是对于分割问题,输出图像应该与输入图像一样大,如果只用卷积层和池化层肯定不满足要求,因为卷积不能增大输入的高宽,通常要么不变,要么减半。
- 转置卷积可以增大输入的高宽。具体计算如下,输入的每个位置的元素与卷积核相乘填在对应位置,最后将他们加在一起。
- 转置卷积是一对多,一个元素产生多个位置。卷积是多对一,多个元素产生一个位置。
为什么叫转置?
- 对于卷积我们可以写成 Y = W ⋅ X Y=W\cdot X Y=W⋅X,其中 " ⋅ \cdot ⋅"代表卷积运算,
- 这里也可以对 W W W构造一个矩阵 V V V,使得卷积运算等价于矩阵乘法 Y ′ = V X ′ Y'=VX' Y′=VX′ 。其中 Y ′ Y' Y′, X ′ X' X′是 Y Y Y, X X X对应的向量版本。
假设 X ′ X' X′是 m m m行, Y ′ Y' Y′是 n n n行,矩阵 V V V则是 n × m n\times m n×m。现在要把 Y ′ Y' Y′作为输入, X ′ X' X′作为输出,即 X ′ = ( ) Y ′ X'=()Y' X′=()Y′。不难推算()应该是 m × n m\times n m×n即 V T V^{T} VT。- 转置卷积等价于 X ′ = V T Y ′ X'=V^{T}Y' X′=VTY′,即转置卷积可以将反向放大。
空洞卷积
卷积神经网络与全连接神经网络
- 全连接神经网络
- 由一个一个的感知机组成。
- 权重是w,每个感知机的w可能不一样。
- 每个感知机与上一层(下一层)的感知机全部相连。
- 卷积神经网络
- 由卷积层、池化层、全连接层、激活函数搭积木组成。
- 权重是卷积核的数值,但是每一层可以共用同一个卷积核,也就是权重共享。
- 由于卷积神经网络不是只有全连接层,因此卷积神经网络是局部连接的。可以理解为如果卷积神经网络全部是全连接层,那么就是全连接的。