机器学习策略Ⅰ
机器学习策略Ⅰ
-
在构建一个好的监督学习系统时,通常需要确保以下四个方面:
- 系统需要在训练集上能够很好地拟合数据,达到某种可接受的性能水平(如接近人类水平)。如果训练集表现不好,可以使用更大的模型(深度神经网络)、改进优化算法(Adam)、增加训练时间或数据量。
- 系统还需要在验证集上表现良好,避免过拟合。如果验证集表现不好,可以添加正则化(L2正则化、Dopout)、增加训练数据量、数据增强或改进特征工程。
- 系统在测试集上的表现应该接近验证集,避免在测试数据上过拟合或欠拟合。如果测试集表现不好,可以使用更大的验证集,确保验证数据分布与测试数据一致,以及检查数据是否存在数据泄露或分布差异。
- 系统在实际应用中的表现要好。系统在测试集上的表现不错,但在实际应用中效果不佳时,可能是成本函数或开发集分布有问题。如果实际应用表现不好,可以修改成本函数,使其更贴合实际需求,或者重新设计验证集,使其更接近真实分布。
-
正交化是指设计系统时,使每个调整项只影响一个性质,互相之间尽量不干扰。比如电视的设计中,一个旋钮只能调整图像高度,一个旋钮只能调整图像宽度,一个旋钮只能调整图像旋转角度等。如果一个旋钮同时影响多个性质(如高度、宽度、梯形角度等),调节起来会非常困难。
在机器学习系统中,要尽量避免一个“旋钮”同时影响多个性质。Early Stopping(早停法)是一种常用技术,但它同时影响训练集拟合和验证集表现,因此不够正交化。为了更清晰地分析问题,可以使用其他更正交化的手段(如正则化、优化算法等)。
-
在构建机器学习项目时,无论是调整超参数,还是尝试不同的学习算法,都需要设置一个单一数字评估指标,可以帮助快速判断新尝试的手段是否比之前的更好,从而加速迭代和优化的过程。
对于分类问题,准确率(Precision)指在分类器预测为真的数据中有多少标签实际为真,召回率(Recall)指在所有标签为真的数据中有多少被预测为真。虽然查准率和查全率是非常重要的指标,但它们往往需要在两者之间进行权衡。例如,一个分类器可能在查准率上表现更好,而另一个在查全率上表现更好。在这种情况下,单独依赖这两个指标难以快速判断哪个分类器更优。因此需要找到一个能结合准确率和召回率的新的数字评估指标,即 \(F_1\) 分数,代表两个指标的调和平均数。
\[F_1=\frac{\text{Pecision} \times \text{Recall}}{\text{Pecision}+\text{Recall}} \]除了 \(F_1\) 分数外,还可以采用平均错误率等作为单一数字评估指标。
-
在训练模型时通常需要同时考虑多个评估指标,主要可以分为两类:优化指标和满足指标。
优化指标是希望尽可能优化和提升的指标,它是我们主要关注的目标,需要不断迭代改善,如准确率和召回率。
满足指标是我们希望达到某个最低要求的指标。一旦满足了这个要求,我们不再关心它是否进一步优化。例如只要运行时间小于某个阈值(如 100 毫秒),我们就认为它达标,之后的优化(如从 80 毫秒减少到 50 毫秒)并不重要。
如果需要考虑 \(n\) 个指标,可以先选择一个优化指标,尽可能去优化。然后设定 \(n-1\) 个满足指标,为这些指标设定最低要求。
-
必须保证训练集、验证集、测试集来自同一分布。在数据较少的时候,传统经验法则是采用训练集和测试集70%、30%的比例,或者训练集、验证集、测试集60%、20%、20%的比例。这种划分在早期的数据集规模较小时非常合理,然而在现代大规模数据集中,如数百万样本,更合理的训练集、验证集、测试集比例就变成了98%、1%、1%。
测试集的主要目的是在模型训练完成后,用于评估系统的最终性能。测试集需要足够大,以高置信度评估系统的整体性能。通常,一万样本就足够了,具体数量取决于数据总量和应用场景。
在某些情况下,可以只划分训练集和验证集,而不设立单独的测试集。例如验证集非常大,过拟合的风险较低。但是在实践中,缺少单独测试集可能会导致模型性能评估存在偏差,因为验证集可能会被多次使用,导致模型在验证集上的表现被过度优化。因此,通常建议保留一个独立的测试集,作为最终性能评估的基准。
-
当现有的评估指标无法正确衡量算法的优劣时,需要修改指标。
第一种是开发集/测试集分布与实际应用场景不匹配,比如开发集使用高质量图片,但实际应用中处理的是低质量、模糊的图片,此时需要调整开发集和测试集的分布,使其更贴近实际应用。
第二种是指标与实际需求不符合,比如猫分类器中,简单的分类错误率无法反映用户对色情图片的敏感性,因此需要改进加权分类错误率。
原始分类错误率可以表示为:
\[Error = \frac{1}{m_{{dev}}}\sum_{i = 1}^{m_{{dev}}}{I\{ y_{{pred}}^{(i)} \neq y^{(i)}\}} \]其中, \(m_{dev}\) 表示验证集样本数, \(y_{pred}^{(i)}\) 表示预测值0/1, \(I\) 表示统计满足表达式为真的样本数量。但是这个评估指标问题在于,对色情图片和非色情图片一视同仁了。
加权分类错误率可以改善这个问题:
\[Error = \frac{1}{m_{{dev}}}\sum_{i = 1}^{m_{{dev}}}{w^{(i)}I\{ y_{{pred}}^{(i)} \neq y^{(i)}\}} \]如果图片 \(x^{(i)}\) 不是色情图片,则 \(w^{\left( i \right)} = 1\) 。如果 \(x^{(i)}\) 是色情图片, \(w^{(i)}\) 可能就是10甚至100,赋予了色情图片更大的权重,让算法将色情图分类为猫图时,错误率会急剧变大。
如果评估指标无法正确评估算法的效果,那么就需要定义一个新的评估指标。加权法只是定义评估指标的一种可能方式。即使无法一开始就定义完美的评估指标和数据集,也应快速设立初步的指标和数据集,推动迭代速度。如果在后续过程中发现评估指标和数据集不够理想,可以随时进行调整。
-
贝叶斯最优错误率是从输入 \(x\) 到输出 \(y\) 之间映射的理论最优函数。由于数据中存在噪声或模糊性,某些任务的贝叶斯最优准确率可能不是100%。对于许多任务(如图像识别、语音识别),人类的表现已经非常接近贝叶斯最优错误率,因此改进空间有限。
机器学习算法在许多应用领域的性能已经接近甚至超越人类水平。通过与人类表现比较,可以帮助优化机器学习系统的设计和效率。当算法性能低于人类时,可以使用以下策略提升性能:- 标注更多数据:让人类标记数据,增加训练样本。
- 错误分析:让人类分析算法的错误,找出改进方向。
- 偏差/方差分析:人类表现作为基准,帮助判断应优先减少偏差还是方差。
当算法的性能低于人类水平时,通过利用这些工具,改进速度通常较快。当算法超越人类水平后,性能提升的速度会显著减慢。性能最终会接近理论上的最优错误率(贝叶斯最优错误率),但无法超越。
-
在许多任务(如计算机视觉)中,人类的表现接近贝叶斯错误率,因此可以用人类水平错误率作为贝叶斯错误率的近似值。
可避免偏差衡量的是模型训练错误率与贝叶斯错误率的差距,表示模型在训练集上的改进空间。方差衡量的是训练错误率与验证错误率之间的差距,表示模型的泛化能力还有多少提升空间。
如果人类水平错误率是1%,训练错误率是8%,验证错误率是10%。那么可避免偏差是7%,方差为2%,显然要专注于减少偏差。
如果人类水平错误率是7.5%,训练错误率是8%,验证错误率是10%。那么可避免偏差是0.5%,方差为2%,显然要专注于减少方差。
-
在医学影像识别上,人类水平错误率可以是普通人类的表现(3%),也可以是普通医生的表现(1%),也可以是经验丰富医生的表现(0.7%),甚至可以是经验丰富的医生团队的表现(0.5%)。
如果目标是估计贝叶斯错误率,那么需要选择最优医生团队的表现。
如果目标是评估系统是否具有实用价值,选择普通医生的表现即可。
当偏差远离人类水平时,偏差和方差问题较为明显,容易判断优化方向。
当偏差接近人类水平时,偏差和方差问题变得难以区分,需要更准确地估计贝叶斯错误率以指导优化方向。
-
当机器学习接近或超越人类水平时,难以准确估计贝叶斯错误率,进而难以判断是否应该专注于减少偏差还是减少方差,不确定性大大增加。依赖人类直觉和现有分析工具来指导优化方向也会变得更加困难。
在结构化数据的领域,如广告推荐、物流预测等,模型可以访问比人类更多的数据,更敏锐地识别统计规律。人类在这些领域的表现有限,因此机器更容易超越人类。
而在自然感知任务中,如语音识别、计算机视觉、医疗诊断等,人类在这些任务中表现极佳,计算机超越人类更具挑战性。