深度学习中什么是卷积, 它是如何工作的

标题深度学习中什么是卷积, 它是如何工作的

1.数学物理层面

数学上,连续卷积的定义如下:
(f * g)(t) = ∫[f(τ) * g(t - τ)] dτ
其中,* 表示卷积操作,f(t) 和 g(t) 是两个函数,(f * g)(t) 是它们的卷积结果。
它的物理含义可以理解为:系统某一时刻的输出是由多个输入共同作用(叠加)的结果。
具体解释如下:
假设有两个物理量(例如信号,场或系统响应等),可用公式中的函数f(t) 和 g(t)表示。在物理上,卷积大概可以理解为:系统某一时刻的输出是由多个输入共同作用(叠加)的结果。
g(t) 是系统的响应函数(或滤波器)。它描述了系统对输入信号 f(t) 的响应方式。g(t) 中的每一个值表示了在时间 t 时,系统对输入信号的加权响应。
在卷积过程中,我们考虑了 f(t) 中的每个时间点 τ,并将其与 g(t - τ) 相乘。这相当于在时间轴上对 g(t - τ) 进行了平移,然后与 f(t) 相乘。这个过程捕捉了在不同时间点上,系统响应函数 g(t) 对输入信号 f(t) 的影响。
最后,通过对所有时间点的乘积进行积分,我们将所有加权的响应值进行累加。这就得到了在每个时间点 t 上的卷积结果 (f * g)(t)。该结果描述了输入信号 f(t) 通过系统响应函数 g(t) 后的响应情况。
因此,卷积公式提供了一种描述系统响应、信号传播和叠加效应的数学工具。它在物理学中被广泛应用,例如信号处理、系统响应分析、场的传播和滤波器设计等领域。

2、图像层面

在深度学习中,卷积层是神经网络中一种常用的操作,它使用卷积运算对输入数据进行特征提取。卷积层的数学公式可以通过以下方式解释:
假设输入数据是一个三维张量,具有形状为 [H, W, C],其中 H 表示高度,W 表示宽度,C 表示通道数。卷积层使用一组称为卷积核(或过滤器)的权重来对输入进行卷积操作。
假设卷积核的形状为 [FH, FW, C, K],其中 FH 和 FW 表示卷积核的高度和宽度,C 表示输入的通道数,K 表示卷积核的数量(也称为输出通道数)。一般而言,在图像领域,卷积核的高度和宽度相等,常见的设置有3x3、5x5、7x7等。
卷积操作的数学公式可以表示为:
输出特征图的某个位置的数值 = sum(输入特征图的对应位置 * 卷积核的权重) + 偏置
具体而言,对于输出特征图的每个位置 (i, j, k),其中 i 表示高度索引,j 表示宽度索引,k 表示通道索引,卷积操作可以表示为:
输出特征图[i, j, k] = sum(sum(sum(输入特征图[m, n, c] * 卷积核[m, n, c, k]))) + 偏置[k]
其中,m 和 n 表示卷积核的高度和宽度索引,c 表示输入特征图的通道索引。
这个公式说明了卷积操作的过程。在每个位置 (i, j, k),输入特征图与卷积核的对应位置进行逐元素相乘,然后将所有乘积相加。这相当于对输入特征图的局部区域与卷积核进行加权叠加,得到输出特征图的对应位置。
最后,可以通过添加偏置项来调整输出特征图的整体偏移量。偏置项在公式中表示为偏置[k],其中 k 表示输出通道索引。
下面是一个大小为3x3的卷积核,步长为1的二维卷积示意图:
在这里插入图片描述

可以看到3x3的卷积核以滑动窗口的形式在输入通道上滑动,并通过某种计算得到上面的输出值,每一个卷积核在一个位置会得到一个输出值,按照卷积核的移动顺序形成的输出矩阵。这是最直观的卷积形式。
具体计算的过程如下所示:
在这里插入图片描述

卷积核在原始输入矩阵所覆盖区域对应元素相乘然后相加。
对于一个图片而言,一般的图片是三通道图片,即包含RGB三个通道,对一个图片的卷积计算,它是如何完成的呢?
在这里插入图片描述

具体计算过程解释如下:
首先将三通道图片切分成三个单通道,这里标记为B、G、R三个通道。B、G、R三个通道分别与对应的卷积核进行卷积计算,然后再通过偏置叠加在一起。这个就得到了三通道图片的卷积。

3、卷积中的参数

以一个3x3卷积核为例,该卷积核中有9个参数,那么这9个参数是怎么来的呢?卷积核的个数又是什么呢?
其实卷积核中有9个参数也是作为超参数通过模型训练得到的,一个训练好的卷积核可以更好的提取图像的特征。
常见的初始化方法可以为恺明初始化。
如下是pytorch中搭建模型时常用的初始化方式:

def _initialize_weights(self):
    for m in self.modules():
        if isinstance(m, nn.Conv2d):
            nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu")
        elif isinstance(m, nn.Linear):
            nn.init.normal(m.weight, 0, 0.01)
            nn.init.constant_(m.bias, 0)

对单通道的图片卷积过程,卷积核的个数,其实就是卷积之后输出通道的个数。而对于三通道的卷积过程,卷积核的个数等于输出通道数*输入通道数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值