在这篇技术分析报告的《研学社·系统组 | 实时深度学习的推理加速和持续训练》部分,我们介绍了一些最新的DNN推理加速的硬件和算法技术。在第二部分中,我们将根据ChristophKading、ErikRodner、AlexanderFreytag和JoachimDenzler最近发表的一篇论文《在连续学习场景中对深度神经网络进行微调(Fine-Tuning Deep Neural Networksin Continuous Learning Scenarios)》探索DNN中的持续学习。将深度学习系统投入生产的一个重要方面是能够应对输入和输出数据分布随时间的变化。与任何统计机器学习模型一样,深度神经网络的可行性和有效性在很大程度上取决于一个假设,即输入和输出数据的分布不会随时间发生显着变化,否则会使模型最初学习的模式和复杂关系表现不佳甚至完全无法使用。然而,在现实世界中,这样的假设很少成立,特别是在信息安全等领域,底层数据生成机制的快速发展是常态(在安全的情况下,这是由于双方的对手不断地试图改变自己的策略以超越对方,从而利用对手没有防范的漏洞。因此,当我们将深度学习应用于这些领域以更好地解决许多曾经无法解决的问题时,深度神经网络的连续问题Web学习越来越受到机器学习即服务(MLaaS)提供商和应用程序架构师的关注——我们如何才能在不影响生产质量或增加资源消耗的情况下很好地进行持续学习。在本报告的第二部分中,我们将形式化持续学习场景并引入增量微调方法。然后我们将给出三个主要的重要发现。这篇文章的目的不是全面考察和描绘持续学习的现状全景,而是启发更多不同专业背景的人加入我们的讨论,与我们交流知识。第二部分:持续学习场景和增量微调微调一直是预训练具有生成目标的DNN,然后是具有判别目标的额外训练阶段的过程。预训练和微调深度信念网络和深度堆叠自动编码器的早期工作都遵循这种方法。研究人员期望这个生成训练阶段能让网络学习到数据域的良好层次表示,而判别阶段会利用这个表示,希望它在这个表示空间中学习到更好的判别器功能。最近,研究人员使用微调在大型通用数据集(如ImageNet)上预训练复杂的、最先进的DNN,然后在较小的相关数据集上微调模型。这可以帮助缓解在医疗诊断或地理检测等领域中标记训练数据不足的问题,在这些领域中获取标记数据是劳动密集型或昂贵的。研究人员的基本假设是,在大型训练数据集上获得的相当不错的结果已经使网络在参数空间上接近于局部优化,因此即使新数据量很小,网络也可以快速引导到***观点。从持续学习的角度来看,上述两种方法都是网络只训练两次(初始预训练和更新)的极端情况。一种更一般的持续学习形式是迭代地训练和更新,这就提出了一个问题:如何稳健高效地执行一系列连续更新?鲁棒性对于生产系统很重要,因为实时系统通常不能容忍模型性能突然下降,而系统的实时性要求有效利用资源和时间。为此,在下面的讨论中,我们将重点放在每个更新步骤仅使用少量新数据(与原始完整训练数据集相比)但要求更新后的模型立即可用的场景。1.持续学习场景最普遍的持续学习形式是整个训练数据集随时间演化。然而,为了使学习可行,我们设置了输入域保持不变的约束。这并不意味着输入域中的数据分布是恒定的——相反,我们允许数据分布发生变化的各种情况,但这些变化总是在同一个域中定义。另一方面,我们假设输入域可以变化。这是为了适应在系统运行很长时间后出现新选项卡的情况。这种假设比输入域发生变化的情况更可能是现实的,因为在自动驾驶汽车等大多数生产系统中,如果输入视频或激光雷达图像发生急剧变化(由于极端天气、光照、地形或道路条件)),那么我们不能指望系统远程工作;但我们希望系统在不断学习的过程中适应新型不可碰撞的物体,并能够应对这种新的标签类别。因此,我们将持续学习场景中的数据定义为由时间t索引的一系列数据集。我们的目标是为每个时间步t学习一个网络。根据χ的变化方式,我们有两种可能的情况:1)随着时间的推移,我们没有得到新的类别,但我们的数据集不断增长。2)我们随着时间的推移获得新类别的样本。在每个时间步t,我们需要用新的可用信息更新我们的网络;这个新信息是更新集:。由于我们假设更新集很小,为了避免欠拟合,在时间步t我们使用在上一步收敛的热启动优化。这种技术的可行性取决于数据集在扩展时平滑变化的假设——因此我们假设更新步骤很小并且输入域不变。在实践中,即使这些假设(部分)正确,我们仍然依赖于这样一种期望,即具有不同参数空间条件的新优化问题可以通过在先前的局部最优点处初始化到新的局部修复点来快速稳定地收敛。然而,大多数现代DNN过于复杂而无法保证这一点——它们的目标函数是高度非线性和非凸的,有时在参数空间中具有糟糕的局部条件数。即便如此,热启动仍然是目前最好的方法之一,肯定比从头开始要好,并且已经通过实验显示出巨大的潜力。对于场景2,在每个时间步,我们可能需要在***的输入层添加额外的神经元以及与上一层的连接权重。但仍然存在三个问题。一,每个更新步骤需要多少个SGD步骤?二、在每个更新过程中,我们使用了上一步的多少数据和当前步骤的多少数据?三,这个更新过程是否对标签噪声具有鲁棒性?对于生产系统,这些问题很重要,因为正如我们之前所说,健壮性和效率很重要。实证研究在实验中,我们使用在ImageNetILSVRC-2010上预训练的BVLCAlexNet作为示例网络。我们将学习率固定为0.001,L2权重衰减为0.0005,动量为0.9;并且更新集的大小也固定为具有来自同一类的样本。为了进行评估,我们使用了MS-COCO-full-v0.9和Stanford40Actions。与ImageNet相比,这两个数据集都很小,因为我们希望使用比初始预训练更小的更新来评估持续学习的性能。对于MS-COCO,我们使用了15个类别,每个类别包含500到1000个样本;每个样本只保留真实边界框,并且至少有256像素宽和高。为了进行评估,我们随机选择10个类别对CNN进行初始微调。从剩余的数据中,我们随机选择了5个以上的类作为新鲜数据(在每个更新步骤输入的新数据),并从每个类中随机选择100个样本。用于每个更新步骤的指标是分类准确度。为了获得公正的比较,我们进行了9次该实验。1.每个更新步骤的SGD迭代次数SGDminibatch的大小固定为64,但是我们改变每个更新步骤中执行的SGD迭代次数。我们将SGD迭代次数表示为与总训练数据大小(即历元数)的比率,以补偿不断增长的训练数据大小。令人惊讶的是,即使每次更新的SGD迭代次数少得多,分类精度仍然保持稳健,除了那些只使用十分之一数据的情况,这可能是因为某些类在如此小的时期中代表性不足。事实上,我们可以直接将SGD迭代次数固定为一个小常数(例如更新集大小),而不会出现明显的性能下降。2.每个更新步骤中旧数据与新数据的比值对于增量学习算法,旧数据与新数据的影响比是最重要的超参数之一。在SGD迭代中,我们根据概率对每个样本i进行采样,其中0≤λ≤1。在极端情况下,λ=0意味着之前的数据被完全忽略,而λ=1意味着新数据的影响被推迟到下一个更新步骤,因为这是它们在中结束的时候。我们看到,为了防止在较小的更新集上过度拟合,旧数据是必要的。我们观察到一个有趣的结果:λ=0.75和λ=1表现大致相同,因为新的更新集数据被认为是下一步t的一部分。3.在标签噪声存在的情况下保持鲁棒性在生产场景中,新数据的标签很少是无噪声的——由于实时性要求,人类法官往往需要做出快速但不准确的决定,而三到五分之一的比率法官之间的分歧可高达75%。因此,对标签噪声具有鲁棒性对于连续学习方案至关重要。我们在每个更新步骤执行10个epoch,小批量大小为64,并随机污染固定比例的新可用数据——用其余类别的样本替换这些数据,同时保持它们的标签不变。正如预期的那样,标签噪声会降低准确性,但我们的连续学习方案对此相对稳健,在存在10%噪声的情况下,准确性仅下降2%。作者Yanchen毕业于普林斯顿大学机器学习方向,现就职于微软雷德蒙德总部,从事大规模分布式机器学习和企业级AI研发。【本文为栏目组织《机器之心》原创文章,微信公众号《机器之心(id:almosthuman2014)》】点此查看作者更多好文
