网络知识 娱乐 深度学习CV八股文

深度学习CV八股文

深度学习CV八股文

  • 一、深度学习中解决过拟合方法
    • L1和L2正则化
    • Dropout
      • Dropout正则化
      • Inverted Dropout(反向随机失活)
      • Dropout起到正则化效果的原因:
      • Dropout的缺点
    • eargstopping ( 早停法 )
  • 二、深度学习中解决欠拟合方法
  • 三、梯度消失和梯度爆炸
    • 解决梯度消失的方法
    • 解决梯度爆炸的方法
  • 四、神经网络权重初始化方法
    • Xavier
    • 指数加权移动平均数
  • 五、梯度下降法
    • 梯度下降
    • SGD(随机梯度下降法)
    • Momentum(动量梯度下降)
    • Nesterov Momentum
    • 自适应学习率算法
      • Adagrad
      • RMSprop
      • Adam
      • NAdam
  • 六、学习率衰减
  • 七、BatchNorm
    • BN的作用
    • BN的缺点
    • 测试时的BN
  • 八、内部协变量偏移
  • 九、归一化方法
    • LayerNormalization
    • Instance Normalization
    • Group Nomalization
    • 对比
  • 十、卷积
    • 卷积的优点
    • 1x1Conv(点卷积)
    • Depthwise Separable Convolution
    • Mlpconv
  • 十一、池化
  • 十二、激活函数
    • Sigmoid
    • tanh
    • ReLU
      • ReLU的变体
    • Swish
  • 十三、预训练
    • 预训练的好处
    • 什么是预训练
  • 十四、Transformer
    • Attention
    • self-attention
      • self-attention缩放(归一化)的原因
      • self-attention采用点乘而不是加线性注意力的原因:
      • 作用
    • Mutil_Head Attention
      • Mutil_Head Attention的作用
    • MLP
    • 残差连接的目的:
    • Patch Embedding
    • Learnable Embedding
    • Position Embedding
  • 十五、损失函数
    • 交叉熵函数
      • 从KL散度到交叉熵
    • MSE
  • 十六、度量指标分析
    • F1-score
    • precision
    • recall
    • PR曲线
    • ROC-AUC
      • ROC
      • AUC
      • 训练模型时的F1-score和AUC的选择
  • 十七、经典的模块组合方法
    • Res和Dense
      • Res
    • Dense
    • 如何选择Res和Concat
    • 多尺度卷积
    • Inverted Residual 和Linear Bottleneck
      • Inverted Residual
      • Linear Bottleneck
    • Group Average Pooling +1x1 Conv与FC
    • Squeeze-and-Excitation(SE)

一、深度学习中解决过拟合方法

  1. 数据增强
  2. L1和L2正则化
  3. Dropout正则化
  4. early stopping
  5. BatchNorm

L1和L2正则化

L1正则化直接在原来的损失函数基础上加上权重参数的绝对值: l o s s = J ( w , b ) + λ 2 m ∑ ∣ w ∣ loss=J(w,b)+frac{lambda}{2m}sum|w| loss=J(w,b)+2mλw
L2正则化直接在原来的损失函数基础上加上权重参数的平方和: l o s s = J ( w , b ) + λ 2 m ∑ ∥ w ∥ F 2 loss=J(w,b)+frac{lambda}{2m}sumlVert wlVert _F^2 loss=J(w,b)+2mλwF2
L1和L2正则化能够缓解过拟合的原因:
神经网络就是一个函数,对其进行傅里叶变换求得频谱,频谱中低频分量就是变化平滑的部分,高频分量就是变化敏感的部分。模型对于微小扰动的反馈差异大实际就是一个过拟合的表现,也就是高频分量不能多。根据雅各比矩阵(一阶导数矩阵),神经网络这个函数的高频分量存在上界,上界和谱范数正相关。谱范数逆变换回时域,可求得和参数范数正相关。正则就是将参数的范数加入loss里求最优化,故而限制了神经网络学到高频分量,更倾向于一个低频的平滑的函数,从而缓解过拟合。
推导过程:https://blog.csdn.net/StreamRock/article/details/83539937

Dropout

Dropout正则化

步骤:

  1. 遍历神经网络每一层节点,设置节点保留概率keep_prob(每一层的keep_prob可以不同,参数多的层keep_prob可以小一些,少的可以多一些)。
  2. 删除神经网络节点和从该节点进出的连线。
  3. 输入样本使用简化后的神经网络进行训练。
    每次输入样本都要重复以上三步

Inverted Dropout(反向随机失活)

步骤:

  1. 产生⼀个[0,1)的随机矩阵,维度与权重矩阵相同。
  2. 设置节点保留概率keep_prob 并与随机矩阵比较,小于为1,大于为0。
  3. 将权重矩阵与0-1矩阵对应相乘得到新权重矩阵。
  4. 对新权重矩阵除于keep_prob(保证输⼊均值和输出均值一致),保证权重矩阵均值不变,层输出不变。

测试阶段不需要使用dropout,因为如果在测试阶段使用dropout会导致预测值随机变化 , 而且在训练阶段已经将权重参数除以 keep_prob 保证输出均值不变所以在刚试阶段没必要使用dropout

Dropout起到正则化效果的原因:

  1. Dropout可以使部分节点失活,起到简化神经网络结构的作用,从而起到正则化的作用。
  2. Dropout使神经网络节点随机失活,所以神经网络节点不依赖于任何输⼊,每个输入的权重都不会很⼤。Dropout最终产⽣收缩权重的平方范数的效果,压缩权重效果类似L2正则化。

Dropout的缺点

没有明确的损失函数。

eargstopping ( 早停法 )

训练时间和泛化误差的权衡。提早停⽌训练神经网络得到⼀个中等大小的W的F范数,与L2正则化类似。
在这里插入图片描述
在训练中计算模型在验证集上的表现,当模型在验证集上的误差开始增大时,停止训练。这样就可以避免继续训练导致的过拟合问题。

二、深度学习中解决欠拟合方法

增加神经网络层数或神经元个数

三、梯度消失和梯度爆炸

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)
梯度饱和:越来越趋近一条直线(平行X轴的直线),梯度的变化很小
在这里插入图片描述
设激活函数是线性或函数,忽略b。 g ( z ) = z g(z)=z g(z)=z
y ^ = W ( l ) W ( l − 1 ) ⋯ W ( 2 ) W ( 1 ) x hat{y} = W^{(l)} W^{(l-1)} cdots W^{(2)} W^{(1)} x y^=W(l)W(l1)W(2)W(1)x
W ( l ) > 1 W^{(l)}>1 W(l)>1时,如 W ( l ) = [ 1.5 0 0 1.5 ] W^{(l)}=begin{bmatrix} 1.5 & 0 \ 0 & 1.5 \ end{bmatrix} W(l)=[1.5001.5] y ^ = W ( l ) [ 1.5 0 0 1.5 ] ( l − 1 ) x = 1. 5 ( l ) x hat{y}=W^{(l)}begin{bmatrix} 1.5 & 0 \ 0 & 1.5 \ end{bmatrix}^{(l-1)}x=1.5^{(l)}x y^=W(l)[1.5001.5](l1)x=1.5(l)x。此时,激活函数值/梯度函数值呈指数级增长=>梯度爆炸
W ( l ) > 1 W^{(l)}>1 W(l)>1时,如 W ( l ) = [ 0.5 0 0 0.5 ] W^{(l)}=begin{bmatrix} 0.5 & 0 \ 0 & 0.5 \ end{bmatrix} W(l)=[0.5000.5] y ^ = W ( l ) [ 0.5 0 0 0.5 ] ( l − 1 ) x = 0. 5 ( l ) x hat{y}=W^{(l)}begin{bmatrix} 0.5 & 0 \ 0 & 0.5 \ end{bmatrix}^{(l-1)}x=0.5^{(l)}x y^=W(l)[0.5000.5](l1)x=0.5(l)x。此时,激活函数值/梯度函数值呈指数级递减=>梯度消失
∂ J ( θ ) ∂ θ i j = ∂ J ( θ ) ∂ z i l + 1 ⋅ ∂ z i l + 1 ∂ θ i j frac{partial{J(theta)}}{partial{theta_ij} }=frac{partial{J(theta)}}{partial{z^{l+1}_i} } cdot frac{partial{z^{l+1}_i}}{partial{theta_ij} } θijJ(θ)=zil+1J(θ)θijzil+1

解决梯度消失的方法

  1. Relu及其变体
  2. LSTM/GRU
  3. 残差结构
  4. BatchNorm
  5. Xavier初始化(修正w的方差,避免w过小)

解决梯度爆炸的方法

  1. 梯度裁剪
  2. 正则化(将w加入Loss里,如果Loss小则w也要小,而梯度爆炸是w过大[绝对值]造成的)
  3. Xavier初始化(修正w的方差,避免w过大)
  4. BatchNorm

四、神经网络权重初始化方法

Xavier

X和Z的方差在各层相等,激活值在网络供传递过程中就不会放大或缩小。
解决梯度消失和梯度爆炸问题
z = ∑ i = 1 n w i x i z= sum_{i=1}^n w_ix_i z=i=1nwixi
v a r ( w i x i ) = E [ w i ] 2 v a r ( x i ) + E [ x i ] 2 v a r ( w i ) + v a r ( w i ) v a r ( x i ) var(w_ix_i)=E[w_i]^2var(x_i)+E[x_i]^2var(w_i)+var(w_i)var(x_i) var(wixi)=E[wi]2var(xi)+E[xi]2var(wi)+var(wi)var(xi)
E [ w i ] = E [ x i ] = 0 E[w_i]=E[x_i]=0 E[wi