AI常见算法调参策略
2019.10.11 18:47浏览量:4094简介:《AI常见算法调优》教程视频 曾经有个形象的比喻,将以前的炼丹术士比作现在的机器学习工程师。 药材 -- >
《AI常见算法调优》教程视频
曾经有个形象的比喻,将以前的炼丹术士比作现在的机器学习工程师。
药材 -- > 数据
炼丹炉 -- > 网络结构
火 -- > 优化算法
所以咱们的常见算法该如何调优呢?不如先想想炼丹的道理。
网络结构
对于网络结构,若需换网络,尽量使用前人留下来的网络,不要随意修改网络结构,当然建议使用已经得到很好效果的网络结构,否则会在网络结构方面浪费很多时间。
调参-minibatch
调参主要有两个方面:minibatch大小的调整、学习率的调整,这两个不是分割的,而是相互辅助的。
对于minibatch:不要过大(易过拟合)或过小,建议使用minibatch大小为2的n次方、10的n次方(建议值1,64,128,256);当使用GPU时,一般都会遇到显存问题,若显存不过大,minibatch也不要过大。
对于图形或非序列型工作,建议使用 BN 技术(批量归一化),这是现在做深度学习的标配技术,尤其是在图像问题中。
数据规模不大时,建议加入正则化策略。
调参–学习率
一般刚开始学习率设置的大一点,比如0.1;接着逐渐变小学习率,比如是上一次的 ½ 或 1/5。初始学习率的选择:尝试使用不同的初始学习率,然后以5-10轮的训练为标准,比较最终的学习效果。一般学习率可以从0.1-10e-8或更大的范围去搜索 。
梯度下降策略
复杂损失函数形成梯度下降图
常见梯度下降策略:SGD、Momentum、Adam
- SGD
SGD:stochastic gradient descent,即随机梯度下降。是梯度下降的batch版本。对于训练数据集,我们首先将其分成n个batch,每个batch包含m个样本。我们每次更新都利用一个batch的数据,而非整个训练集。
其中,η为学习率,为x在t时刻的梯度。
SGD的优点:Loss 往往更低,甚至可能达到最优 loss。
SGD的缺点:综合性能差:收敛慢,占用内存多、容易陷入鞍点。
- Momentum
SGD方法的一个缺点是,其更新方向完全依赖于当前的batch,因而其更新十分不稳定。解决这一问题的一个简单的做法便是引入momentum。
momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:
其中,ρ 即momentum,表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始时,由于梯度可能会很大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。η 是学习率,即当前batch的梯度多大程度上影响最终更新方向,跟普通的SGD含义相同。ρ 与 η 之和不一定为1。
- Adam
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
Adam问题分析方面由于使用了窗口范围内的梯度值,可能导致学习率不稳定从而来回震荡而无法下降到最小值。
优点:综合新能好:在资源受限的情况下,占用内存少,收敛速度快()若想尽快出结果,建议使用Adam)
缺点:收敛性不稳定;泛化能力不如 SGD(在测试集上的 loss 表现不好)。
数据扩充
深度卷积网络自身拥有很强大的表达能力,不过正因如此,网络本身需要大量甚至海量的数据来驱动模型训练,否则便有极大可能陷入过拟合的窘境。而实际中,并非所有数据集或真实人物都能提供如ImageNet数据集一般的海量训练。因此,在实践中数据扩充(data augmentation)便成为深度模型训练的第一步。
常见的数据扩充方式:
1.水平翻转(horizontally flipping):会使原数据集扩充一倍。
2.随机抠取(random crops):一般用较大(约0.8-0.9倍原图大小)的正方形在原图随机位置抠取图像(image patch/crop),每张图像抠取的次数决定了数据集扩充的倍数。
3.旋转(rotating):将原图旋转一定角度(-30°,30°),将经旋转变换后的图像作为扩充的训练样本加入原训练集。
4.色彩抖动(color jittering):在RGB颜色空间对原有RGB色彩分布进行轻微的扰动,或在HSV颜色控件随机改变原有图像饱和度和明度或对色调进行微调。
在实践中,往往会将上述几种方式叠加使用,如果便可将图像数据扩充至原有数量的数倍甚至数十倍。
数据预处理
在使用卷积神经网络模型处理图像数据过程中,获取足够的训练样本后,在训练前,数据预处理操作是必不可少的一步。
计算训练集图像像素均值,之后在处理训练集,验证集和测试集图象是需要分别减去该均值。
减均值操作的原理是,我们默认自然图象是一类平稳的数据分布,此时从每个样本上减去数据的统计平均值(逐本计算)可以移除共同部分,凸显个体差异。
- 对输入特征做归一化处理(normalization)预处理操作是常见步骤,同样在图像处理中
- 可以将图像的每个像素信息看作一种特征。
- 在实践中,对每个特征减去平均值来中心化数据的归一化处理方式称为“中心式归一化”(mean normalization)。
需要注意的是,实际操作中应首先划分好训练集,验证集和测试集,该均值仅针对划分后的训练集计算,不可再未划分的所有图上计算,如此会违背机器学习的基本原理,即“在模型训练过程中能且仅能从训练集中获取信息”。
迁移学习
现实中,很少有人从零开始训练一个完整的神经网络,因为有一个足够大的数据集是相对很少见的。事实上,常用的方法是提前训练一个很大的数据集(比如ImageNet,包含了120万张图片和1000个类别),并将这个训练好的神经网络作为一个起始点,或者是特征提取器。这既是迁移学习。
迁移学习主要分两种:Freezing all but last layer 和Finetuning all layers
如何使用Fine-tune
使用Fine-tune,决定冻结的网络层数主要取决两个因素:新旧数据集的规模大小、新旧数据集的相似度
- 新的数据集很小,并且和原有数据集很相似
- 冻结所有CNN层,只训练 FC 层
- 新的数据集很大,并且和原有数据集很相似
- 可不冻结,也可冻结(可节省大量训练时间)
- 新的数据集很小,并且和原有数据集不相似
- 比较危险。先冻结浅层,再不冻结
- 新的数据集很大,并且和原有数据集不相似
- 可以只冻结浅层(因为浅层网络抽取的更加普遍特征),甚至不冻结
该图说明了再较浅层抽取一些普遍信息,如一些边缘、色块等较浅的信息,在较深层抽取一些抽象的信息。
发表评论
登录后可评论,请前往 登录 或 注册