0. 前言
按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。
本文是卷积神经元网络CNN的基础介绍。
1. CNN的基础介绍
卷积神经网络(Convolutional Neural Network, CNN)是一种专门设计用于处理具有类似网格结构数据(如图像、视频和序列数据)的深度学习模型。CNN最初是为计算机视觉任务而发展起来的,特别是在图像识别与分类方面取得了革命性的成功,并且在语音识别、自然语言处理以及许多其他领域中也得到了广泛应用。
CNN的核心特征包括:
- 局部感受野(Local receptive fields): 卷积层中的每个神经元仅与其输入的一部分(如图像的一个小区域)相关联,这种结构模仿了生物视觉皮层中神经元的工作方式。通过应用可学习的滤波器(或称权重矩阵),CNN可以检测图像中的特定模式或特征,如边缘、角点等。
- 权值共享(Weight sharing): 在同一层内,所有神经元使用的滤波器是相同的。这意味着在网络中只需要存储一组参数来描述一种特征,无论该特征出现在图像的哪个位置,都可以用同样的权重进行检测。这大大减少了模型参数的数量,并使得网络对平移具有不变性。
- 卷积操作(Convolution Operation): 卷积神经网络的名字来源于其核心计算单元——卷积运算。这个过程涉及到滤波器在输入数据上滑动并执行元素级别的乘法和加法运算,生成一个特征图(Feature Map),反映了输入数据中特定特征的强度分布。
2. 常见CNN结构
2.1 卷积层(Convolution layer)
- Filter(卷积核):实际上是一个矩阵,用每个Filter与基础图像做内积(内积,不是卷积)可以得到一个Feature Map
- Degree of activation of a filer (卷积核的激活度): 对Feature Map中的值进行求和,用途是识别特点的特征(在Input有特定特征时,对应的filter求出的degree of activation会很大)
- Stride(步长):Filter每次移动的距离
说明
x:有b张图片,3个通道(R,G,B),像素28*28
one k: 单一卷积核(对R,G,B 3个通道各有一个卷积核),3个通道,卷积核矩阵3✖3
multi-k:有多个卷积核(例如blur,sharp,edge等,识别不同特征)
bias:对应每个卷积核有一个偏置
关于卷积操作
一般要处理的彩色图像拥有不止一个通道,那对应的卷积核也不止一个通道,但是卷积计算出的结果只有一个通道。例如:像素为28*28的彩色图像有R,G,B三个通道,原始的数据张量即为(28,28,3),对应卷积核也应该有3个通道,例如(3,3,3)。但是卷积之后,每个通道对应同一位置的像素值会进行
求合
,所以卷积之后的结果为(26,26,1)
。如果卷积核有多个,比如100个,卷积核张量大小为(3,3,3,100),这样卷积之后的结果为(26,26,100)
- PyTorch代码:
import torch layer = torch.nn.Conv2d(1,3,kernel_size=3,stride=1,padding=0) #原图通道为1,卷积核有3个,卷积核大小为3*3,步长为1,补丁(原图扩展)为0
2.2 池化层(Max Pooling layer)
- 对Feature Map进行压缩(对图像进行压缩,通过一定规则选择特定像素点,比如仅选择feature map中的最大值,以对feature map进行降维)
- PyTorch代码:
layer = torch.nn.MaxPool2d(3,stride=2) #卷积核大小为3*3,步长为1,选择feature map中最大值
2.3 Flatten layer
- 在全链接层之前,需要把数据“压扁”成一维(后面全链接层就和普通的神经元网络一样了)
- PyTorch中的调用方法为
torch.nn.Flatten()
2.4 全链接层(Full connect layer)
- 全连接层常位于CNN的最后阶段,它们将前面提取到的特征映射转换成固定长度的向量,以便进行分类或回归等最终预测任务。
- PyTorch代码:
from torch import nn linear_layer = nn.Linear(in_features=5, out_features=3)
2.5 金子塔结构
- CNN的网络结构中的一种,每层识别的特征由简到繁。