在2021年10月,谷歌的重要人物Jeff Dean提出了下一代AI架构的Pathways概念[1]该概念的目标是通过一个大型模型来执行多种不同的任务对于那些早期关注AI领域的同行来说,这其实类似于2017年提出的MoE(Mixture-of-Experts)概念,即通过网络来完成各种任务然而,尽管当前的预训练大模型表现出色,但仍存在三个重要问题:1.目前的模型只能处理单一任务;2.目前的模型大多专注于一种感知输入,比如文本或图像;3.目前的模型都是dense的,而一些研究表明,其中许多参数是无用的,例如,去掉一些注意力头对模型的影响并不大。
这些问题导致计算效率低下。
个人认为,前两个问题可以通过使用大型模型来解决,而真正的瓶颈在于第三个问题尽管现在的大型模型表现不错,但对于普通团队来说,训练和部署仍然不够友好要实现真正的应用,必须对模型进行”瘦身”,即减少无用参数目前有三种方法可以实现模型的”瘦身”:1.量化:将FP32转换为FP16、INT8进行计算,但这种方法存在一定的限制;2.蒸馏:将模型压缩为小型的dense模型,但由于参数量的限制,效果受到天花板的限制,并存在一些无效参数;3.剪枝:去掉一些层、神经元或权重。
尽管在过去,稀疏计算的底层支持不够好,但这可能是目前最可行的方法。
Pathways提出了一种更类似于人脑逻辑的概念,即不同部分负责不同功能在训练过程中,模型会动态学习如何使用特定的子网络来解决特定任务,这样在推理过程中只需要使用部分网络就可以完成任务如下图所示,这种做法既保持了整个模型容量(参数量),同时又大大缩短了预测时间。
从更长远来看,Pathways为持续学习提供了可能性,当有新的任务出现时,可能只需要在现有模型上新增一些网络,而不会影响到以前的网络参数,同时多任务学习也可以提升整个网络的泛化能力。
对此,腾讯AILab在这个概念的启发下进行了一些尝试,提出了SkillNetSkillNet的做法是为每个子网络定义一个”Skill”,在预测时只激活与任务相对应的Skill。
如下图所示,通过一种类似于SwitchTransformer的方式将Skill添加到FFN层如果激活了多个Skill,将使用平均池化进行融合在训练时,每次从一个任务中采样一个batch,根据任务目标优化相应的Skill由于不同任务的样本数量不同,使用一个超参数来控制采样分布,实验证明遵循数据本身分布的采样效果最好,即数据量较大的任务采样更多,数据量较小的任务采样较少。
同时,SkillNet的网络结构支持预训练,例如,MLM任务可以训练S2、S7,NSP任务可以训练S1、S3、S7在6个中文数据集上进行的实验结果显示,SkillNet的整体效果优于纯精调,同时也超过了基于多任务学习和MoE的dense模型的设置。
与多任务学习相比,SkillNet具有更高的效率,并且通过Skill的组合解决了不同任务之间的影响。
与MoE相比,SkillNet具有更强的可解释性,同时不需要复杂的路由策略来选择合适的Expert。
总结起来,SkillNet是对Pathways的初步尝试这种结构的一个重要优点是可以复用和新增Skill,当增加一个新任务时,可以直接复用之前训练好的模块,也可以新增一个与任务更相关的Skill我之前一直纠结的一个问题是,对于模型来说,泛化性和专业性之间存在一定矛盾。
当我们想要构建一个通用且完美的模型时,引入另一个目标可能会对其他目标产生影响SkillNet的做法是将目标分解为一些”底层能力”,从而避免了多任务之间的相互影响然而,个人认为这种解耦还有一些局限,并且需要相当程度的人工干预(将任务拆分为适当的Skill)与MoE相比,让模型自动解耦的方法更具”智能”此外,还有许多值得探索的方向,例如是否可以动态选择更少的注意力头,以及在这种架构下是否存在比Transformer更好的模块。
SkillNet是基于BERT-base进行的研究,进一步探索下去,也衍生出一种比大型模型更轻量级的赛道展望未来,神经网络与人脑的模式还存在很大差距,例如MindSpore的金雪锋提到的局部反向传播(BP)是人脑中一个重要特征,只有某个模块进行单独的学习和优化,而Pathways架构虽然拆分出了模块,但本质上仍然是全局BP。