从百度人工智能课程里,看到对神经网络的基本概念的介绍,觉得通俗易懂,写的挺好。就摘出来了。
备注:如有侵权,请告知删除。
1. 神经网络的基本概念
人工神经网络包括多个神经网络层,如卷积层、全连接层、LSTM等,每一层又包括很多神经元,超过三层的非线性神经网络都可以被称为深度神经网络。通俗的讲,深度学习的模型可以视为是输入到输出的映射函数,如图像到高级语义(美女)的映射,足够深的神经网络理论上可以拟合任何复杂的函数。因此神经网络非常适合学习样本数据的内在规律和表示层次,对文字、图像和语音任务有很好的适用性。因为这几个领域的任务是人工智能的基础模块,所以深度学习被称为实现人工智能的基础也就不足为奇了。
神经网络结构如 下图8 所示。
- 神经元: 神经网络中每个节点称为神经元,由两部分组成:
- 加权和: 将所有输入加权求和。
- 非线性变换(激活函数): 加权和的结果经过一个非线性函数变换,让神经元计算具备非线性的能力。
- 多层连接: 大量这样的节点按照不同的层次排布,形成多层的结构连接起来,即称为神经网络。
- 前向计算: 从输入计算输出的过程,顺序从网络前至后。
- 计算图: 以图形化的方式展现神经网络的计算逻辑又称为计算图。我们也可以将神经网络的计算图以公式的方式表达,如下:
由此可见,神经网络并没有那么神秘,它的本质是一个含有很多参数的“大公式”。
2. CNN卷积神经网路
卷积神经网络是目前计算机视觉中使用最普遍的模型结构。介绍卷积神经网络的一些基础模块,包括:
- 卷积(Convolution)
- 池化(Pooling)
- ReLU激活函数
- 批归一化(Batch Normalization)
- 丢弃法(Dropout)
通常全连接网络进行特征提取,即将一张图片上的所有像素点展开成一个1维向量输入网络,它存在如下两个问题:
1) 输入数据的空间信息被丢失。 空间上相邻的像素点往往具有相似的RGB值,RGB的各个通道之间的数据通常密切相关,但是转化成1维向量时,这些信息被丢失。同时,图像数据的形状信息中,可能隐藏着某种本质的模式,但是转变成1维向量输入全连接神经网络时,这些模式也会被忽略。
2) 模型参数过多,容易发生过拟合。 在手写数字识别案例中,每个像素点都要跟所有输出的神经元相连接。当图片尺寸变大时,输入神经元的个数会按图片尺寸的平方增大,导致模型参数过多,容易发生过拟合。
为了解决上述问题,我们引入卷积神经网络进行特征提取,既能提取到相邻像素点之间的特征模式,又能保证参数的个数不随图片尺寸变化。图6 是一个典型的卷积神经网络结构,多层卷积和池化层组合作用在输入图片上,在网络的最后通常会加入一系列全连接层,ReLU激活函数一般加在卷积或者全连接层的输出上,网络中通常还会加入Dropout来防止过拟合。
2.1 卷积
主要涵盖如下内容:
- 卷积计算
- 填充(padding)
- 步幅(stride)
- 感受野(Receptive Field)
- 多输入通道、多输出通道和批量操作
2.1.1 卷积计算
卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,与数学分析中的卷积定义有所不同,这里跟其他框架和卷积神经网络的教程保持一致,都使用互相关运算作为卷积的定义,具体的计算过程如 图7 所示。
2.1.2 填充(padding)
在上面的例子中,输入图片尺寸为3×3,输出图片尺寸为2×2,经过一次卷积之后,图片尺寸变小。卷积输出特征图的尺寸计算方法如下(卷积核的高和宽分别为
k
h
k_{h}
kh 和
k
w
k_{w}
kw )
H
o
u
t
=
H
−
k
h
+
1
H_{out} = H-k_h +1
Hout=H−kh+1$
W
o
u
t
=
W
−
k
w
+
1
W_{out} = W-k_w +1
Wout=W−kw+1
如果输入尺寸为4,卷积核大小为3时,输出尺寸为4−3+1=24-3+1=24−3+1=2。读者可以自行检查当输入图片和卷积核为其他尺寸时,上述计算式是否成立。当卷积核尺寸大于1时,输出特征图的尺寸会小于输入图片尺寸。如果经过多次卷积,输出图片尺寸会不断减小。为了避免卷积之后图片尺寸变小,通常会在图片的外围进行填充(padding),如 图8 所示。
卷积核大小通常使用1,3,5,7这样的奇数。
2.1.3 步幅(stride)
图8 中卷积核每次滑动一个像素点,这是步幅为1的特殊情况。图9 是步幅为2的卷积过程,卷积核在图片上移动时,每次移动大小为2个像素点。
2.1.4 感受野(Receptive Field)
输出特征图上每个点的数值,是由输入图片上大小为
k
h
∗
k
w
k_{h} * k_{w}
kh∗kw 的区域的元素与卷积核每个元素相乘再相加得到的,所以输入图像上
k
h
∗
k
w
k_{h} * k_{w}
kh∗kw 区域内每个元素数值的改变,都会影响输出点的像素值。我们将这个区域叫做输出特征图上对应点的感受野。感受野内每个元素数值的变动,都会影响输出点的数值变化。比如3×3卷积对应的感受野大小就是3×3,如 图10 所示。
而当通过两层3×3的卷积之后,感受野的大小将会增加到5×5,如 图11 所示。
因此,当增加卷积网络深度的同时,感受野将会增大,输出特征图中的一个像素点将会包含更多的图像语义信息。
2.1.5 多输入通道、多输出通道和批量操作
实际应用时,卷积处理的问题要复杂的多。例如:对于彩色图片有RGB三个通道,需要处理多输入通道的场景。输出特征图往往也会具有多个通道,而且在神经网络的计算中常常是把一个批次的样本放在一起计算,所以卷积算子需要具有批量处理多输入和多输出通道数据的功能,下面将分别介绍这几种场景的操作方式。
- 多输入通道场景
上面的例子中,卷积层的数据是一个2维数组,但实际上一张图片往往含有RGB三个通道,要计算卷积的输出结果,卷积核的形式也会发生变化。假设输入图片的通道数为 C i n C_{in} Cin,输入数据的形状是 C i n ∗ H i n ∗ W i n C_{in}*H_{in}*W_{in} Cin∗Hin∗Win。计算过程如 图12 所示。
1)对每个通道分别设计一个2维数组作为卷积核,卷积核数组的形状是
C
i
n
∗
k
h
∗
k
w
C_{in}*k_{h}*k_{w}
Cin∗kh∗kw。
2)对任一通道
C
i
n
∈
[
0
,
C
i
n
)
C_{in} \in [0, C_{in})
Cin∈[0,Cin),分别用大小为
k
h
×
k
w
k_{h}\times{k_w}
kh×kw的卷积核在大小为
H
i
n
×
W
i
n
H_{in}\times{W_{in}}
Hin×Win 的二维数组上做卷积。
3)将这
C
i
n
C_{in}
Cin 个通道的计算结果相加,得到的是一个形状为
H
o
u
t
×
W
o
u
t
H_{out}\times{W_{out}}
Hout×Wout的二维数组。
- 多输出通道场景
一般来说,卷积操作的输出特征图也会具有多个通道 C o u t C_{out} Cout ,这时我们需要设计 C o u t C_{out} Cout 个维度为 C i n × k h × k w C_{in}\times{k_h}\times{k_w} Cin×kh×kw 的卷积核,卷积核数组的维度是 C o u t × C i n × k h × k w C_{out}\times C_{in}\times{k_h}\times{k_w} Cout×Cin×kh×kw ,如 图13 所示。
1)对任一输出通道 c o u t ∈ [ 0 , C o u t ) c_{out} \in [0, C_{out}) cout∈[0,Cout),分别使用上面描述的形状为 C i n × k h × k w C_{in}\times{k_h}\times{k_w} Cin×kh×kw的卷积核对输入图片做卷积。
2)将这 C o u t C_{out} Cout个形状为 H o u t × W o u t H_{out}\times{W_{out}} Hout×Wout的二维数组拼接在一起,形成维度为 C o u t × H o u t × W o u t C_{out}\times{H_{out}}\times{W_{out}} Cout×Hout×Wout的三维数组。
通常将卷积核的输出通道数叫做卷积核的个数。
- 批量操作
在卷积神经网络的计算中,通常将多个样本放在一起形成一个mini-batch进行批量操作,即输入数据的维度是 N × C i n × H i n × W i n N\times{C_{in}}\times{H_{in}}\times{W_{in}} N×Cin×Hin×Win。由于会对每张图片使用同样的卷积核进行卷积操作,卷积核的维度与上面多输出通道的情况一样,仍然是
C o u t × C i n × k h × k w C_{out}\times C_{in}\times{k_h}\times{k_w} Cout×Cin×kh×kw,输出特征图的维度是 N × C o u t × H o u t × W o u t N\times{C_{out}}\times{H_{out}}\times{W_{out}} N×Cout×Hout×Wout,如 图14 所示。