w~深度学习~合集3
我自己的原文哦~ https://blog.51cto.com/whaosoft/12815150
#Investigate-Consolidate-Exploit,ICE
「以史为鉴,可以知兴替。」 人类的进步史,可以看作是一个不断吸取过去经验、不断推进能力边界的自我演化过程。在这个过程中,我们吸取过去失败的教训以纠正错误,借鉴成功的经验以提升效率和效果。这种自我进化的过程在我们的生活中无所不在:从如何总结经验以更好地解决工作中的问题,到如何利用规律更精确地预测天气,我们都在不断地从过去的经验中学习和进化。向完全自主性更进一步,清华、港大全新跨任务自我进化策略让智能体学会「以经验为鉴」
成功从过去的经验中提取知识并将其应用于未来的挑战,这是人类进化之路上重要的里程碑。那么在人工智能时代,AI 智能体是否也可以做到同样的事情呢?
近年来,GPT 和 LLaMA 等语言模型展示了他们在解决复杂任务时的惊人能力。然而,他们尽管可以利用工具解决具体任务,但在本质上缺乏对过去成功和失败经历的洞见与汲取。这就像一个只会完成特定任务的机器人,虽然在完成当下任务上表现出色,但面对新的挑战时,却无法调用过去的经验来提供帮助。
针对这一难题,近期来自清华大学、香港大学、人民大学以及面壁智能的联合团队提出了一种全新的智能体自我演化策略:探索 - 固化 - 利用(Investigate-Consolidate-Exploit,ICE)。它旨在通过跨任务的自我进化来提升 AI 智能体的适应性和灵活性。其不仅能提升智能体处理新任务时的效率和效果,还能显著降低对智能体基座模型能力的需求。
这个策略的出现,无疑为智能体的自我进化开启了全新的篇章,也意味着我们离实现智能体的完全自主性又迈进了一步。
- 论文标题:Investigate-Consolidate-Exploit: A General Strategy for Inter-Task Agent Self-Evolution
- 论文链接:https://arxiv.org/abs/2401.13996
智能体任务间经验迁移以实现自我进化概览图
智能体自我进化的两个方面:规划与执行
当下大部分复杂智能体都可以分成任务规划(Planning)与任务执行(Execution)两大方面。在任务规划上,智能体通过推理将用户需求细化并制定完成目标的详细策略;而在任务执行上,智能体通过工具调用实现与环境的交互,从而完成相应子目标。
为了更好地促进以往经验的重复利用,作者首先将这两方面的进化策略解耦。他们以 XAgent 智能体架构中的树状任务规划结构以及 ReACT 链式工具执行为例,分别介绍了 ICE 策略的具体实现。
智能体任务规划的 ICE 自我演化策略
对于任务规划,自我进化依照 ICE 被分为以下三个阶段:
- 在探索阶段,智能体记录下整个树状任务规划结构,并同时动态检测各个子目标的执行状态;
- 在固化阶段,智能体首先剔除所有失败的目标结点,之后对于每个成功完成的目标,智能体将以该目标为子树的所有叶子结点依次排开形成一条规划链(Workflow);
- 在利用阶段,这些规划链将被作为新任务目标分解细化的参考依据,以利用过往的这些成功经验。
智能体任务执行的 ICE 自我演化策略
任务执行的自我演化策略依然分为 ICE 三个阶段,其中:
- 在探索阶段,智能体动态记录每个目标执行的工具调用链,并对工具调用中出现的可能问题进行简单的检测归类;
- 在固化阶段,工具调用链将被转化为类似自动机的流水线(Pipeline)结构,工具调用顺序与调用之间的转移关系将被固定,同时还会去掉重复调用,增加分支逻辑等等让自动机自动化执行流程更加鲁棒;
- 在利用阶段,对于相似的目标,智能体将直接自动化执行流水线,从而提升任务完成效率。
XAgent 框架下的自我进化实验
作者在 XAgent 框架中对提出的 ICE 自我演化策略进行了测试,并总结了以下四点发现:
- ICE 策略能够显著降低模型的调用次数,从而提升效率,减少开销。
- 存储的经验在 ICE 策略下有着较高的复用率,这证明了 ICE 的有效性。
- ICE 策略能够提升子任务完成率同时减少规划返修的次数。
- 通过以往经验的加持,任务执行对模型能力的要求显著下降。具体来看,使用 GPT-3.5 搭配上之前的任务规划与执行经验,效果可以直接媲美 GPT-4。
在探索 - 固化进行经验存储后,测试集任务在不同智能体 ICE 策略下的表现
同时,作者还进行了额外的消融实验:在存储经验逐渐增加的情况下,智能体的表现是否越来越好?答案是肯定的。从零经验,半经验,到满经验,基座模型的调用次数逐渐减少,而子任务完成度逐渐提升,同时复用率也有升高。这表明更多的过往经验能够更好地促进智能体执行,实现规模效应。
在不同经验存储量下,测试集任务表现的消融实验结果统计
结语
畅想一下,在人人都能够部署智能体的世界中,成功经验的数量会随着智能体个体任务执行不断累积,而用户也可以将这些经验在云端中、社区里进行分享。这些经验将促使智能体不断汲取能力,自我进化,逐渐达到完全自主。我们向这样的时代又迈进了一步。
#SimKD
又搬来一个简单高效的知识蒸馏技术哦~~直接复用教师分类器还能显著减小性能差距的~
在分类器的上一层通过特征对齐来训练学生模型,并直接复用教师分类器到学生模型中,再使用L2损失进行特征对齐。来自浙江大学的复用教师模型的方法哦~~ 浙大好厉害~~
论文名称: Knowledge Distillation with the Reused Teacher Classifier
论文地址:https://arxiv.org/pdf/2203.14001.pdf
给定一个参数量较大的教师模型,知识蒸馏 (KD) 的目标是帮助另一个参数量较少的学生模型获得与较大的教师模型相似的泛化能力。实现这一目标的一种直接方法是,给定相同的输入,尽量减少它们输出预测结果的差距。原始 KD 策略的一个不足之处是,教师模型和学生模型性能的差距依然很大。
之前有一些相关的知识蒸馏的方法,如[1][2][3][4][5][6]。这些方法利用了一些中间层特征的信息,同时也获益于精心设计的知识蒸馏的特征 (比如蒸馏注意力[7],蒸馏相关性[8][9],蒸馏教师模型和学生模型的互信息[10]等)。
这些知识蒸馏策略的确能够带来某些性能的提升,但是它们要么基于不那么鲁棒的超参,要么依赖于精心设计的蒸馏特征。
本文作者提出了一个简单的知识蒸馏技术,可以显著弥合教师和学生模型之间的性能差距,称为 SimKD,如下图1所示。作者认为,教师模型强大的预测能力不仅归功于更强的特征提取能力,最后的分类器 (Classifier) 也同样重要。基于这一点,作者在分类器的上一层通过特征对齐 (Feature Alignment) 来训练学生模型,并直接复用 (Reuse) 教师分类器到学生模型中。
图1:SimKD 简介
原始 KD 方法
深度神经网络模型可以看成是一个特征提取器 + 最后的分类层。特征提取器通常是由很多个非线性层组成,分类层一般是由一个 Fully Connected Layer 加上一个 softmax 激活函数构成。它们的参数通过反向传播算法更新。
图2:原始 KD 方法
Simple KD 方法
Simple KD 方法是基于特征蒸馏方法,特征蒸馏方法如下图3所示,特征蒸馏主要是收集和传输 teacher 和 student 模型的额外梯度信息,以更好地训练学生的特征 Encoder。然而,特征蒸馏方法很大程度上依赖于特征类型的选择,比如是蒸馏注意力特征还是隐藏层特征。同时,由于涉及到的特征类型较多,特征蒸馏还对超参数的选择比较敏感。结合以上两个缺点,特征蒸馏方法比较耗时,同时我们很难直接做出判断哪种模型适合什么类型的特征蒸馏。
图3:特征蒸馏技术
SimKD 是一种简单的知识蒸馏技术,如下图4所示,它一个关键组成部分是 "分类器复用" 操作,即我们直接借用预先训练好的教师分类器进行学生推理,而不是训练一个新的分类器。这样就不需要用标签信息来计算交叉熵损失,使得特征对齐损失成为产生梯度的唯一来源。
作者认为,精心训练好的教师模型中包含的判别能力是非常重要的,但在很多 KD 方法中被很大程度上忽略了。作者是这么理解的:当一个模型被要求处理几个具有不同数据分布的任务,一个基本的做法是冻结或共享一些浅层作为跨不同任务的特征提取器,同时微调最后一层分类器以学习特定于任务的信息[11][12]。在这种单模型多任务的设置中,现有的研究一般认为:
- task-invariant 的信息可以在不同模型之间共享,而 task-specific 的信息则需要独立识别,通常由最终的分类器进行识别。
推广到 KD 领域,不同能力的教师和学生模型在相同的数据集上进行训练,作者认为:
- capability-invariant 的信息可以在教师和学生模型之间共享,而 capability-specific 的信息则学生模型很难独立地学好,通常这些信息在网络的深层,尤其是最后的分类器。
图4:Simple KD 方法
通过这种简单的技术,KD 中的性能下降将得到极大的缓解。而且,来自预训练的教师模型的特征复用允许合并更多的层,不限于最终的分类器。通常情况下,重用的层数越多,学生的准确率越高,但是会增加额外的推理负担。
与其他 KD 方法的精度对比
数据集:CIFAR100,ImageNet。优化器:SGD 0.9 Momentum,CIFAR100 和 ImageNet 分别训练 240 和 120 Epochs。
对比的其他 KD 方法:FitNet,AT,SP, VID,CRD,SRRL,SemCKD
SimKD 的性能始终优于所有竞争对手,在某些情况下提高相当显著。例如,对于 "ResNet8x4 & ResNet-32x4" 的组合,SimKD 在 ImageNet 上的准确率提高了 3.66%。作者还发现,在 "ResNet-8x4 & WRN-40-2" 和 "ShuffleNetV2 & ResNet110x2" 组合的情况下,用 SimKD 训练的学生模型比教师模型的精度更高,这有点令人困惑,因为即使是特征对齐损失训练到了零,也只能保证它们的准确性完全相同。自蒸馏 (Self-distillation) 的一个可能解释是,式3损失函数可以帮助特征重建,或许可以帮助学生模型变得更稳健,从而获得更好的结果。
分类器复用操作分析
"分类器重用" 操作是本文取得成功的关键。为了更好地理解它的作用,作者用两种可选策略进行了几个实验来处理学生模型的 Encoder 和分类器:
(1) 联合训练:不再复用教师模型的分类器,而联合训练学生模型的 Encoder 和分类器
图8:联合训练实验结果
(2) 顺序训练:先使用3式的损失函数训练好学生的特征提取器,再冻结其参数,即冻结提取的特征,用常规训练过程训练随机初始化的学生分类器
以上做法与自监督训练中的 Linear Probing 做法一致。实验结果如下图9所示。可以发现,除了 "WRN-40-1 & WRN-40-2" 和 "ResNet-110/116 & ResNet-110x2",其他学生模型的测试精度出现了急剧下降。而几次调优初始学习速率只对性能产生了轻微的影响。图9的结果表明,即使提取的特征已经对齐,训练一个令人满意的学生分类器仍然是一个挑战。相比之下,直接重用预先训练好的教师分类器显得简单,而且性价比高。
图9:顺序训练实验结果
(3) 复用更多的层:以 ResNet 架构为例,除了复用最后的教师模型分类器之外,还复用最后一个 Building Block (SimKD+),和倒数第二个 Building Block (SimKD++)
实验结果如下图10所示。SimKD+ 和 SimKD++ 进一步提升了性能,但是复杂性也增加了。这些结果支持了 SimKD 的假设,即重用深层教师层有利于学生模型性能的提升,可能是因为其中包含了大多数特定能力的信息。另一种解释是,重用更深层的教师层将使浅层教师层的近似更容易实现,从而减少性能下降。在实践中,只重用最终的教师分类器可以很好地平衡性能和参数复杂性。
图10:复用更多的层实验结果
投影层分析
图11:投影层消融实验结果
总结
#PEMN~
为了处理更复杂的任务,近年来神经网络的规模也在不断变大,如何高效的储存和传输神经网络变得十分重要。另一方面,随着彩票假说(Lottery Ticket Hypothesis (LTH))的提出,随机稀疏神经网络最近展现出很强的潜力,如何利用这种潜力来提高网络的存储和传输效率也很值得探索。
来自美国东北大学和罗切斯特理工的研究者提出参数集约型掩码网络(Parameter-Efficient Masking Networks (PEMN))。作者首先探索了有限数量随机数生成的随机网络的表征能力。实验表明,即使网络由有限数量的随机数生成,通过选择不同的子网络结构,其依然具有很好的表征能力。
通过这种探索性实验,作者自然地提出使用一组有限数量随机数作为 prototype,结合一组 mask 来表达一个神经网络。因为有限数量的随机数和二值的 mask 占用很少的储存空间,作者以此来提出一种新的思路来进行网络压缩。
- 论文地址: https://arxiv.org/abs/2210.06699
- 论文代码: https://github.com/yueb17/PEMN
MIT 研究人员提出彩票假说 Lottery Ticket Hypothesis (ICLR’19):在一个随机初始化网络中,存在一个彩票子网络(winning ticket)在被单独训练的情况下达到很好的效果。彩票假说探索了随机稀疏网络的可训练性。Uber 研究人员提出 Supermask (NeurIPS’19):在一个随机初始化网络中,存在一个子网络,可以直接用来做推断而不需要训练。Supermask 探索了随机稀疏网络的可用性。华盛顿大学研究人员提出 Edge-Popup (CVPR’20):通过反向传播学习子网络的 mask,大幅提升了随机稀疏网络的可用性。
以上相关研究从不同角度探索了随机稀疏网络的潜力,如可训练性和可用性,其中可用性也可以理解为表征能力。在此工作中,作者感兴趣的是由随机数生成的神经网络在不训练权重的情况下有多强的表征能力。随着对该问题的探索,作者提出了 Parameter-Efficient Masking Networks (PEMN)。自然地,作者运用 PEMN 为网络压缩提供了一种新的思路,并作为一个例子对 PEMN 的潜在应用场景进行探索。
给定一个随机网络,作者选择 Edge-Popup 算法在其中选择子网络来探索其表征能力。不同的是,相对于对整个网络进行随机初始化,作者提出了三种参数集约型的网络生成策略来使用一个 prototype 构建随机网络。
- One-layer: 选择网络中重复结构的权重作为 prototype 来填充其他的与之结构相同的网络层。
- Max-layer padding (MP): 选择参数量最多的网络层作为 prototype 并且截断相应的参数量来填充其他网络层。
- Random vector padding (RP): 选择一定长度的随机向量作为 prototype 并对其进行复制来填充整个网络。
三种不同的随机网络生成策略把网络中不重复参数值(unique values)的数量逐步变小,我们基于不同策略得到的随机网络来选择子网络,从而探索了有限数量随机数生成的随机网络的表征潜力。
上图展示了使用 ConvMixer 和 ViT 网络 CIFAR10 图像分类的实验结果。Y 轴为准确率,X 轴为使用不同策略得到的随机网络。随之 X 轴的变大,随机网络中不重复随机数数量逐渐变小 (RP 后的数字表示相比较于 MP,RP 中不重复随机数数量的比例)。
根据实验结果,我们观察到即使随机网络只有非常有限的不重复随机数(比如 PR_1e-3),依然可以很好的维持选择出来的子网络的表征能力。至此,作者通过不同的随机网络生成策略,探索了有限数量随机数构成的神经网络的表征能力并观察到即使不重复随机数非常有限,其对应的随机网络依然可以很好地对数据进行表征。
同时作者基于这些随机网络生成策略,结合所得到的子网络掩码,提出了 Parameter-Efficient Masking Networks(PEMN)这种新的神经网络类型。
一种新的网络压缩思路
本文选择了神经网路压缩为例来拓展 PEMN 的潜在应用。具体来说,文中所提出的不同随机网络生成策略可以高效的使用 prototype 来代表完整的随机网络,尤其是最细粒度的 random vector padding (RP)策略。
作者使用 RP 策略中的随机向量 prototype 和与之对应的一组子网络掩码来表示一个随机网络。在其中 prototype 需要保存浮点数格式,而掩码只需要保存成二值格式。因为 RP 中的 prototype 长度可以很短(因为有限数量的不重复随机数仍有很强的表征能力),所以表示一个神经网络的开销会变得很小,即储存一个长度有限的浮点数格式的随机向量和一组二值格式的掩码。相比较于传统的稀疏网络储存子网络的浮点值,本文提出了一种新的网络压缩思路用来高效的储存和传输神经网络。
在上图中,作者使用 PEMN 对网络进行压缩并与传统的网络剪枝方法进行对比。实验使用 ResNet 网络在 CIFAR 数据集做图像分类任务。我们观察到,新的压缩方案表现普遍优于传统的网络剪枝,尤其是在很高的压缩率下,PEMN 仍然可以维持较好的准确率。
结论
本文受近来随机网络展现出来的潜力所启发,提出不同种参数集约策略来构建随机神经网络,进而探索了在只有有限的不重复随机数的情况下所生成的随机神经网络的表征潜力,并提出参数集约型掩码网络 Parameter-Efficient Masking Networks (PEMN)。作者将 PEMN 应用到网络压缩的场景中探索了其在实际应用方面的潜力并且为网络压缩提供了一种新的思路。作者提供了广泛的实验,表明即使随机网络中只有非常有限的不重复随机数,通过子网络的选择,其依然有较好的表征能力。此外,相比较于传统剪枝算法,实验表明新提出的方法可以取得更好的网络压缩效果,验证了 PEMN 在该场景下的应用潜力。
#RetinaNet-Obj
真是东西多多每天都有新发现 论文地址:https://arxiv.org/abs/1908.09075
样本不平衡问题感觉近期研究的论文相对较多,如:2019 AAAI GHM,2019 CVPR AP-loss, 还有2019 DR loss, 2019 IoU-balanced loss,two-stage中也有Libra RCNN,都是关注样本不平衡的问题。该论文给出了一种可行的方案,即采用学习的方法来处理样本不平衡问题。
之前所有处理样本不平衡问题的论文都是采用reweight或者采样的方法,并且都是基于手工调优的,例如RetinaNet需要设置FL的参数,GHM则要设置bins的数目和momentum的大小。该论文则提出了一种基于学习的方法来处理样本不平衡问题,不仅性能更好,而且能自适应不同的数据集。
作者首先引入了另一种不同于Focal Loss处理样本不平衡问题的方法,即借鉴YOLO的方法,在head部分同时引入Objectness subnet的分支,在推理的时候采用如下公式:
通过公式推导,该方法最后和FL loss的效果基本是等价的,在实验结果中基本也是相同的。
Residual Objectness
分析RetinaNet-Obj中Obj分支同样存在样本不平衡的问题,自然地想到继续采用另一个obj来处理第一个Obj的样本不平衡问题。在这里,作者引入了res-obj结构:
通过residual来修正原有的obj分数,公式如下:
注意此处其实只针对大于一定分数的obj来做(分数为正例中分数的最小值),这样就能够提高正例的分数,相当于给正例加了权重,从而解决obj中正负样本不平衡问题。具体算法如下:
实验结果
从最终结果来看,该方法迁移到不同方法上均有性能提升,在RetinaNet中有1个点的提升,和GHM相当;在YOLOV3和Faster RCNN中也有1个点的提升。如下:
#Multi-task Learning
多任务学习(multi task learning)简称为MTL。简单来说有多个目标函数loss同时学习的就算多任务学习。多任务既可以每个任务都搞一个模型来学,也可以一个模型多任务学习来一次全搞定的。
背景:只专注于单个模型可能会忽略一些相关任务中可能提升目标任务的潜在信息,通过进行一定程度的共享不同任务之间的参数,可能会使原任务泛化更好。广义的讲,只要loss有多个就算MTL,一些别名(joint learning,learning to learn,learning with auxiliary task)
目标:通过权衡主任务与辅助的相关任务中的训练信息来提升模型的泛化性与表现。从机器学习的视角来看,MTL可以看作一种inductive transfer(先验知识),通过提供inductive bias(某种对模型的先验假设)来提升模型效果。比如,使用L1正则,我们对模型的假设模型偏向于sparse solution(参数要少)。在MTL中,这种先验是通过auxiliary task来提供,更灵活,告诉模型偏向一些其他任务,最终导致模型会泛化得更好。
一 MTL Methods for DNN
- hard parameter sharing (此方法已经有26岁了<1993>)
在所有任务中共享一些参数(一般底层),在特定任务层(顶层)使用自己独有参数。这种情况,共享参数得过拟合几率比较低(相对非共享参数),过拟合的几率是O(#tasks). [1]
- soft parameter sharing
每个任务有自己的参数,最后通过对不同任务的参数之间的差异加约束,表达相似性。比如可以使用L2, trace norm等。
优点及使用场景
- implicit data augmentation: 每个任务多少都有样本噪声,不同的任务可能噪声不同,最终多个任务学习会抵消一部分噪声(类似bagging的思想,不同任务噪声存在于各个方向,最终平均就会趋于零)
- 一些噪声很大的任务,或者训练样本不足,维度高,模型可能无法有效学习,甚至无法无法学习到相关特征
- 某些特征可能在主任务不好学习(比如只存在很高阶的相关性,或被其他因素抑制),但在辅助任务上好学习。可以通过辅助任务来学习这些特征,方法比如hints(预测重要特征)[2]
- 通过学习足够大的假设空间,在未来某些新任务中可以有较好的表现(解决冷启动),前提是这些任务都是同源的。
- 作为一种正则方式,约束模型。所谓的inductive bias。缓解过拟合,降低模型的Rademacher complexity(拟合噪声的能力,用于衡量模型的能力)
传统方法中的MTL (linear model, kernel methods, Bayesian algo),其主要关注两点:
- 通过norm regularization使模型在任务之间具有稀疏性
- 对多任务之间关系进行建模
1.1 Block-sparse regularization (mixed l1/lq norm)
目标:强制模型只考虑部分特征,前提为不同任务之间必须相关。
假设K个任务有相同的特征,和相同数量的模型参数。形成一个矩阵A(DxK),D为参数维度,K为任务数,目标为这些任务只使用一些特征,也就是A的某些行也0。(最简单的想法就是使其变为一个low rank的矩阵;或者使用L1正则,因为L1可以约束某些特征到0,如果我们想使某些行为0,则只要先对行聚合操作,再对聚合后的结果使用L1即可,具体可以参考文章 [3]。通常,使用lq norm 先对行(每个特征)进行约束,之后使用L1 norm再约束,就是mixer l1/lq norm。
发展:
- group lasso [4] : l1/l2 norm,通过trace norm 解决l1/l2 norm非凸;之后有人对此提出了upper bound for using group lasso in MTL [5]
- 当多个任务公共特征不多时,l1/lq norm可能没有elment-wise norm效果好。有人提出了结合这两种方法,分解参数矩阵为A = S + B,对S使用lassso,对B使用l1/l_infinite。[6]
- distributed version of group-sparse reguarization [7]
2.1 regularization way for learning task relationship
当任务之间相关性较弱,使用上述方法可能导致negative transfer(也就是负向效果)。在此情景下,我们希望增加的先验知识是,某些任务之间是相关的,但是某些任务之间是相关性较差。可以通过引入任务clustering来约束模型。可以通过penalize 不同任务的parameter vectors 和他们的方差。限制不同模型趋向于不同的各自 cluster mean vector。
类似的,比如SVM中引入bayesian方法,事先指定一些cluster,目标在最大化margin的同时使不同任务趋向于各自的cluster中心;[8]
指定了cluster,可以通过聚类方法(类内,类间,自己的复杂度)对模型进行约束
有些场景下,任务可能不会出现在同一个cluster,但存在潜在的相似结构,比如group-lasso在树结构和图结构的任务。
2.2 other methods for learning task relationship
- KNN methods for task clustering. [9]
- semi-supervised learning for learning common structures of some related tasks. [10]
- 多任务BNN,通过先验控制多任务的相似,模型复杂度大,可以使用sparse approximation贪心选择样本 [11];高斯过程中通过不同任务之间使用相同的covariance matrix和相同的先验(进而也降低复杂度)[12]
- 对每个task-specific layers 使用高斯先验,可以使用一个cluster的混合分布(事先定好)来促使不同任务的相似 [13]
- 进而,通过一个dirichlet process采样分布,使模型任务之间的相似性和cluster的数目。相同cluster的任务使用同一个模型 [14]
- hierarchical Bayesian model,学习一个潜在的任务结构 [15]
- MTL extension of the regularized Perceptron,encodes task relatedness in a matrix. 之后可以通过不同正则对其限制(比如rank)[16]
- 不同tasks属于不同的独立cluster,每个cluster存在于一个低维空间,每个cluster的任务共用同一个模型。通过交替迭代学习不同cluster的分配权重和每个cluster的模型权重。假定任务之间的绝对独立可能不太好 [17]
- 假设两个不同cluster的两个任务之间存在重叠,存在一部分的latent basis tasks。令每个任务的模型参数是latent basis tasks的线性组合,对latent basis tasks限制为稀疏的。重叠部分控制共享程度 [18]
- 学习一小撮shared hypotheses,之后map each task to a single hypothesis [19]
二 DNN中的MTL
Deep Relation Network [20]
计算机视觉中,一般共享卷积层,之后是任务特定的DNN层。通过对任务层设定先验,使模型学习任务之间的关系。
Fully-Adaptive Feature Sharing [21]
从一个简单结构开始,贪心地动态地加宽模型,使相似的模型聚簇。贪心方法可能无法学到全局最优结构;每个分支一个任务无法学习任务之间的复杂关系。
Cross-stitch Networks [22]
soft parameter sharing,通过线性组合学习前一层的输出,允许模型决定不同任务之间的分享程度
Low supervision [23]
寻找更好的多任务结构,复杂任务的底层应该被低级任务目标来监督(比如NLP前几层学习一个NER或POS辅助任务)
A Joint Many-task Model [24]
对多个NLP任务预先设定层级结构,之后joint learning
Weighting losses with uncertainty [25]
不考虑学习共享的结构,考虑每个任务的不确定性。通过优化loss(Gaussian likelihood with task-dependant uncertainty),调节不同tasks之间的相似性。
Tensor factorisation for MTL [26]
对每层参数进行分解,为shared和task-specific
Sluice Networks [27]
大杂烩(hard parameter sharing + cross stitch networks + block-sparse regularization + task hierarchy(NLP) ),使得模型自己学习哪些层,哪些子空间来共享,在哪层模型找到了inputs的最优表达。
当不同的任务相关性大,近似服从相同的分布,共享参数是有益的,如果相关性不大或者不相关的任务呢?
早期工作是预先为每对任务指定哪些层来分享,这种方法扩展性差且模型结构严重有偏;当任务相关性下降或需要不同level推理时,hard parameter sharing就不行了。
目前比较火的是learning what to share(outperform hard parameter sharing);还有就是对任务层级进行学习在任务具有多粒度因素时也是有用的。
三 Auxiliary task
我们只关注主任务目标,但是希望从其他有效的辅助任务中获利!
目前选择一些辅助任务方法
- Related task:常规思路(自动驾驶+路标识别;query classification+web search;坐标预测+物体识别;duration+frequency)
- Adversarial:在domain adaption,相关的任务可能无法获取,可以使用对抗任务作为negative task(最大化training error),比如辅助任务为预测输入的domain,则导致主任务模型学习的表征不能区分不同的domain。
- Hints:前面提到的某些特征在某些任务不好学,选择辅助任务为predicting features(NLP中主任务为情感预测,辅助任务为inputs是否包含积极或消极的词;主任务name error detection,辅助任务为句子中是否有name)
- Focusing attention:使模型注意到那些在任务中可能不容易被注意到的部分(自动驾驶+路标检测;面部识别+头部位置识别)
- Quantization smoothing:某些任务中,训练目标是高度离散化的(人为打分,情感打分,疾病风险等级),使用离散程度较小的辅助任务可能是有帮助的,因为目标更平滑使任务更好学
- prediting inputs:有些场景下,可能不会选择某些特征,由于其不利于预估目标,但是这可能这些特征对模型的训练有一定的帮助,这种场景下,这些特征可以作为outputs而不是inputs
- Using the future to predict the presnet:有些特征只有在决策之后才会有,比如自动驾驶时,当车路过一些物体才得到这些物体的数据;医疗中只有使用过药物才知此药物的效果。这些特征不能作为inputs,但是可以用作辅助任务,来给主任务在训练过程中透露信息。
- representation learning:auxiliary task大多都是潜在地学习一些特征表达,且一定程度上都利于主任务。也可以显示地对此学习(使用一个学习迁移特征表达的辅助任务,比如AE)
那么,哪些auxiliary task是有用的呢?
auxiliary task背后的假设是辅助任务应该在一定程度上与主任务相关,利于主任务的学习。
那么如何衡量两个任务是否相关呢?
一些理论研究:
- 使用相同的特征做决策
- 相关的任务共享同一个最优假设空间(having the same inductive bias)
- F-related: 如果两个任务的数据是通过一个固定分布经过一些变换得到 [28]
- 分类边界(parameter vectors)接近
任务是否相似不是非0即1的,越相似的任务,收益越大。learning what to share允许我们暂时忽略理论上的不足,即使相关性不好的任务之间也能有所收益。但是发展任务之间的相似性对我们在选择辅助任务上也是有绝对的帮助的。
四 MTL learning Tips
- 紧凑分布均匀的label的辅助任务更好(from POS in NLP)[29]
- 主任务训练曲线更快平稳,辅助任务平稳慢(还未平稳)[30]
- 不同任务尺度不一样,任务最优学习率可能不同
- 某个任务的输出可以作为某些任务的输入
- 某些任务的迭代周期不同,可能需要异步训练(后验信息;特征选择,特征衍生任务等)
- 整体loss可能被某些任务主导,需要整个周期对参数进行动态调整(通过引入一些不确定性,每个任务学习一个噪声参数,统一所有损失 [31]
- 某些估计作为特征(交替训练)
五 总结
20多岁的hard parameter shareing还是很流行,目前热点learning what to learn也很有价值,我们w对tasks的理解(similarity, relationship, hierrarchy, benefit for MTL) 还是很有限的,希望以后有重大发展吧。
可研究方向
- learning what to share
- measurement for similarity of tasks
- using task uncertainty
- 引入异步任务(特征学习任务),采用交替迭代训练
- 学习抽象子任务;学习任务结构(类似强化里面的hierarchy learning)
- 参数学习辅助任务
#分布式深度强化学习DDRL
本文在回顾分布式深度强化学习 DDRL 基本框架的基础上,重点介绍了 IMPALA 框架系列方法。
AlphaGo 是一个在人机博弈中赢得众多职业围棋手的 agent 机器人。随着 AlphaGo 的突破,深度强化学习(Deep Reinforcement Learning,DRL)成为一种公认的解决连续决策问题的有效技术。人们开发了大量算法来解决介于 DRL 与现实世界应用之间的挑战性问题,如探索与开发困境、数据低效、多 agent 合作与竞争等。在所有这些挑战中,由于 DRL 的试错学习机制需要大量交互数据,数据低效(data inefficiency)是最受诟病的问题。为了应对这一问题,受到分布式机器学习技术的启发,分布式深度强化学习 (distributed deep reinforcement learning,DDRL) 已提出并成功应用于计算机视觉和自然语言处理领域。有观点认为,分布式强化学习是深度强化学习走向大规模应用、解决复杂决策空间和长期规划问题的必经之路。
一般来说,DRL agent 的训练包括两个主要部分:通过策略网络参数驱动环境交互以生成数据,以及通过消耗数据更新策略网络参数。这种结构化模式使得对 DRL 进行分布式化处理变得可行,并陆续研发出了大量 Distributed DRL (DDRL) 算法。此外,为了使 DDRL 算法能够利用多台机器,还需要解决几个工程问题,如机器通信和分布式存储,以及在保证算法优化收敛性的同时,尽可能地提升其中各个环节的效率。分布式强化学习是一个综合的研究子领域,需要深度强化学习算法以及分布式系统设计的互相感知和协同。考虑到 DDRL 的巨大进步,我们有必要梳理 DDRL 技术的发展历程、挑战和机遇,从而为今后的研究提供线索。
近年来,分布式强化学习快速发展,关于分布式强化学习的架构、算法、关键技术等的研究论文众多。我们将分为两个 part 分别介绍 DDRL 的前世(经典方法)和今生(最新进展)。本文为 part 1,在回顾 DDRL 基本框架的基础上,重点介绍 IMPALA 框架系列方法,主要思路是:使用异步架构,在提升样本吞吐量的同时,引入一些 off-policy 修正。
1、基本框架介绍
目前已开发出大量 DDRL 算法或框架,其中具有代表性的有 GORILA、A3C、APEX、IMPALA、Distributed PPO、R2D2 、 Seed RL 等,在此基础上,我们梳理总结得出 DDRL 基本框架,如图 1 所示 [1]。
图 1. DDRL 的基本框架
在 DDRL 研究中,通常使用框架代替算法或方法的表述,是因为这些框架并不针对特定的强化学习算法,它们更像是各种强化学习方法的分布式框架。一般来说,基本的 DDRL 主要有三个部分,它们构成了 single player single agent DDRL 方法:
- 行动者(Actors):通过与环境互动产生数据(轨迹或梯度)。
- 学习者(Learners):消耗数据(轨迹或梯度),执行神经网络参数更新。
- 协调者(Coordinator):协调数据(参数或轨迹),控制 learner 和 actor 之间的通信。
具体来说,协调者(Coordinator)用于和环境交互产生数据的协调,其中包含环境本身(Env)和产生动作的行动者(Actors),以及使用这些数据进行训练的学习者(Learners),他们各自需要不同数量和类型的计算资源支持。而根据算法和环境类型的不同,又会有一些延伸的辅助模块,例如大部分 off-policy 算法都会需要数据队列(Replay Buffer)来存储训练数据,对于 model-based RL 相关的算法又会有学习环境 dynamics 的相关训练模块,而对于需要大量自我博弈(self-play)的算法,还需要一个中心化的 Coordinator 去控制协调各个组件(例如动态指定自己博弈的双方)。
协调者可以控制 learner 和 actor 之间的通信。例如,当协调者用于同步参数更新和拉取(由 actor 进行)时,DDRL 算法就是同步的。当参数更新和拉取(actor)没有严格协调时,DDRL 算法就是异步的。因此,可以根据协调者类型对 DDRL 算法进行基本分类。
- 同步:全局策略参数的更新是同步的,策略参数的调用(由 actor 调用)也是同步的,即不同的 actor 共享相同的最新全局策略。
- 异步:全局策略参数的更新是异步的,或者说策略更新(由 learner 进行)和拉动(由 actor 进行)是异步的,即 actor 和 learner 通常拥有不同的策略参数。
利用图 1 中给出的基本框架,可以设计出 single player single agent 的 DDRL 算法(文献 [1] 中定义 player,即为分布式架构中的 agent,本文中以 agent 指代)。但是,当面对多个 agent 时,基本框架无法训练出可用的 RL agent。基于目前支持大型系统级人工智能的 DDRL 算法,如 AlphaStar、OpenAI Five 和 JueWU,要构建多 agent DDRL,有两个关键要素必不可少,即 agent 合作和进化,如图 2 所示。
图 2. single player(agent) single agent DDRL 到 multiple players(agents) multipleagents DDRL
基于多 agent 强化学习算法,agent 合作模块用于训练多个 agents。一般来说,多 agent 强化学习可以根据 agent 关系建模的方式分为独立训练和联合训练两类。
- 独立训练:将其他学习 agent 视为环境的一部分,对每个 agent 进行独立训练。
- 联合训练:将所有 agent 作为一个整体进行训练,同时考虑 agent 交流、奖励分配、集中训练与分布式执行等因素。
进化模块是为每个 agent 迭代而设计的,其他 agent 在同一时间学习,导致每个 agent 需要学习不止一代 agent,如 AlphaStar 和 OpenAI Five。根据目前主流的进化技术,进化可分为两种类型:
- Self-play based:不同 agent 共享相同的策略网络,agent 通过与自己过去的版本对抗来更新当前一代的策略。
- Population-play based:不同的 agent 拥有不同的策略网络,或称为 population,agent 通过与其他 agent 或 / 和其过去的版本对抗来更新其当前一代的策略。
最后,根据上述 DDRL 的关键要素,DDRL 的分类法如图 3 所示。
图 3. 分布式深度强化学习分类法 [1]
2、经典方法介绍
我们在这一章节中,重点回顾经典的分布式强化学习方法。这些方法多为前几年提出的,其性能与最新方法仍有差距,我们在 part1 中回顾这些经典方法,以了解分布式强化学习发展初期,重点在哪些方面对传统的强化学习以及分布式架构进行了改进。
2.1 Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architecture [2]
IMPALA(Importance Weighted Actor-Learner Architecture)是 DeepMind 推出的一种异步分布式深度强化学习架构,目的是让一个 Agent(single agent)学会多种技能(https://github.com/deepmind/lab/tree/master/game_scripts/levels/contributed/dmlab30)。相关内容发表在 ICML 2018 中。ICML 2018 是第 35 届国际机器学习会议,在斯德哥尔摩举办。ICML 2018 共有 2473 篇有效投稿,其中 618 篇被接收,接收率为 25.1%。
IMPALA 尝试利用单 agent 同时处理多个任务,其架构性能超越此前方法数倍,具有强大的可扩展性,同时也展示了积极的迁移性质。IMPALA 是典型的异步架构。与 IMPALA 架构同时提出的还有任务集合 DMLab-30。
2.1.1 IMPALA 介绍
图 4. 左图:singer learner。每个 actor 生成轨迹并通过队列发送给 learner。在开始下一个轨迹之前,actor 会从 learner 那里获取最新的策略参数;右图:多个同步 learner。策略参数分布在多个同步工作的 learner 中
如图 4,在 IMPALA 架构中,每个 Actor 都拥有一个模型副本,Actor 发送训练样本给 Learner,Learner 更新模型之后,会将新模型发送给 Actor。在整个过程中,Actor 和 Learner 一直在异步运行中,即 Learner 只要收到训练数据就会更新模型,不会等待所有的 Actor;而 Actor 在 Learner 更新模型时依然在采样,不会等待最新的模型。显然,这样的运行方式会产生 off-policy 现象,即行为策略和目标策略不一致。在 IMPALA 中,作者在数学上推导出了一种严谨的修正方式:V-trace 算法。该算法显著降低了训练样本 off-policy 带来的影响。
行为策略(Behavior Policy)就是智能体用来和环境交互产生样本的策略;目标策略(Target Policy)就是根据行为策略产生的样本来不断学习和优化的策略,即训练完成最终用来使用的策略。
IMPALA 使用 actor critic 设置来学习策略 π 和基线函数 V^π。生成经验的过程与学习 π 和 V^π 的参数是分离的。该架构由一组重复生成经验轨迹(trajectory)的 actor 和一个或多个 learner 组成,learner 利用 actor 发送的经验来学习 off policy π。在每条轨迹开始时,actor 会将自己的本地策略 µ 更新为最新的 learner 策略 π,并在其环境中运行 n 步。n 步之后,actor 将状态、行动和奖励的轨迹 x_1、a_1、r_1、...... 、 x_n、a_n、r_n 以及相应的策略分布 µ(a_t|x_t) 和初始 LSTM 状态通过队列发送给 learner(典型 DRL agent 架构由卷积网络、LSTM、全连接层组成)。然后,learner 会根据从许多 actor 那里收集到的轨迹批次不断更新其策略 π。通过这种简单的架构,learner 可以使用 GPU 加速,actor 也可以轻松地分布在多台机器上。然而,在更新时,learner 的策略 π 有可能比 actor 的策略 µ 超前数次,因此 actor 和 learner 之间存在策略滞后。V-trace 可纠正这种滞后现象,在保持数据效率的同时实现极高的数据吞吐量。使用强化学习中经典的 actor-learner 架构,可提供与分布式 A3C 类似的容错能力,但由于 actor 发送的是观测数据而非参数 / 梯度,因此通常通信开销较低。
随着深度模型架构的引入,单个 GPU 的速度往往成为训练过程中的限制因素。IMPALA 可以与分布式 learner 集一起使用,高效地训练大型神经网络。参数分布在 learner 中,actor 从所有 learner 中并行检索参数,同时只向单个 learner 发送观察结果。IMPALA 使用同步参数更新,这对于在扩展到多台机器时保持数据效率至关重要。
GPU 和多核 CPU 从运行少量大型可并行运算而非大量小型运算中获益匪浅。由于 IMPALA 中的 learner 对整批轨迹执行更新,因此与 A3C 这样的 online agent 相比,它能够并行化更多的计算。举例来说,典型的 DRL agent 有一个卷积网络,然后是一个 LSTM,在 LSTM 之后是一个全连接输出层。IMPALA learner 通过将时间维度折叠到批次维度,将卷积网络并行应用于所有输入。同样,一旦计算出所有 LSTM 状态,它还会并行将输出层应用到所有时间步骤。这一优化将有效批次规模增加到数千次。通过利用网络结构依赖性和操作融合,基于 LSTM 的 agent 还能显著提高 learner 的速度。最后,还利用了 TensorFlow 中几种现成的优化方法,例如在进行计算的同时为 learner 准备下一批数据,使用 XLA(TensorFlow 即时编译器)编译计算图的部分内容,以及优化数据格式以获得 cuDNN 框架的最高性能等。
2.1.2 V-trace 介绍
在解耦分布式 actor-learner 架构中,off policy 学习非常重要,因为 actor 生成行动与 learner 估计梯度之间存在滞后。为此,本文为 learner 引入了一种名为 V-trace 的 off policy actor-critic 方法。
首先,我们先介绍一些术语。我们考虑的是马尔可夫决策过程(Markov Decision Processes,MDP)中的 discounted infinite-horizon RL 问题,其目标是找到一个能使未来 discount reward 的预期总和最大化的策略 π:
因此,当 ρ¯ 是无穷大时(即 ρ_t 没有截断),这就是目标策略的价值函数 V^π。然而,如果我们选择一个截断水平 ρ¯<∞,我们的 fix point 就是介于 µ 和 π 之间的策略 πρ¯ 的价值函数 V^(πρ¯)。在 ρ¯ 接近零的极限情况下,我们得到行为策略的价值函数 V^µ。π 和 µ 越不相似(越偏离策略),这个乘积的方差就越大。作者使用截断水平 c¯ 作为减少方差的技术。我们可以看到,截断水平 c¯ 和 ρ¯ 代表了算法的不同特征:ρ¯ 影响收敛到的价值函数的性质,而 c¯ 则影响收敛到该函数的速度。
备注 1. V-trace 目标可以递归计算:
其中,q_s 是 Q^µ(x_s, a_s) 的估计值,并在某些行为策略下访问的状态 x_s 的集合上求平均值。现在,在我们考虑的 off-policy 设置中,可以使用正在评估的策略 π_ρ¯ 和行为策略 µ 之间的 IS 权重,以更新方向中的策略参数:
为了减少策略梯度估计式 (4) 的方差,通常从 q_s 中减去状态相关的基线,例如当前值近似 V (x_s)。最后注意,式 (4) 估计 π_ρ¯ 的策略梯度,π_ρ¯ 是在使用截断级别时由 V-trace 算法评估的策略。然而,假设偏差 V^(π_ρ¯)=V^π 很小(如果 ρ¯ 足够大),那么我们可以期望 q_s 为我们提供 Q^π(x_s, a_s) 的良好估计。由此,作者推导出以下规范的 V-trace actor-critic 算法:
V-TRACE ACTOR-CRITIC ALGORITHM
考虑价值函数的参数表示 V_θ 和当前策略 π_ω。actor 遵循某些行为策略而生成轨迹 μ。v_s 由式 (1) 定义。在训练时间 s,通过对目标 v_s 的 2 次损失的梯度下降来更新值参数 θ,即在如下方向:
整体更新是通过将这三个梯度相加来获得的,其中,三个梯度由适当的系数重新缩放。
2.1.3 实验分析
作者实验验证了 IMPALA 在多种设置下的性能。在数据效率、计算性能和 off-policy 校正的有效性方面,具体研究了在单个任务上训练的 IMPALA agent 的学习行为。在多任务学习方面,在新引入的 30 个 DeepMind 实验室任务集和 the Atari 学习环境的全部 57 个游戏上训练 agent— 每个 agent 在所有任务中都使用一组权重。在所有实验中,使用了两种不同的模型架构:一种是在策略和价值之前使用 LSTM 的浅层模型(如图 5(左)所示),另一种是更深层的残差模型(如图 5(右)所示)。
图 5. 模型架构。左图:浅层架构,2 个卷积层,120 万个参数。右图:深层架构,15 个卷积层和 160 万个参数
高吞吐量、计算效率和可扩展性是 IMPALA 的主要设计目标。为了证明 IMPALA 在这些指标上优于当前算法,作者比较了 A3C、batched A2C 变体和经过各种优化的 IMPALA 变体。在使用 GPU 的单机实验中,在前向传递中使用动态批处理,以避免多次批处理大小为 1 的前向传递。动态批处理模块由专门的 TensorFlow 操作实现,但在概念上与 A3C 中使用的队列类似。表 1 详细列出了采用图 5 中浅层模型的单机版和多机版的结果。在单机情况下,IMPALA 在这两项任务上都取得了最高性能,超过了所有 batched A2C 变体,也超过了 A3C。然而,在分布式多机设置中,IMPALA 才能真正展示其可扩展性。
表 1. 图 5 所示的浅层模型在 seekavoid_arena_01(任务 1)和 rooms keys doors puzzle(任务 2)上的吞吐量。后者有长度可变的 episodes 和缓慢的 restarts。如果没有特别说明,batched A2C 和 IMPALA 使用的批处理大小为 32
图 6 给出了 IMPALA、A3C 和 batched A2C 与图 5 中浅层模型的比较。在所有 5 个任务中,batched A2C 或 IMPALA 都能获得最佳的最终平均奖励,而且在整个训练过程中,除了 seekavoid_arena_01 以外,它们在所有任务中都领先于 A3C。在 5 项任务中,IMPALA 有 2 项优于 synchronous batched A2C,同时吞吐量也高得多(见表 1)。作者假设,这种情况可能是由于 V-trace 偏离策略校正的作用类似于广义优势估计和异步数据收集,从而产生了更多样化的经验批次。
图 6. 上行:在 5 个 DeepMind 实验室任务上进行单任务训练。每条曲线都是基于最终奖励的最佳 3 次运行的平均值。IMPALA 的性能优于 A3C。下行:不同超参数组合的稳定性,按不同超参数组合的最终性能排序。IMPALA 始终比 A3C 更稳定
IMPALA 的高数据吞吐量和数据效率使我们只需对训练设置做最小的改动,就能并行训练一个任务和多个任务。在多任务套件中,作者不在所有参与者上运行相同的任务,而是为每个任务分配固定数量的参与者。请注意,模型并不知道它是在哪个任务上进行训练或评估的。为了测试 IMPALA 在多任务环境中的性能,作者使用了 DMLab-30,这是一套基于 DeepMind Lab 的 30 种不同任务。在该套件的众多任务类型中,包括带有自然地形的视觉复杂环境、带有基础语言的指令型任务、导航任务、认知任务和以脚本机器人为对手的第一人称标记任务。有关 DMLab-30 和任务的详细介绍,可访问 github.com/deepmind/lab 和 deepmind.com/dm-lab-30。作者将 IMPALA 的多个变体与分布式 A3C 实现进行了比较。除了使用基于群体训练(population based training,PBT)的 agent 外,所有 agent 都在相同范围内进行超参数扫描训练。作者报告的是 mean capped humannormalised score,其中每个任务的得分上限为 100%。使用 mean capped humannormalised score 强调了解决多个任务的必要性,而不是专注于在单一任务上成为 super human。对于 PBT,作者使用 mean capped humannormalised score 作为适应度函数,并调整熵成本、学习率和 RMSProp ε。
作者特别比较了以下 agent 变体:A3C,deep、分布式实现,由 210 个 worker(每个任务 7 人)组成的分布式实施系统,采用深度残差网络架构(图 5(右));IMPALA,浅层,210 个 actors;IMPALA,深层,150 个 actors,都只有一个 learner;IMPALA,deep,PBT,与 IMPALA,deep 相同,但额外使用 PBT 进行超参数优化;IMPALA,深度,PBT,8 learners,它利用 8 个 learner GPU 来最大限度地提高学习速度。作者还在专家设置中训练 IMPALA agent,即 IMPALA-Experts,deep,其中每个任务训练一个单独的 agent。在这种情况下,作者没有为每个任务单独优化超参数,而是对 30 个专家 agent 接受训练的所有任务进行优化。
表 2 和图 7 显示,所有 IMPALA 变体的性能都远远优于深度分布式 A3C。此外,IMPALA 的深度变体不仅在最终性能方面,而且在整个训练过程中都比浅层版本表现得更好。表 2 显示,虽然 IMPALA、deep、PBT 的 8 个 learner 提供了更高的吞吐量,但其最终性能与 1 GPU 的 IMPALA、deep、PBT 在相同步数下的性能相同。特别重要的是,IMPALA 专家对每个任务进行单独训练,而 IMPALA deep PBT 则对所有任务进行一次性训练,两者之间的差距非常明显。
表 2. DMLab-30 的 mean capped humannormalised score。所有模型都在测试任务中进行了评估,每个任务有 500 个 episodes。表中显示了每个架构的最佳得分
图 7. 在 DMLab-30 任务集的训练过程中,每个 sweep/population 中的最佳 agent 在所有环境下的数据消耗表现。采用多任务训练的 IMPALA 不仅速度更快,而且在所有 30 个任务中的收敛精度更高,数据效率更高。x 轴是由 24 个 agent 组成的超参数 sweep/PBT population 中一个 agent 所消耗的数据,整个 population/sweep 所消耗的总数据可通过乘以 population/sweep 大小获得
2.2 IMPACT: Importance Weighted Asynchronous Architectures with Clipped Target Networks [3]
IMPACT 是由来自 UC Berkeley AMPLab 的研究人员所提出。AMPLab(Algorithms, Machines, and People)是 UC Berkeley 的大数据实验室。AMPLab 身兼实验室和孵化器的双重身份,成为了学术界与工业界跨界典范。它有 Spark、Alluxio、Mesos 等熠熠生辉的孵化成果。关于 IMPACT 的研究成果发表在 ICLR 2020 中。ICLR 是深度学习方面的顶级会议,ICLR 2020 在埃塞俄比亚首都亚的斯亚贝巴举办,最终 2594 篇论文中共有 687 篇被接收,录取率为 26.5%
经典强化学习 agent 的实际使用往往受到训练时间的限制。为了加速训练,转而提出了分布式强化学习架构来并行化及加速训练过程。上文介绍的 IMPALA 可以实现更高的吞吐量,因为它可以异步收集 workers 的样本。但是,IMPALA 的采样效率较低,因为它无法像 PPO 那样安全地在每个批次采取多个 SGD 步骤。因此,随着样本吞吐量的不断增加,样本的学习效率往往会下降。为解决这个问题,本文提出了经典的 IMPACT(Importance Weighted Asynchronous Architectures with ClippedTarget Networks),从三个方面扩展了 IMPALA:
- 用于稳定 agent 目标的 target network
- 循环缓冲 circular buffer
- 有截断的重要性采样
在离散环境中,IMPACT 获得了更高的奖励,与 IMPALA 相比,训练时间减少 30%,在连续环境中,比现有的可扩展 agent 训练更快,同时保持同步 PPO 的样本效率(样本的学习质量)。
图 8. 分布式 PPO、IMPALA 和 IMPACT 的架构方案。PPO 将 worker batches 聚合到一个大的训练批次中,learner 执行小批量 SGD。IMPALA worker 异步生成数据。IMPACT 由一个批次缓冲区组成,该缓冲区接收 worker 的经验和目标对经验的评估。learner 从缓冲区中采样
与 IMPALA 一样,IMPACT 将采样 worker 与学习 worker 分开。算法 1 和图 8c 描述了 IMPACT 的主要训练循环和架构。一开始,每个 worker 从主网络复制权重。然后,每个 worker 使用自己的策略收集轨迹,并将数据(s_t、a_t、r_t)发送到 circular buffer 中。与此同时,worker 也会异步从主 learner 中提取策略权重。在此期间,目标网络每迭代 t_target 次就会与主 learner 同步一次。然后,主 learner 从 circular buffer 中反复汲取经验。每个样本的权重都是按照 π_θ/π_worker_i 以及与目标网络比率相匹配 π_worker_i/π_target。目标网络用于提供一个稳定的信任区域(图 9),即使在异步设置(即 IMPALA 架构)中也能实现每批多个步骤(如 PPO)。
图 9. 在异步 PPO 中,有多个候选策略可以用来定义信任区域:(1) π_worker_i,即产生这批经验的 worker 进程的策略;(2) π_learner,learner 进程的当前策略;(3) π_target,目标网络的策略。引入目标网络后,既能形成稳定的信任区域,又能在每批经验中异步收集多个 SGD 步骤,从而提高采样效率。由于 worker 可以从其主策略副本中异步生成经验,因此也能实现良好的实时效率
2.2.1 MAXIMAL TARGET-WORKER CLIPPING
PPO 从上一次迭代的策略 π_θ_old 中收集经验,并通过重要性采样 off-policy 经验来训练当前策略与 π_θ 的关系。在异步设置中,worker i 的策略(记为 π_worker_i)为策略网络 π_θ 生成经验。批次 B 来自 worker i 的概率可被参数化为分类分布 i ∼ D(α_1, ..., α_n)。作者通过在重要性取样策略梯度目标(IS-PG)中添加一个额外的期望值来实现这一点:
当主网络的 action distribution 在几次训练迭代中发生显著变化时,worker i 的策略 π_worker_i 会采样目标策略 π_target 以外的数据,从而导致较大的似然比 π_worker_i/π_target 。剪切函数 min ( π_worker_i/π_target, ρ) 会将较大的 IS 比率拉回到 ρ。
图 10. 对照基准消融研究的训练曲线。在 (a) 中,IMPACT 目标优于其他可能的替代损失比率选择:R_1 =πθ/π_target, R_2 =πθ/πworker_i, R_3 =πθ max (π_target,βπ_worker_i)。(b) 中展示了目标网络更新频率对一系列选择的稳健性。尝试将目标网络更新频率 t_target 设为 n = N - K 的倍数(从 1/16 到 16 不等),即 circular buffer 大小与缓冲区中每批次 replay 时间的乘积
当 ρ > 1 时,剪切后的目标比率会更大,从而增强优势估计值 Aˆt。这将激励 agent 采取好的行动,同时避免坏的行动。因此,ρ 值越大,agent 学习速度越快,但代价是不稳定。作者引入带有 V-trace 的 GAE-λ。V-trace GAE-λ 通过在 TD 误差求和中添加剪切重要度采样项来修改优势函数:
2.2.2 CIRCULAR BUFFER
IMPACT 使用循环缓冲器 circular buffer(图 11)来模拟标准 PPO 使用的 mini-batch SGD。Circular Buffer 存储 N 个批次,最多可遍历 K 次。在遍历 K 次后,一个批次将被丢弃,由一个新的 worker batch 取代。
图 11. (a): Circular Buffer 简述:N 和 K 分别对应缓冲区大小和每个批次的最大遍历次数。旧批次由 worker 生成的批次取代。(b): IMPACT 在不同 K 条件下的时间性能。(c): 不同 K 的 IMPACT 在时间步长方面的性能。K = 2 在时间上优于所有其他设置,并且比 K = 1、4、16、32 更有效率
为了激励 learner,Circular Buffer 和目标网络类似于 PPO π_old 经验中的 mini batch。当目标网络的更新频率 n = NK 时,当 learner 在 K 次 SGD iterations 中采样 N 个 mini batch 时,Circular Buffer 相当于分布式 PPO 的训练批次。这与 ACER 和 APE-X 等标准 replay buffer 不同,在 ACER 和 APE-X 中,过渡(s_t、a_t、r_t、s_t+1)要么是统一采样,要么是根据优先级采样,当缓冲区满时,将丢弃最旧的 transitions。图 11 举例说明了调整 K 可以提高训练样本效率和减少训练 wall-clock time 的经验。
2.2.3 实验评估
在评估中,作者试图回答以下问题:
1. 与之前的研究相比,target-clipping objective 对 agent 的性能有何影响?
2. IMPACT 循环缓冲区对采样效率和训练壁钟 (wall-clock) 时间有何影响?
3. 在采样和实时性能方面,IMPACT 与 PPO 和 IMPALA 基线相比如何?
4. IMPACT 如何根据 worker 数量进行扩展?
2.2.3.1 TARGET CLIPPING PERFORMANCE
作者研究了 clipped-target objective 相对于先前工作(包括基于 PPO 和 IS-PG 的目标)的性能。具体来说,作者考虑了以下比率:
在所有三个实验中,使用 PPO 的 clipping function 截断所有三个比率:c (R) = clip (R, 1- ε, 1+ ε) 并在异步设置下进行训练。图 11 (a) 揭示了两个重要的启示:首先,R1 的性能在训练中途会突然下降。其次,R2 性能不佳。作者推测,R1 的失败是由于目标网络和 worker 网络不匹配造成的。在主 learner 发生剧烈变化的训练期间,worker 的行动输出与 learner 的输出大相径庭,导致行动概率较小。这就在训练中产生了很大的比率,破坏了训练的稳定性。此外,R2 的失败是由于不同的 worker 从多个方向推拉 learner 造成的。learner 在没有建立起适当信任区域的情况下,会根据最新 worker 的建议前进,从而导致许多 worker 的建议相互冲突。
损失函数 R3 表明,clipping 是必要的,有助于促进训练。通过限制目标与 worker 的比例,我们可以确保该比例不会爆炸,也不会破坏训练的稳定性。此外,通过目标网络提供单一指导,还能防止 worker 提出相互破坏的建议。在图 11(b)中,作者测试了 n 的不同数量级的更新频率。作者发现 agent 性能对不同的频率是稳健的。当 n = 1 ∼ 4 时,agent 不学习。根据经验结果,作者推测只要能形成稳定的信任区域,agent 就能进行训练。反之,如果更新频率过低,agent 就会在同一信任区域反复多次,从而影响学习速度。
当 K 增加时,时间和采样效率之间的权衡并不一定成立。图 11b 和 11c 显示,IMPACT 通过在高采样吞吐量和采样效率之间取得平衡,实现了更大的奖励。当 K = 2 时,IMPACT 在时间和采样效率方面都表现最佳。本文结果表明,wall-clock time 和采样效率可以根据 circular buffer 中 K 值的调整进行优化。
2.2.3.2 与已有方法的对比
作者在三个连续环境中测试了 agent(图 12):在 16 个 CPU 和 1 个 GPU 上测试了 HalfCheetah、Hopper 和 Humanoid。策略网络由两层 256 个单元的全连接层组成,具有非线性激活 tanh。critic 网络与策略网络采用相同的架构。为了保持一致性,PPO、IMPALA 和 IMPACT 采用了相同的网络架构。对于离散环境(图 13),作者选择了 Pong、SpaceInvaders 和 Breakout 作为分布式 RL 库中的常用基准。这些实验在 32 个 CPU 和 1 个 GPU 上运行。
策略网络由三个 4x4 层和一个 11x11 conv 层组成,采用非线性激活 ReLU。critic 网络与策略网络共享权重。网络的输入是由四幅 42x42 下采样的 Atari 环境图像组成的堆栈。图 12 和图 13 显示了 IMPACT、IMPALA 和 PPO 的总平均评估奖励率。作者在每种环境下使用三种不同的随机种子对每种算法进行了总计三个小时的训练。根据实验结果,IMPACT 在离散域和连续域的训练速度都比 PPO 和 IMPALA 快得多,同时样本效率与 PPO 相同或更好。
图 12. 在连续控制域方面,IMPACT 的采样效率和时间效率均优于基线:Hopper、Humanoid、HalfCheetah
图 13. 在离散控制域方面,IMPACT 的实时性和采样效率均优于 PPO 和 IMPALA:Breakout、SpaceInvaders 和 Pong
结果表明,IMPACT 的连续控制任务对 circular buffer 的元组 (N, K) 非常敏感。N = 16 和 K = 20 是连续控制的稳健选择。虽然较高的 K 抑制了 worker 的采样吞吐量,但 replaying experiences 提高了采样效率,从而在总体上减少了训练 wall clock 时间,并获得了更高的奖励。
最后,图 14 显示了 IMPACT 的性能如何随 worker 数量的增加而变化。更多的 worker 意味着样本吞吐量的增加,这反过来又增加了训练吞吐量(learner 消耗批次的速度)。随着 learner 每秒消耗更多的 worker 数据,IMPACT 可以在更短的时间内获得更好的性能。然而,随着 learner 数量的增加,观察到的性能提升开始下降。
图 14. 在连续和离散控制任务中,IMPACT 在 worker 数量方面的表现
2.3 SEED RL: SCALABLE AND EFFICIENT DEEP-RL WITH ACCELERATED CENTRAL INFERENCE [4]
SEED (scalable, Efficient Deep-RL) 是谷歌 Brain Team 提出的一个能够扩展到数千台机器的强化学习架构。相关内容也发表在 ICLR 2020 中。通过有效利用加速器,SEED 不仅可以每秒进行数百万帧的训练,而且还可以降低实验成本。作者通过一个简单的架构来实现这一点,该架构具有集中推理和优化的通信层。SEED 采用两种最先进的分布式算法,IMPALA/V-trace (策略梯度) 和 R2D2 (Q-learning),并在 Atari-57、DeepMind Lab 和 Google Research Football 上进行评估。相较于已有的工作,作者提升了 Football 游戏的表现,并且能够将 Atari-57 上的最先进技术提高三倍的时间。
Github: http://github.com/google-research/seed_rl。
2.3.1 SEED 架构
图 15. 完整架构
在介绍 SEED 的架构之前,作者首先分析了 IMPALA 所使用的通用角色 learner 架构,该架构也以各种形式用于 Ape-X、OpenAI Rapid 和其他系统。图 15a 是该架构的概览。大量 actors 重复从 learner(或参数服务器)读取模型参数。然后,每个 actor 利用本地模型对行动进行采样,并生成观察、行动、策略对数 / Q 值的完整轨迹。最后,该轨迹连同循环状态被传输到共享队列或 replay buffer。learner 以异步方式从队列 /replay buffer 读取成批轨迹,并优化模型。造成这种架构不完善的原因有很多:
- 使用 CPU 进行神经网络推理:actor 通常使用 CPU(偶尔在昂贵的环境中使用 GPU)。众所周知,CPU 对神经网络的计算效率较低。当模型的计算需求增加时,用于推理的时间开始超过环境 step 计算的时间。解决方法是增加 actor 的数量,但这会增加成本并影响收敛性。
- 资源利用效率低:Actor 需要在两个任务(环境 step 和网络推理)之间进行切换。这两项任务的计算要求往往不尽相同,从而导致资源利用率低或 actor 运行速度慢。例如,有些环境本身是单线程的,而神经网络则很容易并行化。
- 带宽要求:actors 和 learners 之间需要传输模型参数、循环状态和观测结果。相对于模型参数,观测轨迹的大小往往只占几个百分点。此外,基于内存的模型会发送大量状态,从而增加带宽需求。
虽然 GA3C 和单机 IMPALA 等单机方法避免了使用 CPU 进行推理,也没有网络带宽要求,但它们受到资源使用和多种环境所需规模的限制。SEED 采用的架构(图 15b)解决了上述问题。推理和轨迹积累被转移到 learner 身上,这使得它在概念上成为一个具有远程环境(除了处理故障)的单机设置。移动逻辑可有效地使 actor 在环境中形成一个小循环。在每一个环境 step 中,观察结果都会被发送到 learner,由 learner 进行推理并将行动反馈给 actor。这就带来了一个新问题:延迟。
为了尽量减少延迟,作者创建了一个使用高性能 RPC 库 gRPC(grpc.io)的简单框架。具体来说,采用了流式 RPC,在这种情况下,actor 与 learner 之间的连接保持开放,元数据只发送一次。此外,该框架包含一个批处理模块,可将多个 actor 推理调用有效地批处理在一起。在 actor 与 learner 可以在同一台机器上运行的情况下,gRPC 使用 unix 域套接字,从而减少了延迟、CPU 和系统调用开销。总的来说,对于我们考虑的一些模型,端到端延迟(包括网络和推理)更快。
IMPALA 和 SEED 架构的不同之处在于,对于 SEED 来说,在任何时间点都只存在一个模型副本,而对于分布式 IMPALA 来说,每个 actor 都有自己的副本。这就改变了轨迹偏离策略的方式。在 IMPALA 中(图 16a),actor 在整个轨迹中使用相同的策略 π_θ_t。对于 SEED(图 16b)来说,轨迹展开过程中的策略可能会多次改变,后面的步骤会使用与优化时更接近的最新策略。
图 16. 在异步优化模型参数 θ 的同时评估策略 π 时的 "near on-policy" 变体
图 17. SEED 中详细的 learner 架构(可选择 replay buffer)
SEED 架构中 learner 的详细视图如图 17 。共运行三种线程:1. 推理 2. 数据预取 3. 训练。推理线程接收一批观测数据、奖励和事件终止标志。它们加载循环状态,并将数据发送到推理 TPU 内核。收到采样动作和新的循环状态后,动作会被发送回 actors,同时存储最新的循环状态。当轨迹完全展开后,它会被添加到 FIFO 队列或 reply buffer,随后由数据预取线程进行采样。最后,轨迹被推送到参与训练的每个 TPU 内核的设备缓冲区。训练线程(Python 主线程)接收预取的轨迹,使用训练 TPU 内核计算梯度,并将梯度同步应用于所有 TPU 内核的模型(推理和训练)。
总之,作者通过以下方法解决了前面列出的问题:
1. 将推理转移到 learner 中,从而消除 actor 中任何与神经网络相关的计算。在这种架构中,增加模型规模不会增加对更多 actor 的需求(事实上恰恰相反)。
2. 在 learner 上分批进行推理,并在 actor 上设置多个环境。这样可以充分利用 learner 上的加速器和 actor 上的 CPU。用于推理和训练的 TPU 内核数量可根据推理和训练工作量进行微调。所有这些因素都有助于降低实验成本。
3. 所有涉及模型的内容都会保留在 learner 上,只有观察结果和操作会在 actor 和 learner 之间发送。这可减少高达 99% 的带宽需求。
4. 使用延迟最小、开销最小的流式 gRPC,并将批处理集成到服务器模块中。
作者提供了以下两种在 SEED 框架中实现的算法:V-trace 和 Q-learning。
V-TRACE
适应该框架的算法之一是 V-trace [5]。我们不包括在 IMPALA 基础上提出的任何附加功能。这些附加功能也可应用于 SEED,由于它们的计算成本较高,因此将受益于 SEED 架构。
Q-learning
作者通过实施 R2D2 这一最先进的基于价值的分布式 agent [6],展示了 SEED 架构的多功能性。R2D2 本身建立在一长串对 DQN 的改进之上:double q-learning、multi-step bootstrap targets、dueling 网络架构、prioritized distributed replay buffer、价值函数重缩放、LSTM 和 burn in。
作者证明,可以通过直接灵活的实现方式,在 learner 上保留 reply buffer,而不是分布式 reply buffer。这样就可以在设置中取消一种作业,从而降低复杂性。它的缺点是受 learner 内存的限制,但在本文实验中,这在很大程度上不是问题:reply 105 个长度为 120 的轨迹缓冲区,其中包含 84 × 84 个未压缩灰度观测值(遵循 R2D2 的超参数),需要 85GB 内存,而谷歌云可提供数百 GB 内存。不过,在需要更大 reply buffer 的情况下,使用分布式 reply buffer 和 SEED 的中央推理也是可行的。
2.3.2 实验分析
作者证明了本文方法与 SOTA 基线方法相比的有效性,展示了影响学习的关键超参数的效果,并提供了设置这些值的经验指导。所有实验都是在一台配有少量 GPU 的工作站上进行的。作者在六项 Isaac Gym 基准任务中对本文方法进行了评估:Ant, Humanoid, ANYmal, Shadow Hand, Allegro Hand, Franka Cube Stacking(见图 9)。此外,还提供了另外两个任务:(1) 基于视觉的球体平衡任务;(2) 接触丰富的灵巧操作任务,该任务要求学习使用 DClaw Hand 调整数百个不同物体的方向,并采用单一策略。
六项 Isaac Gym 基准任务
本文实验考虑了以下基线:(1) PPO,这是之前许多使用 Isaac Gym 进行模拟所使用的默认算法;(2) DDPG (n):采用 double Q-learning 和 n-step returns 的 DDPG 实现;(3)SAC (n):SAC [11] 的实现,有 n-step returns。本文实验中使用 NVIDIA GeForce RTX 3090 GPU 作为默认 GPU。
要回答的第一个也是最重要的问题是,PQL 是否比 SOTA 基线方法学习速度更快。为了回答这个问题,作者比较了 PQL 和 PQL-D(分布式 RL 的 PQL)与基线在六个基准任务上的学习曲线。如图 10 所示,与所有基线相比,本文方法(PQL、PQL-D)在六项任务中的五项都实现了最快的策略学习。此外,我们还观察到,在 PQL 中添加分布式 RL 可以进一步提高学习速度。
图 10 显示,在六项任务中,PQL-D 有五项任务的 wall-clock 时间比 PQL 更快,或至少与 PQL 相当。在两项富有挑战性的接触式操作任务中,PQL-D 的改进最为显著。此外,PQL 的学习速度快于 DDPG (n),这证明了使用并行方案进行数据收集和网络更新的优势。我们还发现,DDPG (n) 在所有任务中的表现都优于 SAC (n)。作者分析,这可能是由于 DDPG 中的探索方案比 SAC 中的探索方案能更好地扩展。在 DDPG 中,作者采用了与 PQL 相同的混合探索方法,而 SAC 的探索方法仅来自随机策略分布中的采样,这可能会受到策略分布质量的严重影响。
将本文方法与 SOTA RL 算法(PPO、n-step returns SAC 和 n-step returns DDPG)进行了比较。在所有任务中都使用了 4096 个环境进行训练,只有 PPO 基线任务 "Shadow Hand" 和 "Shadow Hand" 除外
大规模并行仿真使我们能够在不同环境中部署不同的探索策略,从而生成更多样化的探索轨迹。作者使用一种简单的混合探索策略,并将其有效性与所有环境使用相同探索能力(相同的 σ 值)的情况进行比较。作者试验了 σ∈{0.2, 0.4, 0.6, 0.8}。如图 11 所示,σ 值的选择对学习性能影响很大。如果我们在所有并行环境中使用相同的 σ 值,那么我们就需要为每个任务调整 σ。相比之下,混合探索策略(即每个环境使用不同的 σ 值)的性能优于所有其他固定 σ 值的策略(学习速度更快或至少与之相当)。这意味着,使用混合探索策略可以减少每个任务所需的 σ 值调整工作。
通过应用不同的恒定最大噪声值,对本文提出的混合探索方案进行比较。我们可以看到,混合探索方案要么优于其他方案,要么与其他方案相当,这可以节省噪声水平的调整工作
此外,作者还对比了不同参数设置情况下的方案效果,感兴趣的读者可以阅读原文。
本文为来自哈佛大学、谷歌等机构研究人员的工作。本文提出了一种强化学习训练范式 ActorQ,用于加快 Actor-Learner 分布式 RL 训练。ActorQ 利用了对 learner 的全精度优化,以及通过低精度量化 actor 的分布式数据收集。对 actor 进行量化的 8 位(或 16 位)推理可加快数据收集速度,而不会影响收敛性。量化分布式 RL 在一系列任务(Deepmind 控制套件)和不同 RL 算法(D4PG、DQN)上训练系统 ActorQ 的端到端速度提高了超过 1.5 至 2.5 倍,收敛速度超过全精度训练。最后,作者分解了分布式 RL 训练的各种运行成本(如通信时间、推理时间、模型加载时间等),并评估了量化对这些系统属性的影响。
ActorQ 介绍
分布式强化学习系统采用标准的 "行动者 - 学习者"(actor-learner)方法:单个 learner 优化策略,多个 actor 并行执行 rollout 任务。由于 learner 执行的是计算密集型操作(对 actor 和 critic 进行批量更新),因此为其分配了更快的计算(在我们的例子中是 GPU)。另一方面,actor 执行单个推出,这涉及一次执行一个推理实例,其并行性受到限制;因此,它们被分配到单个 CPU 内核,彼此独立运行。Learner 持有策略的主副本,并定期将模型广播给所有 actor。Actor 提取模型并利用它来执行 rollouts,向重放缓冲区提交样本,learner 对其进行采样,以优化策略和 critic 网络。图 12 显示了 actor-learner 设置的示意图。
作者在多个环境中对 SEED 进行了评估:DeepMind Lab、Google Research Football 和 Arcade 学习环境。在这里,我们详细介绍 DEEPMIND LAB AND V-TRACE 的实验情况,其它环境中的实验结果可见原文。
ActorQ 系统设置。在 learner 进程中利用 Tensorflow,在 actor 进程中利用 PyTorch,以促进用于优化的全精度 GPU 推理和用于经验生成的量化推理。作者引入了一个参数量化器,在 learner 的 Tensorflow 模型和 actor 的量化 PyTorch 模型之间架起了一座桥梁
本文引入了用于量化 actor-learner 训练的 ActorQ。ActorQ 包括在 actor 上使用量化执行的同时,保持 learner 所有计算的全精度。当 learner 广播其模型时,会对模型进行训练后量化,actor 会在其广播中使用量化后的模型。在实验中,作者测量了 learner 提供的全精度策略的质量。ActorQ 的几个考虑包括:
- 由于硬件和批处理的原因,learner 的速度比所有参与者的速度加起来还要快;因此,整体训练速度受限于参与者执行 rollout 的速度。
- 训练后量化可以有效地产生量化的强化学习策略,而奖励损失很小。这表明,量化(低至 8 位)对策略输出的影响有限,因此可以用来加快 actor 的推出速度。
- actor 只进行推理(不进行优化),因此 actor 一方的所有计算都可以大幅量化,而不会影响优化;反之,learner 在 actor 和 critic 网络上都执行复杂的优化程序,因此 learner 的量化可能会降低收敛性。
ActorQ 虽然简单,但却有别于传统的量化神经网络训练,因为 Actor 的纯推理角色可以使用精度很低(≤ 8 位)的算子来加速训练。这与传统的量化神经网络训练不同,传统的量化神经网络训练必须使用更复杂的算法。这增加了额外的复杂性,也可能限制速度,而且在许多情况下,由于收敛问题,仍仅限于半精度运算。ActorQ 的好处是双重的:不仅加快了 actor 的计算速度,还大大减少了 learner 与 actor 之间的交流。此外,在这一过程中,训练后量化可以被视为向 actor rollout 注入噪声。作者证明在某些情况下,这甚至会有利于收敛。最后,ActorQ 适用于许多不同的强化学习算法,因为 Actor-learner 范式适用于各种算法。
DeepMind Lab 是一个基于 Quake 3 引擎的 3D 环境。它包含迷宫、激光枪战和记忆任务。作者对四个常用任务进行了评估。使用的动作集来自文献 [7],但对于某些任务,使用更大的动作集可以获得更高的奖励率。在所有实验中,我们使用的动作重复次数为 4,图中的帧数被列为环境帧(相当于步骤数的 4 倍)。两个 agent 使用了相同的 24 个超参数集和相同的模型(IMPALA 的 ResNet)。
第一个实验评估了图 16 中描述的 off policy 行为变化的影响。IMPALA 和 SEED 使用了完全相同的超参数,包括使用的环境数量。如图 17 所示,SEED 的超参数稳定性略好于 IMPALA,而最终奖励略高。
图 17. IMPALA 和 SEED 在完全相同的条件下(175 个 actor、相同的超参数等)的比较,图中显示的超参数组合按不同超参数组合的最终性能排序
为了评估性能,作者比较了使用 Nvidia P100 和 SEED 的 IMPALA 与多种加速器设置。它们在同一组超参数上进行评估。作者发现,在使用 2 个 TPU v3 内核时,SEED 比 IMPALA 快 2.5 倍(见表 3),而使用的环境仅多 77%,CPU 仅少 41%。在样本复杂度保持不变的情况下,从 2 个内核扩展到 8 个内核,速度提高了 4.4 倍(图 18)。
表 3. SEED、IMPALA 和 R2D2 的性能
图 18. 4 项 DeepMind 实验室任务的训练。每条曲线都是按照 [7] 中的评估程序,根据最终奖励计算出的 24 次运行中的最佳结果。样本复杂度最高保持在 8 TPU v3 内核,这使得训练速度比 IMPALA 基线快 11 倍。上行:X 轴为每帧(帧数 = 4x 步数)。下行:X 轴为小时数
在 Deepmind Control Suite 和 gym 的特定任务中,ActorQ 的时间和速度提升高达 95% 的奖励。与全精度训练相比,8 位和 16 位推理的速度提高了超过 1.5 -2.5 倍。作者在 DeepMind Control Suite 环境(non-gym)中使用 D4PG,在 gym 环境中使用 DQN
作者将 PTQ 应用于通过 ActorQ 进行的分布式强化学习训练中,并展示了在不损害收敛性的情况下显著提高了终端训练速度。作者评估了在分布式强化学习训练中量化通信与计算的影响,并分解了训练中的运行时间成本,以了解量化如何影响这些系统组件。作者评估了 ActorQ 算法在各种环境下加速分布式量化强化学习的效果。总的来说,我们发现 1)使用 ActorQ,训练强化学习策略的速度明显加快(>1.5 -2.5 倍);2)即使 actor 执行 8 位量化处理,也能保持收敛。最后,作者分解了训练各部分的相对成本,以了解计算瓶颈在哪里。在 ActorQ 中,actor 执行的是量化执行,而 learner 的模型是全精度的,因此我们评估的是 learner 的全精度模型质量。
作者在 Deepmind 控制套件的一系列环境中对 ActorQ 进行了评估。作者选择的环境涵盖了各种难度,以确定量化对简单和困难任务的影响。表 5 列出了测试环境及其相应的难度和训练步数。每一 episode 的最长步数为 1000 步,因此每项任务的最高奖励为 1000(尽管不一定能达到)。作者根据任务的特征而不是像素进行训练。
使用 ActorQ 评估的任务从易到难,以及相应任务所训练的步骤,以及在 actor 一侧拉动模型的频率
策略架构是具有 3 个大小为 2048 的隐藏层的全连接网络。作者在 actor 的策略网络输出中应用高斯噪声层,以鼓励探索;根据执行的 actor,sigma 在 0 到 0.2 之间均匀分配。在 learner 方面,critic 网络是一个 3 层隐藏网络,大小为 512。在连续控制环境中使用 D4PG 训练策略,在离散控制环境中使用 DQN 训练策略。所有实验都在单机设置上运行(但分布在 GPU 和单机的多个 CPU 上)。Learner 使用的是 V100 GPU,使用 4 个 actors(每个 actor 1 个内核),每个 actor 分配一个 IntelXeon 2.20GHz CPU 进行分布式训练。运行每个实验,至少取 3 次运行的平均值,并计算汇总运行的运行平均值(window=10)。
图 13 和表 4 中展示了使用 ActorQ 的最终训练速度提升。在几乎所有任务中,我们都看到 8 位和 16 位量化推理的显著提速。此外,为了提高可读性,我们估算了 fp32 最大得分的 95% 百分位数,并测量了 fp32、fp16 和 int8 达到此奖励水平的时间,计算了相应的速度提升。在人形机器人、站立和人形机器人上,使用较慢的模型拉动频率(1000)时,步行收敛速度明显较慢,因此作者在其训练中使用了更频繁的拉动频率(100)。频繁的拉动使 16 位推理变慢,以至于与全精度训练一样慢。
ActorQ 在各种 Deepmind 控制套件任务中使用 8 位、16 位和 32 位的端到端速度提升 推理(对 Learner 进行全精度优化)。与全精度基线相比,8 位和 16 位训练的端到端训练速度明显加快
展示了使用 ActorQ 的 episode 奖励与 actor 总步数收敛图。数据显示,无论在简单任务还是困难任务中,即使对 actor 进行 8 位和 16 位推理,收敛性也能大致保持。在 Cheetah、Run 和 Reacher、Hard 中,8 位 ActorQ 的收敛速度甚至更快,作者认为这可能是因为量化引入了噪声,而噪声可以被视为探索。
ActorQ 在各种 Deepmind Control Suite 任务中使用 8 位、16 位和 32 位 actor 推理(对 learner 进行全精度优化)时的收敛性。8 位和 16 位量化训练的收敛性与全精度训练相同或更好
由于使用 6 个内核进行训练和 2 个内核进行推理,而不是每个内核 1 个,因此速度提高了 4 倍以上,从而提高了利用率。但与相关研究相反,作者发现,即使采用预热和 actor de-correlation 等方法,增加批大小也会损害样本复杂性。作者猜测,这是由于 DeepMind 实验室任务中的 actor 和环境多样性有限。使用 Nvidia P100 时,SEED 比 IMPALA 慢 1.58 倍。由于 SEED 是在加速器上执行推理,因此速度变慢是意料之中的。不过,SEED 使用的 CPU 明显更少,成本也更低。TPU 版本的 SEED 已经过优化,但使用 P100 的 SEED 可能会有改进。
对 actor 进行模型拉动的频率可能会对收敛性产生影响,因为它会影响用于填充重放缓冲区的策略的僵化程度;这在之前的研究中都有所体现,图 15 给出了一个具体示例。因此,作者探讨了在通信量大和计算量大的情况下量化通信与计算的效果。为了量化通信,作者将策略权重量化为 8 位,并通过将其打包成矩阵的方式进行压缩,从而将模型广播的内存减少了 4 倍。自然,在重通信的情况下,对通信进行量化会更有利,而在重计算的情况下,对计算进行量化会产生相对更多的奖励。图 16 显示了在重通信场景(频率 = 30)和重计算场景(频率 = 1000)中量化对通信和计算的增益的消减图。图中显示,在通信量大的情况下,量化通信的速度可提高 30%;相反,在计算量大的情况下,量化通信的影响很小,因为开销主要来自计算。由于本文的实验是在单个节点的多个内核上运行的(有 4 个 actors),因此通信的瓶颈较小。作者认为,在拥有更多 actors 的网络集群上,通信成本会更高。
模型拉动频率会影响 actor 策略的僵化程度,并可能对训练产生影
在计算量大和通信量大的训练场景中,量化通信与计算的效果。q 是推理的精度;q_c 是通信的精度。注意 q=8 隐含地将通信量化为 8 比特
作者进一步细分了对单个 actor 的运行时间有贡献的各种组件。运行时间组件可细分为:步长时间、拉动时间、反序列化时间和加载状态支配时间。步长时间是指执行神经网络推理所花费的时间;拉动时间是指从查询 Reverb 队列中的模型到接收序列化模型权重之间的时间;反序列化时间是指反序列化模型字典所花费的时间;load_state_dict 时间是指调用 PyTorch load state dict 所花费的时间。图 16c 显示了在计算量大的情况下,32、16 和 8 位量化推理的组件运行时间的相对细分。如图所示,步长时间是主要瓶颈,而量化可显著加快步长时间。图 16d 显示了通信量大时的成本明细。在加快计算速度的同时,由于内存的减少,拉取时间和反序列化时间也因量化而大大加快。
在 8 位和 16 位量化训练中,PyTorch 加载状态判定的成本要高得多。调查显示,加载量化 PyTorch 模型的成本是将权重从 Python 对象重新打包到 Cdata 中。由于内存访问次数较少,8 位权重重新打包明显快于 16 位权重重新打包。模型加载的成本表明,通过对打包的 C 数据结构进行序列化并降低权重打包的成本,可以获得额外的速度提升。为了证明量化在部署强化学习策略方面的显著优势,作者还评估了机器人应用案例中的量化策略优势,感兴趣的读者可以阅读原文。
3、总结
在这篇文章中,我们主要介绍了一些经典的分布式强化学习架构,基本为 IMPALA 及其后续改进的方法,主要思路是:使用异步架构,在提升样本吞吐量的同时,引入一些 off-policy 修正。这一类方法的共同问题是:由于算法不再满足 on-policy 要求,导致单位样本效率降低,甚至可能会影响最终的收敛效果。
除了这一类方法,经典的分布式强化学习架构还有:使用同步架构,保证算法满足 on-policy 要求,例如 Batched A2C 和 DD-PPO,以及,在计算梯度的时候保证 on-policy 特性,但是用异步的方式更新梯度,例如 A3C 和 APPO 等等。这些方法也存在整体吞吐量不佳、模型收敛性不好等问题。
这几年在分布式强化学习领域涌现了大量优秀的工作。它们从不同角度出发,针对分布式强化学习特点,提出了许多解决方案,来不断提升算法和框架的能力。从最初需要几十个小时甚至十多天才能在 Atari 游戏上达到人类玩家水平,到目前被缩短到几小时甚至几分钟以内。分布式强化学习正处在一个蓬勃发展的时期,我们将在 part 2 介绍一些最新的研究进展。分布式强化学习的发展速度非常快,相关的论文发表数量也非常多,更加强调深度强化学习算法和分布式系统设计的互相感知和协同,学习性能更高、计算成本逐渐降低。我们也会持续跟踪关注分布式强化学习方面的最新进展。
#深度对比学习
根据对比学习近年的发展和进步, 提出一种新的面向对比学习的归类方法, 并基于提出的归类方法, 对现有对比研究成果进行系统综述, 并评述代表性方法的技术特点和区别, 系统对比分析现有对比学习方法在不同基准数据集上的性能表现。
论文信息:张重生, 陈杰, 李岐龙(*)等. 深度对比学习综述. 自动化学报, 2023, 49(1): 15−39
作者单位:河南大学计算机与信息工程学院 河南省大数据分析与处理重点实验室
论文链接:http://www.aas.net.cn/cn/article/doi/10.16383/j.aas.c220421
在深度学习中, 如何利用大量、易获取的无标注数据增强神经网络模型的特征表达能力, 是一个具有重要意义的研究问题, 而对比学习是解决该问题的有效方法之一, 近年来得到了学术界的广泛关注, 涌现出一大批新的研究方法和成果. 本文综合考察对比学习近年的发展和进步, 提出一种新的面向对比学习的归类方法, 该方法将现有对比学习方法归纳为5类, 包括: 1) 样本对构造; 2) 图像增广; 3) 网络架构; 4) 损失函数; 5) 应用. 基于提出的归类方法, 对现有对比研究成果进行系统综述, 并评述代表性方法的技术特点和区别, 系统对比分析现有对比学习方法在不同基准数据集上的性能表现. 本文还将梳理对比学习的学术发展史, 并探讨对比学习与自监督学习、度量学习的区别和联系. 最后, 本文将讨论对比学习的现存挑战, 并展望未来发展方向和趋势.
近年来, 以深度学习为代表的新一代人工智能技术取得了迅猛发展, 并成功应用于计算机视觉、智能语音等多个领域. 然而, 深度学习通常依赖于海量的标注数据进行模型训练, 才能获得较好的性能表现. 当可用的标注数据较少、而无标注数据较多时, 如何提高深度学习的特征表达能力是亟需解决的重要现实需求. 自监督学习[1]是解决该问题的有效途径之一, 能够利用大量的无标注数据进行自我监督训练, 得到更好的特征提取模型.
然而,目前, 很少有系统总结对比学习最新进展的英文综述论文[10-12],, 中文综述论文更是极度缺乏. 因此, 学术界迫切需要对深度对比学习的最新文献及进展进行全面系统的总结、归纳和评述, 并分析存在的问题, 预测未来发展趋势. 本文聚焦视觉领域的深度对比学习技术, 系统梳理深度对比学习2018年至今的技术演进, 总结该方向代表性的算法和技术. 如图1所示, 本文首先将深度对比学习的相关技术归纳为样本对构造方法层、图像增广层、网络架构层、损失函数层及应用层5大类型. 然后, 综合归纳现有技术的特点及异同之处, 并分析其性能表现, 指出尚未解决的共性问题及相关挑战, 最后勾勒该领域的未来发展方向与趋势.
图1 深度对比学习方法归类
对比学习研究现状
在本章内容中, 首先引入所提出的归类方法, 在此基础上归纳总结国内外对比学习研究成果. 值得注意的是, 对比学习亦深受我国学者的关注, 很多优秀的对比学习论文虽然发表在国外学术会议和刊物上, 但作者为国内学者.
归类方法
本文提出一种新的归类方法, 以对最新的对比学习工作进行系统归纳总结. 如图1所示, 按照对比学习的整体流程, 将现有方法划分为样本对构造层、图像增广层、神经网络架构层、损失函数层以及应用层等类型.
图2将每种类型的对比学习方法进行细分及可视化表示. 其中, 样本对构造层方法可以细分为困难样本构造、剔除假负样本、正样本扩充及构造多视角样本四种方法. 图像增广层可以细分为图像变换、图像合成及图像语义增广三种方法. 网络架构层方法可以分为同步对称、同步非对称、异步对称、异步非对称对比学习, 及基于聚类的网络架构. 特征提取网络主要使用ResNet[30] (Residual neural network)、Transformer[31]等主流神经网络结构, 损失函数层分为基于互信息的损失函数、传统损失函数和混合损失函数. 下面将分别介绍各类型的方法.
图2 对比学习的整体流程及各模块的细分类方法
样本处理及样本对构造方法
在对比学习过程中, 样本对的选择指的是对数据集的采样过程. 1) 对无标注数据集, 通常采用随机采样的方法构建一个批次的数据, 因此一个批次的数据可能存在类别分布不均匀的情况, 导致假负样本的出现及困难负样本过少的问题; 2) 对有标注数据集, 通过标签信息采样训练数据, 能够有效提高对比学习效果. 下面将分别介绍各种细分的样本处理及样本对构造方法.
困难样本构造
在选择样本进行模型训练的时候, 有些物体在视觉上相似度很高, 而且在经过神经网络提取特征之后, 他们的特征之间的余弦相似度也比较高, 容易被误认为是相同类的样本, 但是这两张图像中的物体并非同类,如一张图像中的物体是狗,另一张是狼。这种情况称为困难负样本对。同理, 若两张图片属于同一类, 但特征相似度不高则称为困难正样本对. 多个研究表明, 困难负样本对和困难正样本对在对比学习中具有至关重要的作用.
剔除假负样本
在同一批次的训练图像中, 如果输入图像和同一个批次的其他某一张图像是同一类, 但是在计算损失的时候把它们误归为负样本对, 这种情况就称为假负样本对. 在对比学习中, 负样本的质量和数量是制约最后训练效果的关键, 如果在训练的批次中出现假负样本, 会降低最后的网络效果.
正样本扩充法
扩充正样本有助于提高对比学习的效果. 这里的扩充不包含图像增广方法, 而是指从可用的数据资源中寻找隐藏的、与输入样本类别相同的图像的方法. 在监督对比学习中, 由于同类样本已知, 一般无需扩充正样本. 而在无监督对比学习中, 若图像数据没有标注信息, 一般无法进行正样本扩充. 但在一些特殊场景下, 如行人重识别、遥感图像处理、视频分析, 可以基于某些假设, 对正样本进行扩充.
Kim等[37]将Mixup方法应用到了对比学习领域, 提出MixCo方法, 该方法将经过增广之后的两幅异类图像进行Mixup操作合成新的图像. 然后对所有合成的图像, 计算其InfoNCE损失, 由于每幅合成图像对应两个类别, 因此可以认为是扩充了每个样本对应的正样本个数. 最终损失由原始图像上的对比损失和上述合成图像上的对比损失构成.
在行人重识别领域, 王梦琳[38]提出一种度量不同相机中行人关联性的方法, 将关联性强的样本视作同类样本, 以扩充正样本的数量.
在遥感图像处理中, 基于同一地点的遥感图像中的内容随时间变化较小的特点, Ayush等[39]使用同一地点的不同时刻的遥感图像扩充正样本.
在视频分析中, Qian等[40]基于邻近的视频帧图像可作为同类样本的假设, 扩充正样本, 用于对比学习. Kumar等[41]同样采用这一假设扩充正样本. Han等[42]发现对于两个不同的视频片段, 做的动作相同时, 在RGB视角下, 提取的特征相似度不高, 但在光流 (Optical flow) 视角下, 提取的特征相似度很高, 反之亦然. 基于以上发现, 作者提出将光流视角下相似度高的视频片段作为RGB视角下的正样本, 同样, 可采用相同方法扩充光流视角下的正样本.
在半监督学习领域, Wang等[43]提出通过部分标签训练的分类器, 在当前训练批次中利用余弦相似度指标寻找正样本的方法, 扩充正样本数量. Yang等[44]采用同样的思路设计类感知模块, 扩充正样本数量.
构造多视图样本
多数对比学习方法所使用的数据只有一个来源 (又称为同一个视图). 针对该问题, 研究人员探索使用多视图数据的方法提升对比学习的效果. Tian等[45]提出基于多视图特征的对比学习方法. 该方法将同一幅图像在多个不同视图下的表达分别进行特征提取, 然后进行对比学习, 有利于提升模型的效果. 在视频分析中, Rai等[46]对同一幅图像分别提取光流、语义分割、关键点等多视图特征, 然后进行对比学习, 提升了视频特征表达能力.
图像增广方法
图像变换方法
图像增广是对比学习的天然组成部分, 以产生网络所需的输入样本对. 传统的图像变换方法有随机裁剪、颜色失真、灰度化等方法. 需要说明的是, 单一的图像变换方法不利于有效的对比学习. SimCLR综合对比了一系列图像变换的效果, 发现由随机裁剪和颜色失真组成的变换组合能够获得更好的对比学习效果.
在众多的图像变换方法之中, 裁剪通常是必须的变换方法之一, 但可能存在经过裁剪后的正样本对信息重叠过多或者完全不重叠的情况. 如果裁剪到的正样本对是两个矩形框中的区域, 那么该图像对并不能促进对比学习, 这种情况称为错误正样本 (False positive, FP). 当裁剪的两个图像区域重叠过多时, 若选择它们作为正样本对, 也无助于对比学习. Peng等[47]针对以上问题, 首先利用热图定位目标区域, 然后采用中心抑制抽样策略, 在目标区域内离物体中心越远的像素点被采样到的概率越高. 得到采样点后, 以采样点为中心, 并使用随机生成的宽高, 进行最终的图像裁剪操作. 在SwAV中, 作者提出了一种多裁剪策略 (Multi-crop), 该策略给编码器提供多个不同尺度的裁剪图像作为正样本, 并验证了该策略有助于提高对比学习算法的性能.
图像合成方法
图像合成不同于图像变换, 前者能够生成新的内容. 在视频分析中, Ding等[48]提出复制粘贴的图像合成方法, 将所选视频帧的前景区域粘贴到其他视频帧的背景图像中, 得到合成的视频帧, 通过这种简单的合成方法, 使得对比学习模型能够更加关注前景信息, 提取到更加良好的特征表达.
图像语义增广方法
对比学习网络架构设计
根据对比学习网络架构的更新方式是同步或异步, 及该网络架构是对称或非对称, 本文将对比学习所涉及的网络架构划分为同步对称、同步非对称、异步对称和异步非对称4种类型. 同步更新指的是对比学习网络的两个分支 (分支1和分支2) 同时进行梯度更新, 异步更新指的是两个分支网络的权值更新方法不同. 对称指的是分支1和分支2的网络结构完全相同, 非对称则指相反的情况. 除此之外, 本节还将含有聚类算法的对比学习方法总结为聚类对比学习架构.
同步对称网络架构
在典型的同步对称网络架构中,分支1和分支2采用相同的网络结构, 并且同时采用梯度更新.
SimCLR[2]是最早提出采用同步对称网络架构的对比学习工作. 该网络架构采用了结构相同的两个网络分支, 每一个分支都包含特征提取网络和投影头. 特征提取网络可以是任意的网络结构, 例如ResNet和Transformer, 投影头一般使用多层感知机 (Multilayer perceptron, MLP). 使用该网络架构进行对比学习的前向过程为: 首先, 输入一个样本, 经过两种图像增广方法产生成对的训练样本. 然后, 通过特征提取网络和投影头将样本输出到投影空间. 最后, 在投影空间进行损失计算并回传梯度, 更新特征提取网络和投影头的参数. 同步对称网络架构除了可以用于自监督对比学习之外, Khosla等[8]将该类网络架构应用到了监督对比学习之中. 值得注意的是, 采用该类网络架构的对比学习算法若想获得良好效果, 往往需要在训练时采用很大的批次进行训练, 比如1 024或2 048.
同步非对称网络架构
在典型的同步非对称网络结构中,分支1和分支2采用不同的网络结构, 但同时采用梯度更新. 同步非对称网络架构与同步对称网络架构的相同之处在于两个分支都进行了梯度更新, 不同之处在于前者的两个分支的网络结构不同, 而后者相同.
Van等[7]提出一种基于该种网络架构的对比预测编码方法CPC. 在该方法中, 分支1的输入为某一个时间点的数据, 分支2的输入为未来某一个时间点的数据, 训练的目标是利用分支1的输出预测分支2的输出,然后计算对应的预测损失. 在CPC算法之后, 衍生出很多改进的算法[41, 53], 这些方法均采用典型的同步非对称网络架构, 其主要改进之处在于采样方法或损失函数.
除了上述同步非对称架构之外, 还存在一些其它形式的同步非对称的网络架构, 主要有如下两种形式: 1) 分支1与分支2均含有投影头, 但投影头结构不相同[54-55]. 2) 分支1和分支2的特征提取网络数量不相等[56-57].
Nguyen等[54]将对比学习方法应用于网络结构搜索任务 (Neural architecture search, NAS), 提出CSNAS方法, 该方法构造了一个类似于上述第1种形式的同步非对称网络架构. Misra等[55]在分支2中使用拼图代理任务进行特征学习, 因此在分支2的投影头之前还包含拼接操作以及多层感知机的映射, 构成了符合上述第1种形式的同步非对称网络架构.
Bae等[56]提出自对比学习 (Self contrastive learning, SelfCon) 方法, 该方法构造了一个类似于上述第2种形式的同步非对称网络架构, 在该方法中, 将一个特征提取网络和一个投影头组合在一起, 称为一个主干网络块, 分支1采用多个主干网络块进行特征映射, 分支2从分支1中的某个节点引出, 通过一次主干网络块映射得到另一个视图下的特征, 最后进行损失计算. 类似地, Chaitanya等[57]提出可用于图像分割的对比学习方法, 在该方法中, 分支1和分支2共享编码器, 但分支1直接在编码器后加入投影头, 分支2在编码器后加入一个解码器, 然后再加入投影头.
异步对称网络架构
在异步对称的网络架构中, 分支1和分支2采用相同的网络结构, 但是两个分支的神经网络权值更新方式不同, 因此称作异步更新.
MoCo是经典的采用异步对称网络架构的对比学习方法. 其中, 分支1中的特征提取网络和投影头采用SGD等梯度更新方法更新权值, 而分支2的特征提取网络和投影头采用动量更新的方式, 动量更新的公式如式 (1) 所示:
在对比学习中, 负样本的数量对最终的模型效果起决定性的作用. 在原始的对比学习方法中, 负样本的来源是同批次的训练数据, 为了增加负样本的数量, 必须采用大批次的数据来支撑训练, 但这样会造成存储资源过大, 计算消耗巨大的问题. MoCo设计了队列 (Queue) 结构, 存储一定数量的之前批次用到的样本的特征, 当队列容量满时, 最老样本的特征出队, 最新样本的特征入队. 在MoCo方法中, 对比学习所需的负样本将从该队列中抽样产生, 避免了原始对比学习方法为获得较多负样本而构建大的批容量带来的问题. 简言之, 该队列结构减小了对存储资源的要求, 又取消了训练必须采用大批次数据的约束, 提升了计算速度. 后续的基于异步对称网络架构的方法都将该队列结构作为其默认的组成部分.
近年来, 随着Transformer技术的发展, 研究者将其引入到计算机视觉领域, 例如ViT[58]. 在对比学习的研究中. Caron等[59]提出了一种名为DINO (Self-distillation with no labels) 的异步对称对比学习方法, 该方法采用Transformer作为骨干网络, 并将自监督对比学习转换为蒸馏学习的任务, 将分支1视作学生网络, 将分支2视作教师网络. 学生网络采用梯度回传更新参数, 教师网络采用动量更新方式更新参数.
异步非对称网络架构
异步非对称网络架构指的是分支1和分支2采用不同的网络结构, 同时参数更新方式也不同. 异步非对称网络架构与异步对称网络架构的相同之处在于两个分支的更新方式相同, 不同之处在于前者的两个分支的网络结构不同, 而后者相同.
异步非对称网络架构存在两种形式, 一种是采用MoCo作为主干网络, 但是投影头数量不一致, 以BYOL[4]方法为典型代表. 另一种是网络架构不对称, 同时采用梯度交叉更新的方法, 以SimSiam[6]方法为典型代表.
BYOL的主干网络结构是MoCo, 分支2的网络参数采用动量更新机制. BYOL是首个只采用正样本进行对比学习的工作, 但由于训练集中不存在负样本, 如果上下网络分支结构完全相同, 训练就有可能出现“捷径解”的问题 (亦可称为“网络崩塌”问题), “捷径解”指的是对不同的输入, 输出的特征向量完全相同. 为了解决这一问题, BYOL在分支1中额外增加了一个预测头 (MLP), 构成了非对称网络架构, 并将对比学习的实例判别代理任务替换为比对任务, 即分支1最终得到的特征与分支2最终得到的特征要尽可能的相似. BYOL的性能提升归因于以下两点设计: 1) 良好的模型初始化. 2) 在投影头和预测头中加入正则化技术. 如果没有这两种设计, BYOL仍可能出现“捷径解”的问题[60].
Chen等[61]提出了一种基于视觉Transformer的异步非对称网络架构MoCov3. MoCov3采了BYOL型异步非对称网络架构. 在分支1中额外加入了一个预测头, 分支2的编码器采用动量更新, 获得了更好的对比学习效果.
另一种代表性的异步非对称架构是SimSiam. SimSiam方法也不需要利用负样本训练网络. 为了避免网络出现“捷径解”, 该方法的两个分支的网络结构采用交叉梯度更新的方式. 具体而言, 训练分支1的时候, 投影头放在分支1的编码器之后, 计算其损失, 而分支2的梯度停止回传. 在训练分支2的时候, 将分支1的投影头接入到分支2的编码器之后, 并计算损失, 而分支1的梯度停止回传. 这就是交叉梯度更新.
聚类对比学习结构
在上述四种网络架构的基础上, 还可以结合聚类技术进行进一步的优化.
基于实例的对比学习算法在计算损失差别过大, 不利于模型学习到良好的语义特征. 而聚类算法能够在无监督情况下自动学习数据的语义信息. 因此, 一些方法将对比学习与聚类方法结合在起来, 嵌入到上述四种网络架构中.
Caron等[62]首次将K-Means聚类算法与无监督深度学习结合, 提出深度聚类算法 (Deep cluster), 该算法通过K-Means聚类产生伪标签, 然后利用伪标签对模型进行自监督训练. 在该方法的基础上, 作者又提出了一种基于聚类的对比学习算法SwAV, 该算法采用同步对称网络架构训练特征提取网络. 在分支1和分支2之间引入聚类中心信息, 并计算相关损失, 帮助网络进行训练. 相关的细节在第2.5.2节中给出.
Li等[63]提出原型对比学习算法 (Prototypical contrastive learning, PCL), 该方法采用异步对称网络架构, 分支1采用梯度更新, 分支2采用动量更新. 在PCL的前向传播过程中, 当分支2对输入样本提取特征之后, 采用K-Means算法依据样本特征进行聚类. 然后, 将分支1得到的每个样本特征与分支2的所有聚类中心计算聚类对比学习损失, 将分支1的样本与其所属的聚类中心的向量视作正样本对, 其余为负样本对. 最终的损失函数由聚类对比学习损失和原有 (实例) 对比学习损失构成. 聚类对比学习损失计算的目标是最大化样本实例与其相对应的聚类中心特征之间的相似度, 因此这种设计也能在一定程度上缓解实例对比学习中的假负样本问题. PCL仅在分支2上进行聚类计算, 后续工作尝试在两个分支上都进行聚类, 如Wang等[64]提出的方法, 将分支1和分支2都进行聚类计算, 然后进行交叉聚类对比学习损失计算.
损失函数设计
为了实现对比学习的优化目标, 研究者使用了多种针对性的损失函数, 可以分为基于互信息的损失函数 (InfoNCE类)、传统损失函数和混合损失函数.
值得注意的是, 对比损失[13]与对比学习损失很容易在字面上产生混淆, 实际上, 对比损失是一种度量学习损失, 只能用于监督学习, 且样本对数据来源与对比学习不同, 因此, 对比损失不一定是对比学习的损失函数.
InfoNCE损失函数及变种
SimCLR首先将InfoNCE损失引入到对比学习中来, 由于训练所用的样本对来自于同一幅图像的两次不同增广, 因此InfoNCE的优化目标变为最大化同一个样本的两个不同增广图像之间的互信息, SimCLR中采用的InfoNCE如式 (4) 所示:
表1 InfoNCE损失函数及其变种
- FNCL损失函数. 针对在训练对比学习模型时可能存在的假负样本问题, Huynh等[35]首先提出了一种假负样本的检测策略, 然后对InfoNCE进行改进, 在损失函数中剔除了假负样本的干扰. 本文将该方法暂定名为FNCL. 与InfoNCE相比, FNCL方法首先确定当前正在处理的样本对应的假负样本, 然后在分母中计算负样本对之间的相似度时, 去除假负样本的部分.
- SCL损失函数. SCL[8]损失函数面向有监督学习, 对InfoNCE损失函数进行改进, 旨在解决深度有监督学习中采用交叉熵损失时神经网络对噪声标签敏感[73]的问题.
传统损失函数在对比学习中的应用
如何衡量特征空间中不同特征点之间的距离是对比学习中一个很重要的问题. 欧氏距离是衡量特征点之间距离的一个最直观的方法. 通过最小化均方误差损失 (Mean square error, MSE), 可以直接减小同类特征点之间的欧式距离, 实现让同类特征靠近的目的. BYOL先对两个分支的特征进行正则化, 然后采用MSE损失计算两个特征之间的距离, 对网络进行优化.
此外, Shah等[76]将支持向量机与对比学习结合在了一起, 采用改进后的合页损失 (Hinge loss) 优化对比学习网络.
混合损失函数
在某些情况下, 只采用InfoNCE损失不能获得良好的效果, 而将多种损失函数结合, 有助于提升对比学习的效果.
有监督混合损失. Wang等[77]提出了一种将SCL与交叉熵损失结合起来的损失. 该方法采用一个平滑因子, 在训练早期, SCL占据损失的主导地位, 随着学习过程的进行, 交叉熵损失会逐渐占据主导地位. Li等[78]将ProtoNCE的思想带入到SCL中, 即在SCL的分子中计算每个样本与其同类样本所形成聚类中心之间的相似度. 在该算法中, 聚类中心直接由同类样本的特征求平均值得到. 最后, 作者将上述损失与交叉熵分类损失联合训练, 获得了较好的遥感图像分类效果.
半监督混合损失. Li等[79]设计了一个基于伪标签图结构对比学习方法CoMatch. CoMatch方法采用三部分损失训练网络. 对比学习网络中的一个分支, 对于有标签的数据, 采用交叉熵计算损失, 得到分类模型. 在对比学习网络的另外一个分支, 首先利用分类模型对无标签数据进行预测, 产生软标签, 该分支对每个无标注的数据, 进行特征提取, 并利用预测头产生预测结果, 当样本对应的软标签的置信度较高时, 采用交叉熵损失优化网络, 同时, 每个无标签的样本还将采用InfoNCE计算损失. Yang等[44]采用与CoMatch相似的损失构建方法, 对有标签的数据采用交叉熵损失训练, 对软标签置信度高的无标签数据采用交叉熵训练, 对其余数据采用InfoNCE进行对比学习训练, 在该算法中, 由于包含类感知模块, 可以获得与当前训练样本相同类的样本集合, 因此对比学习损失部分采用实例InfoNCE和SCL相结合的损失函数. 此外, Wang等[43]将交叉熵损失和SCL结合在一起, 获得了良好的效果.
无监督混合损失. Park等[80]将对比学习损失融合到基于GAN的图像风格迁移任务中, 该方法对变换前后相同位置的图像块进行对比学习, 将对比学习损失辅助于GAN损失, 训练图像风格迁移模型, 获得了良好的效果.
其他混合损失. Rai等[46]对于具有多视图特征的数据, 对同一样本在不同视角下的特征, 分别采用InfoNCE、MSE和合页损失计算这些特征之间的相似性, 并将三个相似性度量结果进行混合, 用于网络模型优化. Kim等[37]将Mixup方法用在了对比学习中, 该方法假定合成后的样本同时属于合成前的两个样本的类别, 然后将合成样本分别与合成前的样本进行对比学习, 得到两个损失, 这两个损失的混合系数与合成图像时所产生的混合系数一致. 基于相似的InfoNCE与交叉熵损失结合的思想, Kumar等[41]解决了无监督视频动作分割问题, Yang等[81]解决了文本-图像跨模态特征提取问题, Dong等[82]实现对五种模态数据的跨模态特征提取.
相关应用
对比学习在分类、分割、预测等下游任务中均有重要应用. 本文针对每种下游任务, 按照数据的类型, 介绍相关的应用. 本文将数据的类型概括为静态数据和序列数据, 其中静态数据主要有图像、关系型数据、点云和图结构等类型, 序列数据主要有视频、音频、信号等类型.
分类任务
分类任务是对比学习最常见的下游应用. 在静态数据中, 针对图像分类任务, Hou等[83]提出基于对比学习的半监督高光谱图像分类算法, 解决有标注数据不足时高光谱图像分类问题. 该算法分为2个阶段对模型进行训练, 第1阶段, 对于无标签样本, 利用对比学习方法对模型进行预训练. 第2阶段, 利用有标注的样本对模型进行监督学习. 针对小样本遥感场景分类问题, Li等[78]将无监督对比学习方法融合到小样本学习的框架中, 提高了模型的特征提取能力. 郭东恩等[84]将监督对比学习方法引入到遥感图像场景分类任务中, 通过监督对比学习预训练, 提高了遥感图像分类精度. Aberdam等[85]将对比学习应用到文本图像识别任务. 由于对文本图像采用随机增广的方法可能会导致文本内容的丢失等问题, 因此, 作者首先设计可对齐的文本图像增广技术, 然后, 基于同步对称网络架构进行对比学习训练, 最终提高了文本图像识别的准确率. 在细粒度分类问题中, Zhang等[86]直接采用数据集中包含的分层语义标签, 利用SCL损失构建了一个细粒度分类对比学习算法. 对遥感图像数据而言, 同一个地理位置的图像语义信息几乎不随时间的变化而变化. 基于该特点, Ayush等[39]设计了一个针对遥感图像的对比学习方法, 该方法将同一地理位置不同时间的两幅图像作为对比学习中的正样本对. 基于MoCo架构, 该方法将图像定位的代理任务添加到其中一个分支的特征提取网络之后, 辅助模型训练, 从而提高了下游任务的预测性能.
卢绍帅等[87]将监督对比学习应用到了文本数据的情感分类研究中. 在弱监督预训练阶段, 采用三元组损失预训练模型; 随后, 在下游的分类器训练阶段, 采用SCL损失和交叉熵损失联合优化网络, 获得更好的分类结果.
在序列数据的分类中, 也涌现出了一些基于对比学习的算法. 李巍华等[88]将MoCo方法迁移到故障信号诊断研究领域中, 首先, 通过对信号进行无监督对比学习预训练, 获得良好的特征提取网络. 然后, 再进行分类网络训练, 解决了信号故障诊断问题.
自监督对比学习的训练通常分为两个独立的阶段, 即特征提取网络训练和分类器训练. 在分类器训练阶段, 有是否冻结特征提取网络参数的两种选择. Wang等[77]认为这种两阶段的学习方式会损害特征提取网络和分类器的兼容性, 因此提出一个混合框架进行特征提取和分类器的联合学习. 该方法的对比学习部分采用同步对称网络架构, 并在特征提取网络后面加入一个分类器. 在训练过程中, 通过一个平滑因子来调整两个损失的权重, 使得对比学习在训练开始时起主导作用, 随着训练时间的推移, 分类器学习过程逐渐主导训练.
分割任务
分割任务指的是对图像的语义分割、实例分割, 视频中的动作分割等任务. 图像分割任务关注像素级的分类, 因此在此类任务中, 特征提取网络能否学习到良好的局部特征至关重要. Wang等[89]为了更好地学习到图像的局部空间特征, 提出密集对比学习算法 (Dense contrastive learning, DenseCL). 该方法提出全局对比学习框架和局部对比学习框架, 每个框架均采用同步对称网络架构, 两个框架共享同一个特征提取网络. 其中, 局部对比学习框架对卷积得到的特征取消拉平操作, 从而保留特征的空间信息, 使得学习到的特征提取网络更适合于分割任务. 在医学图像分割领域, 由于数据的标注过程非常依赖专家知识, 获取大量的有标注数据代价十分高昂, 因此, 如何利用大量的无标签医学数据训练图像分割模型是一个很重要的研究问题. Chaitanya等[57]将对比学习的思想应用到该领域, 提出基于自编码器框架的全局−局部对比学习网络, 在该方法中, 全局对比学习目标是学习图像的全局语义信息, 局部对比学习目标是学习局部特征信息. 全局网络和局部网络共享同一个编码器. 医学图像中有一个“卷” (Volume) 的概念, 对于全局网络, 正样本对来自于同一幅图像的不同卷. 对于局部网络, 正样本对来自同一幅图像编码后特征的同一个空间位置. 两个分支均采用InfoNCE进行损失计算. 康健等[90]采用监督对比学习方法解决高分辨率SAR图像的分割问题, 通过改进的SCL损失提高同类建筑像素特征之间的相关性, 最终提高模型对建筑物的分割精度. Wang等[91]在Mask R-CNN[92]框架中加入对比学习模块, 提高了像素级特征的可分辨能力, 获得更好的图像分割结果.
在视频动作分割问题中, Kumar等[41]提出基于对比学习的无监督视频动作分割方法. 该方法对SwAV算法进行改进, 且不需要图像增广, 利用“视频数据的相邻帧为同类样本”这一假设, 将相邻帧的图像作为正样本对进行对比学习, 完成视频动作分割任务.
视频及关系数据预测任务
在视频预测问题中, 研究者使用密集预测编码 (Dense predictive coding, DPC)[53], 预测视频未来帧的信息. Han等[42]将DPC与存储库思想结合起来, 提出存储增强密集预测编码方法, 该方法将视频的特征保存到存储库模块中, 并设计了存储库寻址机制. 通过该存储库模块的设计, 网络在训练过程中能够考虑更长时间段的特征, 使预测结果更好. 此外, 为了更好地捕捉到视频中的重要信息, Zhang等[93]提出对编码视频同时进行帧间以及帧内的对比学习, Han等[53]对不同视角的特征进行对比学习.
Bahri等[94]将对比学习方法应用到了关系型数据预测任务中. 为了构建训练所需的正样本对, 作者提出了一种面向关系型数据的增广方法. 该方法受启发于关系型数据中同一维度 (属性) 下的信息语义相同的特点, 先在输入样本的对应维度上随机抹除一部分数据, 然后, 从其他样本的相同维度的数据中随机抽取信息填充到当前输入样本被抹除的位置中, 最后, 基于同步对称架构的网络进行对比学习. 训练得到的模型可用于预测关系型数据中丢失区域的信息.
2.6.4 长尾识别任务
粗略地说, 长尾数据是指尾部类众多的不均衡数据, 而长尾学习的主要研究目标是提升尾部类的识别正确率. 最近几年, 研究者们开始尝试将对比学习的思想和技术应用到长尾学习任务中.
文献[95]提出K-正样本对比损失 (K-positive contrastive loss, KCL), 将对比学习与长尾识别任务结合起来. 具体而言, 在长尾学习的特征学习阶段, KCL使用对比学习方法, 但每个训练样本仅随机选取个同类样本. 而在后续的分类器训练阶段, 仍采用传统的交叉熵损失, 但使用类均衡采样, 以平衡不同类的样本量、提升少数类的分类准确度. 文献[96]提出目标监督对比学习 (Targeted supervised contrastive learning, TSC) 方法, 将监督对比学习用于长尾识别的任务中. 该方法首先在特征空间中设定均匀分布的聚类中心, 然后, 在KCL损失的基础上, 增加样本到其聚类中心之间的距离计算的损失项, 以将样本逼近其聚类中心, 使得不同类别之间的分类界限更加清晰.
文献[97]提出平衡对比学习损失 (Balanced contrastive learning, BCL), 用于长尾识别. 该方法将类别中心加入到对比学习计算中, 并求批中每个类别的样本的梯度的平均值, 以减少多数类样本在梯度方面的影响.
其他任务
对比学习除了在分类、分割、预测这些任务中有广泛的应用以外, 在多模态学习任务中, 也有重要作用. 多模态学习任务通常包含两大类子问题, 即模态内的特征学习问题和模态间特征对齐问题.
Yang等[81]提出了一种视觉−语言跨模态对比学习方法. 该方法提出将对比学习方法应用于模态内特征提取网络的训练, 使各模态的特征提取网络能力更强, 解决了跨模态学习过程中模态内的特征学习问题. Dong等[82]将对比学习运用在包含5个模态数据的模型训练中. 针对模态内特征学习问题, 该方法采用掩码恢复任务作为模态内模型的代理任务. 然后, 针对不同模态特征之间的对齐问题, 设计模态间对比学习模块, 利用模态间的对齐得分矩阵衡量不同模态间信息的相似度, 进行更好的对比学习. Afham等[98]将对比学习算法引入到3D点云表示学习中. 该模型采用两个并行的对比学习方法, 其中一个对比学习方法基于SimCLR网络结构, 在点云数据内部进行对比学习, 另一个对比学习方法引入二维图像数据, 将点云数据与对应的二维图像数据进行跨模态的对比学习.
Laskin等[99]将对比学习结合到强化学习中, 用于提高特征提取网络的能力. 该方法基于MoCo架构, 分支1的输出, 送入强化学习中; 分支1和分支2的输出, 组对送入对比学习中.
综合对比分析
本节根据前文提出的对比学习归类方法, 对现有的方法进行归纳汇总和整体分析. 表2汇总了代表性的对比学习方法及其所属归类 (包括具体样本对构造、图像增广方法、网络架构类型和损失函数).
表2 对比学习方法整体归类分析
未来发展方向
本文在对目前的对比学习论文进行归纳和总结后, 认为该研究领域还存在许多可以探索的问题, 同时存在一些可以与其他领域互相借鉴和发展的方向, 具有广泛的研究前景, 以下是对该领域发展的展望:
- 对比学习中样本对的选择方法仍存在发展空间, 在训练过程中剔除假负样本以及选择合适的正样本对能够有效地提高特征学习网络的学习效果. 因此如何更加合理地剔除假负样本和选择正样本对是一个值得研究的关键问题.
- 解决对比学习训练过程中的一致性与均匀性矛盾是一个十分重要的问题, 如果该问题得到解决, 能在很大程度上提高特征提取网络在下游任务上的泛化能力.
- 对比学习和无监督域自适应[107-108]的结合. 在无监督域自适应问题中, 源域数据存在标签, 目标域数据不存在标签, 源域数据和目标域数据分布相近或相同, 且拥有相同的任务[107], 如何将源域数据和目标域数据一同训练, 使得模型能够在目标域上获得良好的效果是无监督域自适应的核心问题. 在无监督域自适应研究中, 源域数据和目标域数据可以通过自监督训练方法联合训练模型, 对比学习就是一种先进的自监督训练算法, 因此如何将对比学习方法与无监督域自适应方法进行有效结合是一个值得研究的问题.
- 目前对比学习主要的下游应用是分类任务, 如何设计更多的对比学习方法应用到检测、追踪等下游任务中, 也将是未来的发展方向之一.
结束
对比学习是近年的研究热点. 本文系统梳理了对比学习的研究现状, 提出一种将现有方法划分为样本对构造层、图像增广层、网络架构层、损失函数层和应用层的归类方法, 并从自监督对比学习算法入手, 分析和归纳近四年主要的对比学习方法. 而且, 本文还全面对比了不同方法在各种下游任务中的性能表现, 指出了对比学习现存的挑战, 勾勒了其未来发展方向. 对比学习研究作为一个快速发展的研究领域, 在理论依据、模型设计、损失函数设计及与下游任务结合等方面还有较大的研究空间.
#Tf-KD
知识蒸馏理解为正则化?从标签平滑正则化的角度和 KD 关系的角度提出以下两个论点:KD 是一种可学习的标签平滑正则化。标签平滑正则化为 KD 提供了一个虚拟的 Teacher 模型。基于这些分析,本文进一步提出了一种无教师知识蒸馏方法,并在分类任务上验证了其性能。
把知识蒸馏理解为正则化:从标签平滑正则化的角度重新审视知识蒸馏
论文名称:Revisiting Knowledge Distillation via Label Smoothing Regularization
论文地址:
https://arxiv.org/pdf/1909.11723
本文发现:
- 除了 Teacher 可以帮助提高 Student 性能以外,Student 也可以通过逆向 KD 提高 Teacher 性能
- 一个缺乏训练的,准确度远低于学生的 Teacher 模型,仍然可以显著提高 Student 模型。
为了解释这些现象,作者从标签平滑正则化的角度和 KD 关系的角度提出以下两个论点:
- KD 是一种可学习的标签平滑正则化。
- 标签平滑正则化为 KD 提供了一个虚拟的 Teacher 模型。
基于这些分析,本文进一步提出了一种无教师知识蒸馏 (Tf-KD) 方法。Tf-KD 可以直接用于训练深度神经网络。在没有任何额外计算成本的情况下,Tf-KD 在 ImageNet 上比建立好的基线模型提高了 0.65%,优于标签平滑正则化。
1.1.1 背景和动机
知识蒸馏旨在将知识从一个 Teacher 转移到另一个 Student 模型。关于 KD 的一种常见观点是:Teacher 模型的 soft target 的不同类别之间相似度信息的 "dark knowledge" 可以帮助增强学生模型的性能。作者在本文中通过以下几个探索性实验来检查 (并反对) 这一观点,并指出:教师模型中的 soft target 为学生模型提供的有效正则化的作用,才是真正重要的。
1.1.2 探索性实验
首先作者做了两个探索性实验:
- Reversed Knowledge Distillation (Re-KD): 让 Student 模型教 Teacher 模型 (通过转移 soft target)。
- Defective Knowledge Distillation (De-KD): 让一个缺乏训练的,准确度远低于学生的 Teacher 模型,来教 Student 模型。
按照上面的常见观点,我们应该得到下面的结论:
- Teacher 模型不会通过 Student 的训练得到显著的增强。因为性能较弱的 Student 模型太弱,不能提供类别之间可靠的相似度信息。
- 缺乏训练的 Teacher 模型也不会增强学生模型的性能。因为缺乏训练的 Teacher 模型不能提供类别之间可靠的相似度信息。比如,假设 Teacher 的准确率只有10%,那么学生将从其软目标中学习,误差为 90%,因此 Student 不应该得到提高,甚至表现会更差。
但是,作者通过大量实验观察到了相互矛盾的结果。实验结果如下。
Re-KD 实验
在图1的 Table.1 中,通过向 Student 学习,Teacher 的性能得到了显著的改善,尤其是 ResNet18 和 ResNet50 的 Teacher 模型。两位教师在以 MobileNetV2 和 ShuffleNetV2 作为 Student 训练时,性能提升的幅度均超过1.1%。同样也可以在 CIFAR10 和 Tiny-ImageNet 上观察到类似的结果。可以看到,在大多数情况下,Normal KD 的效果更好。需要注意的是,Re-KD 以教师的准确率作为基线准确率,比 Normal KD 要高很多。然而,在某些情况下,我们可以发现 Re-KD 优于 Normal KD。例如,在图1的 Table.2 中,通过 MobileNetV2 的教学,学生模型只能提高 0.31%,但是通过向学生学习,教师 MobileNetV2 可以提高 0.92%。
图1:Re-KD 实验结果
Re-KD 实验结论: 除了 Teacher 可以帮助提高 Student 性能以外,优秀的 Teacher 也可以通过向较弱的 Student 学习而显著增强。
De-KD 实验
作者在 CIFAR100 和 Tiny-ImageNet 上进行 De-KD 实验。作者采用 MobileNetV2 和 ShuffleNetV2 作为学生模型,ResNet18, ResNet50 和 ResNeXt29 (8×64d) 作为教师模型。Poorly-Trained 的教师被1个 Epoch (ResNet18) 或50个 Epoch (ResNet50 和 ResNeXt29) 训练,性能非常差。例如 ResNet18 在经过1个 Epoch 训练后,在 CIFAR100 上的准确率仅为 15.48%,在 Tiny-ImageNet 上的准确率为 9.41%。ResNet50 在经过50个Epoch (总共200个 Epoch) 的训练后,在 CIFAR100 和 Tiny-ImageNet 上的准确率分别为 45.82% 和 31.01%。
在图2的 Table.4 中,我们可以观察到,即使是一个缺乏训练的,准确度远低于学生的 Teacher 模型,仍然可以显著提高 Student 模型。比如以1 Epoch 训练的 ResNet18 模型作为 Teacher (准确率只有15.48%),MobileNetV2 和 ShuffleNetV2 的性能可以分别提升 2.27% 和 1.48%。对于 Poorly-Trained 的 ResNeXt29 (准确率为51.94%),作者发现 ResNet18 和 MobileNetV2 仍然可以分别提高 1.41% 和 3.14%。
图2:De-KD 实验结果
总结以上两个实验的结果为:
- 除了 Teacher 可以帮助提高 Student 性能以外,Student 也可以通过逆向 KD 提高 Teacher 性能
- 一个缺乏训练的,准确度远低于学生的 Teacher 模型,仍然可以显著提高 Student 模型。
这样有趣的结果促使作者
Re-KD 和 De-KD 的反直觉结果促使作者重新思考 KD 中的 "dark knowledge" ,作者认为它不仅仅包含相似信息。一个模型缺乏足够的相似度信息,仍然可以提供 "dark knowledge" 来增强其他模型。为了解释这一点,作者将 KD 解释为一个正则化项 (Regularization Term)。作者从标签平滑正则化 (Label Smoothing regularization, LSR) 的角度重新审视 KD 的过程。
1.1.3 标签平滑正则化和知识蒸馏
然后作者从理论上分析了 KD 和 LSR 之间的关系:
- 对于标签平滑正则化 (LSR),作者把它分成了2项:即:一个 Ground-Truth 分布 (one-hot label) + 一个虚拟的教师模型,该模型提供了一个均匀分布来教模型。
2. KD 也有相对应的两项。即:一个 Ground-Truth 分布 (one-hot label)+ 一个教师模型分布。其中 KD 的第二项的分布来自教师模型,但 LSR 的第二项的分布是人工设计的。也就是说,KD 其实相当于一个可学习的标签平滑正则化过程。这种关系可以解释上述违反直觉的结果。
具体而言,对于标签平滑正则化:
对于知识蒸馏:
对比6式和1式,不难发现,KD 是 LSR 的一种特殊情况 (即把 LSR 的均匀分布改为了一个由教师模型输出的可学习的分布)。
通过对两个损失函数的比较,可以总结出知识蒸馏与标签平滑正则化之间的关系如下:
- 知识蒸馏是一种可学习的标签平滑正则化,其功能与后者类似,即对模型的标签进行正则化。
- 标签平滑是一种特别的知识蒸馏,它可以视为是 Teacher 的输出是均匀分布,然后温度 \tau=1\tau=1 的特殊情况。
- 温度越高,教师在知识蒸馏过程中的软目标分布越类似于标签平滑的均匀分布。
至此,Re-KD 和 De-KD 的实验结果就可以得到解释了。无论是 Student 教 Teacher,还是 Poorly-Trained 的 Teacher 教 Student,它们都为被教的模型提供了正则化。
1.1.4 无教师知识蒸馏策略
如 1.1.3 节所述,教师模型中的 "dark knowledge" 更多的是一个正则化,而不是类别间的相似度信息。因此,作者使得一个简单的模型替换教师模型的输出分布,提出了一个新的无教师知识蒸馏 (Tf-KD) 框架,它有两种实现方式。
Self-Training KD
图3:手工设计的教师的分布和均匀分布
1.1.5 实验结果
Self-Training KD 实验结果
CIFAR100 实验结果:Baseline 模型包括 MobileNetV2, ShuffleNetV2, GoogLeNet, ResNet18, DenseNet121 和 ResNeXt29(8×64d),训练 200 epochs,使用 SGD 优化器,momentum 设为 0.9,weight decay 为 5e-4。
如下图4所示为六种模型的精度。可以看出,Tf-KD self 始终优于 Baseline。例如,ResNeXt29 作为一个参数为34.52M 的模型,通过自正则化使自身提高了 1.05% 的精度。比如使用 ResNet50 来教 ReseNet18,Student 模型有 1.19% 的提高,但本文方法在没有使用任何更强的教师模型的情况下实现了 1.23% 的提高。
图4:CIFAR100 实验结果
Tiny-ImageNet 和 ImageNet 实验结果:分别如图5和6所示。可以看出 Tf-KD self持续改善了基线模型,并与正常 KD 取得了相当的性能提升。
图5:Tiny-ImageNet 实验结果
图6:ImageNet 实验结果
Manually Designed Regularization 实验结果
图8:Tiny-ImageNet 实验结果
图9:ImageNet 实验结果
Tf-KD reg 在 ImageNet 上将 ResNet50 的精度提高了 0.65%。即使是对于一个拥有 88.79M 参数的ResNeXt101(32x8d), Tf-KD reg 使用手工设计的教师输出分布也能实现 0.48% 的改进。
总结
关于 KD 的一种常见观点是:Teacher 模型的 soft target 的不同类别之间相似度信息的 "dark knowledge" 可以帮助增强学生模型的性能。作者在本文中通过以下几个探索性实验来检查 (并反对) 这一观点,并指出:教师模型中的 soft target 为学生模型提供的有效正则化的作用,才是真正重要的。作者从标签平滑正则化的角度和 KD 关系的角度提出以下两个论点:KD 是一种可学习的标签平滑正则化。标签平滑正则化为 KD 提供了一个虚拟的 Teacher 模型。基于这些分析,本文进一步提出了一种无教师知识蒸馏方法,并在分类任务上验证了其性能。
#低比特模型量化
又挖来一个说自己是最好的~~ 涉及到量化在推理和训练的内容
1.1 神经网络模型量化概述
随着深度学习的发展,神经网络被广泛应用于各种领域,模型性能的提高同时也引入了巨大的参数量和计算量。模型量化是一种将浮点计算转成低比特定点计算的技术,可以有效的降低模型计算强度、参数大小和内存消耗,但往往带来巨大的精度损失。尤其是在极低比特(<4bit)、二值网络(1bit)、甚至将梯度进行量化时,带来的精度挑战更大。
这篇文章比较详细,所以下面这个图是这篇文章的一个整体目录。当然啦,除了非常多的文字,这篇文章塞了59个公式,涉及到量化在推理和训练的内容。虽然可能看得很辛苦,但是也希望可以多多支持ZOMI酱哈。打公式不容易,发现错误欢迎评论留言指正。
与FP32类型相比,FP16、INT8、INT4的低精度类型所占用空间更小,因此对应的存储空间和传输时间都可以大幅下降。以手机为例,为了提供更人性和智能的服务,现在越来越多的OS和APP集成了深度学习的功能,自然需要包含大量的模型及权重文件。以经典的AlexNet为例,原始权重文件的大小已经超过了200MB,而最近出现的新模型正在往结构更复杂、参数更多的方向发展。显然,低精度类型的空间受益还是很明显的。低比特的计算性能也更高,INT8相对比FP32的加速比可达到3倍甚至更高,功耗上也对应有所减少。
模型量化即以较低的推理精度损失将连续取值(或者大量可能的离散取值)的浮点型模型权重或流经模型的张量数据定点近似(通常为int8)为有限多个(或较少的)离散值的过程,它是以更少位数的数据类型用于近似表示32位有限范围浮点型数据的过程,而模型的输入输出依然是浮点型,从而达到减少模型尺寸大小、减少模型内存消耗及加快模型推理速度等目标。
首先量化会损失精度,这相当于给网络引入了噪声,但是神经网络一般对噪声是不太敏感的,只要控制好量化的程度,对高级任务精度影响可以做到很小。
其次,传统的卷积操作都是使用FP32浮点,浮点运算时需要很多时间周期来完成,但是如果我们将权重参数和激活在输入各个层之前量化到INT8,位数少了乘法操作少了,而且此时做的卷积操作都是整型的乘加运算,比浮点快很多,运算结束后再将结果乘上scale_factor变回FP32,这整个过程就比传统卷积方式快很多。
提前从体系结构的考量角度思考量化带来的另一个好处是节能和芯片面积,怎么理解呢?每个数使用了更少的位数,做运算时需要搬运的数据量少了,减少了访存开销(节能),同时所需的乘法器数目也减少(减少芯片面积)。
1.1.1 主要的量化方法
一边而言,量化方案主要分为两种:在线量化(On Quantization)和离线量化(Off Quantization),在线量化指的是感知训练量化(Aware Quantization),离线量化指的是训练后量化(Post Quantization)。训练量化根据名字的意思很好理解,其实就是在网络模型训练阶段采用量化方案进行量化。训练后量化中的量化方案跟训练并不相关,主要是在模型离线工具(模型转换工具的时候)采用量化方案进行量化。
- 感知量化训练(Aware Quantization)
实际上无论是Tensorflow、MindSpore、Pytroch的量化感知训练是一种伪量化的过程,它是在可识别的某些操作内嵌入伪量化节点(fake quantization op),用以统计训练时流经该节点数据的最大最小值,便于在使用端测转换工具(推理转换工具)的时候,转换成端侧需要的格式时进行量化使用。
目的是减少精度损失,其参与模型训练的前向推理过程令模型获得量化损失的差值,但梯度更新需要在浮点下进行,因而其并不参与反向传播过程。
某些操作无法添加伪量化节点,这时候就需要人为的去统计某些操作的最大最小值,但如果统计不准那么将会带来较大的精度损失,因而需要较谨慎检查哪些操作无法添加伪量化节点。
值得注意的是,伪量化节点的意义在于统计流经数据的最大最小值,并参与前向传播,让损失函数的值增大,优化器感知到这个损失值得增加,并进行持续性地反向传播学习,进一步提高因为伪量化操作而引起的精度下降,从而提升精确度。
值得注意的是,训练时候的原理与在端测推理的时候,其工作原理并不一致。
2. 训练后动态量化(Post Dynamic Quantization)
训练后动态量化是针对已训练好的模型来说的,针对大部分已训练,未做任何量化处理的模型来说均可用此方法进行模型量化。
其工作比较简单,在端测转换工具的时候,对网络模型的权重进行统计其每一层卷积的layer或者channel的最大值和最小值,然后通过量化公式对数据进行byte转换。这样得到的权重参数比以前小1/4。推理的时候,在内存初始化的时候对网络模型中的权重进行反量化操作变成float进行正常的推理。
3. 训练后校正量化(Post Calibration Quantization)
训练后静态量化,同时也称为校正量化或者数据集量化。其原理是对于Mindspore在端测低比特推理的时候(Inference),需要生成一个校准表来量化模型。这个量化校准表的生成需要输入有代表性的数据集,对于分类任务建议输入五百张到一千张有代表性的图片,最好每个类都要包括(即数据无偏)。
量化算法介绍
一般而言,无论per channel还是per layer量化方案,对于weight权重的量化使用对称量化,对于activate激活的量化使用非对称量化。
其原因是对于权重而言,其数据的分布为对称的如或,因此采用对称量化可以进一步有效降低计算量,使得数据分布更加符合其真实的分布;activate激活在网络中通常使用ReLU和ReLU6等作为网络模型的激活函数,其数据分布集中在或者,如果采用对称方案会加剧数据的离散程度,另外一个原理是会造成数据的浪费,如[-128,0]之间并不存储任何数据,只有[0,127]有数据分布。
下面以int8作为量化的标准,介绍一下两种量化算法的主要细节。
- 对称量化symmetry
对称的量化算法原始浮点精度数据与量化后INT8数据的转换如下:
其中,scale默认是float32浮点数,为了能够表示正数和负数,int采用signed int8的数值类型。通过将float32原始高精度数据转换到signed int8数据的操作如下,其中round为取整函数,量化算法需要确定的数值即为常数scale:
由于在神经网络的结构以层(Layer)来进行划分的,因此对权值和数据的量化可以层Layer为单位来进行,对每层Layer的参数和数据分别进行不同scale的量化。
对权值和数据的量化可以归结为寻找scale的过程,由于int8为有符号数,要保证正负数值表示范围的对称性,因此对所有数据首先进行取绝对值的操作,使待量化数据的范围变换为,再来确定scale,其scale正确的计算公式为:
另外对于offset的计算公式为:
2. 非对称asymmetric
非对称的量化算法与对称的量化算法,其主要区别在于数据转换的方式不同,如下,同样需要确定scale与offset这两个常数:
3. 量化初始化
在一般的端测推理的时候,由于网络模型的输入并没有伪量化节点记录输入tensor的最大值和最小值,因为无法求得量化参数scale和offset,这个时候推理框架许可要根据输入数据的标准差deviation和均值mean进行计算,得到对应的量化参数。
其中标准差Standard Deviation的计算公式为下:
值得注意的是,由于在其他端测推理框架(如tflite)需要手工输入标准差deviation和均值mean,容易导致对数据分析、数据输入的错误和框架的割裂,因此感知量化训练的时候会对模型的输入和输出加上fakeQuant伪量化节点,记录数据min和max,从而求得Mindspore端测用到input tensor的scale和offset。
1.1.2 感知量化训练
上面讲解了基本的量化公式和量化的方法,下面来详细展开感知量化训练(Aware Quantization)模型中插入伪量化节点fake quant来模拟量化引入的误差。端测推理的时候折叠fake quant节点中的属性到tensor中,在端测推理的过程中直接使用tensor中带有的量化属性参数。
- 伪量化节点
为量化节点(Fake Quant)的意义在于:
1)找到输入数据的分布,即找到min和max值;
2)模拟量化到低比特操作的时候的精度损失,把该损失作用到网络模型中,传递给损失函数,让优化器去在训练过程中对该损失值进行优化。
a. 基本原理
低比特量化模型运行时,需要确定scale与offset两个量化参数:
对于权值和数据的量化,都采用上述公式的方案进行量化,min和max为待量化参数的最小值和最大值。
前面呢,曾经提到一般而言,权重数据是对称,为了可以进一步减少数据的计算,较少额外的存储数据,因此推荐使用对称的量化算法。但是在对mobieNetV2,mobileNetV3的实际测试开发的过程中,发现数据大部分是有偏的,例如mobileNetV2中:
此时权重对应的数据并不是以0为中心点对称,featture.child8.conv.child3.weight的权重数据分布范围是,为了更好地拟合更多的数据,对更多的数据具有更好的泛化性,因此统一使用了非对称的量化算法。
b. 正向传播
为了求得网络模型tensor数据精确的Min和Max值,因此在模型训练的时候插入伪量化节点来模拟引入的误差,得到数据的分布。对于每一个算子,量化参数通过下面的方式得到:
为了更好地表示上面公式的作用,正向传播的时候fake quant节点对数据进行了模拟量化规约的过程,如下图所示:
首先对数据根据min和max值进行截断,然后把float数据转换成为int数据,之后再把int数据重新转换成为float数据,该操作会丢失掉float1与float2转换之间的精度差。对于量化感知训练,通过模拟量化操作时候对数据进行规约操作,所以网络模型中每一个tensor数据可以根据下面公式进行封装成为op,得到:
c. 反向传播
按照正向传播的公式,如果方向传播的时候对其求导数会导致权重为0,因此反向传播的时候相当于一个直接估算器:
最终反向传播的时候fake quant节点对数据进行了截断式处理,如下图所示:
d. 更新Min和Max
FakeQuant伪量化节点主要是根据找到的min和max值进行伪量化操作,更新min和max分别为running和moving,跟batch normal算子一样,这里不进行过多的讲述,具体在Mindspore框架中会自动根据网络模型的结构进行自动插入不同的形式,具体用户不感知。
running minimum的计算公式为:
2. BN折叠
初步实施方案中构图比较复杂的主要集中在如何拆分BN层,本节将会对拆分的原理进行细化,落实确定到每一个算子上面,包括每个算子的具体计算公式,控制原理。
a. BN Fold原理
基本卷积操作为:
网络模型中经常使用BN层对数据进行规约,有效降低上下层之间的数据依赖性。然而大部分在推理框架当中都会对BN层和卷积操作进行融合,为了更好地模拟在推理的时候的算子融合操作,这里对BN层进行folding处理。下面左边图是(a)普通训练时模型,右边图是(b) 融合后推理时模型。
下面图中左边是BN折叠的BN folding训练模型,右边是BN folding感知量化训练模型。
b. Correction数据矫正
- 贝塞尔矫正(Bessel Correction)
在计算方差的时候,论文并没有提及贝塞尔校正,因为贝塞尔校正是通用的统计学方法,用于校正方差。
具体对应于样本标准差为:
- Batch Normal矫正
由于每次更新batch参数的delta的时候,都是使用当前batch的统计数据,这会使得权重参数连带着一起被当前的batch影响,为了避免当前权重数据w的抖动,加入correction的校正因子将权重缩放到长期batch统计数据中。
模型开始训练的时候会在fold conv卷积的输出除以correction因子,这样的操作是为了让模型直接去学习正常的BN操作(根据当前的batch进行学习),在学习到一定程度之后,冻结当前的BN不再更新全局delta,然后fold conv卷积的操作中直接作用,并同时修改bias,作为correction_2更新到ADD算子中。
Frozen前:
Frozen后:
加上correction能够有效地抑制在后期阶段weight的数据波动。
c. BN FOLD训练图
- 算子
组合模式ConvD+BN+ReLU拆分子图并加入FakeQuant算子,一共拆分为为以下几个算子:Conv2D、BatchNormFold、CorrectionMul、MulFold、FakeQuantWithMinMaxPreChannel、ConvMul、CorrectionAdd、AddFold、ReLU、FakeQuantWithMinMax。
1) Conv2D (in: x, weight; out: y):普通卷积,用于计算BatchNormFold的入参:
- 正向图
下面左边为原始设计bn折叠训练图,右边是实际Mindspore执行经过优化融合的训练图。
图中主要注意的点为BN_Fold_1和BN_Fold_2,其中BN_Fold_1的作用有两个:拆分融合的BN层对weight的影响,和对权重数据进行校正;BN_Fold_2的作用有两个:拆分融合的BN层对bias的作用影响,和对bias数据进行校正。
d. BN FOLD推理图
- 算子
组合模式ConvD+BN+ReLU拆分子图并加入FakeQuant算子,一共拆分为以下个算子:Conv2D、BatchNormFold、MulFold、FakeQuantWithMinMaxPreChannel、AddFold。
1) Conv2D (in: x, weight; out: y):普通卷积,用于计算BatchNormFold的入参:
- 验证图示例
正向推理验证图,上面的所有公式都会化为这个图的实际计算方式。
1.1.3 训练后量化
训练后静态量化(Post Calibration Quantization),同时也称为校正量化或者数据集量化。其原理是对于Mindspore在端测低比特推理的时候(Inference),需要生成一个校准表来量化模型。其核心是取得数据值的量化参数表。
1. 权值量化
权值在进行推理加速时均已确定,因此不需要对权值进行校准。如果使用对称量化方案,max使用权值的绝对值的最大值,对于非对称量化算法,max和min使用权值的最大值和最小值。
根据算法验证结果,对于Convolution,每个卷积核按照per channel的方式采用一组独立的量化系数(scale和offset),量化后推理精度较高。因此,Convolution权值的量化根据卷积核数量分组进行,计算得到的scale和offset的数量与卷积核数量相同。Dense的权值使用一组scale和offset。
2. 数据量化
数据量化是对每个要量化的Operation的输入数据进行统计,每个Operation计算出最优的一组scale和offset。
数据是推理计算的中间结果,其数据的范围与输入高度相关,需要使用一组参考输入作为激励,得到每个Operation的输入数据用于确定量化max和min。数据的范围与输入相关,为了使确定的min和max在网络接收不同输入时有更好的鲁棒性,因此提出基于统计分布确定min和max的方案。
该方案的思路为最小化量化后数据的统计分布与原始高精度数据的统计分布差异性,操作流程如下:
- 使用直方图统计的方式得到原始float32数据的直方图统计分布;
- 在给定的min和max搜索空间中选取若干个和分别对待量化数据进行量化,分别得到量化后的数据;
- 使用同样的直方图统计的方式得到n个的直方图统计分布;
- 分别计算中每个与的统计分布差异性,找到差异性最低的一个对应的min和max作为确定的量化数值。
在上述操作中,涉及的超参数包括进行直方图统计时选取的直方图bin个数、min和max的搜索空间、统计分布差异性的指标。
对于直方图bin个数,该参数直接反应了直方图统计特征的分布数个数,由于数据经过量化后会集中到256个离散的点上,因此bin的个数不宜过大,否则绝大多数的bin都没有数值。
max的搜索空间可以通过search_start_scale,search_end_scale与search_step来确定。
- search_start_scale为搜索空间起始点与search_value的比值。
- search_end_scale为搜索空间结束点与search_value的比值。
search_step为搜索空间中每次搜索的值与seach_value的比值步进值。以max_candidate=100,search_start_scale=0.8,search_end_scale=1.2,search_step=0.01为例,对称量化算法下,其定义的max搜索空间为从100*0.8=80到100*1.2=120的范围,每次步进100*0.01=1,一共41个d_max搜索值;非对称量化算法下,搜索0.8*(max–min) ~ 1.2*(max–min),确定最好的一个系数。
继续举多一个例子, search_start_scale =0.3,search_step=0.01,search_end_scale==1.7,bin=150。需要在0.3*max~1.7*max这个范围中找一个最好的max,搜索步长是0.01max,因此需要搜索(1.7-0.3)/0.01 + 1 = 141个max数值。直方统计的bin个数也可以设置,假设当前是150。对于算法方案一,将0-2*max的数据分为150段,统计数据落在每段中的频率,使用数据的绝对值统计,对于算法方案二,在0.3*(max – min)~1.7*(max - min)这个范围中找一个最好的ratio,将0-2*(max - min)的数据分为150段,统计数据落在每段中的频率,使用data – min的值来统计频率。141个数值都要统计,因此一个量化算子需要存储141*150个数值。多个batch情况下对frequancy进行累加。
统计分布差异性的指标为计算两个长度为n直方图、分布之间的信息差异度,选取的指标包括如下三种:
1) Kullback-Leibler Divergence(KL散度) 计算方式如下:
3. Calibration流程
a. Calibration功能
离线Calibration需要完成以下功能:
- 对算子的输入数据量化校准,计算出数据的最优scale和offset;
- 将算子的权值量化为INT8,计算出权值的scale和offset。
- 将算子的bias量化为INT32。
- 由于算子输入数据在推理过程中才能产生,因此离线Calibration还要实现inference功能。与普通inference过程的不同之处在于对每个需要量化的op的输入数据和权值数据进行了量化和反量化过程。
b. Calibration过程
Calibration过程可以分为4步:
- 遍历graph中的node,对需要量化的算子的权重进行量化。
- 第一次inference,搜索需要量化的算子的输入数据的max和min。
- 第二次inference,进行数据的直方统计。
- 计算分布差异性能指标(见4.2),根据指标选择最好的min和max,然后计算出数据的scale和offset,根据数据和权值的scale,进行bias量化。
值得注意的是,min不一定是所有数据batch中的最小值,max也不一定是所有batch中的最大值,与min_percentile和max percentile的值相关。
假设每个batch处理10张图片,共100个batch,某个op的1张图片输入数据是1000个数,max_percentile = 0.99999,数据总量是10*100*1000 = 1000000个数。1000000*0.99999 = 999990。把所有输入数据从大到小排序,max取第10个数。因此需要缓存10个数,对第一个batch的输入1000个数进行从大到小排序,取前10大的数进行缓存,第二个batch的输入1000个数进行从大到小排序,取前10个数,与缓存的10个数共20个数进行排序,取前10大的数,以此类推,最终获得所有batch数据中前10大的数。
Inference有两种方式,第一种是数据不做量化进行推理,第二种是数据量化后进行推理。数据量化是指算子的当前batch输入数据使用当前batch的max和min进行量化,将数据量化为INT8,再由INT8转回FP32进行inference计算。
第二次inference,进行数据的直方统计。根据第2步已经根据max_percentile找到需要的max的值。
最后,计算分布差异指标,根据指标选择最好的min和max,然后计算出数据的scale和offset,根据数据和权值的scale,进行bias量化。
c. 搜索空间
影响搜索空间的参数可以分为两类:一类是增加搜索组合的数量的可以称之为配置参数,一类是影响单个模型结果的称之为超参数(不增加结果数量)。
1.1.4 端测量化推理
端侧量化推理的结构方式主要由3种,分别是下图的(a) Fp32输入Fp32输出、(b) Fp32输入int8输出、(c) int8输入int32输出。
INT8卷积示意图,里面混合里三种不同的模式,因为不同的卷积通过不同的方式进行拼接。
使用INT8进行inference时,由于数据是实时的,因此数据需要在线量化,量化的流程如图所示。数据量化涉及Quantize,Dequantize和Requantize等3种操作。
1. Quantize量化
将float32数据量化为int8。离线转换工具转换的过程之前,计算出数据量化需要的scale和offset,如果采用对称量化算法,则根据公式4进行数据量化,如果采用非对称量化算法,则根据本文公式6进行数据量化。
2. Dequantize反量化
INT8相乘、加之后的结果用INT32格式存储,如果下一Operation需要float32格式数据作为输入,则通过Dequantize反量化操作将INT32数据反量化为float32。
Dequantize反量化推导过程如下:
3. Requantize重量化
INT8乘加之后的结果用INT32格式存储,如果下一层需要INT8格式数据作为输入,则通过Requantize重量化操作将INT32数据重量化为INT8。
重量化推导过程如下:
因此重量化需要本Operation输入input和weight的scale,以及下一Operation的input输入数据的scale和offset。
4. Conv2d的INT8计算
c3项可以在离线时计算好,作为新的bias参数传入。c1和c2项需要在线计算。Conv2d的INT8计算根据输入是float32还是int8决定是否需要插入Quantize OP,根据输出是float32还是int8决定输出是插入Dequantize OP还是Requantize OP。
#ELA~~
本文介绍了一种创新的注意力机制,称为高效局部注意力(ELA),旨在增强卷积神经网络(CNNs)的表示能力。ELA以其轻量级和直接的结构简化了准确定位感兴趣区域的过程。 兰州大学提出全新Backbone,即插即用模块!使用1D卷积+GN,改进BN泛化性不足问题
注意力机制因其能有效提升深度神经网络性能而在计算机视觉领域获得了广泛的认可。然而,现有方法通常在有效利用空间信息方面存在困难,或者即便能够利用,也往往以减少通道维度或增加神经网络复杂度为代价。
为了解决这些限制,本文提出了一种高效的局部注意力(ELA)方法,该方法以简单的结构实现了显著的性能提升。通过分析坐标注意力方法的局限性,作者识别出了批量归一化中泛化能力的不足,维度降低对通道注意力的不良影响以及注意力生成过程的复杂性。
为了克服这些挑战,作者提出融入1D卷积和组归一化特征增强技术。这种方法能够通过有效地编码两个1D位置特征图而无需维度降低,实现准确地区分感兴趣区域,同时允许轻量级的实现。
作者精心设计了ELA中的三个超参数,从而形成了四个不同版本:ELA-T,ELA-B,ELA-S和ELA-L,以满足不同视觉任务,如图像分类、目标检测和语义分割的特定需求。ELA可以无缝集成到ResNet、MobileNet和DeepLab等深度CNN网络中。在ImageNet、MSCOCO和Pascal VOC数据集上的广泛评估表明,所提出的ELA模块在上述三种视觉任务中均优于当前最先进的方法。
1 Introduction
深度卷积神经网络(CNNs)已成为计算机视觉领域中一个重要的研究方向,它在图像分类、目标检测和语义分割方面取得了显著的进展。一些值得关注的模型,如AlexNet,ResNet,YOLO,和MobileNet,都为这一进步做出了贡献。
尽管Transformer已经引入了许多进步,但深度卷积神经网络拥有自己有利的归纳偏置,使它们能够有效地从小型和中型数据集中学习——这是Transformer所缺乏的能力。因此,设计更高效的网络架构仍然是当代研究者需要解决的重要挑战。在深度CNN领域,注意力机制被提出作为模拟人类认知行为的手段。这种机制使神经网络能够关注相关信息,同时忽略不重要的细节,最终提高网络的学习能力。
一个显著的例子是SE块注意力,它利用2D全局池化将空间维度压缩到通道维度,从而促进增强特征学习。然而,SE块只考虑编码通道间信息,忽视了特征图的空间位置信息。尽管BAM和CBAM提取了空间注意力,但它们未能建模对视觉任务至关重要的长距离依赖,同时也减少了输入特征图的通道维度。
为此,开发了坐标注意力(CA)方法,将空间位置信息嵌入通道注意力中,并允许移动网络准确捕捉长距离空间相互关系。这种改进有利于各种卷积神经网络架构。然而,CA也表现出明显的局限性,源于其不足的泛化能力和对通道维度降低的负面影响。
众所周知,图像的空间维度包含了至关重要的位置信息。另一方面,现有的注意力机制要么未能有效利用这一空间信息,要么在利用的同时牺牲了通道的维度。本文的关注点是回答以下问题:作者能否以更高效的方式学习空间注意力?这种方法应使作者能够在不损害输入特征图的通道维度的同时,在空间维度上获得准确的位置预测,同时保持注意力模块的轻量级特性。
为了回答这个问题,作者再次回顾一下CA机制。CA模块是通过两个步骤设计的。在第一步中,使用了条带池化来生成包含输入张量空间维度上水平和垂直坐标信息的特征图。在第二步中,两个方向上的上述特征图都经过两个2D卷积,然后进行批量归一化(BN),并使用非线性激活函数,最终得到注意力。
显然,CA的设计过程相对复杂,涉及两个方向上特征图的多次分离与合并。尽管两个2D卷积增强了坐标信息,但它们也减少了通道维度,对生成的注意力产生了负面影响。此外,将BN整合到CA中引入了显著的弱点。例如,过小的迷你批次大小可能会对整个模型产生不利影响并阻碍其泛化能力。表2和表3中的消融实验结果进一步支持了这些观察。
因此,本文提出了用于深度CNN的Efficient Local Attention(ELA)模块,它准确地捕获了感兴趣区域的位置,保持了输入特征图通道的维度,并保持了其轻量级特性,如图2(c)所示。与CA相似,ELA在空间维度上采用条带状池化,以获取水平和垂直方向的特征向量,保持窄的核形状以捕获远程依赖并防止不相关区域影响标签预测,从而在各自的方向上产生丰富的目标位置特征。ELA独立地处理上述每个方向的特征向量以获得注意力预测,然后使用乘积操作将它们组合起来,确保感兴趣区域的准确位置信息。
具体来说,在第二步中,应用1D卷积与两个特征向量局部交互,可以选择调整核大小来表示局部交互的覆盖范围。产生的特征向量经过分组归一化(GN)[40]和非线性激活函数处理,以生成两个方向的位置注意力预测。最终的位置注意力通过将两个方向的位置注意力相乘得到。与2D卷积相比,1D卷积更适合处理序列信号,并且更轻量、更快。GN与BN相比,展现出可比较的性能和更好的泛化能力。
表1展示了关键的卷积神经网络注意力模块,指出了它们在通道维度降低(DR)、长距离依赖和轻量级设计方面的特点(其中轻量级模型具有的参数少于SE)。从表中可以看出,作者的ELA在所有这三个方面都表现出色。作者通过在ImageNet,Pascal VOC和MS COCO等数据集上的实验结果来评估作者方法的有效性(见表5)。
实验结果表明,与ImageNet top-1的分类准确度相比,作者提出的方法提高了2.39%。此外,作者的方法在目标检测和语义分割方面表现出最显著的性能提升。因此,作者提出的ELA方法比目前最流行的注意力机制更具竞争力。
本文的贡献总结如下:
- 作者分析了坐标注意力(CA),并通过实验验证了其在卷积神经网络(CNN)结构中对批量归一化(BN)和通道维度减少的负面影响。
- 基于上述分析,作者提出了一种轻量级且高效的局部注意力(ELA)模块。这个模块帮助深度CNN更准确地定位感兴趣的目标,在仅增加少量参数的情况下显著提高了CNN的整体性能。
- 在包括ImageNet、MS COCO和Pascal VOC在内的流行数据集上的大量实验结果表明,作者提出的方法在性能上超越了当前的最新注意力方法,同时保持了有竞争力的模型复杂度。
2 Related Work
普遍认为,注意力机制在提高深度卷积神经网络(CNNs)性能方面起着至关重要的作用。SE块首次成功尝试将注意力机制用于学习通道注意力。随后,注意力机制在这两个方向上取得了显著的进展:
- 仅聚合通道特征;
- 将通道特征与空间特征整合。
具体来说,CBAM 同时利用平均池化和最大池化沿着通道维度和空间维度组合特征。同时,GCNet 是一个轻量级的注意力网络,它采用了自注意力机制,非局部网络,以及挤压激励网络等技术。SA-Net 建立在空间注意力和通道注意力结合的基础上,并引入特征分组和通道替换来实现轻量级的注意力机制。CBAM、GCNet 和 SA-Net 都结合了空间注意力和通道注意力。
GSoP 引入了二阶池化,以实现对整幅图像的高阶统计建模,从而增强了深度卷积网络的非线性建模能力。另一方面,ECA-Net 利用一维卷积生成通道注意力权重,与 SE 块相比,显著降低了建模复杂性。GSoP 和 ECA-Net 都属于通道增强的聚合方法。
然而,在上述提到的注意力网络中,要么在空间维度上缺乏长距离依赖性,要么在通道维度上进行缩小。长距离空间依赖性的缺失使得精确定位感兴趣的空间物体以及获取重要物体的位置信息变得具有挑战性。尽管通过通道维度降低可以减少模型的复杂性,但它也破坏了通道与它们权重之间的直接对应关系。
为了解决这些限制,作者提出了一种有效的ELA方法,该方法能够有效捕捉长距离空间依赖性,并消除了通道缩小对注意力网络造成的负面影响。
3 Method
高效局部注意力模块作为一个计算单元,旨在提高深度卷积神经网络中感兴趣区域或重要目标位置的准确识别。为了清楚地解释作者提出的有效定位注意力(ELA)方法,本节首先重申了CA中涉及的两大步骤。
随后,作者探讨了批量归一化(BN)和通道缩放的影响,并通过实验评估了将CA应用于一些小型模型的情况。这些发现为引入ELA奠定了基础。然后,作者深入探讨了构建ELA的过程,并通过在ELA内组合一维卷积和GN的超参数设计了四个版本。最后,作者采用Grad-cam方法进行可视化,进一步说明了ELA的有效性。图2(b)提供了ELA整体结构的概览。
Revisit Coordinate Attention
3.1.1 Coordinate Attention
观察方程式3、4和5时,作者可以注意到通道维度的降低旨在减少模型的复杂性。然而,这导致了通道与它们对应权重之间的间接关系,这可能会对整体的注意力预测产生不利影响。
此外,重要的是要强调,批量归一化 (BN) 并不能有效提高通道注意力 (CA) 的泛化能力。在后续章节中,作者将深入探讨这些观察的更多细节。
3.1.2 Shortcomings of Coordinate Attention
正如吴等人 (2018年) 的研究所述,批量归一化 (Batch Normalization,BN) 极大地依赖于小批量的大小。当小批量过小时,BN计算出的均值和方差可能无法充分代表整个数据集,这可能会损害模型的总体性能。从方程式1和方程式2中获得的坐标信息嵌入表示了每个通道维度内的序列信息。将BN放置在处理序列数据的网络中并不是最佳选择,特别是对于坐标注意力 (CA) 方法。
此外,MobileNetV2通常使用batch_size为256进行训练,这使得应用CA能够避免批量归一化 (BN) 的负面影响,并有效利用其优势。作者知道,根据[40],MobileNetV2-1.0在计算复杂度和参数量上的显著减少是通过使用深度可分离卷积 [4] 实现的。如果使用普通卷积,参数数量将会显著增加。
Efficient Local Attention
CA方法通过利用条状池化(strip pooling)来捕获空间维度中的长距离依赖,显著提高了准确度,尤其是在更深层的网络中。基于作者之前的分析,可以看出 BN (批量归一化) 阻碍了 CA的泛化能力,而GN (组归一化) 则解决了这些不足。从方程式1和方程式2得出的定位信息嵌入是通道内的序列信号。
Multiple ELA version settings
根据方程 3 和方程 4 ,作者的ELA涉及三个参数: 用于1D卷积的kernel_size和groups,以及用于GN的num_group。为了提高CNN的性能,有效设置这些参数至关重要。作者旨在平衡ELA的性能与复杂性。在实验中,作者使用ResNet-18和ResNet-50作为 Backbone 网络,并融入ELA来确定合理的参数值。
对于GN的num_group参数,作者参考[40],分别选择16和32的值。1D卷积能够捕获交互中的位置信息。通常,1D卷积中更大的kernel_size可以提供更广泛的位置信息覆盖范围,从而带来稍好的性能结果。然而,它也增加了ELA的复杂性。
Visualization
为了评估ELA方法的有效性,作者在ImageNet上进行了两组实验:ResNet(不包含注意力模块)和ELA-ResNet(包含ELA)。为了评估性能,作者使用了五张图像进行测试。通过使用GradCAM生成视觉 Heatmap ,作者在第四层.2(最后一个阶段的最后瓶颈)展示了两组模型的成果。图3说明了作者提出的ELA模块成功指导整个网络更精确地聚焦于目标细节的相关区域。这一演示突显了ELA模块在提高分类准确度方面的有效性。
Implementation
图2(b)展示了作者ELA的概览。这个模块可以无缝集成到与CA具有相同配置的深度CNN中。在PyTorch或TensorFlow中实现ELA只需编写少量代码,这支持自动微分。为了说明这一点,作者在图4中提供了ELA-B的PyTorch代码。
4 Experiment
在本节中,作者分别在大规模图像分类、目标检测和语义分割任务上使用ImageNet、MS COCO 和 VOC2007/2012 数据集来评估作者提出方法的表现。具体来说,作者提供了实验设置的概览,将作者提出的ELA方法与最先进的相关模块进行了比较,并就目标检测和语义分割方面展示了ELA方法与其他对应方法的比较结果。
Experiment details
所有实验都是在PyTorch工具箱上进行的,训练使用了NVIDIA的GPU。为了评估ELA模块在 ImageNet上的分类效果,作者使用了四种CNN作为基础网络,包括MobileNetV2, ResNet-18, ResNet-50和ResNet-101。
Image Classification on ImageNet
MobileNetV2 作者探讨了使用MobileNetV2架构作为基础网络时,作者提出的ELA-S、ELA-L和CA的性能。对于CA,作者分别选择了降维因子为16、24和32。在验证实验中,作者将注意力模块插入到MobileNetV2的反向残差块中,确保了所有模型的训练设置保持一致。
表4中的结果显示,作者的ELA-S模块将原始MobileNetV2的top-1准确率提升了大约2.39%。此外,与CA方法相比,作者的ELA方法在参数更少和计算复杂度更低的情况下展现了更优的性能。这些发现进一步验证了ELA方法的效率和有效性。
值得强调的是,在MobileNetV2中包含CA(r=16)会使参数数量增加超过35%。这对于移动网络来说可能是一个潜在的缺点,因为它们往往更注重参数的效率。
ResNet 作者将ELA与各种最先进的注意力模块进行了比较,包括SE块,CBAM,ECA-Net,SA-Net和CA。评估指标涵盖了效率(网络参数,每秒浮点运算(GFLOPs))和有效性(Top-1/Top-5准确率)。为了评估不同模型的效率与有效性,作者采用了公开可用的ResNet网络,并在BasicBlock或BottleBlock中集成了各个注意力模块,并在相同的计算平台上应用它们。与最先进(SOTA)模型相比,ELA取得了更高的准确率。
特别是,当ResNet18作为基础网络时,ELA将Top-1准确率提高了0.93%。对于ResNet50,提升为0.8%,对于ResNet101,提升为0.21%。值得注意的是,当ResNet50作为基础网络时,ELA仅增加了0.03%的参数数量,却将绝对性能提升了0.8%,清楚地展示了ELA的有效性。
作者观察到,当使用ResNet18作为基础网络时,CA(通道注意力)的不足之处变得明显。其有效性主要在更大的网络中得到体现。另一方面,在这种情况下,ECA(高效通道注意力)的有效性受到限制,因为ResNet18模型有多个少于128个通道的层。这与ECA方法的设置[36]不匹配,后者需要使用3个元素的1D卷积核,这阻碍了它有效促进通道间交互的能力。
Object Detection
在MS COCO上的目标检测
根据表6,尽管CA方法有助于提高YOLOF目标检测器的性能,但作者的提出的ELA方法在模型参数和提升多样化的性能指标方面显著超过了CA方法。特别是当使用YOLOF [3] 作为基础检测器 (以ResNet-50作为 Backbone 网络) 时,ELA在AP50:95上展示了0.68%的提高。
在Pascal VOC2007上的目标检测 此外,作者使用YOLOX-Nano 在Pascal VOC数据集上验证了ELA的有效性。作者在YOLOX-Nano的Backbone网络之后以及 Neck 中的特征融合层之后添加了ELA模块和其他相应的注意力模块。该模型通过加载来自MS COCO的预训练权重,使用迁移学习进行训练。
在表7中,以YOLOX-nano模型作为 Baseline ,作者展示了在Pascal VOC 2007测试集上采用不同注意力方法进行的检测结果。作者观察到,CA方法显著降低了 Baseline 的性能,而ECA-Net和SA-Net对 Baseline 性能的提升非常小。相比之下,结合作者的ELA使 Baseline 性能得到了显著增强,实现了1.1%的mAP提升。在MS COCO和Pascal VOC数据集上的两次检测实验均表明,ELA方法相比于其他注意力方法在性能提升上表现更为优越。
Semantic Segmentation
如表8所示,CA方法显著提高了DeepLabV3的性能。然而,SE块和ECA-Net方法并没有显著提升DeepLabV3的性能。令人惊讶的是,SA-Net实际上导致了DeepLabV3模型性能的下降,表明SA-Net的泛化能力并不特别强。与所有上述方法相比,ELA方法在模型性能提升上表现得最为出色。上述实验结果充分证明了ELA方法在多种计算机视觉任务中具有强大的泛化能力。
5 Conclusion
本文介绍了一种创新的注意力机制,称为高效局部注意力(ELA),旨在增强卷积神经网络(CNNs)的表示能力。ELA以其轻量级和直接的结构简化了准确定位感兴趣区域的过程。
实验结果表明,ELA是一种即插即用的注意力方法,不需要减少通道维度。此外,ELA在多种深度CNN架构中一致地实现了显著的性能提升。
#CTKD~
这个是搬来的呀
在蒸馏任务里,能不能让网络自己学习一个适合的动态温度超参进行蒸馏,并且参考课程学习,形成一个蒸馏难度由易到难的情况?基于此,提出了简单且高效的动态温度超参蒸馏新方法CTKD。
论文题目:<Curriculum Temperature for Knowledge Distillation> (AAAI 2023)
论文地址:https://arxiv.org/abs/2211.16231
开源代码:https://github.com/zhengli97/CTKD (欢迎star)
相对于静态温度超参蒸馏,本文提出了简单且高效的动态温度超参蒸馏新方法。
目前已有的蒸馏方法中,都会采用带有温度超参的KL Divergence Loss进行计算,从而在教师模型和学生模型之间进行蒸馏,公式如下:
而现有工作普遍的方式都是采用固定的温度超参,一般会设定成4。
那么这就带来了两个问题:
1. 不同的教师学生模型在KD过程中最优超参不一定是4。如果要找到这个最佳超参,需要进行暴力搜索,会带来大量的计算,整个过程非常低效。
2. 一直保持静态固定的温度超参对学生模型来说不是最优的。基于课程学习的思想,人类在学习过程中都是由简单到困难的学习知识。那么在蒸馏的过程中,我们也会希望模型一开始蒸馏是让学生容易学习的,然后难度再增加。难度是一直动态变化的。
于是一个自然而然的想法就冒了出来:
在蒸馏任务里,能不能让网络自己学习一个适合的动态温度超参进行蒸馏,并且参考课程学习,形成一个蒸馏难度由易到难的情况?
于是我们就提出了CTKD来实现这个想法。
既然温度超参τ可以在蒸馏里决定两个分布之间的KL Divergence,进而影响模型的学习,那我们就可以通过让网络自动学习一个合适的τ来达到以上的目的。
于是以上具体问题就直接可以转化成以下的核心思想:
在蒸馏过程里,学生网络被训练去最小化KL loss的情况下,τ作为一个可学习的参数,要被训练去最大化KL loss,从而发挥对抗(Adversarial)的作用,增加训练的难度。随着训练的进行,对抗的作用要不断增加,达到课程学习的效果。
以上的实现可以直接利用一个非常简单的操作:利用梯度反向层GRL (Gradient Reversal Layer)来去反向可学习超参τ的梯度,就可以非常直接达到对抗的效果,同时随着训练的进行,不断增加反向梯度的权重λ,进而增加学习的难度。
CTKD的论文的结构图如下:
Fig.1 CTKD网络结构图
CTKD方法可以简单分为左右两个部分:
- 对抗温度超参τ的学习部分。
这里只包含两个小模块,一个是梯度反向层GRL,用于反向经过温度超参τ的梯度,另一个是可学习超参温度τ。
其中对于温度超参τ,有两种实现方式,第一种是全局方案 (Global Temperature),只会产生一个τ,代码实现非常简单,就一句话:
self.global_T = nn.Parameter(torch.ones(1), requires_grad=True)
第二种是实例级别方案(Instance-wise Temperature),即对每个单独的样本都产生一个τ,也就是对于一个batch中128个sample,那么就生成对应128个τ。代码实现也很简单,就是两层conv组成的MLP。
两种方案的对比图如Fig.2所示。
Fig.2 两种不同的可学习温度超参实现。
2. 难度逐渐增加的课程学习部分。
随着训练的进行,不断增加GRL的权重λ,达到增加学习难度的效果。
在论文的实现里,我们直接采用Cos的方式,让反向权重λ从0增加到1。
以上就是CTKD的全部实现,非常的简单有效。
总结一下方法:CTKD总共包含两个模块,梯度反向层GRL和温度预测模块,
CTKD方法可以作为即插即用的插件应用在现有的SOTA的蒸馏方法中,取得广泛的提升。
实验结果
三个数据集:CIFAR-100,ImageNet和MS-COCO。
CIFAR-100上,CTKD的实验结果:
作为一个即插即用的插件
在ImageNet上的实验:
在MS-COCO的detection实验上:
温度超参的整体学习过程可视化:
由以上图可以看到,CTKD整体的动态学习τ的过程。
将CTKD应用在多种现有的蒸馏方案上,可以取得广泛的提升效果。
#Griffin
去年 12 月,新架构Mamba引爆了 AI 圈,向屹立不倒的 Transformer 发起了挑战。如今,谷歌 DeepMind「Hawk 」和「Griffin 」的推出为 AI 圈提供了新的选择。RNN效率媲美Transformer,谷歌新架构两连发:同等规模强于Mamba
这一次,谷歌 DeepMind 在基础模型方面又有了新动作。
我们知道,循环神经网络(RNN)在深度学习和自然语言处理研究的早期发挥了核心作用,并在许多应用中取得了实功,包括谷歌第一个端到端机器翻译系统。不过近年来,深度学习和 NLP 都以 Transformer 架构为主,该架构融合了多层感知器(MLP)和多头注意力(MHA)。
Transformer 已经在实践中实现了比 RNN 更好的性能,并且在利用现代硬件方面也非常高效。基于 Transformer 的大语言模型在从网络收集的海量数据集上进行训练,取得了显著的成功。
纵然取得了很大的成功,但 Transformer 架构仍有不足之处,比如由于全局注意力的二次复杂性,Transformer 很难有效地扩展到长序列。此外,键值(KV)缓存随序列长度线性增长,导致 Transformer 在推理过程中变慢。这时,循环语言模型成为一种替代方案,它们可以将整个序列压缩为固定大小的隐藏状态,并迭代更新。但若想取代 Transformer,新的 RNN 模型不仅必须在扩展上表现出相当的性能,而且必须实现类似的硬件效率。
在谷歌 DeepMind 近日的一篇论文中,研究者提出了 RG-LRU 层,它是一种新颖的门控线性循环层,并围绕它设计了一个新的循环块来取代多查询注意力(MQA)。
他们使用该循环块构建了两个新的模型,一个是混合了 MLP 和循环块的模型 Hawk,另一个是混合了 MLP 与循环块、局部注意力的模型 Griffin。
- 论文标题:Griffin: Mixing Gated Linear Recurrences with Local Attention for Efficient Language Models
- 论文链接:https://arxiv.org/pdf/2402.19427.pdf
研究者表示,Hawk 和 Griffin 在 held-out 损失和训练 FLOPs 之间表现出了幂律缩放,最高可以达到 7B 参数,正如之前在 Transformers 中观察到的那样。其中 Griffin 在所有模型规模上实现了比强大 Transformer 基线略低的 held-out 损失。
研究者针对一系列模型规模、在 300B tokens 上对 Hawk 和 Griffin 进行了过度训练,结果显示,Hawk-3B 在下游任务的性能上超越了 Mamba-3B,尽管训练的 tokens 数量只有后者的一半。Griffin-7B 和 Griffin-14B 的性能与 Llama-2 相当,尽管训练的 tokens 数量只有后者的 1/7。
此外,Hawk 和 Griffin 在 TPU-v3 上达到了与 Transformers 相当的训练效率。由于对角 RNN 层受内存限制,研究者使用了 RG-LRU 层的内核来实现这一点。
同时在推理过程中,Hawk 和 Griffin 都实现比 MQA Transformer 更高的吞吐量,并在采样长序列时实现更低的延迟。当评估的序列比训练中观察到的更长时,Griffin 的表现比 Transformers 更好,并且可以有效地从训练数据中学习复制和检索任务。不过当在未经微调的情况下在复制和精确检索任务上评估预训练模型时,Hawk 和 Griffin 的表现不如 Transformers。
共同一作、DeepMind 研究科学家 Aleksandar Botev 表示,混合了门控线性循环和局部注意力的模型 Griffin 保留了 RNN 的所有高效优势和 Transformer 的表达能力,最高可以扩展到 14B 参数规模。
Griffin 模型架构
Griffin 所有模型都包含以下组成部分:(i) 一个残差块,(ii) 一个 MLP 块,(iii) 一个时间混合块。所有模型的 (i) 和 (ii) 都是相同的,但时间混合块有三个:全局多查询注意(MQA)、局部(滑动窗口)MQA 和本文提出的循环块。作为循环块的一部分,研究者使用了真实门控线性循环单元(RG-LRU)—— 一种受线性循环单元启发的新型循环层。
如图 2(a)所示,残差块定义了 Griffin 模型的全局结构,其灵感来自 pre-normTransformer。在嵌入输入序列后,研究者将其通过 𝑁 这样的块(𝑁 表示模型深度),然后应用 RMSNorm 生成最终激活。为了计算 token 概率,应用了最后的线性层,然后是 softmax。该层的权重与输入嵌入层共享。
循环模型,缩放效率媲美 Transformer
缩放研究为如何调整模型的超参数及其在缩放时的行为提供了重要见解。
研究者定义了本研究中进行评估的模型,并提供了高达和超过 7B 参数的缩放曲线,并评估了模型在下游任务中的性能。
他们考虑了 3 个模型系列:(1)MQA-Transformer 基线;(2)Hawk:纯 RNN 模型;(3)Griffin:混合模型,它将循环块与局部注意力混合在一起。附录 C 中定义了各种规模模型的关键模型超参数。
Hawk 架构使用了与 Transformer 基线相同的残差模式和 MLP 块,但研究者使用了带有 RG-LRU 层的循环块作为时序混合块,而不是 MQA。他们将循环块的宽度扩大了约 4/3 倍(即𝐷_𝑅𝑁𝑁 ≈4𝐷/3),以便在两者使用相同的模型维度 𝐷 时,与 MHA 块的参数数量大致匹配。
Griffin。与全局注意力相比,循环块的主要优势在于它们使用固定的状态大小来总结序列,而 MQA 的 KV 缓存大小则与序列长度成正比增长。局部注意力具有相同的特性,而将循环块与局部注意力混合则可以保留这一优势。研究者发现这种组合极为高效,因为局部注意力能准确模拟最近的过去,而循环层则能在长序列中传递信息。
Griffin 使用了与 Transformer 基线相同的残差模式和 MLP 块。但与 MQA Transformer 基线和 Hawk 模型不同的是,Griffin 混合使用了循环块和 MQA 块。具体来说,研究者采用了一种分层结构,将两个残差块与一个循环块交替使用,然后再使用一个局部(MQA)注意力块。除非另有说明,局部注意力窗口大小固定为 1024 个 token。
主要缩放结果如图 1(a)所示。三个模型系列都是在从 1 亿到 70 亿个参数的模型规模范围内进行训练的,不过 Griffin 拥有 140 亿参数的版本。
在下游任务上的评估结果如表 1 所示:
Hawk 和 Griffin 的表现都非常出色。上表报告了 MMLU、HellaSwag、PIQA、ARC-E 和 ARC-C 的特征归一化准确率,同时报告了 WinoGrande 的绝对准确率和部分评分。随着模型规模的增大,Hawk 的性能也得到了显著提高,Hawk-3B 在下游任务中的表现要强于 Mamba-3B,尽管其训练的 token 数量只有 Mamba-3B 的一半。Griffin-3B 的性能明显优于 Mamba-3B,Griffin-7B 和 Griffin-14B 的性能可与 Llama-2 相媲美,尽管它们是在少了近 7 倍的 token 上训练出来的。Hawk 能与 MQA Transformer 基线相媲美,而 Griffin 的表现则超过了这一基线。
在端侧高效训练循环模型
在开发和扩展模型时,研究者遇到了两大工程挑战。首先,如何在多台设备上高效地分片处理模型。第二,如何有效地实现线性循环,以最大限度地提高 TPU 的训练效率。本文讨论了这两个难题,然后对 Griffin 和 MQA 基线的训练速度进行实证比较。
研究者比较了不同模型大小和序列长度的训练速度,以研究本文模型在训练过程中的计算优势。对于每种模型大小,都保持每批 token 的总数固定不变,这意味着随着序列长度的增加,序列数量也会按比例减少。
图 3 绘制了 Griffin 模型与 MQA 基线模型在 2048 个序列长度下的相对运行时间。
推理速度
LLM 的推理由两个阶段组成。「预填充 」阶段是接收并处理 prompt。这一步实际上是对模型进行前向传递。由于 prompt 可以在整个序列中并行处理,因此在这一阶段,大多数模型操作都是计算受限的因此,研究者预计 Transformers 模型和循环模型在预填充阶段的相对速度与前文讨论的那些模型在训练期间的相对速度相似。
预填充之后是解码阶段,在这一阶段,研究者从模型中自回归地采 token。如下所示,尤其是对于序列长度较长时,注意力中使用的键值(KV)缓存变得很大,循环模型在解码阶段具有更低的延迟和更高的吞吐量。
评估推断速度时有两个主要指标需要考虑。第一个是延迟,它衡量在特定批量大小下生成指定数量 token 所需的时间。第二个是吞吐量,它衡量在单个设备上采样指定数量 token 时每秒可以生成的最大 token 数。因为吞吐量由采样的 token 数乘以批量大小除以延迟得出,所以可以通过减少延迟或减少内存使用以在设备上使用更大的批量大小来提高吞吐量。对于需要快速响应时间的实时应用来说,考虑延迟是有用的。吞吐量也值得考虑,因为它可以告诉我们在给定时间内可以从特定模型中采样的最大 token 数量。当考虑其他语言应用,如基于人类反馈的强化学习(RLHF)或评分语言模型输出(如 AlphaCode 中所做的)时,这个属性是有吸引力的,因为能够在给定时间内输出大量 token 是一个吸引人的特性。
在此,研究者研究了参数为 1B 的模型推理结果。在基线方面,它们与 MQA Transformer 进行了比较,后者在推理过程中的速度明显快于文献中常用的标准 MHA 变换器。研究者比较的模型有:i) MQA 变换器,ii) Hawk 和 iii) Griffin。为了比较不同的模型,我们报告了延迟和吞吐量。
如图 4 所示,研究者比较了批量大小为 16、空预填充和预填充 4096 个 token 的模型的延迟。
图 1(b)中比较了相同模型在空提示后分别采样 512、1024、2048 和 4196 个 token 时的最大吞吐量(token / 秒)。
长上下文建模
本文还探讨了 Hawk 和 Griffin 使用较长上下文来改进下一个 token 预测的有效性,并研究它们在推理过程中的外推能力。此外还探讨了 Griffin 在需要复制和检索能力的任务中的表现,既包括在此类任务中训练的模型,也包括在使用预训练的语言模型测试这些能力时的表现。
从图 5 左侧的曲线图中,可以观察到,在一定的最大长度范围内,Hawk 和 Griffin 都能在更长的上下文中提高下一个 token 的预测能力,而且它们总体上能够推断出比训练时更长的序列(至少 4 倍)。尤其是 Griffin,即使在局部注意力层使用 RoPE 时,它的推理能力也非常出色。
如图 6 所示,在选择性复制任务中,所有 3 个模型都能完美地完成任务。在比较该任务的学习速度时, Hawk 明显慢于 Transformer,这与 Jelassi et al. (2024) 的观察结果类似,他们发现 Mamba 在类似任务上的学习速度明显较慢。有趣的是,尽管 Griffin 只使用了一个局部注意力层,但它的学习速度几乎没有减慢,与 Transformer 的学习速度不相上下。