微软的AI弯道超车法:小模型我必坐头把交椅
美国时间12月12日,微软发布了自家的最新AI语言模型Phi-2,微软CEO 纳德拉亲自发推力捧,可见其对此的重视程度。
微软也确实有自豪的资本,根据其技术博客介绍,Phi-2是一个仅有27亿(2.7B)参数的语言模型,在参数130亿(13B)以下的基础语言模型中展示了最先进的性能。在复杂的基准测试中,Phi-2能优于或等同大它25倍的模型。从测试得分看,2.7B参数的Phi-2不仅能与70B参数的Llama2匹敌,而且在各项指标上还完全超过了当红的Mistral 7B。(Miatral 7B和其MOE的8X7B版本并不相同,8X7B模型的能力大概比7B模型高25%左右,但综合参数已经达到56B,不在小语言模型范畴内了)。
这其中最值得注意的是Phi-2的编程和数学能力,都超过同为小模型的竞争对手约一倍。在微软给出的实例中我们也能看出其强大的推理水平。一个2.7B的模型完全可以无误的解出简单的物理问题。
另外微软还特意和Google的最近备受关注的新星Gemini最小的版本Nano进行了比较,还特别选择了和Gemini测试时所有的测试集,各项指标也均领先。可以说是把所有热门竞对都打了个遍,站稳了小模型第一的地位。
训练细节方面,Phi-2也是基于Transformer框架的模型,训练集大小为1.4T token。整体用了96个A100 GPU训练了14天,作为对比,就算用10倍的A100 GPU (1024个)训练GPT3,也需要一个月时间。特别值得注意的是,Phi-2是一个基本模型,它没有通过来自人类反馈的强化学习(RLHF)进行调整,也没有经过微调。这说明它和其他基本模型是站在同一起跑线上的,还有微调上升空间。
虽然微软非常谦虚地承认,目前SLM(小语言模型)仍远未达到前沿模型的能力。但仅仅一年的时间里,小语言模型就进步到可以与大模型一较高下的水平。这种被微软成为“打破传统语言模型缩放定律”的能力来自哪里呢?
大力飞砖,不如精调精校
根据微软的技术博客讲解,Phi-2的杀手锏在于规范训练数据质量。微软特别选择了一批具有“教科书质量”的数据对小模型进行训练。这一技术路径已经在Phi-1,Phi-1.5两个模型中应用了,而在Phi-2里,微软将这一见解发挥到了极致。其训练数据包含专门为教授模型常识推理和常识而创建的合成数据集,有科学、日常活动和心理理论等。他们还进一步使用根据教育价值和内容质量进行过滤的网络数据来增强其训练语料库。
虽然本次微软还未公布具体的技术论文,但其数据筛选逻辑在Phi-1的技术论文《教科书就是你所需要的一切》中已经讲清楚了。后续包括Phi 1.5的技术论文中的解释,微软所做的也不过是进一步补充训练数据的范围,覆盖更多推理相关门类。让我们看看在这篇论文中,微软对“教科书质量的训练数据”的定义和制作方法。
过往数据源太粗糙,更新很有必要
Phi-1的教科书质量的训练数据主要是针对代码生成的数据源。
以往的代码生成模型常用的数据源,如The Stack或StackOverflow,往往包含不适合教授算法推理和规划的代码片段。这些数据源可能包含不完整、琐碎或不平衡的示例,使得它们训练语言模型在代码生成方面的效果较差。
(教育价值高:逻辑步骤清晰 / 教育价值低:全是self)
这些标准的代码数据集涵盖了广泛的主题和用例,但作者通过随机样本的手动检查发现,这些代码片段对于学习编码基础知识并不十分有指导意义。具体的问题包括:
1)许多样本不是自包含的,依赖于片段外部的其他模块或文件,使得它们难以在没有额外上下文的情况下理解。
2)典型的例子并不涉及有意义的计算,而是包含诸如定义常量、设置参数或配置GUI元素等琐碎或模板化的代码。
3)包含算法逻辑的样本常常隐藏在复杂或记录不清的函数中,使得它们难以跟随或学习。
4)这些示例偏向于某些主题或用例,导致在数据集中编码概念和技能的分布不平衡。
因此,这些问题也会影响语言模型的性能,因为它们降低了将自然语言映射到代码的信号的质量和数量。
所以想要训练好语言模型,得需要一个具有良好教科书特质的训练集。这个训练集应该是清晰的、自包含的、有指导意义的且平衡的。
没有现成的教科书质量数据,那就生成
但是人手编一个具有大量数据的代码教科书,这估计得好几年。这怎么办?微软直接试了一个最新但也充满了争议的赛道:用人工智能自己合成的数据。出人意料的是,他们竟然还成功了。
这一合成的数据集包括由GPT-3.5生成的Python教科书和练习集。目标是提供一系列编码概念、技能和场景,以一种指导性和平衡的方式呈现,从而避免过度拟合,并提高模型对未见或新颖任务的概括性和鲁棒性。
为了让模型掌握自然语言和代码之间的关联,由GPT-3.5生成的大概不到1B token的教科书数据集所提供的都是涉及相关代码片段的自然语言密集型文本。这些教科书的内容针对促进推理和基础算法技能的主题进行了定向。为了获取多样性,作者在生成教科书的过程中设定了关于主题和目标受众的约束,就和一般的教科书一样,分章节和阶段。比如说教科书中会先定义奇异矩阵和非奇异矩阵,然后再用例子探索这些概念。
(高强度自然语言示例,真的很像教科书)
微软不光给模型配了教科书,还配了习题集。CodeExercises数据集是一个小型的合成练习数据集,包含由GPT-3.5生成的大概1.8M token的Python练习和解决方案。每个练习都是一个函数的docstring,需要根据自然语言指令完成。这个数据集的目的是使模型能够根据自然语言指令完成函数编写任务。这个数据集也是由GPT-3.5生成的,其多样性的主要来源是通过限制条件来引导生成。
别小看这个练习册,做过习题的Phi-1比只看过教科书的Phi-1水平提升了三倍。微软用模型训练再次证明了一个真理:菜就多练。
在专业老师的指导之下,10月发布的Phi-1以1.3B的体量已经在HumanEval这个偏向编程能力的测试里干掉了GPT3.5 和 Palm 2-S。
时隔两个月,在补齐了除了编程之外的其他课本和习题集的Phi-2,可以说是这种训练逻辑的集大成者,可以全向和其他竞对作比较了。
要小而精,微软的解法不止一个
在小语言模型的研究方面,微软其实是多路出击,不光只有教科书这一条路径。
在三天的OpenAI的权利游戏大戏之后,被董事会政变驱逐的Sam Altman和Greg Brockman暂时选择落脚微软,并被授权带领新团队开发大模型的11月20日夜间,微软就放出过其最新的自研语言模型Orca-2。引起了一些业内关注。
相对于Phi-2在训练集上下功夫,Orca-2走的是指令调整(Instruction Tuning)加强路径。从基本能力上看,它的整体框架都是基于LLaMA-2-13B进行训练的,非常常规。最终的成型模型规模也是13B,同样属于小语言模型范畴。
Orca-2相对比较创新的部分,是通过让它成为一个谨慎的推理者(Cautious Reasoner)的方式来提高其推理能力。这里的想法很简单:就是通过指令调整,让Orca-2能够根据任务和模型的能力,选择最有效地解决策略,得到最准确的结果。
目前在涉及推理的过程中,面对基本所有问题,模型都可以有五个处理模式,既有直接回答这种粗暴的方法,也有逐步处理这样的慢思考方式:
逐步处理(Step-by-Step Processing):
这种技术要求模型分步骤地处理问题,逐个解决问题的各个部分。它有助于解决复杂的多步骤问题,通过将大问题分解成小部分,使问题更易于管理和解决。
回忆然后生成(Recall-Then-Generate):
在这种方法中,模型首先回忆相关的知识或信息,然后基于这些信息生成答案。这种技术适用于需要从模型以前的知识中提取信息的任务。
回忆-推理-生成(Recall-Reason-Generate):
这种策略涉及首先回忆相关信息,接着利用这些信息进行推理,并最终生成答案。这种技术对于需要深入理解和推理的问题特别有效。
提取-生成(Extract-Generate):
在这种方法中,模型首先从给定的输入或上下文中提取关键信息,然后基于这些信息生成答案。这对于理解和处理复杂文本特别有用。
直接回答方法(Direct-Answer Methods):
这种方法涉及直接生成答案,而不涉及显著的中间步骤。适用于模型能够直接解决的问题。
对于大模型来讲,GPT-4可能能够直接生成答案,而较小的模型可能缺乏这种能力,需要采用不同的方法,如逐步思考。因此单纯模仿GPT-4的回答范例就会导致Orca的逻辑能力非常差。
而且,在不同系统提示下,GPT-4自身的回答水平都相差很大。其中精心设计的指令可以显著提高答案的质量和准确性。没有这样的指令,GPT-4可能无法识别具有挑战性的问题,并可能生成错误百出的直接回答。
(系统提示大概是这样的)
因此,微软团队做了以下训练步骤,
根据Orca-2的性能,大致决定哪些任务需要哪种解决策略(例如,直接回答、逐步解释、先解释后回答等)。
为每个任务编写特定的系统指令,对应于所选择的推理策略,以获取每个作为教师的GPT-4应用这个策略时的回答。
使用大型语言模型(如GPT-4)作为教师模型,展示这些推理技术的实施。然后,小型模型通过模仿这些示范来学习不同的推理技术。
在后续人为优化相关输出,让Orca-2能更好地选择合适的推理方法。
在做这一切之前,他们还给Orca-2 来了个心理暗示性的系统提示:
结果看来,通过这一系列指导,Orca-2成功理解了“随机应变”的方法,即根据不同任务的需求采用最适合的推理技术。这使得小型模型在处理各种复杂任务时更加高效和灵活,最终让它比70B的大模型 LLama 2在推理任务中的表现还要强。
只关注小模型赛道,半是无奈半是妙招
Phi-2和Orca-2的前一代版本都是专注于优化较小参数规模的模型,而非走在大模型的能力突破的前沿,性能方面也比较一般。因此之前两个模型在6月到10月间发布时几乎只在开发者间被零星讨论,并没有引发大的关注。
直到OpenAI和微软之间的合作间生嫌隙的传闻发酵和OpenAI宫斗大戏之后,媒体才开始关注到这一模型。
根据Information在九月的报道,知情人士表示微软正在开发内部的大型语言模型,目标是比OpenAI的更便宜、更小,可以降低Copilot等产品目前高昂的运算成本。在之前的诸多报道中也显示微软目前推广的Copilot属于赔钱买卖,降本才是作为一个盈利公司最核心的诉求,而运算成本大幅减小的小模型就是其中的解法之一。这可能是微软如此专注小模型的一个最初始的动机。
另外,在宫斗之后获得了OpenAI董事会观察席位的微软,现在与世界最强先进模型公司的联盟更牢不可破了。
靠着这层特殊关系,微软根本不用担心前沿模型的使用权问题。相较于Meta、Google这种深耕深度学习多年的大厂,微软之前在人工智能之战中更偏向于传统的NLP,并不占优势,非要入局卷大模型完全得不偿失。微软另辟蹊径,走大厂少卷的小模型,成为这个细分领域的第一可谓是定位精准。
目前微软所选择的两条道路都是为小模型量身定做的,前沿模型要么无效,要么非必要。编教科书的大小有限,很难对运用巨量数据集的大模型产生有效影响。而谨慎推理对于前沿模型来讲价值不大,反而可能造成能力束缚。就算想用,直接用Prompt的手段在应用时提示即可,根本不需要在训练期做这种微调。但对于小模型来讲,通过这样的方法能把性能提升到大模型水平上,其经济和应用价值都相当高。
不论是作为手机端乃至可穿戴设备端的模型来扩大应用场景,还是为了压缩在大多数场景下的AI运算成本,小模型的前景都非常可观。在能力水平远远落后于大模型的时代,小语言模型基本没有替代场景可言,因为上限太低。但如果其能力能够赶上Llama2级别的模型,那它已经可以满足日常AI助手基本操作需求了。让它做深入数据分析可能还不现实,但人类在日常生活的应用中,又会有多少需要AI的高级需求呢?炒菜订票,行程规划可能才是主流。
现在微软推出2.7B的模型,应该都能满足以上这些需求,而这个市场,在toC侧的前景有可能比前沿模型还大。
现在微软作为第一个专注杀入小模型市场的大厂,成功将SLM直接强化到了市场无法忽视的能力水平。着也许预示着这个曾经只有小开放模型玩家和学界才关心的领域,会成为下一个AI最火热的战场。