什么是卷积

01
卷积


在泛函分析中,有卷积、旋积或摺积(Convolution)的定义。它是通过两个函数f和g生成第三个函数的一种数学运算,表征函数f与g经过翻转和平移的重叠部分的面积。
卷积的计算公式如下:
 


f(t)先不动, g(-t)相当于g(t)函数的图像沿y轴(t=0)做了一次翻转。g(x-t)相当于g(-t)的整个图像沿着t轴进行了平移,向右平移了x个单位。他们相乘之后围起来的面积就是h(x)。

 



离散卷积的定义为:



可以看出算计可以理解为 :



对离散求和,对连续求积分。


02

卷积的图像处理
 



之前介绍过《神经网络(Neural Network)》,可以通过卷积在图像中提取特征,每个图像都可以被看成像素值组成的矩阵。



比如图像
 


我们可以通过不同的Kernel函数(filter),针对图片上的噪点(高频信号)进行过滤,形成如下效果:


通过卷积操作修改使用的过滤矩阵,进行边缘检测、锐化、模糊等操作。
矩阵的卷积计算:
 



生成的特征图由3个参数控制
 

  1. 层数(Depth):卷积操作使用的滤波矩阵的个数, 在CNN中对应神经网络的层数;
  2. 步长(Stride):滤波矩阵每次平移的像素数;
  3. 零填充(Zero-padding):有时,我们在输入矩阵的边缘使用零值进行填充,这样就能对输入图像矩阵的边缘进行滤波。



参考:

https://www.zhihu.com/question/22298352
https://zh.wikipedia.org/zh-cn/%E5%8D%B7%E7%A7%AF
https://mlnotebook.github.io/post/CNN1/
https://www.jianshu.com/p/61b21acf4b5d
https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
https://mc.ai/gentle-dive-into-math-behind-convolutional-neural-networks/

THE END
- 晚安 -
图片长按2秒,识别图中二维码,关注订阅号
 

 

 

### 卷积和池化的定义及其在深度学习中的应用 #### 卷积的定义及作用 卷积是一种数学运算,主要用于提取输入数据的空间特征。在深度学习中,卷积通过卷积核(也称为滤波器)与输入数据进行滑动窗口操作,生成特征图(Feature Map)。常见的卷积类型包括标准卷积、转置卷积、深度可分离卷积和空洞卷积等[^1]。 - **标准卷积**:用于提取局部特征,例如边缘、纹理等。它可以通过不同的卷积核尺寸(如1×1、3×3、5×5)来调整感受野大小。 - **转置卷积**:主要用于上采样操作,常用于生成模型或语义分割任务中。 - **深度可分离卷积**:通过分解为Depthwise卷积和Pointwise卷积,减少计算量和模型参数。 - **空洞卷积**:通过在卷积核中插入空洞(零填充),扩大感受野而不增加计算复杂度。 卷积的作用在于从输入数据中提取空间特征,同时通过共享权重的方式降低模型复杂度。卷积层通常用于图像分类、目标检测、语义分割等领域。 #### 池化的定义及作用 池化是一种降维操作,通过减少特征图的空间维度来降低计算复杂度并防止过拟合。池化操作不会改变通道数,但会缩小特征图的高度和宽度[^2]。常见的池化方法包括最大池化(Max Pooling)和平均池化(Average Pooling)。 - **最大池化**:选择滑动窗口内的最大值作为输出,保留最显著的特征。 - **平均池化**:计算滑动窗口内所有值的平均值,平滑特征图。 池化的作用在于减少特征图的空间分辨率,从而降低计算成本,并增强模型对小范围平移和扭曲的鲁棒性[^2]。 #### 卷积与池化的异同 - **通道方面**:卷积可以改变通道数,而池化不会改变通道数。 - **参数方面**:卷积核包含可训练参数,而池化核仅是一个固定的操作框架[^2]。 - **使用方面**:两者都需要定义核大小、步长和填充方式,但卷积常用`padding=same`,池化常用`padding=valid`[^2]。 #### 在深度学习中的应用 - **卷积**:广泛应用于计算机视觉任务,如图像分类、目标检测、图像分割等。例如,在ResNet中,卷积被用来构建残差块以解决梯度消失问题。 - **池化**:用于减少特征图的空间维度,提高计算效率。例如,在VGG网络中,池化层被多次使用以逐步降低特征图的分辨率。 ```python import torch.nn as nn # 示例:卷积与池化的实现 conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1) pool_layer = nn.MaxPool2d(kernel_size=2, stride=2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值