文章目录
前言
提示:纯个人记录,仅供参考
大多数人学习深度学习的第一个网络是卷积神经网(Convolutional Neural Network,CNN),这里简单记录一下卷积神经网的基础内容。
一、CNN是什么?
CNN是计算机视觉领域使用的最多的神经网络,它对数据进行区域卷积运算,是一种专门设计用于处理图像等网格数据的神经网络架构。CNN在计算机视觉领域取得了巨大成功,特别是在图像分类、目标检测、人脸识别等任务中表现出色。
二、CNN需要了解那些基础知识?
2.1、单神经元
神经网络是由多个神经元组成的,单个神经元的数学模型如图所示。
单个神经元的输出计算公式为:
z
=
activate
(
∑
i
=
1
n
w
i
×
x
i
+
b
)
=
activate
(
W
⋅
X
+
b
)
\boldsymbol{z}=\operatorname{activate}\left(\sum_{i=1}^{n} w_{i} \times x_{i}+b\right)=\operatorname{activate}(\boldsymbol{W} \cdot \boldsymbol{X}+b)
z=activate(i=1∑nwi×xi+b)=activate(W⋅X+b)
其中 z {z} z为输出结果, a c t i v a t e ( ) {activate}(~) activate( )为激活函数, n {n} n为输入的节点个数, X \boldsymbol{X} X为输入矩阵, W \boldsymbol{W} W为权重矩阵, b {b} b为偏置量。神经网络是由多个神经元组合而成的,神经网络的训练是指将神经网络的输出与真实值的差作为误差,使用反向传播算法更新各个节点的权重使神经网络的输出误差降到最小的过程。
2.2、激活函数
激活函数用来增加网络的非线性因素,解决线性网络模型表达能力不足的缺陷。常用的激活函数有
S
i
g
m
o
i
d
{Sigmoid}
Sigmoid函数,
T
a
n
h
{Tanh}
Tanh函数,
R
e
L
U
{ReLU}
ReLU函数和
G
E
L
U
{GELU}
GELU函数等。他们的计算公式如图所示:
S
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
{Sigmoid}(x)=\frac{1}{1+e^{-x}}
Sigmoid(x)=1+e−x1
T
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
=
2
S
i
g
m
o
i
d
(
2
x
)
−
1
{Tanh}(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}=2{Sigmoid(2x)}-1
Tanh(x)=ex+e−xex−e−x=2Sigmoid(2x)−1
R
e
L
U
(
x
)
=
m
a
x
(
0
,
x
)
{ReLU(x)}=max(0,x)
ReLU(x)=max(0,x)
G
E
L
U
(
x
)
=
0.5
x
(
1
+
T
a
n
h
[
(
2
/
π
)
(
x
+
0.044715
x
3
)
]
)
GELU(x)=0.5x(1+{Tanh}{[{\sqrt{(2/{\pi})}}(x+0.044715x^3)]})
GELU(x)=0.5x(1+Tanh[(2/π)(x+0.044715x3)])
S
i
g
m
o
i
d
{Sigmoid}
Sigmoid函数的定义域从负无穷到正无穷,对应的值域从 0 到 1,即对输入的连续数据“压缩”到 0~1。
T
a
n
h
{Tanh}
Tanh函数可以看成是
S
i
g
m
o
i
d
{Sigmoid}
Sigmoid函数的升级版,它的值域从-1 到 1。
R
e
L
U
{ReLU}
ReLU函数是图像任务中使用最广泛的激活函数,其函数值取输入数据大于 0 的部分,即“重视正数信号,忽略负数信号”,这与人类的神经元细胞十分相似,而且运算简单,能够大幅度提升运行效率。下图中的RELU图像有错误,应该将RELU往下偏移一点,即x轴负半轴全为0。
G
E
L
U
{GELU}
GELU函数广泛应用在自然语言处理中,
G
E
L
U
{GELU}
GELU函数的计算过程为:对于每一个输入
x
{x}
x都乘以一个二项式分布
Φ
(
x
)
{Φ(x})
Φ(x),由于二项式分布函数无法直接计算,所以用上图第四个公式来代替。它们的函数图像如图所示。
2.3、损失函数
损失函数主要是用来计算“输出值”与“目标值”之间的误差,在实际应用中,损失函数与反向传播配合使用。常用的损失函数有 L1 损失函数,均值平方差(MSE)损失函数和交叉熵损失(Cross Entropy Loss)函数。
L1 损失函数直接计算输出值𝑦′和真实值𝑦的差的绝对值的均值,它的计算规则为:
L
o
s
s
L
1
(
y
′
,
y
)
=
m
e
a
n
(
∣
y
′
−
y
∣
)
{Loss_{L1}}(y',y)=mean(|y'-y|)
LossL1(y′,y)=mean(∣y′−y∣)
MSE 损失函数计算的是真实值𝑦𝑦𝑡𝑡与预测值𝑦𝑦′𝑡𝑡的差的平方的平均值,它的计算公式为:
L
o
s
s
M
S
E
(
y
,
y
′
)
=
1
N
∑
i
=
1
n
(
y
i
−
y
i
′
)
2
{Loss_{MSE}}(y,y')=\frac{1}{N}{\sum_{i=1}^{n}}(y_i-y'_i)^2
LossMSE(y,y′)=N1i=1∑n(yi−yi′)2
Cross Entropy Loss 函数计算模型分布与训练分布之间的差异,一般用在分类问题上。假设共有
N
{N}
N个样本,
M
{M}
M种样本类别,用
y
i
c
{y_{ic}}
yic代表第
i
{i}
i个样本的真实类别,用
p
i
c
{p_{ic}}
pic代表第
i
{i}
i个样本为类别𝑐𝑐的概率,则它的计算公式为:
L
o
s
s
C
r
o
s
s
E
n
t
r
o
p
y
=
1
N
∑
i
=
1
N
L
i
=
−
1
N
∑
i
=
1
N
∑
c
=
1
M
y
i
c
log
(
p
i
c
)
{Loss_{CrossEntropy}}={\frac1N}{\sum_{i=1}^{N}L_i}=-{\frac1N}{\sum_{i=1}^{N}}{\sum_{c=1}^{M}}y_{ic}{\log{(p_{ic}})}
LossCrossEntropy=N1i=1∑NLi=−N1i=1∑Nc=1∑Myiclog(pic)
2.4、学习率
学习率是模型在反向优化时梯度方向调节的步长大小。当学习率的值设置的比较大时,模型的训练速度会提升,但模型的精度会降低;当学习率的值设置的比较小时,模型的精度会有所提升,但是训练所消耗的时间会增加。因此,学习率的大小设置需要考虑模型的精度和训练速度。
2.5、优化器
优化器是深度学习反向传播过程中的一套优化策略,作用是通过算法更快更好地将参数调整到位[49]。常用的优化器为随机梯度下降(Stochastic Gradient Descent, SGD)优化器和自适应动量(Adaptive momentum, Adam)优化器。SGD 优化器为手动精调方式,需要通过手动调整学习率的方法来进行模型的优化,对学习率的设置要求较高;而 Adam 优化器为自动收敛方式,使用 Adam 优化器的模型的收敛速度更快,精度也较好,对学习率的设置要求较低,更容易使用。
三、一个简单的CNN示例
以对图像进行分类的卷积神经网络为例,它主要包括五个部分——输入层、卷积层、池化层、全连接层和输出层,其结构如图所示。
3.1 输入层
输入层为输入的图像像素值。当输入的图像为灰度图时,输入数据的通道数为1,即输入数据只有黑白灰度值的一个颜色通道;当输入数据为彩色图时,输入数据的通道数为 3,分别是 R 通道,G 通道和 B 通道。
3.2 卷积层
卷积层为输入层数据与卷积核进行卷积运算之后的结果。卷积运算是指将卷积核对应像素上的点进行相乘再相加,然后向右或向下移动 n 格进行下一次卷积运算,n 为卷积运算的步长。卷积核的权重值是通过网络训练出来的,它的作用是提取小区域图像的某个特征,可等效为一个滤波器;网络使用不同的卷积核来获取不同的图像特征,有的卷积核提取图像的轮廓特征,有的卷积核提取图像的背景纹理。
3.3 池化层
池化层与卷积层搭配使用,它的主要目的是对卷积结果进行降维,即在保持原有特征的基础上尽可能的降低数组的维数,减少运算量。常用的池化方式为最大池化和均值池化,最大池化即提取区域像素最大值作为池化结果,均值池化即提取区域像素的均值作为池化结果。
3.4 全连接层
全连接层将池化层的数据拉成一维,通过全连接网络和softmax函数来实现分类。Softmax函数是一种常用于多类别分类问题的激活函数,它将一组实数转化为一个概率分布,使得每个类别的概率值在0到1之间且总和为1。Softmax函数的公式如下:
y
i
=
e
x
i
∑
j
=
1
n
e
x
j
y_{i}=\frac{e^{x_{i}}}{\sum_{j=1}^{n} e^{x_{j}}}
yi=∑j=1nexjexi
y
i
y_{i}
yi是输出向量中的第
i
i
i个元素,表示对应类别的概率。
e
e
e 是自然对数的底数。
x
i
x_{i}
xi是输入向量中的第
i
i
i个元素,
∑
j
=
1
n
e
x
j
\sum_{j=1}^{n}e^{x_{j}}
∑j=1nexj是对所有输入分数进行指数化后的总和。
推荐一个可视化卷积神经网络网站 链接: [link](https://poloclub.github.io/cnn-explainer/)
总结
未完待续