Apple LLM: 智能基础语言模型(AFM)

2024-08-30 21:44

本文主要是介绍Apple LLM: 智能基础语言模型(AFM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天想和大家分享一下我最近在arXiv.org上看到苹果发表的一篇技术论文 Apple Intelligence Foundation Language Models (https://arxiv.org/abs/2407.21075),概述了他们的模型训练。这虽然出乎意料,但绝对是一个积极的惊喜!

这篇论文有那么多作者参与,就知道这模型不简单。研究团队在这篇论文里给我们展示了两个超厉害的模型,它们是专门为苹果设备上的智能环境设计的。咱们就叫它们AFM,也就是“苹果基础模型”的简称。

具体来说,他们介绍了两个版本的AFM。一个是有30亿参数的,打算用在手机、平板或者笔记本上;另一个是服务器版的,更强大,但具体细节还没透露。

这些模型不光是用来聊天的,还能帮我们解决数学问题和编程难题。虽然论文里没细说编程训练的细节,但已经够让人期待了。

另外,AFM是密集型大型语言模型(LLM),不使用专家混合方法。

AFM预训练

首先,他们不仅用了公开的数据和得到授权的数据,还特别尊重了网站上的robots.txt文件,没去爬那些不让爬的数据,这就很讲究。再来,他们还提到了对基准数据做了净化处理,这可真是太用心了。

而且,他们还强调了一个关键点:数据的质量比数量要重要得多。你看,他们的设备模型词汇量是49k个token,服务器模型是100k个token,虽然都比Qwen 2的150k个token要少,但这说明他们更注重数据的精而不是多。

最有意思的是,他们的预训练过程不是简单的两步走,而是有三步呢!

  1. 先是核心的常规预训练。

  2. 然后是继续预训练,这时候他们把那些网络爬取的、质量不太高的数据权重降低了,而把数学和代码相关的数据权重提高了。

  3. 最后,他们还用了更长的序列数据和合成数据来扩展模型的上下文理解能力。

AFM模型经历的三步预训练过程概述。

让我们更详细地看看这三个步骤。

预训练I:核心预训练

这一步就是苹果预训练流程的起点,跟我们平时说的常规预训练差不多。他们的AFM服务器模型训练用了6.3万亿个token,批量大小和序列长度都是4096个token,这和Qwen 2模型的7万亿个token训练量挺接近的。

但是,AFM设备模型的来头可不小,它是从一个更大的6.4亿参数模型里面蒸馏和修剪出来的。这个过程有点像是用一个超级学霸(教师模型)来辅导一个普通学生(设备模型),让它变得更聪明。具体来说,就是用了一个叫做“蒸馏损失”的东西,把目标标签换成了真实标签和教师模型预测的最高概率标签的混合体,其中教师标签占90%的权重。

知识蒸馏现在在大型语言模型预训练中越来越流行了,Gemma-2也在用这个技术。以后我会详细介绍这个,现在咱们先简单说说。就是说,学生模型不仅学习原始数据集,还学习教师模型的输出,这样就能从教师那里得到更多的信息,比单打独斗学得多。

知识蒸馏的概述,其中一个小模型(这里,AFM设备3B模型)在原始训练token上以及来自一个更大的教师模型(这里,一个6.4B模型)的输出上进行训练。请注意,a)中的交叉熵损失是用于预训练LLMs的常规训练损失。

不过,这种方法也有缺点。首先,你得先训练出一个大的教师模型;然后,还得用这个大模型来预测所有训练数据的结果。这些预测可以提前算好存起来,但这需要很多存储空间;或者也可以在训练过程中实时计算,但这可能会让训练速度变慢。

预训练II:继续预训练

这个阶段有点小变化,就是把处理的数据量从4096个token增加到了8192个token,这就像是让模型能看得更远,理解更长的句子和段落。虽然这个数据集的token数量只有1万亿,但是比起核心预训练的数据量来说,那可是五倍的缩减,这就像是从海量信息中提炼出精华。

关键是,这一步特别强调用高质量的数据来训练,尤其是数学和编程相关的内容,这可真是下了功夫,要让模型在这些领域里更上一层楼。

不过,这里有个挺有意思的发现,就是之前提到的那个知识蒸馏方法,在这个阶段好像不太管用,研究人员发现它并没有带来什么好处。这可能说明,不同的训练阶段,可能需要不同的策略和方法。

预训练III:上下文扩展

咱们再来看看预训练的第三步,这个阶段虽然只涉及1000亿个token,跟第二步比起来,这数量只有10%,但这一步的重点在于扩大模型的视野,让它能处理更长的上下文,达到了32768个token。这就好比是给模型装了个望远镜,让它能看得更远,理解更长、更复杂的信息。

为了做到这一点,研究人员可是下了一番功夫,他们用合成的长上下文问答数据来丰富训练集。这就像是给模型提供了更多的练习题,让它通过解决这些问题来提高自己的能力。

这种做法不仅能让模型在处理长文本时更加得心应手,还能帮助它更好地理解和生成连贯、逻辑性强的长段落内容。这对于提升模型在各种复杂任务中的表现,比如写文章、编故事或者进行长篇对话等,都是非常有帮助的。

总的来说,这三个预训练步骤,每一步都有它的独特之处和重点,共同为打造一个强大、灵活、多才多艺的模型打下了坚实的基础。

AFM预训练技术总结。

AFM后训练:精益求精

苹果在模型的后训练阶段也是下了一番苦功,他们的方法和预训练一样全面。他们用了人工标注的数据和合成数据,而且特别强调质量比数量重要。这就像是在说,我们不追求数据的堆砌,而是要数据的精挑细选。他们没有固定死板地按照某个比例来混合数据,而是通过多次实验来调整,找到那个最佳的平衡点。

后训练分为两个主要步骤:首先是监督指令的微调,然后是多轮的人类反馈强化学习(RLHF)。

这里特别值得一提的是,苹果在这个RLHF阶段引入了两个新算法:

  1. 带有教师委员会的拒绝采样微调(iTeC):这个算法就像是有个智囊团,它结合了拒绝采样和多种偏好调整技术,比如SFT、DPO、IPO和在线RL。苹果没有只依赖一种算法,而是每种方法都单独训练模型,然后让这些模型产生响应,由人类来评估和打标签。这些标签数据再用来迭代训练奖励模型。在拒绝采样阶段,模型委员会会给出多个响应,然后奖励模型挑出最好的那个。

  2. 带有镜像下降策略优化的RLHF:这个算法被选中是因为它比常用的PPO(近端策略优化)更有效。

这种基于委员会的方法虽然复杂,但对于相对较小的模型(大约30亿参数)来说是可行的。如果是更大的模型,比如Llama 3.1中的70B或405B参数模型,那挑战性就大了。

总的来说,苹果在后训练阶段的这些操作,都是为了进一步提升模型的性能,让模型在实际应用中能表现得更加出色。

 

结论

苹果在预训练和后训练上的策略相对全面的,这可能是因为他们面临的风险确实很大——毕竟,这些模型是要部署在数以百万计,甚至数十亿的设备上的。不过,也正是因为这些模型的规模相对较小(3B模型的规模还不到最小的Llama 3.1模型的一半),他们才能够尝试这么多的技术手段。

他们的一大亮点是,并没有简单地在RLHF和DPO之间做选择,而是通过委员会的形式,综合使用了多种偏好调整算法。

另外,他们还明确地将问答数据纳入了预训练的一部分,这一点我在之前的文章《指令预训练LLMs》中也有讨论过。

总的来说,这份技术报告给人带来了清新的感觉,也让人对苹果的模型训练方法充满了期待。

这篇关于Apple LLM: 智能基础语言模型(AFM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1122010

相关文章

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

C语言中的常见进制转换详解(从二进制到十六进制)

《C语言中的常见进制转换详解(从二进制到十六进制)》进制转换是计算机编程中的一个常见任务,特别是在处理低级别的数据操作时,C语言作为一门底层编程语言,在进制转换方面提供了灵活的操作方式,今天,我们将深... 目录1、进制基础2、C语言中的进制转换2.1 从十进制转换为其他进制十进制转二进制十进制转八进制十进

$在R语言中的作用示例小结

《$在R语言中的作用示例小结》在R语言中,$是一个非常重要的操作符,主要用于访问对象的成员或组件,它的用途非常广泛,不仅限于数据框(dataframe),还可以用于列表(list)、环境(enviro... 目录1. 访问数据框(data frame)中的列2. 访问列表(list)中的元素3. 访问jav

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合