AI 机器学习、深度学习模型调优方法及方向

关键字:科学的模型训练


1. 背景

1.1 选择正确的改进方向

在实际应用过程中,算法模型的准确度还不够好。为改进这个问题应该怎么做?

扩大样本容量,收集更多维度数据优化特征工程改良模型算法或参数

总结:每一个方向都是一个选择,选择一个正确的方向,能够大大提高效率。

2.2 数据发展趋势

数据增长:得益于数字设备的发展,互联网的发展

计算能力:得益于计算机计算能力的提高

趋势:数据量越来越大,深度学习模型在海量数据上的表现更加高于传统机器学习模型(另,文本类数据近年来增长速度更快)

2. 设置开发、测试集

2.1 结果导向,训练数据与实际业务需一致(数据角度)

充分考虑训练数据与实际业务数据一致(数据质量,数据分布)合理划分数据,引导模型做出最正确的训练

训练数据和业务数据不一致会导致训练的模型无法泛化实际业务,造成较大偏差,使用训练集(做训练用),开发集(特征选择,调整参数用),测试集(评估算法性能)

2.2 开发集、测试集应服从同一分布

避免训练集、开发集、测试集不符合同一分布,如果处在不同的分布状态,可能会导致模型过拟合,无法泛化适应另一个分布

2.3 开发集、测试集规模应能根据评估性能所需程度(开发集通常1000~10000)

传统的训练、测试集对于大规模数据并不适用,开发集和测试集的比例会远小于30%

关注不同算法、参数模型得出结果差异,根据差异水平1%?0.1%?0.01%?,决定是否需要更大的样本凸显差异;大样本也不要远超过评估性能所需程度。

关注业务需求,较小的准确率是否对业务提高较大提升(投入产出比)

2.3 模型单值评估及优化(通常进行平均或加权平均糅合成单一指标)

单值评估指标:AUC、F1、Score 衡量最终结果

准确率(precision)、召回率(recall):衡量模型某方面能力

有时候不单一的考虑准确度,还要考虑效率(比如运行时长)、满意度(伪真和假反的发生频率)、期望收入(概率和期望的综合结果)

2.4 建立idea-code-experiment 循环

快速迭代,快速改进方案,不断循环提升,记录优化方向,检测提升原因,复盘优化

3. 误差分析

3.1 预估投入产出,决定优化方案

通过分析各类误差分布情况,预估优化成效及投入,评估是否值得投入

建议先解决其他原因的误差,随着优化的调整,再考虑标注结果误差

3.2 建立Eyeball & Blackbox 开发集验证

大型开发集中,不需要考虑所有的误判样本,可以建立少量的Eyeball,检查误差如果出现Eyebal性能提升远高于Blackbox,则可能有过拟合风险,要修改Eyeball

3.3 Eyeball & Blackbox 规模应足够大

Eyeball应当足够大,以便提供足够的错误分类样本Blackbox一般1000~10000个样本就足够


4. 偏差与方差

4.1 偏差与方差的两大来源

偏差:训练集上的错误率

方差:测试集的表现低于训练集的程度

贝叶斯错误率:可避免偏差误差+方差误差

若有较高可避免偏差,可加大模型规模,若有较高方差,可加大样本量或正则

4.2 偏差与方差的权衡

加大规模可能会减少偏差,增大方差,加入正则可能会增加偏差,减少方差,也有些时候可以时增加方差和偏差

减少偏差

加大模型规模增加特征选择减少正则修改模型结构添加更多数据

减少方差

减小模型规模减少特征选择根据误差分析修改特征加入正则修改模型结构添加更多数据提前结束模型

5. 学习曲线

5.1 诊断偏差与方差

通过偏差和方差随着样本数量增加,走向来确定:

欠拟合




高偏差,过拟合




高方差,欠拟合,增加样本




高偏差,高方差




6. 样本分布

6.1 样本选取细节

尽量剔除无用数据,减少浪费计算机资源和模型表征能力对于不一致的数据是否添加,从业务意义和关注点区分,有些数据加入能增加模型表征能力,有些数据加入会降低设置数据权重,减少计算资源浪费

样本选用:

● 训练集:这是算法将学习的数据(例如,互联网图像+移动应用图像)。这并不需要我

们从与真正关心的相同分布(开发/测试集分布)的数据中提取。

● 训练开发集:这些数据来自与训练集相同的分布(例如,互联网图像+移动应用图

像)。它通常比训练集要小;它只需要足够大到来评估和跟踪我们的学习算法的进展。

● 开发集:这是从与测试集相同分布的数据中抽取出来的,它反映了我们最终关心的数据

的分布(例如,移动应用图像) 。

● 测试集:这是从与开发集相同分布的数据中抽取出来的(例如,移动应用图像)。

有了这四个独立的数据集,你现在可以评估:

● 训练误差,对训练集进行评估。

● 该算法能够泛化到与训练集相同分布数据的能力,并对训练开发集进行评估。

● 算法在你实际关心的任务上的性能,通过对开发集 和/或 测试集评估。