卷积神经网络笔记

来源:
卷积神经网络笔记
目录:

卷积神经网络笔记

卷积神经网络,英文缩写:CNNs/ConvNets
与常规神经网络的相同点:

  • 都是由神经元组成
  • 有具有学习能力的权重和偏差
  • 神经元得到**数据,内积之后计算**函数
  • 评分函数可导
  • 输入是图像,输出是评分
  • 具有损失函数
    不同点:
  • 假设输入数据是图像
  • 添加了特有属性
  • 前向传播高效
  • 参数数量大幅降低

结构概述

常规神经网络中,图片大小太大导致参数过多,产生了两个缺点:

  • 效率低下
  • 容易过拟合
    卷积神经网络的神经元是三维排列的。
  • 宽度
  • 高度
  • 深度
    这里的深度指的是**数据体的第三个维度,不是整个网络的深度
    卷积神经网络与普通神经网路有个区别:

层中的神经元与前一层并不是全连接,而是与一小块相连接。

用来构建卷积神经网络的各种层

三种类型的层:

  • 卷积层
  • 汇聚(Pooling)层
  • 全连接层
    一个CIFAR-10的层如下:
输入层
卷积层
ReLU层
汇聚层
全连接层
32x32x3
32x32x12
32x32x12
16x16x12
1x1x10
  • 卷积神经网络的结构,就是用一系列的层将输入变成输出。
  • 输入和输出都是3D数据
  • 参数和超参数不是谁都有。
参数 额外的超参数
卷积层
ReLU层
汇聚层
全连接层

卷积层

核心、计算量大。

卷积层在算什么

卷积层到底在计算什么?首先先来明确一下下面的概念都是什么意思:

输入

直观上来讲,输入就是图片。而图片是什么?图片是一个矩阵,这个好理解。比方说一个彩色图片就是一个[w×h×3][w\times h\times3]的矩阵。这里的w、h分别是宽、高,3代表的是彩色。
这里的3就成为卷积层的深度

滤波器

滤波器英文为filter,什么是滤波器呢?
滤波器也是一个矩阵。
滤波器的深度,也称第三个维度的长度,和卷积层的深度一致,比方说彩色图像的话,采用的滤波器(矩阵)的大小就是[n1,n2,3][n_1, n_2, 3]

每个滤波器对应一个深度

卷积神经网络笔记
所有滤波器的输出在深度方向上叠加起来就形成了输出数据。

局部连接

图像的维度很高,因此不能采用全连接,否则计算量将很大很大。只能和其中的一部分连接,连接的空间大小称为神经元的感受野receptive field)。
可以用下面的图解释是如何连接的:
卷积神经网络笔记
左边是输入数据[32×32×3][32\times 32\times 3],蓝色部分是卷积层,蓝色部分里面的长方体是其中一组神经元,在深度方向上有5个,他们的感受野相同。
其实只需要关注下面的部分:
卷积神经网络笔记

最后只是在这个模型里进行神经元的计算。

空间排列

控制输出体尺寸的参数:

  • 深度(depth
  • 步长(stride
  • 零填充(zero-padding
    输入的空间形状如果是正方形,那么输出数据体的尺寸就可以用下面的公式表示:
(W-F+2P)/S+1

参数如下:

参数名称 符号
感受野尺寸 F
步长 S
零填充的数量 P
深度

上方的图中:

沿着深度方向排列、感受野相同的神经元集合称为深度列depth column),也称纤维(fibre

卷积神经网络笔记

步长

滤波器滑动的时候,需要指定步长。所谓滑动,指的就是输入数据与滤波器计算的时候进行的移动操作,而步长就是一次移动多少,一般取1、2,更大的不常用。

零填充

在输入数据的边缘处填充0,称为零填充。因为有时候滤波器不能正好覆盖所有的数据,填充之后就能覆盖了。

参数共享

在卷积层中使用参数共享可以控制参数的数量。

Numpy例子

没有看懂

性质总结

假设输入数据体的尺寸为[W1×H1×D1][W_1\times H_1\times D_1]
具有以下超参数:

  • 滤波器的数量K
  • 滤波器的空间尺寸F
  • 步长S
  • 零填充数量P

那么计算输出数据体的尺寸[W2×H2×D2][W_2\times H_2\times D_2]为:
W2=(W1F+2P)/S+1W_2 = (W_1 -F+2P)/S+1
H2=(H1F+2P)/S+1H_2 = (H_1 -F+2P)/S+1
D2=KD_2=K
计算的动态演示图
卷积神经网络笔记
如图所示,首先计算对应的蓝色矩阵和红色矩阵各元素的乘积之和,然后加上偏差,得到第一个深度上其中的一个值。

  • 输入数据的每一层与滤波器的每一层计算
  • 每一个滤波器形成一层的输出
  • 每次计算只是一层深度上的一个值

用矩阵乘法实现

  1. 拉伸输入数据
    卷积神经网络笔记
  2. 拉伸权重
    卷积神经网络笔记
  3. 进行矩阵乘法
np.dot(W_row, X_col)
  1. 重新还原为[55×55×96][55\times55\times96]

汇聚层

汇聚层的功能:降低数据体的空间尺寸,减少网络参数数量。
常见形式:使用尺寸[2×2][2\times2]的滤波器,以步长为2对每个深度切片进行降采样。

公式

参数名称 符号
输入数据体尺寸 W1H1D1W_1\cdot H_1\cdot D_1
空间大小 FF
步长 SS
输出数据体尺寸 W2H2H2W_2\cdot H_2\cdot H_2

其中,输出数据体尺寸计算公式如下:

\begin{aligned}
W_2 &= (W_1-F)/S+1 \\
H_2 &= (H_1-F)/S+1 \\
D_2 &= D_1
\end{aligned}

常用形式

最大汇聚

重叠汇聚(overlapping pooling):F=3,S+2F=3,S+2
更大的汇聚尺寸:F=2,S=2F=2,S=2

普通汇聚(General Pooling)

平均汇聚(average pooling)和L-2范式汇聚(L2-norm pooling)。

实践证明,最大汇聚的效果比平均汇聚要好。

汇聚层在输入数据体的每个深度切片上,独立的对其进行空间上的降采样。这里的降采样,值得就是类似于卷积层使用滤波器在原始数据上滑动,汇聚层也在卷积层的输出上滑动,不同的是,滤波器进行的是逐个元素相乘然后求和,汇聚层只是取最大值,作为新位置上的元素。
卷积神经网络笔记

不适用汇聚层

  • 可以在卷积层中使用较大的步长来降低数据体的尺寸。
  • 训练一个良好的生成模型时,弃用汇聚层也是很重要的。

归一化层

已经不再流行,因为效果即时存在,也是十分有限。

全连接层

矩阵乘法+偏差,可以**网络。

全连接层与成卷积层

区别

全连接层和卷积层之间的惟一的区别:

卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。

两种变换

  • 对于任意一个卷积层,都存在一个能实现和它一样的前向传播函数的全连接层。
  • 任何全连接层都可以被转化成卷积层,只要将滤波器的尺寸设置成和输入数据体的尺寸一致。

全连接层转化为卷积层

这里没有看懂

卷积神经网络的结构

三种结构

  • 卷积层
  • 汇聚层
  • 全连接层
    另外还有ReLU**函数,也可以作为第一层。

层的排列规律

  • 一般都是卷积层和ReLU层放在一起,然后紧随汇聚层,一直重复,知道图像在空间中被缩小到一个足够小的尺寸。
  • 几个小的滤波器层的组合比一个大滤波器卷积层好。
    常见的卷积神经网络结构如下:
INPUT -> [[conv -> RELU] * N -> POOL?] * M -> [FC -> RELU] * k -> FC

层的尺寸设置规律

输入层

输入层的大小应该能够被2整除很多次。

卷积层

应该使用小尺寸滤波器(如3x3,最多5x5),使用步长S=1.要对数据进行零填充,目的是为了不改变输入数据在空间维度上的尺寸。

汇聚层

负责对输入数据的空间维度进行降采样。常用的shezhi :

参数
感受野 2x2
步长 2

卷积层中使用步长为1,可以让空间维度的降采样完全由汇聚层负责,而卷积层只负责对输入数据体的深度进行变换。

案例学习(LeNet/AlexNet/ZFNet/GoogLeNet/VGGNet)

一些网络的历史、得奖情况。

计算上的考量

三种内存占用来源(GPU的内存):

  1. 来自中间数据体的尺寸
  2. 来自参数的尺寸
  3. 各种零散的内存占用。
    内存不够用的时候,可以降低批尺寸(batch size)。

拓展资源