首页 > 其他分享 >神经网络基础部件-卷积层详解

神经网络基础部件-卷积层详解

时间:2023-02-16 02:55:21浏览次数:44  
标签:卷积 torch 矩阵 times 神经网络 详解 输入

前言

在全连接层构成的多层感知机网络中,我们要通过将图像数据展平成一维向量来送入模型,但这会忽略了每个图像的空间结构信息。理想的策略应该是要利用相近像素之间的相互关联性,将图像数据二维矩阵送给模型中学习。

卷积神经网络(convolutional neural network,CNN)正是一类强大的、专为处理图像数据(多维矩阵)而设计的神经网络,CNN 的设计是深度学习中的一个里程碑式的技术。在 Transformer 应用到 CV 领域之前,基于卷积神经网络架构的模型在计算机视觉领域中占主导地位,几乎所有的图像识别、目标检测、语义分割、3D目标检测、视频理解等任务都是以 CNN 方法为基础。

卷积神经网络核心网络层是卷积层,其使用了卷积(convolution)这种数学运算,卷积是一种特殊的线性运算。另外,通常来说,卷积神经网络中用到的卷积运算和其他领域(例如工程领域以及纯数学领域)中的定义并不完全一致。

一,卷积

在理解卷积层之前,我们首先得理解什么是卷积操作。

卷积与傅里叶变换有着密切的关系。例如两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,利用此一性质,能简化傅里叶分析中的许多问题。

operation 视语境有时译作“操作”,有时译作“运算”,本文不做区分。

1.1,卷积运算定义

为了给出卷积的定义, 这里从现实世界会用到函数的例子出发。

假设我们正在用激光传感器追踪一艘宇宙飞船的位置。我们的激光传感器给出 一个单独的输出 \(x(t)\),表示宇宙飞船在时刻 \(t\) 的位置。\(x\) 和 \(t\) 都是实值的,这意味着我们可以在任意时刻从传感器中读出飞船的位置。

现在假设我们的传感器受到一定程度的噪声干扰。为了得到飞船位置的低噪声估计,我们对得到的测量结果进行平均。显然,时间上越近的测量结果越相关,所 以我们采用一种加权平均的方法,对于最近的测量结果赋予更高的权重。我们可以采用一个加权函数 \(w(a)\) 来实现,其中 \(a\) 表示测量结果距当前时刻的时间间隔。如果我们对任意时刻都采用这种加权平均的操作,就得到了一个新的对于飞船位置的平滑估计函数 \(s\) :

\[s(t) = \int x(a)w(t-a )da \]

这种运算就叫做卷积(convolution)。更一般的,卷积运算的数学公式定义如下:

\[连续定义: \; h(x)=(f*g)(x) = \int_{-\infty}^{\infty} f(t)g(x-t)dt \tag{1} \]

\[离散定义: \; h(x) = (f*g)(x) = \sum^{\infty}_{t=-\infty} f(t)g(x-t) \tag{2} \]

以上卷积计算公式可以这样理解:

  1. 先对函数 \(g(t)\) 进行反转(reverse),相当于在数轴上把 \(g(t)\) 函数从右边褶到左边去,也就是卷积的“卷”的由来。
  2. 然后再把 \(g(t)\) 函数向左平移 \(x\) 个单位,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。

1.2,卷积的意义

对卷积这个名词,可以这样理解:所谓两个函数的卷积(\(f*g\)),本质上就是先将一个函数翻转,然后进行滑动叠加。在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。

因此,卷积运算整体来看就是这么一个过程:

翻转—>滑动—>叠加—>滑动—>叠加—>滑动—>叠加.....

多次滑动得到的一系列叠加值,构成了卷积函数。

这里多次滑动过程对应的是 \(t\) 的变化过程。

那么,卷积的意义是什么呢?可以从卷积的典型应用场景-图像处理来理解:

  1. 为什么要进行“卷”?进行“卷”(翻转)的目的其实是施加一种约束,它指定了在“积”的时候以什么为参照。在空间分析的场景,它指定了在哪个位置的周边进行累积处理。
  2. 在图像处理的中,卷积处理的结果,其实就是把每个像素周边的,甚至是整个图像的像素都考虑进来,对当前像素进行某种加权处理。因此,“积”是全局概念,或者说是一种“混合”,把两个函数进行时间(信号分析)或空间(图像处理)上进行混合。

卷积意义的理解来自知乎问答,有所删减和优化。

1.3,从实例理解卷积

一维卷积的实例有 “丢骰子” 等经典实例,这里不做展开描述,本文从二维卷积用于图像处理的实例来理解。

一般,数字图像可以表示为如下所示矩阵:

本节图片摘自知乎用户马同学的文章

图像矩阵

而卷积核 \(g\) 也可以用一个矩阵来表示,如:

\[g = \begin{bmatrix} &b_{-1,-1} &b_{-1,0} &b_{-1,1} \\ &b_{0,-1} &b_{0,0} &b_{0,1} \\ &b_{1,-1} &b_{1,0} &b_{1,1} \end{bmatrix} \]

按照卷积公式的定义,则目标图片的第 \((u, v)\) 个像素的二维卷积值为:

\[(f * g)(u, v)=\sum_{i} \sum_{j} f(i, j)g(u-i, v-j)=\sum_{i} \sum_{j} a_{i,j} b_{u-i,v-j} \]

展开来分析二维卷积计算过程就是,首先得到原始图像矩阵中 \((u, v)\) 处的矩阵:

\[f=\begin{bmatrix} &a_{u-1,v-1} &a_{u-1,v} &a_{u-1,v+1}\\ &a_{u,v-1} &a_{u,v} &a_{u,v+1} \\ &a_{u+1,v-1} &a_{u+1,v} &a_{u+1,v+1} \end{bmatrix} \]

然后将图像处理矩阵翻转(两种方法,结果等效),如先沿 \(x\) 轴翻转,再沿 \(y\) 轴翻转(相当于将矩阵 \(g\) 旋转 180 度):

\[\begin{aligned} g &= \begin{bmatrix} &b_{-1,-1} &b_{-1,0} &b_{-1,1}\\ &b_{0,-1} &b_{0,0} &b_{0,1} \\ &b_{1,-1} &b_{1,0} &b_{1,1} \end{bmatrix} => \begin{bmatrix} &b_{1,-1} &b_{1,0} &b_{1,1}\\ &b_{0,-1} &b_{0,0} &b_{0,1} \\ &b_{-1,-1} &b_{-1,0} &b_{-1,1} \end{bmatrix} \\ &= \begin{bmatrix} &b_{1,1} &b_{1,0} &b_{1,-1}\\ &b_{0,1} &b_{0,0} &b_{0,-1} \\ &b_{-1,1} &b_{-1,0} &b_{-1,-1} \end{bmatrix} = g^{'} \end{aligned} \]

最后,计算卷积时,就可以用 \(f\) 和 \(g′\) 的内积:

\[\begin{aligned} f * g(u,v) &= a_{u-1,v-1} \times b_{1,1} + a_{u-1,v} \times b_{1,0} + a_{u-1,v+1} \times b_{1,-1} \\ &+ a_{u,v-1} \times b_{0,1} + a_{u,v} \times b_{0,0} + a_{u,v+1} \times b_{0,-1} \\ &+ a_{u+1,v-1} \times b_{-1,1} + a_{u+1,v} \times b_{-1,0} + a_{u+1,v+1} \times b_{-1,-1} \end{aligned} \]

计算过程可视化如下动图所示,注意动图给出的是 \(g\) 不是 \(g'\)。

二维卷积计算过程以上公式有一个特点,做乘法的两个对应变量 \(a, b\) 的下标之和都是 \((u,v)\),其目的是对这种加权求和进行一种约束,这也是要将矩阵 \(g\) 进行翻转的原因。上述计算比较麻烦,实际计算的时候,都是用翻转以后的矩阵,直接求矩阵内积就可以了。

1.4,图像卷积(二维卷积)

在机器学习和图像处理领域,卷积的主要功能是在一个图像(或某种特征) 上滑动一个卷积核(即滤波器),通过卷积操作得到一组新的特征。一幅图像在经过卷积操作后得到结果称为特征映射(Feature Map)。如果把图像矩阵简写为 \(I\),把卷积核 Kernal 简写为 \(K\),则目标图片的第 \((i,j)\) 个像素的卷积值为:

\[h(i,j) = (I*K)(i,j)=\sum_m \sum_n I(m,n)K(i-m,j-n) \tag{3} \]

可以看出,这和一维情况下的卷积公式 2 是一致的。因为卷积的可交换性,我们也可以把公式 3 等价地写作:

\[h(i,j) = (I*K)(i,j)=\sum_m \sum_n I(i-m,j-n)K(m,n) \tag{4} \]

通常,下面的公式在机器学习库中实现更为简单,因为 \(m\) 和 \(n\) 的有效取值范围相对较小。

卷积运算可交换性的出现是因为我们将核相对输入进行了翻转(flip),从 \(m\) 增 大的角度来看,输入的索引在增大,但是卷积核的索引在减小。我们将卷积核翻转的唯一目 的是实现可交换性。尽管可交换性在证明时很有用,但在神经网络的应用中却不是一个重要的性质。相反,许多神经网络库会实现一个互相关函数corresponding function),它与卷积相同但没有翻转核:

\[h(i,j) = (I*K)(i,j)=\sum_m \sum_n I(i+m,j+n)K(m,n) \tag{5} \]

公式(5)和公式 (6) 对比可知,互相关卷积的区别仅仅在于卷积核是否进行翻转。因此互相关也可以称为不翻转卷积

互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现。

1.5,互相关和卷积

互相关和卷积运算的关系,可以通过下述公式理解:

\[\begin{aligned} Y &= W\otimes X \\ &= \text{rot180}(W) * X \end{aligned} \]

其中 \(\otimes\) 表示互相关运算,\(*\) 表示卷积运算,\(\text{rot180(⋅)}\) 表示旋转 180 度,\(Y\) 为输出矩阵。离散卷积可以看作矩阵的乘法,然而,这个矩阵的一些元素被限制为必须和另外 一些元素相等。

在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关。特别是当卷积核是可学习的参数时,因此卷积和互相关在能力上是等价的。因此,神经网络实现上一般会以互相关操作来代替卷积,从而会减少一些不必要的操作或开销(不反转 Kernal)

因此,

  1. 我们实现的卷积操作不是原始数学含义的卷积,而是工程上的卷积,但一般也简称为卷积。
  2. 在实现卷积操作时,并不会反转卷积核。

二,卷积层

在传统图像处理中,线性空间滤波的原理实质上是指指图像 \(f\) 与滤波器核 \(w\) 进行乘积之和(卷积)运算。核是一个矩阵,其大小定义了运算的邻域,其系数决定了该滤波器(也称模板、窗口滤波器)的性质,并通过设计不同核系数(卷积核)来实现低通滤波(平滑)和高通滤波(锐化)功能,因此我们可以认为卷积是利用某些设计好的参数组合(卷积核)去提取图像空域上相邻的信息。

2.1,卷积层定义

在全连接前馈神经网络中,如果第 \(l\) 层有 \(M_l\) 个神经元,第 \(l-1\) 层有 \(M_{l-1}\) 个 神经元,连接边有 \(M_{l}\times M_{l-1}\) 个,也就是权重矩阵有 \(M_{l}\times M_{l-1}\) 个参数。当 \(M_l\) 和 \(M_{l-1}\) 都很大时,权重矩阵的参数就会非常多,训练的效率也会非常低。

如果采用卷积来代替全连接,第 \(l\) 层的净输入 \(z^{(l)}\) 为第 \(l-1\) 层激活值 \(a^{(l−1)}\) 和卷积核 \(w^{(l)}\in \mathbb{R}^K\) 的卷积,即

\[z^{(l)} = w^{(l)}\otimes a^{(l−1)} + b^{(l)} \]

其中 \(b^{(l)}\in \mathbb{R}\) 为可学习的偏置。

上述卷积层公式也可以写成这样的形式:\(Z = W*A+b \tag{0}\)

根据卷积层的定义,卷积层有两个很重要的性质:

  1. 局部连接:在卷积层(假设是第 \(l\) 层)中的每一个神经元都只和下一层(第 \(l − 1\) 层)中某个局部窗口内的神经元相连,构成一个局部连接网络。
  2. 权重共享:作为参数的卷积核 \(w^{(

    标签:卷积,torch,矩阵,times,神经网络,详解,输入
    From: https://www.cnblogs.com/armcvai/p/17125307.html

相关文章

  • 详解Cake Pattern in rocket-chip
    下面分别对cakepattern中的关键概念进行说明,最后以chipyard为例对cakepattern的用法进行说明,cakepattern对Diplomacy机制至关重要。一、LazyModule定义惰性模块,实现......
  • MybatisPlus查询条件设置详解
    select设置需要查询的字段例: 指定查询主键,名字,年龄字段select("id", "name", "age")例: 查询以test开头的属性select(i ‐> i.getProperty().startsWith("t......
  • 43-Object类详解
    equals方法equals和==的对比●==是一个比较运算符==既可以判断基本类型,又可以判断引用类型。==如果判断基本类型,判断的是值是否相等。==如果判断引用类型,判断的是地......
  • MyBatis-Plus通用Iservice 方法详解
    publicinterfaceIService<T>{/***默认批次提交数量*/intDEFAULT_BATCH_SIZE=1000;/***插入一条记录(选择字段,策略插入)*......
  • ESP32 开发环境的搭建与详解
    ESP32开发环境的搭建与详解目录ESP32开发环境的搭建与详解ESP-IDF安装windows系统VSCode代码编辑工具vscode-esp-idf-extensionHello_world示例创建项目程序入口串......
  • kubectl命令详解
    一、kubectl基本命令1、陈述式资源管理方法:1、kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口2、kubectl是官方的CLI命令行工具,用于与ap......
  • tomcat server.xml标签功能详解
    1.具体说明  tomcat/conf/server.xml<!--属性说明port:指定一个端口,这个端口负责监听关闭Tomcat的请求shutdown:向以上端口发送的关闭服务器的命令字符串--><Serverport......
  • 面向对象详解之三
    面向对象.1封装面向对象三大特征:封装、继承、多态.1.1为什么需要封装?我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗?有必要碰电动......
  • 面向对象详解之二
    面向对象.1封装面向对象三大特征:封装、继承、多态.1.1为什么需要封装?我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗?有必要碰电动......
  • 面向对象详解之一
    面向对象面向对象思想概述.1概述Java语言是一种面向对象的程序设计语言,而面向对象思想(OOP)是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算......