• 卷积神经网络补充


    卷积的数学定义

    在数学上,卷积定义为
    ϕ ( x ) = ∫ − ∞ + ∞ f ( t ) g ( x − t ) d t \phi(x) = \int_{-\infin}^{+\infin} f(t)g(x-t)dt ϕ(x)=+f(t)g(xt)dt
    怎么理解上面的式子呢?

    首先,f(t)表示t时刻的输入,g(x-t)表示在t时刻的输入对当前x时刻的影响因子

    可以看到g函数的输出是一个时间长度,而不是时刻,也就是说影响因子是跟时间长度相关而不是时刻相关的

    所以才会以当前时刻x-t时刻这个时间间隔作为输入

    假如现在有一堆石头,一个池子。(知乎上看到的例子,链接忘了)

    我们每隔一刻时间往池子里的同一未知扔石头。

    石头是我们的输入,即 ( f ( 0 ) , f ( 1 ) , f ( 3 ) , . . . , f ( T ) ) (f(0),f(1),f(3),...,f(T)) (f(0),f(1),f(3),...,f(T))

    每一时刻扔出的石头造成池子中的水产生波纹,且对波纹的影响具有持续性,令其为 g ( ) g() g()

    前面的信号对后面的信号会造成影响,影响的程度由持续时间决定,例如对于 t t t时刻的输入 f ( t ) f(t) f(t) x ( x ≥ t ) x(x\ge t) x(xt)时刻的影响即为 g ( x − t ) g(x-t) g(xt)

    我们假设当 x − t ≥ l x-t\ge l xtl g ( x − t ) = 0 g(x-t)= 0 g(xt)=0,也就是说持续时间超过一定长度后影响就可以忽略不记了。

    这么一来

    l l l时刻,最终的信号为
    f ( 0 ) g ( l ) + f ( 1 ) g ( l − 1 ) + . . . + f ( l ) g ( 0 ) f(0)g(l)+f(1)g(l-1)+...+f(l)g(0) f(0)g(l)+f(1)g(l1)+...+f(l)g(0)
    l + 1 l+1 l+1时刻,信号为
    f ( 1 ) g ( l ) + f ( 2 ) g ( l − 1 ) + . . . + f ( l + 1 ) g ( 0 ) f(1)g(l)+f(2)g(l-1)+...+f(l+1)g(0) f(1)g(l)+f(2)g(l1)+...+f(l+1)g(0)
    总之,最终的表示卷积式为
    ϕ ( t ) = { f ( t − l ) g ( l ) + f ( t + 1 ) g ( l − 1 ) + . . . + f ( t ) g ( 0 )  if  t ≥ l f ( 0 ) g ( t ) + f ( 1 ) g ( t − 1 ) + . . . + f ( t ) g ( 0 )  otherwise  \phi(t) =

    {f(tl)g(l)+f(t+1)g(l1)+...+f(t)g(0) if tlf(0)g(t)+f(1)g(t1)+...+f(t)g(0) otherwise 
    ϕ(t)={f(tl)g(l)+f(t+1)g(l1)+...+f(t)g(0)f(0)g(t)+f(1)g(t1)+...+f(t)g(0) if tl otherwise 

    卷积的变种

    卷积可以进行填充和设定步长,并且根据不同的填充方式和步长设定,有几类常见的卷积方式

    首先,填充这个操作既可以在图片上进行,也可以在卷积核上进行。对图片或序列进行填充又分两种方式。一种是边界零填充,这种方式常常是下面三种情况

    1. 窄卷积(valid 卷积)

      • 步长为1,无填充
    2. 宽卷积(full卷积)

      • 步长为1,填充 P = K − 1 \boldsymbol {P = K-1} P=K1
    3. 等宽卷积(same卷积)

      • 步长为1,填充 P = ( K − 1 ) / 2 \boldsymbol{P = (K-1)/2} P=(K1)/2

    转置卷积

    前面三种情况中我们可以看到,宽卷积实现了维度的扩充。但我们对维度扩充通常有更加复杂的要求。

    低维特征映射到高维特征的卷积操作我们都统称为转置卷积。

    所以说,转置卷积不过是边界填充设得大了点,本质上只是为了扩充维度。通过设定合适的填充大小和步长,我们可以任意的扩充到指定的维度(通常小于等于M+K-1)

    普通卷积常常用于从图片或序列中提取特征,而转置卷积则用于根据编码生成图片。

    比如,DCGAN中的生成网络由转置卷积搭建,判别网络由普通卷积搭建

    微步卷积

    除边界填充之外的另一种方式是间隔填充,根据设定的间隔大小D,决定每两个像素之间插入D个0,由于通常我们没办法设定小于1的步长,所以这种方式相当于是一种步长小于1的实现方式,我们又称其为微步卷积

    我们可以重新推导一下卷积前后的维度变换公式(保留边界填充)
    D o = D i + D ∗ ( D i − 1 ) − D k + 2 P S + 1

    Do=Di+D(Di1)Dk+2PS+1
    Do=SDi+D(Di1)Dk+2P+1
    通常微步卷积是为了扩充维度,所以假如我们要用一个大小为3的卷积核,假设边界填充P=1,步长为1,将一个3维的序列扩充到5维,那么有
    5 = 3 + 2 ∗ D − 3 + 2 + 1 D = 1
    5=3+2D3+2+1D=1
    5=3+2D3+2+1D=1

    所以微步卷积也是一种特殊的(步长小于1)的转置卷积

    通常在各类深度学习框架中,转置卷积的默认实现就是微步卷积

    空洞卷积

    除了前面提到的对图片或序列的填充之外,也可以对卷积核进行填充。显然,对卷积核进行边界填充是没有意义的,因为总有传统卷积方式可以替代。所以空洞卷积一般是对卷积核进行间隔填充,空洞卷积增大了卷积核的大小,因此增大了感受野,但是没有增加参数。

    空洞卷积又名膨胀卷积,填充的间隔大小-1称为扩张率

    假设扩张率为D,卷积核原始大小为K,那么经过填充的卷积核大小为
    K ′ = K + ( K − 1 ) ∗ ( D − 1 ) K^\prime = K+(K-1)*(D-1) K=K+(K1)(D1)
    空洞卷积可用于语义分割或目标检测等任务,代替池化层进行避免下采样操作

  • 相关阅读:
    TensorFlow框架 -- 入门详解
    页面交互(js与HTML,css的使用)
    卷积神经网络卷积层池化层全连接层理解
    根文件系统介绍
    大数据_数据中台建设与架构
    clickhouse调优配置
    如何创建书画家百度百科词条?书画家百度百科怎么做?
    《前端运维》一、Linux基础--06Shell流程控制
    Docker Compose具体应用
    Stm32_标准库_14_串口&蓝牙模块_解决手机与蓝牙模块数据传输的不完整性
  • 原文地址:https://blog.csdn.net/qq_41335232/article/details/125563701