深度学习基础知识总结(面试用,随时更新)

目录

      • 目录
      • 一、基础知识
        • 1、反向传播(BP):
        • 2、激活函数选择:
        • 3、感受野的计算:
        • 4、常用CNN结构:
        • 5、数据预处理:
        • 6、解决梯度弥散和梯度爆炸的方法:
        • 5、TIPS:

一、基础知识

1、反向传播(BP):

对于反向传播中的第 i i 层的参数 wi w i 和输入 xi x i 的导数,可以由 zwi=zxi+1xi+1wi ∂ z ∂ w i = ∂ z ∂ x i + 1 ⋅ ∂ x i + 1 ∂ w i , zxi=zxi+1xi+1xi ∂ z ∂ x i = ∂ z ∂ x i + 1 ⋅ ∂ x i + 1 ∂ x i 计算。其中 z z 为loss。对参数的导数将用于该层参数的更新,对输入的导数则用于误差向前一层的反向传播。

2、激活函数选择:

Sigmoid函数 σ(x) σ ( x ) 的缺点:在输入变量 x x 两侧取值时,梯度会非常小接近0(梯度的饱和效应),这会导致误差在反向传播过程中很难传到前层。此外,Sigmoid函数值域的均值并非为0,不符合神经网络数值期望为0的设想。
tanh函数的表达式为 tanh(x)=2σ(2x)1 t a n h ( x ) = 2 σ ( 2 x ) − 1 ,因此缺点是仍基于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) 减少参数个数;

你可能感兴趣的:(深度学习)