机器学习与Deep Learning算法问题汇总(Part-2)

7. 什么是梯度弥散?要怎么去解决这个问题?

答: 随着网络层数变深, activations倾向于越大和越小的方向前进, 往大走梯度爆炸(回想一下你在求梯度时, 每反向传播一层, 都要乘以这一层的activations), 往小走进入死区, 梯度消失。 这两个问题最大的影响是, 深层网络难于converge。sigmoid不存在梯度爆炸, 在activations往越大越小的方向上前进时, 梯度都会消失。

解决方法:使用其他**函数替代,比如ReLU等等。

机器学习与Deep Learning算法问题汇总(Part-2)

梯度消失 和 爆炸 在ReLU下都存在,ReLU的负半轴梯度为0,所以有时候(比较少见)也还是会梯度消失,这时可以使用PReLU替代,如果用了PReLU还会梯度弥散和爆炸,请调整初始化参数,对自己调参没信心或者就是懒的,请直接上BN。

BN和xavier初始化(经指正,这里最好应该用msra初始化,这是he kaiming大神他们对xavier的修正, 其实就是xavier多除以2)很大程度上解决了该问题。


8. 介绍一下BN算法

答:BN可以看做对输入样本的一种约束,最大作用是加速收敛,减少模型对dropout,careful weight initialnization依赖,可以adopt higher learning rate的优势,收敛速度可以提高10倍以上。

问题提出:

深度网络参数训练时内部存在协方差偏移(Internal Covariate Shift)现象:深度网络内部数据分布在训练过程中发生变化的现象。

为什么会带来不好影响:训练深度网络时,神经网络隐层参数更新会导致网络输出层输出数据的分布发生变化,而且随着层数的增加,根据链式规则,这种偏移现象会逐渐被放大。这对于网络参数学习来说是个问题:因为神经网络本质学习的就是数据分布(representation learning),如果数据分布变化了,神经网络又不得不学习新的分布。为保证网络参数训练的稳定性和收敛性,往往需要选择比较小的学习速率(learning rate),同时参数初始化的好坏也明显影响训练出的模型精度,特别是在训练具有饱和非线性(死区特性)的网络,比如即采用S或双S**函数网络,比如LSTM,GRU。

解决办法:引入Batch Normalization,作为深度网络模型的一个层,每次先对input数据进行归一化,再送入神经网络输入层。

什么是Batch Normalization?

  • 首先,是要做normalization,mean=0, variance= 1
  • 其次,要用到mini-batch, 方便求mean 和 variance的值
  • 当然,还有额外的 机器学习与Deep Learning算法问题汇总(Part-2) 来对新生成的distribution做一定幅度的放缩和平移

为什么会用到Batch Normalization?

  • 因为covariance问题在每一个层layer上都存在,都需要batch norm来解决问题
  • 那么什么是covariance shift问题:在输入层上,如果一部分样本的分布与另一部分样本显著分布不同:[0,1] vs [10,100]。对于一个浅层模型而言,训练第一组样本时,模型可能在描绘函数A,训练第二组样本时,模型发现自己在描绘函数B,完全不同于A,这样就是推翻自己重复劳动,训练低效
    • 输入层的这种情况,对于其他层而言,也是一样,无法逃避,如果遇到前层neurons或本层的weights值特别大,可能导致本层output neurons中某些neurons值要远大于其他neurons的值,导致一部分neurons的分布与其他neurons的分布大幅偏离,这样就出现了本层的covariance shift的情况
    • 看看原论文里是怎么说的(见下图)
    • Covariance shift:由于parameters发生变化,导致本层的activation发生变化,当每层activation的分布都不相同或者差异较大时,训练效率会很低下。因此,解决方案就是同一每一层的activations的分布

机器学习与Deep Learning算法问题汇总(Part-2)

关于为什么Batch Normalization 有了normalization, 即mean = 0, variance=1,还不够,为什么要有 机器学习与Deep Learning算法问题汇总(Part-2) ?

  • 因为 机器学习与Deep Learning算法问题汇总(Part-2) 能够锦上添花,更好解决normalization希望解决的covariance shift的问题。

如何理解“因为 机器学习与Deep Learning算法问题汇总(Part-2) 能够锦上添花”?

  • 机器学习与Deep Learning算法问题汇总(Part-2) = rescale 和 shift
  • normalization 能够让所有layer output distributions 都固定在mean=0, variance=1的特定区域(可以缓解covariance shift problem)
  • 但在特定区域的大体框架下,如果可以在垂直方向上有一定程度的放大缩小的自由度(rescale),在水平方向上有一定的移动的自由度(shift)
  • 那么,也许所有layer output distributions能够做到更好的相似与稳定(当然,具体值不会相同)
  • 从而进一步缓解covariance shift 的问题

关于 机器学习与Deep Learning算法问题汇总(Part-2) 是如何学习的?

  • 机器学习与Deep Learning算法问题汇总(Part-2) 和其他的parameters 一样,在训练中通过反向传递来更新自己


9. 介绍下ROC曲线和AUC值。

答:(1)ROC曲线:

机器学习与Deep Learning算法问题汇总(Part-2)

横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。

纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。

(2)AUC值:

AUC (Area Under Curve) 被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围一般在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

这句话有些绕,我尝试解释一下:首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。

机器学习与Deep Learning算法问题汇总(Part-2)

简单说:AUC值越大的分类器,正确率越高。

(3)为什么使用ROC曲线

既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:
机器学习与Deep Learning算法问题汇总(Part-2)

在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。


10. cnn做卷积的运算时间复杂度是多少?

答:单个卷积层的时间复杂度:

机器学习与Deep Learning算法问题汇总(Part-2)

  • 机器学习与Deep Learning算法问题汇总(Part-2) 每个卷积核输出特征图 机器学习与Deep Learning算法问题汇总(Part-2) 的边长
  • 机器学习与Deep Learning算法问题汇总(Part-2) 每个卷积核 机器学习与Deep Learning算法问题汇总(Part-2) 的边长

  • 机器学习与Deep Learning算法问题汇总(Part-2) 每个卷积核的通道数,也即输入通道数,也即上一层的输出通道数。
  • 机器学习与Deep Learning算法问题汇总(Part-2) 本卷积层具有的卷积核个数,也即输出通道数。
  • 可见,每个卷积层的时间复杂度由输出特征图面积 机器学习与Deep Learning算法问题汇总(Part-2) 、卷积核面积 机器学习与Deep Learning算法问题汇总(Part-2) 、输入 机器学习与Deep Learning算法问题汇总(Part-2) 和输出通道数 机器学习与Deep Learning算法问题汇总(Part-2) 完全决定。
  • 其中,输出特征图尺寸本身又由输入矩阵尺寸 机器学习与Deep Learning算法问题汇总(Part-2) 、卷积核尺寸 机器学习与Deep Learning算法问题汇总(Part-2)机器学习与Deep Learning算法问题汇总(Part-2)机器学习与Deep Learning算法问题汇总(Part-2) 这四个参数所决定,表示如下:

机器学习与Deep Learning算法问题汇总(Part-2)