CNN

Catalogue
  1. 一、概念介绍
    1. 1.1 卷积的数学意义
      1. 1.1.1 定义和公式
      2. 1.1.2 意义
      3. 1.1.3 举例
    2. 2.CNN中的卷积概念
  2. 二、卷积神经网络-CNN
    1. 2.1 CNN的定义
    2. 2.2 CNN的由来
    3. 2.3 CNN的介绍(重点)
      1. 卷积层(Convolutional Layer)
      2. 池化层(Pooling Layer)
      3. 激活函数(Activation Function)
      4. 全连接层(Fully Connected Layer)
    4. 2.4 CNN模型:LeNet-5
    5. 2.5 图像处理
      1. 图像处理核心概念
  3. 总结

一、概念介绍

1.1 卷积的数学意义

卷积在数学中 是一种数学运算,是一种积分变换的数学方法;在两个函数之间产生第三个函数的一种运算.
所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。

“卷积的“卷”,指的的函数的翻转,从 g(t) 变成 g(-t) 的这个过程;卷积的“积”,指的是积分/加权求和. ”

1.1.1 定义和公式

设:$f(t), g(t) $是R1上的两个可积函数,作积分:$ \int_{-\infty}^{\infty} f(\tau) \cdot g(t - \tau) \, d\tau $
随着t的不同取值,这个积分就定义了一个新函数,称为函数 f 与 g 的卷积,记为: ℎ(t) = (f * g) (t)

卷积的公式

a. 连续形式(连续时间卷积)

给定两个函数 f(t) 和 g(t),它们的卷积 ℎ(t) 定义为:​

$ (f \ast g)(t) = \int_{-\infty}^{\infty} f(\tau) \cdot g(t - \tau) \, d\tau $

这里的积分表示对变量 $ \tau $ 的积分。

b. 离线形式(离散时间卷积)
对于离散时间的情况,给定两个序列 f[n] 和 g[n],它们的卷积 (f∗g)[n] 定义为:

$ (f \ast g)[n] = \sum_{k=-\infty}^{\infty} f[k] \cdot g[n - k] $

这里的求和表示对变量 k 的求和。

解释:对函数 f , g的卷积 (f∗g)(n) 的卷积,实际操作是:
先对g函数进行翻转,相当于在数轴上把g函数从右边褶到左边去,也就是卷积的“卷”的由来。
然后再把g函数平移到n,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。

在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。整体看来是这么个过程:
翻转——>滑动——>叠加——>滑动——>叠加——>滑动——>叠加…..多次滑动得到的一系列叠加值,构成了卷积函数。

1.1.2 意义

以上是教科书上 对于卷积数学运算(一种积分变换) 给出的定义. 那究竟为什么这么设计,这么计算,背后的意义是什么?

先看两个问题:1.卷积这个名词是怎么解释?“卷”是什么意思?“积”又是什么意思?2.卷积背后的意义是什么,该如何解释?

卷积公式表示f和g在一个变量上加权平均,其中g经过翻转和平移后与f相乘,并在整个定义域上积分;在这个积分过程中, g(t-T)表示的是 g在t时刻的局部模式,而f(T)表示f在t时刻的局部贡献。

本质意义:提供一种有效的方法 来描述和处理 2个函数(序列、信号)之间的交互效应。

卷积的定义和性质,使得它成为一种强大的工具,有助于理解和处理 具有复杂相互作用的系统;
卷积的局部感知权重共享的特性,使得它能够感知输入信号的局部模式。

1.1.3 举例

两个函数的卷积 $ f(t) = e^{-t} ;g(t)=u(t)$

其中,u(t) 是单位阶跃函数,表示在 t=0 处跃升为1。

点击查看python绘制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import numpy as np
import matplotlib.pyplot as plt

# 定义函数
def f(t):
return np.exp(-t)

def g(t):
return np.piecewise(t, [t < 0, t >= 0], [0, 1])

# 连续时间范围
t = np.linspace(-1, 5, 1000)

# 计算函数值
ft = f(t)
gt = g(t)

# 计算卷积结果
convolution_result = np.convolve(ft, gt, mode='full') * (t[1] - t[0]) # 使用 np.convolve 计算卷积

# 绘图
plt.figure(figsize=(10, 6))

plt.subplot(3, 1, 1)
plt.plot(t, ft, label='$f(t) = e^{-t}$')
plt.title('Function $f(t)$')
plt.legend()

plt.subplot(3, 1, 2)
plt.plot(t, gt, label='$g(t) = u(t)$')
plt.title('Function $g(t)$ (Unit Step)')
plt.legend()

# 仅绘制有效范围内的卷积结果
plt.subplot(3, 1, 3)
plt.plot(t, convolution_result[:len(t)], label='$f * g$')
plt.title('Convolution Result: $(f * g)(t) = 1 - e^{-t}$')
plt.legend()

plt.tight_layout()
plt.show()

还有信号分析的例子:输入信号是 f(t) ,是随时间变化的。 系统响应函数是 g(t) 《比如:随时间指数下降的》。

2.CNN中的卷积概念

以上,数学中的卷积,提供了一种方法来描述和处理2个函数(序列、信号)之间的交互效应。
因此 作为一种强大的工具,有助于理解和处理 复杂相互作用的系统。
并且 卷积具备的局部感知、权重共享的特性,使得它能够感知输入信号的局部模式。

基于以上理解 和意义,衍生到机器学习中,也利用卷积 局部感知、权重共享的特性,来学习和理解一些图像或者其它内容场景。

衍生出的CNN,是一种包含卷积操作的 深度神经网络(或者说是一类深度学习神经网络).
专门用于处理和分析具有网格状结构的数据,CNN的设计灵感来自于生物学中对动物视觉系统的理解,通过卷积层和池化层等结构实现对图像特征的提取。

tips:CNN中的卷积是一种操作,用来提取输入数据中的特征模式,比如图片中的边缘、角点或纹理

二、卷积神经网络-CNN

2.1 CNN的定义

一种包含卷积操作的 深度神经网络(或者说是一类深度学习神经网络).
CNN的主要特点包括: 卷积层、池化层、权重共享、多层网络结构、适用于图像处理任务.

核心思想: 通过使用卷积层(Convolutional Layer)和池化层(Pooling Layer)对输入数据进行局部感知共享权重,从而实现对图像等结构化数据的特征提取和高效处理。

CNN通常包含多个卷积层、池化层和全连接层。

2.2 CNN的由来

CNN的发展历程是深度学习研究的一个关键里程碑.

Yann LeCun等人于1998年提出的卷积神经网络结构,用于手写数字的识别。卷积层的出现在LeNet-5模型,用于手写数字识别
LeNet-5是一个经典的卷积神经网络.包括 卷积层、池化层和全连接层。 其中卷积层和池化层的引入使其在处理图像数据上具有优势

深度学习的复兴: 2012年AlexNet的成功标志着深度学习的复兴。随后,研究者们陆续提出了一系列基于CNN的模型,包括VGG、GoogLeNet、ResNet等,这些模型在图像分类、目标检测、语义分割等领域取得了显著的成果。

2.3 CNN的介绍(重点)

卷积层(Convolutional Layer)

卷积层是CNN的核心组件,通过卷积操作从输入数据中提取局部特征。卷积操作使用卷积核(filter)在输入数据上滑动,计算局部区域的加权和。

池化层(Pooling Layer)

池化层用于减小特征图的空间尺寸,降低计算复杂度,并增强模型对平移和旋转的不变性。常见的池化操作包括最大池化平均池化

(1)最大池化
对于每个池化窗口(通常是2x2或3x3的小区域)中的值,选择其中的最大值作为池化后的值。这个过程可以通过以下公式表示:

$ \text{Max Pooling}(x, i, j) = \max_{p,q} x_{(i \times \text{stride} + p),(j \times \text{stride} + q)} $

(2)平均池化
对于每个池化窗口中的值,计算其平均值作为池化后的值。

$ \text{Average Pooling}(x, i, j) = \frac{1}{\text{pool_size}} \sum_{p,q} x_{(i \times \text{stride} + p),(j \times \text{stride} + q)} $

激活函数(Activation Function)

在卷积层之后,通常会应用激活函数,如ReLU(Rectified Linear Unit),用于引入非线性特性,增强模型的表达能力。

全连接层(Fully Connected Layer)

通常会有全连接层用于将高级特征映射到输出类别。在图像分类任务中,全连接层用于输出各个类别的概率分布

除了映射作用,还可以通过全连接引入非线性映射,增加模型的表达能力,使其能够适应更复杂的数据分布。

2.4 CNN模型:LeNet-5

一种经典的 CNN架构模型,是CNN的重要里程碑。

(1)三层卷积
出于对任务的需求、计算资源的考虑。(通过增加卷积层数,模型可以学习更多复杂的特征,但也会增加计算负担。)

(2)激活函数
每一层都使用了 Sigmoid 激活函数。这是在网络设计初期常用的一种激活函数。

引入非线性性,允许网络学习更复杂的特征;捕捉输入数据的复杂关系

在当时的研究时期,Sigmoid 激活函数是常用的选择,但在后来的深度学习研究中,ReLU(Rectified Linear Unit)等激活函数逐渐成为更为流行的选择,因为它们在训练中具有更好的性能。

2.5 图像处理

在图像处理中,卷积是一种常用的操作,用于处理图像的特征提取、滤波和边缘检测等任务. 理解图像处理中的卷积可以通过以下几个关键点:

局部特征提取、滤波操作、权重共享、下采样、卷积神经网络(CNN)

图像一般可以表示为矩阵形式。对图像的处理函数(如平滑,或者边缘提取),也可以用一个g矩阵来表示。

我们在处理平面空间的问题,已经是二维函数了

给定图像 I 和卷积核 K,卷积操作的结果图像 I_{\text{conv}} 的每个像素可以通过以下公式计算:

$I_{\text{conv}}(x, y) = \sum_{i=0}^{h-1} \sum_{j=0}^{w-1} I(x - i, y - j) \cdot K(i, j)$

其中:

  • $ I_{\text{conv}}(x, y) $ 是卷积操作后得到的图像的像素值.
  • I(x - i, y - j) 是原始图像的像素值,i 和 j 是卷积核的坐标.
  • K(i,j) 是卷积核的权重.
1
2
3
这个公式表示,在卷积操作中,卷积核在图像上滑动,每个位置都与图像的局部区域进行加权相乘并求和,得到卷积后的像素值。卷积核的选择和权重决定了卷积操作的具体效果,例如边缘检测、模糊等。

需要注意的是,这是一个简化的二维卷积公式。在实际应用中,可能还涉及到通道(颜色通道)的处理,以及不同类型的卷积操作(如反卷积、分离卷积等)。

图像处理核心概念

上文介绍了CNN(卷积神经网络相关概念和实现)。那CNN实质是一种图像处理算法。 不管是CNN还是其他算法,在图像处理中,都涉及到一些核心概念和操作,如:局部特征提取、滤波操作、权重共享、下采样

下面具体介绍下这些概念。

局部特征提取:从原始数据中提取有意义、具有代表性的信息的过程。比如卷积操作,从原始图像中提取为特征图(卷积的结果)。卷积操作常用于提取图像中的局部特征,例如边缘、纹理等。

滤波操作:通过卷积运算在信号或图像上应用滤波器的过程。滤波的目的是通过去除或增强信号中的特定频率成分,达到平滑、降噪、边缘检测等目的。
因此,滤波操作通常涉及卷积操作,可以看作卷积的一种应用。

区别:滤波操作和特征提取在某种程度上有交叉,但它们的重点和目的略有不同。

可以理解为:滤波操作指

1
2
3
滤波操作目的主要用于对信号或图像进行平滑、降噪、锐化等处理。
特征提取目的主要从原始数据中提取具有代表性和有用信息的特征,以便更好地表示数据的本质。
滤波操作有时也能起到特征提取的作用,但它们的设计和目标通常更倾向于信号处理的需求。相反,特征提取更注重从数据中提炼有意义的信息,使得后续的任务(如分类、检测)能够更好地利用这些信息。

todo: 滤波操作、卷积操作、特征提取 三者概念的关系和区别.

  1. 滤波操作就是卷积操作,通过卷积实现 图像的平滑、降噪、锐化等处理
  2. 卷积操作还可以用于特征提取
  3. 滤波和特征提取是相关但不完全相同的概念。(相关在于都是通过卷积操作实现、都应用于信号或图像处理、都是属于对数据的局部感知)

只是目的不同: 滤波的目标通常是改变输入数据的频谱特性,实现平滑、去噪等效果;而特征提取的目标是从输入数据中提取有用的信息,例如图像中的纹理、形状等。

其他相关概念:填充、步长、通道数

(1)填充( Padding )
指在输入数据的边缘添加一定数量的像素,使得输出数据的尺寸能够与输入数据相匹配。也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用 0 或者复制边界像素来进行填充。
(2)步长(Stride)
是指卷积核在每一次卷积操作中滑动的距离。步长的大小可以影响输出数据的大小,也可以影响特征提取能力和计算复杂度。当步长增大时,输出数据的尺寸会减小,特征提取能力会变弱,但计算速度会加快。
(3)通道数(Channel)
也称为深度或特征图数量,是指卷积神经网络中每一层输出的特征图数量。通道数的大小直接影响了卷积神经网络的特征提取能力和计算复杂度。通过增加通道数,可以增强卷积神经网络的特征提取能力,但也会增加计算复杂度。

多通道卷积.

总结

  1. 学习的过程:系统架构,涉及的概念,每个概念的目的、关系。 这是一个学习的过程.
  2. 其中相关概念的目的,可以通过追溯历史、重要里程碑去发现.
  3. 还可以通过一些工具辅助加深理解,比如python实现具体的计算逻辑,展示具体的数学计算图形.

资料:
如何通俗易懂地解释卷积
卷积神经网络经典回顾之LeNet-5