读过我以前作品的读者可能还记得我曾报道过 “教科书就是你所需要的一切”,这是微软公司发表的一篇论文,展示了高质量数据如何对模型性能产生巨大影响。该论文的研究结果直接驳斥了 “模型必须非常庞大才能胜任 “的观点。这篇论文背后的研究人员继续他们的工作,并发表了一篇让我感到无比兴奋的论文。
这篇论文的标题也许解释了最大的发现: “Phi-3技术报告: 手机本地的高能力语言模型”。
让我们深入了解一下作者对 Phi-2 模型做了哪些改动,他们是如何训练它的,以及它在 iPhone 上是如何工作的。
关键术语
在深入了解架构之前,有几个关键概念需要了解。如果你已经知道这些概念,请直接跳到下一节。
模型parameters是指模型在训练过程中学习到的权重和偏置的数量。如果有 10 亿个参数,那么就有 10 亿个权重和偏置决定了模型的性能。参数越多,神经网络就越复杂。head指的是变形器中自我关注机制所拥有的键、值和查询向量的数量。Layers是指 Transformer 神经网络中存在的神经段的数量,隐藏维度是指典型隐藏层中神经元的数量。
Tokenizer 是将输入文本转换为嵌入式文本的软件,转换器随后将对其进行处理。Vocabulary size指的是模型所训练的唯一标记的数量。转换器的block structure是指我们为特定模型选择的层、头、激活函数、标记化器和层归一化的组合。
分组查询注意力(GQA)是我们优化多头注意力以减少训练和推理过程中计算开销的一种方法。如下图所示,GQA 采用的是中庸之道–我们不是将 1 个值和 1 个关键字与 1 个查询配对,而是采用 1:1:M 的方法,即多个查询小于整个查询体。这样做的目的是,既能从多查询注意(MQA)中获得训练成本优势,又能最大限度地降低随之而来的性能下降。
phi架构
我们先来看看这个模型背后的架构。研究人员发布了 3 种不同的解码器模型:phi-3-mini、phi-3-small 和 phi-3-medium,每种模型都有不同的超参数。
-
phi-3-mini
– 38 亿个参数
– 32 个头
– 32 层
– 3072 个隐藏维度
– 4k 标记默认上下文长度
– 32064 词汇量
– 权重存储为 bfloat16
– 在 3.3 万亿个令牌上训练
-
phi-3-small
– 70 亿个参数
– 32 个头
– 32 层
– 4096 个隐藏维度
– 8k 标记默认上下文长度
– 100352 词汇量
– 权重存储为 bfloat16
– 在 4.8 万亿个令牌上训练
-
phi-3-medium
– 140 亿个参数
– 40 个头
– 40 层
– 3072 个隐藏维度
– 在 4.8 万亿个代币上进行训练
关于其中的一些差异,phi-3-mini模型是使用典型的多头注意力进行训练的。虽然论文中没有提及,但我认为,由于该模型的规模大约是其他两个模型的一半,因此与多头相关的训练成本并不高。当然,当他们扩大 phi-3-small 的规模时,他们采用了分组查询关注,4 个查询与 1 个关键字相连。
此外,他们还尽可能使 phi-3-mini 的区块结构接近 LLaMa-2 结构。这样做的目的是为了让开源社区能够继续利用 Phi-3 对 LLaMa-2 进行研究。这对于进一步了解该块结构的威力是有意义的。
然而,Phi-3-small并没有使用LLaMa的区块结构,而是选择使用 tiktoken 标记器,并交替使用密集注意层和新的区块解析注意层。此外,他们还为这些模型的训练数据集添加了 10% 的多语言数据。
训练和数据优化组合
与 Phi-2 类似,研究人员在高质量数据方面投入了大量精力。在生成用于训练模型的数据时,他们使用了与之前类似的 “教育价值 “范式,并选择使用比上次多得多的数据。他们分两个阶段创建数据。
第一阶段是寻找他们认为对用户具有高 “教育价值 “的网络数据。这样做的目的是为模型提供常识。然后,第二阶段从第一阶段的数据中提取一个子集,生成能教会模型如何进行逻辑推理或获得特定技能的数据。
这里的挑战在于如何确保每个语料库的数据组合与所训练模型的规模相适应(即 phi-3-small 与 phi-3-mini)。这就是 “数据最优 “机制背后的理念,即提供给 LLM 进行训练的数据能让它发挥其块结构的最佳能力。换句话说,如果您认为数据是训练优秀 LLM 的关键因素,那么找到通过数据向模型展示的正确技能组合与找到优秀数据同样关键。研究人员强调,他们希望模型的推理能力强于知识能力,因此他们从第二阶段语料库中选择了比第一阶段语料库更多的数据。
有趣的是,当他们使用与训练 phi-3-small 时大致相同的数据混合物训练 phi-3-medium 时,他们注意到从 7B 参数到 14B 参数的改进远比从 3.8B 到 7B 参数的改进有限。作者怀疑这不是区块结构的限制,而是他们用来训练phi-3-medium 的数据混合物的限制。
后期训练
研究小组使用监督微调(SFT)和直接偏好优化(DPO)来改进训练后的模型。有兴趣深入了解 DPO 的读者可以点击这里查看我的博文。监督微调是一种迁移学习,我们使用自定义数据集来提高 LLM 在该数据集上的能力。作者使用 SFT 提高了模型在数学、编码、推理和安全等不同领域的能力。然后,他们使用 DPO 进行聊天优化,引导聊天从他们希望避免的回答转向理想的回答。
在这一阶段,作者将 phi-3-mini 的上下文窗口从 4k 字节扩展到 128k 字节。他们采用的方法称为 “长绳”(Long Rope)。作者声称,两种语境类型的性能是一致的,这在语境长度大幅增加的情况下是很重要的。如果有足够的兴趣,我将就该论文中的研究结果单独撰写一篇博文。
手机使用的量化
尽管这些模型很小,但要让这些模型在手机上运行,仍需要进一步最小化。LLM 的权重通常存储为浮点数;例如,Phi-3 的原始权重为 bfloat16,这意味着每个权重占用 16 位内存。虽然 16 位看起来微不足道,但如果考虑到模型中大约有 10⁹ 个参数,你就会意识到每个额外位的增加速度有多快。
为了解决这个问题,作者将权重从 16 位压缩到 4 位。其基本思想是减少存储每个数字所需的比特数。举个概念性的例子,数字 2.71828 可以压缩为 2.72。虽然这是一种有损操作,但仍能捕捉到大部分信息,同时大大减少了存储空间。
作者在配备 A16 芯片的 iPhone 上运行了量化程序,发现它每秒最多能生成 12 个文字。相比之下,运行LLaMa-2 量化 4 位的 M1 MacBook 的速度大约为每秒 107 个标记。我见过的最快令牌生成速度(Groq)为每秒生成 853.35 个令牌。考虑到这仅仅是个开始,我们能在 iPhone 上看到用这种模型生成标记的速度之快令人惊叹。看来推理速度只会越来越快。
将 Phi-3 与搜索配对
小型模型的一个局限是,它在网络中可以存储信息的地方较少。因此,在需要广泛知识的任务中,Phi-3 的表现不如 LLaMa-2 等模型。
作者认为,如果将 Phi-3 与搜索引擎搭配使用,该模型的能力将得到显著提高。如果真是这样,我认为检索增强生成(RAG)很可能会继续存在,并成为帮助小型模型与大型模型一样出色的关键部分。
结论
最后,我们看到了高性能小型模型的雏形。虽然这些模型的训练在很大程度上仍然依赖于高性能的硬件,但对它们进行推理正日益民主化。这带来了一些有趣的现象。
首先,可以在本地运行的模型几乎可以完全保密,用户可以向这些 LLM 提供他们可能不愿意通过互联网发送的数据。这为更多的使用案例打开了大门。
其次,这些模型将推动移动硬件的性能进一步提高。因此,我希望在高端智能手机上看到更多的片上系统(SoC),尤其是 CPU 和 GPU 共享内存的片上系统,以最大限度地提高推理速度。此外,为这些硬件提供高质量的接口也至关重要。任何新进入消费硬件领域的硬件都可能需要像苹果硅的 MLX 这样的库。
第三,本文表明,在 LLM 中,高质量数据在很多方面都能超越更多的网络复杂性,因此,不仅要找到而且要生成高质量数据的竞争只会越来越激烈。
这是一个令人兴奋的时代。
(机器翻译,轻度译后编辑,仅供参考)
编辑:刘慧