目录
一、基础知识
1、反向传播(BP):
对于反向传播中的第 i i 层的参数和输入 xi x i 的导数,可以由 ∂z∂wi=∂z∂xi+1⋅∂xi+1∂wi ∂ z ∂ w i = ∂ z ∂ x i + 1 ⋅ ∂ x i + 1 ∂ w i , ∂z∂xi=∂z∂xi+1⋅∂xi+1∂xi ∂ z ∂ x i = ∂ z ∂ x i + 1 ⋅ ∂ x i + 1 ∂ x i 计算。其中 z z 为loss。对参数的导数将用于该层参数的更新,对输入的导数则用于误差向前一层的反向传播。
2、激活函数选择:
Sigmoid函数的缺点:在输入变量
x
x
两侧取值时,梯度会非常小接近0(梯度的饱和效应),这会导致误差在反向传播过程中很难传到前层。此外,Sigmoid函数值域的均值并非为0,不符合神经网络数值期望为0的设想。
tanh函数的表达式为,因此缺点是仍基于Sigmoid函数,会发生梯度饱和现象。
ReLU函数是对于
x>=0
x
>=
0
部分完全消除梯度饱和效应,而且比Sigmoid/Tanh收敛得更快。然而,ReLU很脆弱,很容易死掉(死区),这是因为如果一个非常大的梯度流入,会导致参数变化巨大,容易使得输入的样本大量进入
x<0
x
<
0
区间,从而获得负数激活变为0,从此这部分数据无法再影响ReLU参数更新了。
Leaky ReLU函数缓解了ReLU的死区问题。然而,负数区域的超参数值不容易设定且较为敏感,因此性能并不十分稳定。
参数化ReLU函数通过学习超参数来解决超参数不易设定的问题,并且实验发现超参数由前层到深层依次递减,这说明网络所需要的非线性能力随网络深度增加而增加。然而,这种函数容易发生过拟合。
随机化ReLU函数随机选取超参数(符合均匀分布)。
ELU函数的表达式为
ELU(x)=λ⋅(exp(x)−1) if x<0 else x
E
L
U
(
x
)
=
λ
⋅
(
e
x
p
(
x
)
−
1
)
i
f
x
<
0
e
l
s
e
x
。但是增大了计算量
3、感受野的计算:
一个全卷积网络(例如有4层CNN,stride=1,KernalSize= 3×3 3 × 3 ),则输出的feature map上的一个像素对应前几层CNN的感受野分别是 3×3,5×5,7×7,9×9 3 × 3 , 5 × 5 , 7 × 7 , 9 × 9 ;(从网络后层往前层计算,过一个Stride=2的Pooling层需要把感受野 ×2×2 × 2 × 2 ,过一个Stride=1的CNN层需要把感受野 +1+1 + 1 + 1 )。
4、常用CNN结构:
(1)AlexNet和VGG区别:VGG网络更深,普遍使用小卷积核;AlexNet可以并行运行。
(2)Network-In-Network网络和其他网络的最大差异是用多层感知机(多层全连接层和非线性函数组合)代替原先卷积网络中简单的线性卷积层,并用global average pooling代替全连接层做分类。
(3)GoogLeNet网络:增加Inception Module,对输入(上一层的输出)分别做
1×1,3×3,5×5
1
×
1
,
3
×
3
,
5
×
5
的卷积以及
3×3
3
×
3
的max-pooling(还有一些
1×1的卷积
1
×
1
的
卷
积
),并把它们的结果连接作为下一层的输入(v1版本),可以增加网络的宽度。
(4)ResNet网络:受到LSTM门的启发设计的高速公路网络的一种简特殊情况,能够解决梯度弥散问题(梯度过小使回传的训练误差极小),除了加入了ResBlock,还用global average pooling代替全连接层。
5、数据预处理:
对输入图像做特征归一化的作用:默认一张图像上是一类平稳的数据分布,在每个样本上减去数据的统计平均值可以移除共同部分,凸显不同特征的个体差异。归一化的方法包括:简单缩放特征到[0,1]区间上;逐样本减去数据的统计平均值。
6、解决梯度弥散和梯度爆炸的方法:
解决梯度弥散:残差网络,Batch Normalization,换用ReLU激活函数。
解决梯度爆炸:梯度剪枝(例如把大于1的梯度修剪为1)。
5、TIPS:
(1)BN层中为什么在normalize后还有一个scale and shift操作(两个参数)? 仅是简单的对网络层输入作归一化可能会改变原本的输入表示,而加入scale and shift操作可以通过对参数γ,β 的学习将其变回去,不改变输入表示。
(2) Pooling操作可以看作用p-norm作为非线性映射的卷积操作,当p趋近于正无穷时就是Max-Pooling;
(3)此外,选择一堆小kernal卷积运算代替大kernal卷积运算的原因是:a) 增加网络深度和复杂度;b) 减少参数个数;