AutoFreeze: Automatically Freezing Model Blocks to Accelerate Fine-tuning
引言
在当今的技术世界中,深度学习模型已经成为了不可或缺的一部分。它们在各种任务中展现出了极其竞争性的性能,从图像识别到自然语言处理,深度学习已经渗透到我们生活的方方面面。然而,构建这些深度学习模型对于新任务而言既需要大量的数据,也需要相当的计算资源。这种需求往往使得从头开始训练深度学习模型变得非常具有挑战性,特别是在数据稀缺的情况下。
为了解决这些问题,实践者们通常采用了转移学习(transfer learning)或微调(fine-tuning)的方法。这些方法基于一个核心理念:利用已经在大型数据集上预训练的模型,为新的任务提供一个强有力的起点。在转移学习中,预训练模型的特征直接应用于新任务,并且只有最后一层或几层被训练以专门针对该任务。而在微调的情况下,预训练模型的权重用于初始化一个新任务;在初始化之后,模型的所有层都会进行训练,直到收敛。这些方法的优点包括能够在训练数据稀缺时使用深度模型,将相关任务之间的共同特征进行转移,以及显著加快收敛速度,从而减少计算时间。
然而,尽管这些方法具有显著的优势,但我们的实验表明,即使在使用现代加速器(如GPU)的情况下,对诸如BERT这样的模型进行微调仍然需要许多小时。为此,我们提出了AutoFreeze系统,它采用了一种自适应的方法来选择训练哪些层,从而加速模型微调的过程,同时保持准确性。AutoFreeze的创新之处在于,它不仅能有效地缓存中间激活以减少微调时的前向计算时间,还能在分布式微调中改善资源利用率,显著提高效率。
2. AutoFreeze系统的动机与背景
随着深度学习在各个领域的广泛应用,使用大型预训练模型进行微调已成为常见做法。然而,这一过程并非没有挑战。尽管微调比从头开始训练模型要高效得多,但我们的实验显示,即使在使用高性能计算资源如GPU的情况下,对BERT等模型的微调仍需耗费多小时。这不仅提高了运算成本,而且延长了从模型训练到部署的时间,这在需要快速迭代和部署的场景中尤其成问题。
此外,传统的微调方法,如完全训练所有层或仅训练最后几层,虽然在某些情况下有效,但往往会遇到性能和准确性之间的权衡。例如,仅对最后一层进行训练可以显著减少计算时间,但这种静态的方法通常会导致模型准确度下降。
正是基于这些挑战和局限性,我们提出了AutoFreeze系统。AutoFreeze的动机在于,通过一种自适应方法,智能地选择需要训练的模型层,既可以加速微调过程,又不会牺牲模型的准确度。这种方法背后的理念是,不是所有的模型层在微调时都需要同等程度的调整。有些层可能已经足够适应新的任务,而其他层则可能需要更多的训练。因此,通过识别并冻结那些不需要进一步训练的层,AutoFreeze能够显著减少不必要的计算。
此外,微调大型模型对于持续部署的机器学习应用尤为重要。在真实世界的应用中,数据分布经常发生变化,这要求模型定期进行微调以适应新的数据分布,从而保持较低的错误率。因此,提高微调的效率对于生产环境中的机器学习部署至关重要。
总的来说,AutoFreeze系统的动机在于解决微调大型预训练模型时面临的计算成本高和时间长的问题,同时避免牺牲模型准确度。通过自适应地选择训练哪些层,AutoFreeze旨在为微调提供一种更高效、更灵活的方法。
3. AutoFreeze的设计和实现
AutoFreeze系统的设计,包括其如何自动决定冻结哪些层
AutoFreeze系统的设计重点在于自适应地冻结模型层以加速微调过程。以下是其主要设计要点的详细描述:
-
自适应冻结策略:
-
AutoFreeze采用的核心思路是,通过定期检查每层的进展来确定哪些层可以安全地被冻结。理论上,接近收敛的层是冻结的良好候选者。
-
使用SVCCA(Singular Vector Canonical Correlation Analysis)分数来衡量神经网络层之间的相似性,从而理解每层的收敛情况。SVCCA分数的范围是0到1,1表示完全匹配(即中间权重与模型的最终权重相匹配)。
SVCCA(Singular Vector Canonical Correlation Analysis)是一种用于理解和比较神经网络层的技术。它通过分析层的激活模式(或者说是特征表示)来评估层之间的相似性。SVCCA的计算过程通常包括以下几个步骤:
- 数据准备:
- 收集两个神经网络层的激活数据。这些数据可以是网络在训练过程中的中间层输出,或者是两个不同网络层的输出。
- 奇异值分解(SVD):
- 对每层的激活数据进行奇异值分解。这一步骤的目的是提取每层的主要特征,从而减少后续计算的复杂度。在奇异值分解后,通常只保留前几个最重要的奇异值和对应的奇异向量。
- 规范相关分析(CCA):
- 使用规范相关分析(CCA)来评估两组经过SVD处理的数据之间的相似性。CCA试图找到两组数据中各自的线性组合,使得这两个线性组合的相关性最大化。
- 计算SVCCA分数:
- 最后,通过计算这些线性组合的相关系数来得出SVCCA分数。这些分数通常在0到1之间,数值越高表示两层之间的相似性越高。
- 数据准备:
-
实验表明,模型的层按顺序收敛,早期的层(例如第0-4层)在一个epoch内就达到高SVCCA分数。这表明通过在层收敛时将其冻结,自适应冻结方案可以提供性能优势。
-
-
梯度规范测试:
- 设计了一个在线测试来确定是否应该冻结某一层。这个测试的直觉是,层的梯度值变化率可以用来确定模型权重在该层的更新速度。
- 通过累积每层模型的梯度变化(( Δ \Delta Δ)),并在固定间隔(T)进行测试。定义梯度规范变化率 ( η l \eta_l ηl) 为 η l = Δ T l − 1 − Δ T l Δ T l − 1 \eta_l = \frac{\Delta T_{l}^{-1} - \Delta T_l}{\Delta T_{l}^{-1}} ηl=ΔTl−1ΔTl−1−ΔTl
- 层按照 ( η l \eta_l ηl) 的值进行排序,以确定变化最慢的层。基于之前的观察,如果一个层前面的所有层都已经被冻结,并且它是变化最慢的层,那么就可以将其冻结。这里还有一个放宽条件,即如果该层的变化率位于最低的N分位数以下(N是一个可调参数),则可以冻结该层。
这种自适应的冻结策略,结合梯度规范测试,使得AutoFreeze能够在不牺牲模型准确度的情况下,有效地加速微调过程
这个图展示了AutoFreeze系统在BERT模型微调过程中的层冻结和缓存策略。图中描述了随着训练过程(不同的Epoch)如何逐步冻结模型的不同层,并如何利用缓存来提高效率。以下是该图的详细解释:
-
Epoch 1:在第一个Epoch,所有层都参与前向和后向传播(蓝色表示)。
-
Epoch 2:
- 冻结策略开始被应用到模型上。在这个例子中,模型在第5层之前的层被冻结(第一个BERT块上方的文本“Freeze before layer 5”)。
- 冻结的层不再进行前向或后向传播(红色表示),而未冻结的层继续进行正常的前向和后向传播。
- 此外,已经冻结的层的输出被缓存起来(绿色箭头指向缓存)。当下次处理相同的输入时,可以直接从缓存中获取这些层的输出,而无需重新计算(红色虚线箭头表示从缓存中提取数据)。
-
Epoch 3:
- 冻结策略进一步扩展,现在是在第8层之前的层被冻结(第二个BERT块上方的文本“Freeze before layer 8”)。
- 在第2个Epoch中冻结并缓存的层的输出会被用在这个Epoch的前向传播中,减少了计算需求。
-
Epoch 4:
- 冻结策略继续扩展,现在是在第11层之前的层被冻结(第三个BERT块上方的文本“Freeze before layer 11”)。
- 这意味着更多的层的输出被缓存,进一步减少了计算需求。
图中的颜色代码表示:
- 蓝色块:表示层正在进行前向和后向传播。
- 红色块:表示层不再进行前向或后向传播,即已被冻结。
- 白色块:表示层仅进行前向传播,后向传播(权重更新)不在这些层上进行。
总体而言,这个图表明了AutoFreeze系统如何通过自适应地冻结不同层和利用缓存来优化BERT模型的微调过程,从而加速训练并减少资源消耗。
现有的微调方法,如固定层数的冻结,及其局限性
现有的模型微调方法及其局限性主要包括以下几点:
-
限制更新的层数:
- 一个常用的方法是限制模型中更新的层数,类似于转移学习。例如,针对BERTBASE这样的模型,Lee等人提出的方法是训练固定数量的块(例如最后3个块),同时冻结其余块的权重。但这种方法可能会影响最终模型的准确性。例如,在MRPC数据集上,该方法可以将每个epoch的时间减少2倍,但微调模型的准确度从87%下降到76.5%。
-
静态冻结方案:
- 另一种方法是在训练期间选择固定数量的层进行更新。这种静态冻结方案在进行BERTBASE的微调时,比如只训练最后25%、50%、75%的层或仅训练最后一层,会导致0.5%到1.7%的准确度下降(针对IMDb数据集)。对于Sogou数据集,某些静态冻结方案只导致0.2%的准确度损失,但仅训练最后一层仍然会导致显著的准确度损失。类似地,在图像分类任务中,仅训练最后一层会导致大约10%的准确度降低,而训练50%的层会导致1.12%的准确度降低。
-
彩票假说(Lottery Ticket Hypothesis):
- 使用彩票假说来识别匹配的子网络,以实现特定的稀疏性。然而,找到稀疏子网络并不直接提供训练速度的提升,因为这些方法使用非结构化剪枝,即单独剪枝权重。相比之下,EarlyBERT在BERT训练的早期阶段识别彩票,与基线相比提供了训练速度的提升,但导致了准确度的下降。
这些方法表明,传统的微调方法通常需要在准确度和训练速度之间进行权衡。因此,开发能够在不牺牲准确度的情况下加速微调的新方法,如AutoFreeze,是很有必要的。
AutoFreeze的创新性
AutoFreeze系统的创新之处在于其自适应冻结模型层的方法,这种方法解决了现有微调方法的局限性,特别是在保持准确度的同时加速微调过程。以下是AutoFreeze系统的主要创新点和它如何解决现有方法问题的详细描述:
-
自适应冻结策略:
- AutoFreeze通过对模型层进行定期检查,确定哪些层接近收敛,因此是冻结的良好候选者。这种方法利用了SVCCA(Singular Vector Canonical Correlation Analysis)分数来评估神经网络层之间的相似性,以此来理解每层的收敛情况。
- 通过与最终模型权重比较,SVCCA分数可以指示哪些层已经接近收敛,并可以被冻结。这种方法能够在保持模型准确度的同时提供性能优势,因为它能够基于层的实际收敛情况来做出决策。
-
在线方法来估计层的冻结:
- 由于SVCCA分数的计算需要知道最终模型权重,这在实际中不可行。因此,AutoFreeze采用了一个在线方法来估计是否可以冻结某层,而不需要知道最终的模型权重。
- 这种方法基于各层梯度值的变化率来决定。如果某层的权重变化很慢,表明该层接近收敛,因此可以被冻结。这样的方法比静态冻结更精确,因为它基于实时数据来做出决策。
通过这些创新,AutoFreeze系统能够在不牺牲准确度的情况下,显著提高微调过程的效率。这对于大型预训练模型的微调尤为重要,因为这些模型通常需要大量的计算资源和时间来进行微调。AutoFreeze通过更智能地决定哪些层需要更新,减少了不必要的计算,从而加速了整个微调。
4. 实验评估和结果
在AutoFreeze系统的实验评估和结果部分,研究团队对AutoFreeze的性能进行了全面的测试和分析。以下是实验的主要发现和结论:
-
ROUGE F分数评估:
- 在文本摘要任务中,使用ROUGE F分数(Recall-Oriented Understudy for Gisting Evaluation)来评估候选文档和参考文档之间的相似度。结果表明,与完整微调相比,AutoFreeze的ROUGE F分数损失极小。
-
在不同数据集上的性能:
- 在AG News和Sogou News数据集上的实验表明,AutoFreeze在保持与完整微调相似的准确度的同时,实现了显著的训练时间缩减。
-
视觉模型的应用:
- AutoFreeze也被应用于视觉任务。在使用CINIC-10预训练的ResNet-18模型上,对CIFAR-10数据集进行微调时,AutoFreeze在保持类似准确度的同时,实现了2.15倍的速度提升。
-
不同冻结策略的比较:
- 在IMDb数据集上,使用不同的百分位阈值(如25th、50th、75th百分位)进行层冻结策略比较,发现更激进的冻结策略会导致更大的准确度损失。例如,75th百分位的策略导致了0.39%的准确度损失,而25th或50th百分位的策略则没有导致准确度损失。
-
不同评估间隔的比较:
- 通过改变每个epoch的评估间隔次数(从每个epoch 1次到10次),对冻结策略进行了比较。结果表明,评估频率过低会限制获得的速度提升,而过高的评估频率会导致准确度下降。
-
在不同硬件上的性能:
- 在最新的NVIDIA A100 GPU上测试AutoFreeze,结果显示AutoFreeze在保持类似准确度的同时,实现了1.81倍的速度提升,证明了AutoFreeze在不同硬件代上都能保持其优势。进一步,使用更大的每GPU批量大小在AG News数据集上对BERTLARGE进行微调,AutoFreeze与完整微调相比实现了1.54倍的速度提升。
这些实验结果表明,AutoFreeze在不同类型的任务和不同的硬件平台上均能有效地加速微调过程,同时保持或只轻微降低模型的准确度。
5. 总结
结论:
- 微调预训练模型已成为开发新任务机器学习模型的一种流行且准确的方法。
- 然而,在微调过程中存在一些性能挑战。为了解决这些挑战,本文提出了AutoFreeze,这是一种在微调期间自适应地冻结接近收敛部分的模型的方案。
- 使用AutoFreeze进行NLP任务的微调可以在单GPU上实现高达2.55倍的速度提升,在64GPU集群上可达4.38倍,同时不影响准确度。
未来工作:
- 虽然本文主要关注BERT模型,由于其在机器学习领域的普及和重要性,但作者们计划研究类似的方法是否也能在如图像分类或语音识别等其他领域中帮助提高性能。
- 他们还提供了AutoFreeze的实现代码,可在GitHub上找到。
总的来说,AutoFreeze系统成功地解决了微调大型预训练模型时的效率问题,提供了一种既快速又准确的微调方法。