AI | 第5章 深度学习 TensorFlow2 神经网络与卷积神经网络
前言
仅供参考
1. 神经网络原理
1.1 概述
- 定义:人工神经网络(Artificial Neural Network,简写为ANN)也简称为神经网络(NN)。是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的计算模型。经典的神经网络结构包含三个层次的神经网络;
- 三个层次:
- 输入层;
- 隐藏层:隐藏层的层数根据需要而定,没有明确的理论推导来说明到底多少层合适。如对于卷积神经网络,有:卷积层、激活函数、池化层;
- 输出层:一般为全连接层;
- 其中每层的圆圈代表一个神经元,隐藏层和输出层的神经元有输入的数据计算后输出,输入层的神经元只是输入;
- 特点:
- 每个连接都有个权值;
- 同一层神经元之间没有连接;
- 最后的输出结构对应的层也称之为全连接层;
- 神经网络可以理解成一种特征提取方法;
1.2 输出层:全连接层
1.2.1 sigmoid 回归
- sigmoid 回归用于解决二分类结构;
- 当于逻辑回归,其将结果映射到 0-1;
- 详情见《4. 分类算法 - 逻辑回归与二分类》;
1.2.2 softmax 回归
-
softmax 回归用于解决多分类结构;
-
神经网络解决多分类问题最常用的方法是设置 n 个输出节点,其中 n 为类别的个数;
-
任意事件发生的概率都在0和1之间,且总有某一个事件发生(概率的和为1)。如果将分类问题中 “一个样例属于某一个类别” 看成一个概率事件,那么训练数据的正确答案就符合一个概率分布;
-
可以理解成 logits 加上 softmax 映射;
-
公式:
s o f t m a x ( y ) i = e y i ∑ i = 1 n e y i softmax(y)_i=\frac{e^{y_i}}{\sum_{i = 1}^ne^{y_i}} softmax(y)i=∑i=1neyieyi
2. 卷积神经网络
2.1 概述
- 定义:卷积神经网络(Convolutional Neural Networks, CNN),在原来多层神经网络的基础上,加入了更加有效的特征学习部分,具体操作就是在原来的全连接层前面加入了卷积层、激活层和池化层。卷积神经网络出现,使得神经网络层数得以加深,“深度”学习由此而来;
- 通常所说的深度学习,一般指的是这些 CNN 等新的结构以及一些新的方法(比如新的激活函数Relu等),解决了传统多层神经网络的一些难以解决的问题;
- 结构:
- 输入层;
- 隐藏层:卷积层、激活层、池化层;
- 输出层:全连接层;
- 卷积层涉及参数:
- 滑动窗口步长;
- 卷积核尺寸:一般最小 3*3;
- 边缘填充;
- 卷积核个数;
- 卷积神经网络发展历史:
2.2 卷积神经网络的结构特点
- 神经网络(neural networks)的基本组成包括输入层、隐藏层、输出层。而卷积神经网络的特点在于隐藏层分为卷积层、激活层和池化层(pooling layer,又叫下采样层subsample);
- 隐藏层:
- 卷积层 CONV:通过在原始图像上平移来提取特征;
- 激活层 RELU:增加非线性分割能力;
- 池化层 POOL(下采样层):减少学习的参数,降低网络的复杂度(最大池化和平均池化);
- 输出层:进行损失计算并输出分类结果;
- 全连接层 FC:实现分类效果;
- 图中共有 7 层,6 层卷积层 + 1 层全连接层;
2.2.1 卷积层(Convolutional Layer)
- 概述:
- 卷积神经网络中每层卷积层由若干卷积单元(卷积核)组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的;
- 卷积运算的目的是特征提取,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征;
- 卷积核:又叫 filter、过滤器、模型参数、卷积单元;
- 卷积核(Filter)的四大要素:
- 卷积核个数:不同的卷积核带的权重和偏置都不一样,即随机初始化的参数;
- 卷积核尺寸:一般最小 3*3;
- 卷积核步长:步长越大,得到特征值越少;
- 边缘填充:零填充就是在图片像素外围填充一圈值为0的像素;
- 计算:
- 输入图片体积大小: H 1 ∗ W 1 ∗ D 1 H_1* W_1 * D_1 H1∗W1∗D1;
- 四个超参数:
- Filter 数量 K;
- Filter 大小 F * F;
- 步长 S;
- 零填充大小 P;
- 输出的特征体积大小(特征值数量):
H
2
∗
W
2
∗
D
2
H_2 * W_2* D_2
H2∗W2∗D2;
- H 2 = H 1 − F + 2 P S + 1 H_2 = \frac{H_1-F+2P}{S}+1 H2=SH1−F+2P+1
- W 2 = W 1 − F + 2 P S + 1 W_2 = \frac{W_1-F+2P}{S}+1 W2=SW1−F+2P+1
- D 2 = K D_2=K D2=K
2.2.2 激活函数
1. sigmoid
- 公式:
S
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
1
Sigmoid(x)=\frac{1}{1+e^{-1}}
Sigmoid(x)=1+e−11;
- 优点:
- 平滑、易于求导;
- 缺点:
- 反向传播求导涉及除法,因此计算量大;
- 反向传播时,很容易就会出现梯度消失的情况,从而限制了深层网络的训练;
- 应用场景:用于二分类全连接层;
2. softmax
- sigmoid 函数的推广,用于处理多分类问题;
- 公式: s o f t m a x ( y ) i = e y i ∑ i = 1 n e y i softmax(y)_i=\frac{e^{y_i}}{\sum_{i = 1}^ne^{y_i}} softmax(y)i=∑i=1neyieyi
- 应用场景:用于多分类全连接层;
3. Relu
- 公式:
R
e
L
U
=
m
a
x
(
0
,
x
)
ReLU=max(0,x)
ReLU=max(0,x)
- 优点:
- 有效解决梯度消失问题;
- 计算成本很低;
- 收敛速度比 sigmoid 和 tanh 函数快得多;
- SGD(批梯度下降)的求解速度速度远快于 sigmoid 和 tanh;
- 缺点:
- 当梯度值过大时,其权重更新后为负数,在 ReLU 函数中导数恒为零,导致后面的梯度也不再更新,也被称为 dying ReLU 问题;
- 应用场景:一般用于隐藏层(卷积层);
4. Tanh
- 双曲正切函数;
- 公式:
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}}=2sigmoid(2x)-1
tanh(x)=ex+e−xex−e−x=2sigmoid(2x)−1
- 优点:
- tanh 函数是 sigmoid 函数的改进,收敛速度快,不易出现 loss 值晃动;
- 缺点:
- 无法解决梯度弥散的问题,函数的计算量同样是指数级的,计算相对复杂;
5. 线性激活函数
-
公式: l i n e a r ( x ) = x linear(x)=x linear(x)=x;
-
该函数仅用于解决回归问题的神经网络模型的输出层,注意不能在隐藏层中使用线性激活函数;
2.2.3 池化层(Polling)
- Pooling 层主要的作用是特征提取,通过去掉 Feature Map 中不重要的样本,进一步减少参数数量。即通过池化层尽可能保留图像的主要特征,不会影响图像模型的最终效果,减少模型的复杂度,避免过拟合现象;
- 通常池化层采用 2x2 大小、步长为 2 窗口,零填充为默认 P=0;
2.2.4 全连接层
- 全连接层计算:即构造权重和偏置;
2.3 网络的优化和改进思路
- 调整学习率、随机初始化的权重和偏置;
- 调整优化器,优化损失函数;
- 使用不同的激活函数;
- 重新设计网络;
- 使用梯度截断(在训练过程中检查和限制梯度的大小);
- 对于深度网络模型,添加 batch normalization 层或者 droupout 层:
- batch normalization 层 (批量标准化,让这层的网络输出的权重、偏置或者参数分布归一化,即分布在同样的规律内);
- droupout 层 (使当前的神经元失效,减低模型的复杂度)