Loading

卷积神经网络CNN

理解卷积运算

3Blue1Brown【官方双语】那么……什么是卷积?

数学定义

假设有一个序列\(a\)和一个序列\(b\)

\(a=(1,2,3)\)
\(b=(4,5,6)\)

\(a,b\)的卷积也是一个序列:

\[( 1 * 4, \\ 1 * 5 + 2 * 4, \\ 1 * 6 + 2 * 5 + 3 * 4, \\ 2 * 6 + 3 * 5, \\ 3 * 6 ) = (4, 13, 28, 27, 18) \]

更加形象地,你可以认为它是这样得到的,首先把序列\(b\)倒转,然后将其最后一个数字和序列\(a\)的第一个数字对齐,做乘法,然后将序列\(b\)向右滑动,所有在窗口内对齐的数字对,做乘法后加和,重复这个过程一直到只剩最后一个对齐的数字对。

img

使用公式表达:

\((a * b)_n=\Sigma_{i,j(i+j=n)} a_i b_j\)

用途

不同于数组相加、相乘这种一一映射的计算,卷积运算得到的新数组中的每一个元素,都是由原始数组中的多个元素参与运算得来的,就好像,每一个坑位的计算都要卷入多个相邻的原始元素一样。

一般在应用中,数组\(a\)是我们要进行操作的原始数组,数组\(b\)是我们的工具数组(通常称为卷积核(kernel)),比如这样的\(b\)可以将原始的\(a\)平滑化:

img

  • 蓝色的是原始数组\(a\),红色的是卷积核数组\(b\)
  • 卷积核数组\(b\)中每个元素相等,一共有5个元素,和为1
  • 此时,对窗口进行卷积相当于取周边五个数的均值
  • 最终,得到的下方黄色数组是原始数组的更加平滑的版本

如果你将其应用到二维图片上,你将得到的新图片中的每一个像素都是与周围像素计算的平均值,最终,你模糊了该图像:

img

如果你调整你的卷积核,让其中的数字遵循高斯分布,而非都是一样的数,这样,你就得到了图像处理领域常用的高斯分布算法,你会得到更加自然的镜头失焦效果:

img

如果你使用下图这样的卷积核,第一行是负数,第二行是0,第三行是第一行的相反数,则会强调卷积核扫过的部分上下不一致的情况,你也可以理解为,将图片的边缘抠了出来

img

快速卷积算法

numpy中的卷积核scipy中的fft卷积效率有多个数量级的差异,卷积运算可以利用某些trick来大量加速,这个本篇文档略过。

卷积神经网络

膜拜!绝对找不到第二个如此通俗易懂的【CNN卷积神经网络】教程,同济大佬全程大白话讲解,听懂人话就能学会!

卷积神经网络(Convolutional Neural Network, CNN),大量应用于计算机视觉领域,通过特征提取来实现图像分类识别等应用,TextCNN是CNN在NLP领域的应用,常用于文本分类(如判定一条评论是好评或差评)。

卷积神经网络即是将卷积操作用于特征匹配上的一个案例。

举个例子,下方是一个手写图像——\(x\),而左上角的是你选取的卷积核,通过这个卷积核对图片进行卷积,最终得到的卷积数组中,显然原始图片中有这个斜线的地方最终的数值就会更高,可以将每一个卷积核看作一个特征,我们就是使用这些特征去对图片进行特征匹配,最终完成分类。

img

特征提取

下图左侧是原始图片,中间是三个卷积核,右侧是单个卷积核卷积过后的图像

img

  • 第一张图中,斜线这一特征被提取出来
  • 第二张图中,中心的叉这一特征被提取出来
  • 第三张图中,反斜线被提取出来

Pooling

上面的图片是非常小的,只有9 x 9像素,真正的图片以及图片识别任务中,无论图像大小核图像特征都远大于这个例子,如果代表每一个特征的卷积核都要生成一个与原始图片大小完全相等的图像,那计算量将非常不可控。想象汽车智能识别路标时,需要多快的响应速度。

Pooling(池化)是一个压缩技术,它将图片中的一个区域压缩成单个数值。如左侧是一次卷积的结果,右侧是Pooling后的结果,可以看到最终只有四个数被保存了下来。

img

一般有两种池化方式:

  • Max Pooling:用区域内最大的数字代表整个区域(保留特征)
    img
  • Average Pooling:用区域的平均值代表整个区域

Normalization

为了计算方便,通常会将为负数的值全部变成0,使用一个ReLU函数即可完成。

img

组成卷积神经网络

将一张图片针对每一个卷积核,卷积、ReLU、Pooling后,即可得到多个特征矩阵

img

这样的卷积层可以有多个,且是否池化可以自由选择

img

将最后的特征矩阵输出层进行全连接:

img

和通常的神经网络一样,全连接可以连接到结果层,这些权重指示了输入属于哪一类的概率更高:

img

全连接可以有任意多层,不一定只有一层

下图是一个真正的卷积神经网络用于图片识别的例子:

img

  1. 底图是一个手写的4
  2. 经过六个卷积核进行卷积,得到六个特征图片
  3. 将六个特征图片进行下采样(Pooling),得到更小的特征图片
  4. 继续将这些特征进行卷积、下采样,得到更多的更小的特征图片
  5. 经过两层全连接
  6. 最终得到输出

至于训练出的卷积核究竟代表什么特征,天也不知道

训练过程

输入:图片 + 标注数据标识图片的分类
输出:通过神经网络进行预测,预测后计算损失,反向传播,修正权重。
超参:

  • 卷积核尺寸
  • 卷积核数目(而后随机生成卷积核等待训练)
  • 池化窗口大小
  • 池化步长
  • 全连接神经元数量
  • ...

CNN中的权重为卷积核 + 全连接层。

posted @ 2025-08-03 21:47  于花花  阅读(30)  评论(0)    收藏  举报