美文网首页
深度学习常见问题

深度学习常见问题

作者: doraTrager | 来源:发表于2019-12-18 19:30 被阅读0次

学习笔记,可能有些谬误,请批判性阅读。

深度学习是机器学习的分支。毕竟都是输入->模型->输出的模式。只是深度学习的模型复杂度一下子上去了,而且有可以归纳的结构。

模型训练的完整过程

实际上就是前向传播-后向传播交替循环进行。传统机器学习则不局限于这个方法,例如KNN,根本就没有参数。在深度学习中,目前了解到的,只有这种方法。

前向传播

数据在输入网络之前,可以进行数据增强。对于CV而言,可以对图片进行裁剪、翻转、灰度变化等等。这样可以使网络适应不同角度、不同光照等情况下的相同目标,不至于南辕北辙。

隐层网络的权重初始化的方法,会导致训练耗时及训练结果波动。方法有例如随机初始化、等值初始化,以及用预训练好的网络的权重值直接初始化。若采用预训练网络初始化,则可以对网络局部层进行fine-tune(当然也可以全局训练,看需要就是了)。

然后从输入层开始,沿着网络结构,逐步计算每一层的输出,直到最后的输出层为止。

网络结构中,除了功能性的卷积层、池化层、全连接层等,还有以批量归一化(BN)为代表的正则化层,在模型训练过程中,由于量纲统一,梯度向量不至于晕头转向的,加速模型的收敛。
实际输入层也需要进行正则化,一般是正则化到[0,1],统一量纲,使小值输入不至于被吞没。

在未归一化/归一化时,梯度下降示意图

另外,网络中还可以加入dropout机制,也就是按概率抑制神经元,这样以减少过拟合。

后向传播

从输出层开始,倒着往回传递误差。后向传播的过程中会根据需求,更新网络参数。每一层接收到的误差,是参数调整幅度的量纲。

梯度下降法是一个被广泛用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,在每次迭代中最小化代价函数,以此调整模型的参数。学习率用来在迭代过程中控制模型的学习速度。

为了加快模型的训练速度,衍生出学习率衰减(调整)的研究方向。常用的学习率衰减方法:分段常数衰减、多项式衰减、指数衰减、自然指数衰减、余弦衰减、线性余弦衰减、噪声线性余弦衰减。

学习率是一个超参数,除此之外,NN模型的超参数还有隐层数量、每层尺寸、迭代次数、激活函数。

常见问题

了解NN的步骤后,需要关心哪些细节也一目了然。这里整理一下常见的问题,加深理解。

1、数据增强的方法

2、BN作用是什么?在哪个步骤进行?预测时怎么进行?
参考[1]。

3、常见的激活函数有哪些?relu相比sigmoid的优势是什么?
logistic(常说的sigmoid函数), softmax(不常用), tanh, relu, leaky relu。(前面三个都是sigmoid函数)
relu相比sigmoid,由于梯度为1,相比sigmoid的最大梯度0.25,有效缓解了梯度消失的问题。另外,relu的梯度计算更加简单,相比sigmoid,网络训练耗时大大缩短,收敛速度加快。

4、说明一下最常见的学习率指数衰减

5、dropout一般在哪一层进行?概率取多少?dropout后在训练/测试上怎么调整?
参考[1]。

6、梯度消失(弥散)、梯度爆炸分别是什么?怎么解决?
梯度消失:sigmoid函数的最大梯度为0.25,relu为1,在网络越来越深的情况下,后向传播到接近输入层的层时,梯度接近于0。解决办法可能是resnet?
梯度爆炸:输入值很大的情况下,梯度值可能在迭代的过程中爆炸式增长。解决方法:输入正则化、BN等。

7、模型过拟合怎么办?
加数剧/数据增强,dropout,加入对参数规模的正则惩罚。

参考

[1] https://zhuanlan.zhihu.com/p/61725100

相关文章

网友评论

      本文标题:深度学习常见问题

      本文链接:https://www.haomeiwen.com/subject/yqwunctx.html