【dive2deep learning学习记录】6 卷积神经网络

6 卷积神经网络

本系列博客仅作为学习dive2deep learning一书的学习记录,未严格按照其章节行文,未经许可严禁转载



6.1 从全连接层到卷积

适合于神经网络的两大原则

在这里插入图片描述

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应。图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置。
  2. 局部性(locality):神经网络前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,最终,可聚合这些局部特征以生成整个图像的全局特征。局部性意味着计算相应的隐藏表示只需一小部分局部图像像素。

概念

卷积的概念

数学概念

在这里插入图片描述

离散对象卷积(解释了为什么卷积为什么从积分转变成求和)

当两者为离散值时,积分就会变为求和:

  • 一维向量:
    在这里插入图片描述

  • 二维张量,即 f f f的索引 ( a , b ) (a,b) (a,b) g g g的索引 ( i − a , j − b ) (i-a,j-b) (ia,jb)上的对应加和:
    在这里插入图片描述

卷积层的意义

  • 卷积层的物体意义: 使用卷积核对图像特定区域进行局部特征提取。
  • 卷积层的数学意义: 使用系数 [ V ] a , b [V]_{a,b} [V]a,b对位置 ( i , j ) (i,j) (i,j)附近的像素 ( i + a , j + b ) (i+a,j+b) (i+a,j+b)进行加权得到 [ H ] i , j [H]_{i,j} [H]i,j

在这里插入图片描述

V V V——卷积核(kernel)、滤波器(filter),或卷积层的可学习权重

归纳偏置

  • 神经网络权重学习方式为归纳偏置:当这种偏置与现实相符时,我们就能得到样本有效的模型,并且这些模型能很好地泛化到未知数据中。 但如果这偏置与现实不符时,比如当图像不满足平移不变时,我们的模型可能难以拟合我们的训练数据。

通道

上面的卷积层只对二维张量有效,而

  1. 图像是由高度、宽度和颜色组成的三维张量,如 1024 ∗ 1024 ∗ 3 1024*1024*3 102410243 高 度 H ∗ 宽 度 W ∗ 通 道 数 D ( 颜 色 数 : R G B ) 高度H*宽度W*通道数D(颜色数:RGB) HWDRGB,高度和宽度与像素的空间位置有关;
  2. 卷积核也应调整为三维: [ V ] a , b , c [V]_{a,b,c} [V]a,b,c
  3. 隐藏表示 H H H也最好采用三维,我们可以把隐藏表示想象为一系列具有二维张量的通道(channel)。 这些通道有时也被称为特征映射(feature maps),因为每个通道都向后续层提供一组空间化的学习特征。 直观上你可以想象在靠近输入的底层,一些通道专门识别边缘,而一些通道专门识别纹理

在此基础上,可定义具有多个通道的卷积层:

在这里插入图片描述

其中隐藏表示 H H H中的索引 d d d表示输出通道,而随后的输出将继续以三维张量 H H H作为输入进入下一个卷积层。 所以, 上式可以定义具有多个通道的卷积层,而其中V是该卷积层的权重。

多个输入和输出通道使模型在每个空间位置可以获取图像的多方面特征。

6.2 图像卷积

二维卷积

在这里插入图片描述

  • 输 出 尺 寸 = ( H 输 入 - H 卷 积 核 + 1 ) ∗ ( W 输 入 - W 卷 积 核 + 1 ) 输出尺寸=(H_{输入}-H_{卷积核}+1)*(W_{输入}-W_{卷积核}+1) =HH+1WW+1

  • 卷积层:对输入和卷积核权重做互相关运算,并添加偏置之后产生输出。

  • 卷积层中的两个被训练的参数是卷积核权重和标量偏置

概念

特征映射

卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。

感受野

  • 对于某一层的任意元素 x x x,其感受野(receptive field)是指前向传播期间可能影响 x x x计算的所有元素(输入图像上的元素)(来自所有先前层)。以上图为例,给定2×2卷积核,阴影输出元素值19的感受野是输入阴影部分的四个元素。

  • 当需要检测输入特征中更广区域时,我们可以构建一个更深的卷积网络。

互相关与真实卷积

  • 学习卷积核时,无论用严格卷积运算或互相关运算,卷积层的输出不会受太大影响。

6.3 填充和步幅

填充(padding)

作用

增加输出的高度和宽度,防止原始图像边缘像素的丢失。

做法

在输入图像的边界填充元素,通常填0。

输出维度计算

在卷积核尺寸为 k h ∗ k w k_h*k_w khkw n h ∗ n w n_h*n_w nhnw原始图像上,添加 p h p_h ph行、 p w p_w pw列填充,输出维度为:
( n h − k h + p h + 1 ) ∗ ( n w − k w + p w + 1 ) (n_h-k_h+p_h+1)*(n_w-k_w+p_w+1) (nhkh+ph+1)(nwkw+pw+1)
即输出的宽度和高度将分别增加 p h p_h ph p w p_w pw

想让输出维度与输入维度相同,即卷积后图像尺寸不变, 则需要:
p h = k h − 1 p w = k w − 1 p_h=k_h-1\\ p_w=k_w-1 ph=kh1pw=kw1

假设 k h k_h kh是奇数,则 k h − 1 k_h-1 kh1为偶数,我们将在高度的两侧填充 p h / 2 ph/2 ph/2行。 如果 k h k_h kh是偶数,则一种可能性是在输入顶部填充 p h / 2 ph/2 ph/2行,在底部填充 p h / 2 ph/2 ph/2行。同理,我们填充宽度的两侧。

卷积核的尺寸为什么通常为奇数

卷积神经网络中卷积核的高度和宽度通常为奇数,例如 1 、 3 、 5 1、3、5 135 7 7 7。 选择奇数的好处是,保持空间维度的同时,我们可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列。

步幅(stride)

作用

  1. 可在原始的输入分辨率冗余的情况下大幅降低图像的高度和宽度;
  2. 高效计算或缩减采样次数。

定义

每次卷积窗口滑动的元素数。

输出维度计算

在卷积核尺寸为 k h ∗ k w k_h*k_w khkw n h ∗ n w n_h*n_w nhnw原始图像上,添加 p h p_h ph行、 p w p_w pw列填充,且垂直步幅为 s h s_h sh、水平步幅为 s w s_w sw时,输出维度为:
[ ( n h − k h + p h + s h ) / s h ] ∗ [ ( n w − k w + p w + s w ) / s w ] [(n_h-k_h+p_h+s_h)/s_h]*[(n_w-k_w+p_w+s_w)/s_w] [(nhkh+ph+sh)/sh][(nwkw+pw+sw)/sw]
在实际中,通常使用相同的填充和相同的步幅。

6.4 多输入多输出通道

通道(channel)的定义

  1. 输入图片若为RGB三原色,则通道数为3;
  2. 在卷积神经网络中,卷积核的个数=通道数。

多输入通道的互相关运算

由于输入和卷积核都有 c i c_i ci个通道,我们可以对每个通道输入的二维张量和卷积核的二维张量进行互相关运算,再对通道求和(将 c i c_i ci的结果相加)得到二维张量。

在这里插入图片描述

多输出通道

在最流行的神经网络架构中,随着神经网络层数的加深,我们常会增加输出通道的维数,通过减少空间分辨率以获得更大的通道深度。直观地说,**我们可以将每个通道看作是对不同特征的响应。**而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。

c i c_i ci c o c_o co分别表示输入和输出通道的数目,并让 k h k_h kh k w k_w kw为卷积核的高度和宽度。为了获得多个通道的输出,我们可以为每个输出通道创建一个形状为 c i × k h × k w c_i×k_h×k_w ci×kh×kw的卷积核张量,这样卷积核的形状是 c o × c i × k h × k w c_o×c_i×k_h×k_w co×ci×kh×kw在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。

输出的通道数与输出通道数一致。

1×1卷积层

1×1卷积的作用

卷积层的本质是在高度和宽度上识别相邻元素间相互作用的能力,而1×1卷积的唯一计算发生在通道上

图6.4.2展示了使用 1 × 1 1×1 1×1卷积核与 3 3 3个输入通道和 2 2 2个输出通道的互相关计算。 这里输入和输出具有相同的高度和宽度,输出中的每个元素都是从输入图像中同一位置的元素的线性组合。 我们可以将 1 × 1 1×1 1×1卷积层看作是在每个像素位置应用的全连接层,以 c i ( 3 ) c_i(3) ci(3)个输入值转换为 c o ( 2 ) c_o(2) co(2)个输出值。 因为这仍然是一个卷积层,所以跨像素的权重是一致的。 同时, 1 × 1 1×1 1×1卷积层需要的权重维度为 c o × c i c_o×c_i co×ci,再额外加上一个偏置。

在这里插入图片描述

当以每像素为基础应用时,1×1卷积层相当于全连接层。

1 × 1 1×1 1×1卷积层通常用于调整网络层的通道数量和控制模型复杂性。

CNN中的算力与参数量计算

算力/计算成本

概念
  • FLOPS:全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度,是一个衡量硬件性能的指标
  • FLOPs: s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量,可以用来衡量算法/模型的复杂度
卷积层

( C i × K H × K W + C i × K H × K W − 1 ) × H o × W o × C o (C_i×K_H×K_W+C_i×K_H×K_W-1)×H_o×W_o×C_o (Ci×KH×KW+Ci×KH×KW1)×Ho×Wo×Co

其中,

2是因为一个MAC算2个operations;

C i C_i Ci——输入通道数;

C o C_o Co——输出通道数;

K H × K W K_H×K_W KH×KW——卷积核尺寸;

H o × W o H_o×W_o Ho×Wo——输出特征图的高和宽;

不考虑bias时有-1,有bias时没有-1。

考虑bias:
2 × C i × K H × K W × H o u t × W o u t × C o 2×C_i×K_H×K_W×H_{out}×W_{out}×C_o 2×Ci×KH×KW×Hout×Wout×Co

例:用以下动图中直观的解释:

在这里插入图片描述

Image大小为 5x5

卷积核大小为 3x3

那么一次3x3的卷积(求右图矩阵一个元素的值)所需运算量:(3x3)个乘法+(3x3-1)个加法 = 17

要得到输出convolved feature(3x3的大小):17x9 = 153

全连接层

( 2 × I − 1 ) × O (2×I-1)×O (2×I1)×O

其中,

2是因为一个MAC算2个operations;

I I I——输入神经元数目;

O O O——输出神经元数目。

参数量

卷积层(不考虑bias)

C i × K W × K H × C o C_i×K_W×K_H×C_o Ci×KW×KH×Co

卷积层(考虑bias)

( C i × K W × K H + 1 ) × C o (C_i×K_W×K_H+1)×C_o (Ci×KW×KH+1)×Co

练习

2.1

( 2 × C i × K h × K w − 1 ) × ( h − k h + 1 ) × ( w − k w + 1 ) × C o (2×C_i×K_h×K_w-1)×(h-k_h+1)×(w-k_w+1)×C_o (2×Ci×Kh×Kw1)×(hkh+1)×(wkw+1)×Co

2.2

C i × K w × K h × C o C_i×K_w×K_h×C_o Ci×Kw×Kh×Co

6.5 汇聚层

汇聚层(pooling)的作用

  1. 降低卷积层对位置的敏感性,具体来说,通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。而我们的机器学习任务通常会跟全局图像的问题有关(例如,“图像是否包含一只猫呢?”),所以我们最后一层的神经元应该对整个输入的全局敏感。通过逐渐聚合信息,生成越来越粗糙的映射,最终实现学习全局表示的目标,同时将卷积图层的所有优势保留在中间层;
  2. 降低对空间下采样表示的敏感性,保持某种程度上的平移不变

汇聚层的计算

在这里插入图片描述

输 出 尺 寸 = ( H − p h + 1 ) × ( W − p w + 1 ) 输出尺寸 = (H-p_h+1)×(W-p_w+1) =(Hph+1)×(Wpw+1)

汇聚层的填充和步幅

与卷积层一样,汇聚层也可以通过填充和步幅改变输出形状。

汇聚层的多通道

在处理多通道输入数据时,汇聚层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着汇聚层的输出通道数与输入通道数相同

6.6 LeNet

LeNet网络架构

在这里插入图片描述

  • 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值