#From r to Q∗
这就是OpenAI神秘的Q*?斯坦福:语言模型就是Q函数
近日,斯坦福大学一个团队的一项新研究似乎为这一研究方向的潜力提供了佐证,其声称现在已经取得非凡成就的「语言模型不是一个奖励函数,而是一个 Q 函数!」由此发散思维猜想一下,也许 OpenAI 秘密的 Q* 项目或许真的是造就 AGI 的正确方向(或之一)。
- 论文标题:From r to Q∗: Your Language Model is Secretly a Q-Function
- 论文地址:https://arxiv.org/pdf/2404.12358.pdf
在对齐大型语言模型(LLM)与人类意图方面,最常用的方法必然是根据人类反馈的强化学习(RLHF)。通过学习基于人类标注的比较的奖励函数,RLHF 能够捕获实践中难以描述的复杂目标。研究者们也在不断探索使用强化学习技术来开发训练和采样模型的新算法。尤其是直接对齐方案(比如直接偏好优化,即 DPO)凭借其简洁性收获了不少拥趸。
直接对齐方法的操作不是学习奖励函数然后使用强化学习,而是在上下文多臂赌博机设置(bandit setting)中使用奖励函数与策略之间的关系来同时优化这两者。类似的思想已经被用在了视觉 - 语言模型和图像生成模型中。
尽管有人说这样的直接对齐方法与使用 PPO 等策略梯度算法的经典 RLHF 方法一样,但它们之间还是存在根本性差异。
举个例子,经典 RLHF 方法是使用终点状态下的稀疏奖励来优化 token 层面的价值函数。另一方面,DPO 则仅在上下文多臂赌博机设置中执行操作,其是将整个响应当成单条臂处理。这是因为,虽然事实上 token 是一次性只生成一个,但研究强化学习的人都知道,密集型奖励是有益的。
尽管直接对齐算法颇引人注意,但目前人们还不清楚它们能否像经典强化学习算法那样用于序列。
为了搞清楚这一点,斯坦福这个团队近日开展了一项研究:在大型语言模型中 token 层面的 MDP 设置中,使用二元偏好反馈的常见形式推导了 DPO。
他们的研究表明,DPO 训练会隐含地学习到一个 token 层面的奖励函数,其中语言模型 logit 定义最优 Q 函数或预期的总未来奖励。然后,他们进一步表明 DPO 有能力在 token MDP 内灵活地建模任意可能的密集奖励函数。
这是什么意思呢?
简单来说,该团队表明可以将 LLM 表示成 Q 函数并且研究表明 DPO 可以将其与隐式的人类奖励对齐(根据贝尔曼方程),即在轨迹上的 DPO 损失。
并且他们证明这种表示可以拟合任何在轨迹上的反馈奖励,包括稀疏信号(如智能体应用)。
实验
他们也进行了实验,论证了三个可能对 AI 社区有用的实用见解。
第一,他们的研究表明尽管 DPO 是作为上下文多臂赌博机而派生出来的,但 DPO 模型的隐含奖励可在每个 token 层面上进行解释。
在实验中,他们以定性方式评估了 DPO 训练的模型是否能够根据轨迹反馈学习 credit assignment。有一个代表性示例是商讨工作就职的场景,图 1 给出了两个答案。
其中左边是正确的基础摘要,右边是经过修改的版本 —— 有更高层的职位和相应更高的工资。他们计算了这两个答案的每个 token 的 DPO 等价的奖励。图 1 中的每个 token 标注的颜色就正比于该奖励。
可以看到,模型能够成功识别对应于错误陈述的 token,同时其它 token 的值依然相差不大,这表明模型可以执行 credit assignment。
此外,还可以看到在第一个错误(250K 工资)的上下文中,模型依然为其余 token 分配了合理的值,并识别出了第二个错误(management position)。这也许表明模型具备「缝合(stitching)」能力,即根据离线数据进行组合泛化的能力。该团队表示,如果事实如此,那么这一发现将有助于强化学习和 RLHF 在 LLM 中的应用。
第二,研究表明对 DPO 模型进行似然搜索类似于现在很多研究中在解码期间搜索奖励函数。也就是说,他们证明在 token 层面的阐述方式下,经典的基于搜索的算法(比如 MCTS)等价于在 DPO 策略上的基于似然的搜索。他们的实验表明,一种简单的波束搜索能为基础 DPO 策略带来有意义的提升,见图 2。
第三,他们确定初始策略和参考分布的选择对于确定训练期间隐性奖励的轨迹非常重要。
从图 3 可以看出,当在 DPO 之前执行 SFT 时,被选取和被拒绝的响应的隐含奖励都会下降,但它们的差距会变大。
当然,该团队最后也表示,这些研究结果还需要更大规模的实验加以检验,他们也给出了一些值得探索的方向,包括使用 DPO 让 LLM 学会基于反馈学习推理、执行多轮对话、充当智能体、生成图像和视频等。
#Phi-3
微软发布Phi-3,性能超Llama-3,可手机端运行,数据已成为提升大模型能力的重点。
Llama-3 刚发布没多久,竞争对手就来了,而且是可以在手机上运行的小体量模型。
本周二,微软发布了自研小尺寸模型 Phi-3。
新模型有三个版本,其中 Phi-3 mini 是一个拥有 38 亿参数的语言模型,经过 3.3 万亿 token 的训练,其整体性能在学术基准和内部测试上成绩优异。
尽管 Phi-3 mini 被优化至可部署在手机上,但它的性能可以与 Mixtral 8x7B 和 GPT-3.5 等模型相媲美。微软表示,创新主要在于用于训练的数据集。
与此同时,Phi-3 与 Llama-2 使用相同的架构,方便开源社区在其基础上开发。
此前,微软的 Phi 系列模型曾经引发了人们的热议,去年 6 月,微软发布了《Textbooks Are All You Need》论文,用规模仅为 7B token 的「教科书质量」数据训练 1.3B 参数的模型 phi-1,实现了良好的性能。
去年 9 月,微软进一步探索这条道路,让 1.3B 参数的 Transformer 架构语言模型 Phi-1.5 显示出强大的编码能力。
去年底,微软提出的 Phi-2 具备了一定的常识能力,在 2.7B 的量级上多个基准测试成绩超过 Llama2 7B、Llama2 13B、Mistral 7B 等一众先进模型。
Phi-3 技术报告:https://arxiv.org/abs/2404.14219
刚刚提出的 phi-3-mini 是一个在 3.3 万亿个 token 上训练的 38 亿参数语言模型。实验测试表明,phi-3-mini 的整体性能可与 Mixtral 8x7B 和 GPT-3.5 等模型相媲美,例如 phi -3-mini 在 MMLU 上达到了 69%,在 MT-bench 上达到了 8.38。
微软之前对 phi 系列模型的研究表明,高质量的「小数据」能够让较小的模型具备良好的性能。phi-3-mini 在经过严格过滤的网络数据和合成数据(类似于 phi-2)上进行训练,并进一步调整了稳健性、安全性和聊天格式。
此外,研究团队还提供了针对 4.8T token 训练的 7B 和 14B 模型的初始参数扩展结果,称为 phi-3-small 和 phi-3-medium,两者都比 phi-3-mini 能力更强。
学术基准
在标准开源基准测试中,phi-3-mini 与 phi-2 、Mistral-7b-v0.1、Mixtral-8x7B、Gemma 7B 、Llama-3-instruct8B 和 GPT-3.5 的比较结果如下表所示,为了确保具有可比性,所有结果都是通过完全相同的 pipeline 得到的。
安全性
Phi-3-mini 是根据微软负责任人工智能原则开发的。保证大模型安全的总体方法包括训练后的安全调整、红队(red-teaming)测试、自动化测试和数十个 RAI 危害类别的评估。微软利用受 [BSA+ 24] 启发修改的有用和无害偏好数据集 [BJN+ 22、JLD+ 23] 和多个内部生成的数据集来解决安全性后训练(post-training)的 RAI 危害类别。微软一个独立的 red team 反复检查了 phi-3-mini,以进一步确定后训练过程中需要改进的领域。
根据 red team 的反馈,研究团队整理了额外的数据集从而完善后训练数据集。这一过程导致有害响应率显著降低,如图 3 所示。
下表显示了 phi-3-mini-4k 和 phi-3-mini-128k 与 phi-2、Mistral-7B-v0.1、Gemma 7B 的内部多轮对话 RAI 基准测试结果。该基准测试利用 GPT-4 模拟五个不同类别的多轮对话并评估模型响应。
缺陷
微软表示,就 LLM 能力而言,虽然 phi-3-mini 模型达到了与大型模型相似的语言理解和推理能力水平,但它在某些任务上仍然受到其规模的根本限制。例如,该模型根本没有能力存储太多「事实知识」,这可以从 TriviaQA 上的低评分中看出。不过,研究人员相信这些问题可以通过搜索引擎增强的方式来解决。
参考内容:https://news.ycombinator.com/item?id=40127806
#从Llama-1到Llama-3
Llama模型的发布不仅证明了开源模型在全球AI领域的重要性,也为AI的未来发展方向提供了新的视角和动力。通过持续的技术进步和社区驱动的创新,Llama有望继续推动全球AI技术的广泛应用和发展。
在AI领域,大模型的发展正以前所未有的速度推进技术的边界。
北京时间4月19日凌晨,Meta在官网上官宣了Llama-3,作为继Llama-1、Llama-2和Code-Llama之后的第三代模型,Llama-3在多个基准测试中实现了全面领先,性能优于业界同类最先进的模型。
纵观Llama系列模型,从版本1到3,展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。这些模型不仅在技术上不断刷新纪录,更在商业和学术界产生了深远的影响。因此,对Llama模型不同版本之间的系统对比,不仅可以揭示技术进步的具体细节,也能帮助我们理解这些高级模型如何解决现实世界的复杂问题。
1. Llama进化史
本节将对每个版本的Llama模型进行简要介绍,包括它们发布的时间和主要特点。
1.1 Llama-1 系列
Llama-1 [1]是Meta在2023年2月发布的大语言模型,是当时性能非常出色的开源模型之一,有7B、13B、30B和65B四个参数量版本。Llama-1各个参数量版本都在超过1T token的语料上进行了预训训练,其中,最大的65B参数的模型在2,048张A100 80G GPU上训练了近21天,并在大多数基准测试中超越了具有175B参数的GPT-3。
由于模型开源且性能优异,Llama迅速成为了开源社区中最受欢迎的大模型之一,以Llama为核心的生态圈也由此崛起。我们将在第6节对这一生态进行详细介绍。与此同时,众多研究者将其作为基座模型,进行了继续预训练或者微调,衍生出了众多变体模型(见下图),极大地推动了大模型领域的研究进展。
唯一美中不足的是,因为开源协议问题,Llama-1不可免费商用。
1.2 Llama-2 系列
时隔5个月,Meta在2023年7月发布了免费可商用版本 Llama-2 [2],有7B、13B、34B和70B四个参数量版本,除了34B模型外,其他均已开源。
相比于Llama-1,Llama-2将预训练的语料扩充到了 2T token,同时将模型的上下文长度从2,048翻倍到了4,096,并引入了分组查询注意力机制(grouped-query attention, GQA)等技术。
有了更强大的基座模型Llama-2,Meta通过进一步的有监督微调(Supervised Fine-Tuning, SFT)、基于人类反馈的强化学习(Reinforcement Learning with Human Feedback, RLHF)等技术对模型进行迭代优化,并发布了面向对话应用的微调系列模型 Llama-2 Chat。
通过“预训练-有监督微调-基于人类反馈的强化学习”这一训练流程,Llama-2 Chat不仅在众多基准测试中取得了更好的模型性能,同时在应用中也更加安全。
随后,得益于Llama-2的优异性能,Meta在2023年8月发布了专注于代码生成的Code-Llama,共有7B、13B、34B和70B四个参数量版本。
1.3 Llama-3
系列2024年4月,Meta正式发布了开源大模型 Llama 3,包括8B和70B两个参数量版本。除此之外,Meta还透露,400B的Llama-3还在训练中。
相比Llama-2,Llama-3支持8K长文本,并采用了一个编码效率更高的tokenizer,词表大小为128K。在预训练数据方面,Llama-3使用了超过15T token的语料,这比Llama 2的7倍还多。
Llama-3在性能上取得了巨大飞跃,并在相同规模的大模型中取得了最优异的性能。
另外,推理、代码生成和指令跟随等能力得到了极大的改进,使Llama 3更加可控。
2. 模型架构
本节将详细描述Llama的模型架构,包括神经网络的大小、层数、注意力机制等。
目前,主流的大语言模型都采用了Transformer[3]架构,它是一个基于多层自注意力(Self-attention)的神经网络模型。
原始的Transformer由编码器(Encoder)和解码器(Decoder)两个部分构成,同时,这两个部分也可以独立使用。
例如基于编码器的BERT [4]模型和基于解码器的GPT [5]模型。
Llama模型与GPT类似,也是采用了基于解码器的架构。在原始Transformer解码器的基础上,Llama进行了如下改动:
- 为了增强训练稳定性,采用前置的RMSNorm [6]作为层归一化方法。
- 为了提高模型性能,采用SwiGLU [7]作为激活函数。
- 为了更好地建模长序列数据,采用RoPE [8]作为位置编码。
- 为了平衡效率和性能,部分模型采用了分组查询注意力机制(Grouped-Query Attention, GQA)[9]。
具体来说,首先将输入的token序列通过词嵌入(word embedding)矩阵转化为词向量序列。然后,词向量序列作为隐藏层状态依次通过𝐿个解码器层,并在最后使用RMSNorm进行归一化。归一化后的隐藏层状态将作为最后的输出。
在每个解码器层中,输入的隐藏层状态首先通过RMSNorm归一化然后被送入注意力模块。注意力模块的输出将和归一化前的隐藏层状态进行残差连接。之后,新的隐藏层状态进行RMSNorm归一化,然后被送入前馈网络层。类似地,前馈网络层的输出同样进行残差连接,作为解码器层的输出。
每个版本的Llama由于其隐藏层的大小、层数的不同,均有不同的变体。接下来,我们将展开看下每个版本的不同变体。
2.1 Llama-1 系列
Llama-1 模型架构,详见MODEL_CARD:
https://github.com/meta-llama/llama/blob/main/MODEL_CARD.md
为了更好地编码数据,Llama-1使用BPE [10]算法进行分词,具体由sentencepiece进行实现。值得注意的是,Llama-1将所有数字分解为单独的数字,并对未知的UTF-8字符回退到字节进行分解。词表大小为32k。
2.2 Llama-2 系列
Llama-2 模型架构,详见MODEL_CARD(同上)
Llama-2使用了和Llama-1相同的模型架构以及tokenizer。与Llama-1不同的是,Llama-2将上下文长长度扩展到了4k,并且34B和70B参数量版本使用了GQA。
2.3 Llama-3 系列
Llama-3 模型架构,详见MODEL_CARD:
https://github.com/meta-llama/llama3/blob/main/MODEL_CARD.md
与Llama 2相比,Llama-3将tokenizer由sentencepiece换成了tiktoken,这与GPT4 保持一致。同时,词表大小由32k扩展到了128k。另外,为了提高模型效率,Llama-3 8B和70B都采用了GQA。同时上下文长度也扩展到了8k。
3. 训练数据
本节将对每个版本的训练数据进行简要介绍,包括数据来源、规模和处理方式。
3.1 Llama-1 系列
Llama-1使用了海量无标注数据进行自监督学习,这些预训练数据由多个来源混合而成,且都是公开的数据。各个来源的数据量和采样比例见下表。
- 英语CommonCrawl:Llama-1预处理了2017年至2020年间的五个CommonCrawl数据集。该过程在行级别去重,使用fastText线性分类器进行语言识别以去除非英语页面,并使用n-gram语言模型过滤低质量内容。此外,Llama-1训练了一个线性模型来分类维基百科中用作参考的页面和随机采样的页面,并丢弃了未被分类为参考的页面。
- C4:在探索性实验中,Llama-1观察到使用多样化的预处理CommonCrawl数据集可以提升性能。因此,Llama-1的数据中包括了公开可获得的C4数据集。C4的预处理也包括去重和语言识别步骤:与CCNet的主要区别在于质量过滤,主要依赖于标点符号的存在或网页中的单词和句子数量等启发式规则。
- Github:Llama-1使用Google BigQuery上可公开获取的GitHub数据集。Llama-1仅保留在Apache、BSD和MIT许可下分发的项目。此外,Llama-1还使用基于行长度或字母数字字符比例的启发式规则过滤低质量文件,并用正则表达式移除如页眉等样板内容。最后,Llama-1在文件级别对结果数据集进行去重,匹配精确相同的内容。
- 维基百科:Llama-1添加了2022年6月至8月期间的维基百科数据,涵盖使用拉丁或西里尔文字的20种语言。Llama-1处理数据以移除超链接、评论和其他格式化的样板内容。
- Gutenberg和Books3:Llama-1在训练数据集中包括了两个书籍语料库:Gutenberg项目(包含公共领域的书籍)和ThePile的Books3部分,一个公开可获得的用于训练大型语言模型的数据集。Llama-1在书籍级别进行去重,移除超过90%内容重合的书籍。
- ArXiv :Llama-1处理ArXiv的Latex文件,以增加科学数据到Llama-1的数据集。Llama-1移除了第一节之前的所有内容以及参考文献部分。Llama-1还移除了.tex文件中的注释,并内联扩展了用户编写的定义和宏,以增强论文间的一致性。
- Stack Exchange:Llama-1包括了Stack Exchange的数据转储,这是一个涵盖从计算机科学到化学等多种领域的高质量问题和答案的网站。Llama-1保留了28个最大网站的数据,移除了文本中的HTML标签,并根据得分将答案排序(从最高到最低)。
经过上述处理,Llama-1的整个训练数据集包含大约1.4T token。对于Llama-1的大部分训练数据,每个token在训练期间只使用一次,但维基百科和Books的数据进行了大约两个epoch的训练。
3.2 Llama-2
Llama-2 预训练使用了来自公开可用源的 2T个数据token(未详细指出具体的开源数据)。Llama-2-Chat 还在为此项目创建的27,540个提示-响应对上进行了额外的微调,其表现优于更大但质量较低的第三方数据集。为了实现AI对齐,使用了包含1,418,091个Meta示例和七个较小数据集的组合的人类反馈强化学习(RLHF)。在Meta示例中,平均对话深度为3.9,Anthropic Helpful 和 Anthropic Harmless集合为3.0,包括OpenAI Summarize、StackExchange等在内的其他五个集合的平均对话深度为1.0。微调数据包括公开可用的指令数据集以及超过一百万个新的人类标注示例。
在预训练过程中,Llama-2对数据的安全性进行了全面考量。通过对预训练数据进行分析,Llama-2能够增加透明度,并发现潜在的问题根源,如潜在的偏见。Llama-2采取了一系列措施,包括遵循 Meta 公司的隐私和法律审查流程,排除已知含有大量个人信息的网站的数据。此外,Llama-2未对数据集进行额外的过滤,以使模型在各种任务中更广泛可用,同时避免过度清洗可能导致的意外人口统计消除。对于语言的代表性和毒性的分析,Llama-2使用了相应的工具和数据集,以了解预训练数据的特征,为模型的安全调整提供指导。这一过程确保了我们的模型在安全性方面得到了充分的考虑,并促使我们在部署模型之前进行了重要的安全调整。
Llama 2的预训练主要集中在英语数据上,尽管实验观察表明模型在其他语言方面已有一定的熟练度,但由于非英语语言的预训练数据量有限,其熟练度受到限制(如下图所示)。因此,该模型在非英语语言中的性能仍然脆弱,应谨慎使用(说明多语言能力差:有可能是词表较小导致)。
预训练数据截至到2022年9月,但某些调整数据较新,直到2023年7月。
在Llama2发布的技术报告中有说明:
我们将继续努力微调模型,以提高在其他语言环境下的适用性,并在未来发布更新版本,以解决这一问题。
当前Llama-3 不但扩充了词表大小而且增加了多语言的训练语料。从而完成了在Llama2在技术报告的承诺,而且在当前公布出来的多语言任务中获得了大幅度提升的性能。
3.3 Llama-3 系列
为了更好训练Llama-3,研究人员精心设计了预训练语料库,这些不仅关注数量,还特别强调了质量。LLAMA-3其训练数据量大幅增加,从LLAMA-2的2T Tokens扩展到了15T Tokens,增长了约8倍。其中,代码数据扩充了4倍,显著提升了模型在代码能力和逻辑推理能力方面的表现。
LLAMA-3提供了三种规模的模型版本:小型模型具有8B参数,其性能略优于Mistral 7B和Gemma 7B;中型模型则拥有70B参数,其性能介于ChatGPT 3.5和GPT 4之间;大型模型规模达到400B,目前仍在训练中,旨在成为一个多模态、多语言版本的模型,预期性能应与GPT 4或GPT 4V相当。
值得注意的是,LLAMA-3并没有采用MOE(Mixture of Experts)结构,这种结构主要用于降低训练和推理成本,但在性能上通常无法与同规模的密集型(Dense)模型相比。随着模型规模的扩大,如何降低推理成本将成为一个需要关注的问题。
此外,LLAMA-3的训练数据包括了大量的代码token和超过5%的非英语token,来源于30多种语言。这不仅使得模型在处理英语内容时更加高效,也显著提升了其多语言处理能力,这表明LLAMA-3在全球多语言环境中的适应性和应用潜力。
为确保数据质量,Meta开发了一系列数据过滤pipeline,包括启发式过滤器、NSFW过滤器、语义重复数据删除技术及用于预测数据质量的文本分类器。这些工具的有效性得益于先前版本Llama的表现,特别是在识别高质量数据方面。
此外,Meta通过大量实验评估了在最终预训练数据集中混合不同来源数据的最佳策略,确保Llama-3能在多种场景下展现卓越性能,如日常琐事、STEM 领域、编程和历史知识等。
4. 训练方法
本节将对每个版本的训练方法进行简要介绍,包括预训练、有监督微调和基于人类反馈的强化学习。
4.1 Llama-1系列
Llama-1模型是一个基础的自监督学习模型,它没有经过任何形式的特定任务微调。自监督学习是一种机器学习技术,其中模型通过分析大量未标记的数据来预测其输入数据的某些部分。这种方法允许模型在没有人类标注的数据的情况下自动学习数据的内在结构和复杂性。Llama-1在公布的技术报告中详细描述了使用AdamW优化器的机器学习模型的具体训练配置。AdamW是对Adam优化器的改进,可以更有效地处理权重衰减,从而提高训练的稳定性。β1和β2参数的选择影响训练过程的收敛行为和稳定性。Llama-1描述的余弦学习率调度是一种有效的技术,用于在训练期间调整学习率,通过逐渐减少学习率,在某些情况下可以导致更好的收敛。实施0.1的权重衰减和1.0的梯度裁剪是预防过拟合和确保数值稳定性的标准做法。使用预热步骤是一种策略性方法,旨在训练过程初期稳定训练动态。根据模型大小调整学习率和批量大小是一种优化资源分配和效率的实用方法,有可能提高模型性能。
Llama-1也展示了一系列针对大规模语言模型训练进行的优化措施。通过使用xformers库[12]中的causal multi-head attention(通过不存储注意力权重和不计算由于语言建模任务的因果性质而被屏蔽的key/query.分数来实现的)的高效实现,减少了内存占用和计算时间,显示了在处理大量数据时对效率的关注。此外,采用手动实现反向传播函数代替依赖自动微分系统,以及利用检查点技术保存计算成本高的激活,都是提高训练速度和减少资源消耗的有效策略。通过模型和序列并行性以及优化GPU之间的通信,进一步提升了训练过程的效率。这些优化措施特别适合于训练参数庞大的模型,如650亿参数的模型,能显著减少训练时间,提高整体的运算效率。整体上,这些优化技术体现了在高性能计算领域对资源管理和效率优化的深入考量,对于推动大规模语言模型的发展具有重要意义。
4.2 Llama-2系列
Llama-2模型是在Llama-1的基础上进一步发展的,而Llama-2-Chat模型则是基于Llama-2进行微调的版本。这两个模型保持了固定的4k上下文长度,这与OpenAI的GPT-4在微调过程中可能增加的上下文长度不同。
在Llama-2和Llama-2-Chat的微调中,采用了自回归损失函数,这是一种在生成模型中常见的方法,模型预测下一个token时会考虑到之前的所有token。在训练过程中,用户输入提示的token损失被清零,这意味着模型被训练以忽略这些特定的token,从而更专注于生成回复。
Llama-2-Chat的训练过程如下图所示。整个过程起始于利用公开数据对Llama-2进行预训练。在此之后,通过有监督微调创建了Llama-2-Chat的初始版本。随后,使用基于人类反馈的强化学习(RLHF)方法来迭代地改进模型,具体包括拒绝采样(Rejection Sampling)和近端策略优化(Proximal Policy Optimization, PPO)。在RLHF阶段,人类偏好数据也在并行迭代,以保持奖励模型的更新。
4.3 Llama-3系列
与Llama-2类似,Llama-3系列也有两个模型——预训练模型Llama-3和微调后的模型Llama-3-Instruct。
在预训练阶段,为了有效地利用预训练数据,Llama-3投入了大量精力来扩大预训练。具体而言,通过为下游基准测试制定一系列扩展法则(scaling laws),使得在训练之前就能预测出模型在关键任务上的性能,进而选择最佳的数据组合。
在这一过程中,Llama-3对扩展法则有了一些新的观察。例如,根据DeepMind 团队提出的Chinchilla [11]扩展法则,8B模型的最优训练数据量约为200B token,但实验发现,即使训练了两个数量级的数据后,模型性能仍在继续提高。在多达15T token上进行训练后,8B和70B参数的模型都继续以对数线性的方式提升性能。
为了训练最大的Llama-3模型,Meta结合了三种并行策略:数据并行、模型并行和流水并行。当同时在16K GPU上进行训练时,最高效的策略实现了每个GPU超过400 TFLOPS的计算利用率。最后,模型在两个定制的24K GPU集群上进行了训练。
为了最大限度地延长GPU的正常运行时间,Meta开发了一个先进的新训练堆栈,可以自动检测、处理和维护错误。另外还大大提高了硬件可靠性和无声数据损坏的检测机制,并开发了新的可扩展存储系统,减少了检查点和回滚的开销。这些改进使总的有效训练时间超过95%。综合起来,这些改进使Llama-3的训练效率比Llama-2提高了约三倍。
在微调阶段,Meta对模型的微调方法进行了重大创新,结合了有监督微调(Supervised Fine-Tuning, SFT)、拒绝采样、近似策略优化(Proximal Policy Optimization, PPO)和直接策略优化(Direct Policy Optimization, DPO)。这种综合方法优化了模型在执行复杂的推理和编码任务时的表现。特别是通过偏好排序的训练,Llama-3在处理复杂的逻辑推理问题时能更准确地选择最合适的答案,这对于提高AI在实际应用中的可用性和可靠性至关重要。
5. 效果对比
本节将对比不同版本在众多基准测试中的效果差异。
5.1 Llama-2 vs Llama-1
Meta官方数据显示,Llama-2在众多基准测试中都优于Llama-1和其他开源语言模型。
5.2 Llama-3 vs Llama-2
Meta官方数据显示,在各自参数规模上,Llama-3 8B和70B版本都取得了不错的成绩。8B模型在众多基准测试中均胜过Gemma 7B和Mistral 7B Instruct,而70B模型超越了闭源模型Claude 3 Sonnet,对比谷歌的Gemini Pro 1.5性能也是相当。
同时,在Llama-3的开发过程中,Meta还开发了一个包含1800个提示的高质量人类评估集。评测结果显示,Llama 3不仅大幅超越Llama 2,也战胜了Claude 3 Sonnet、Mistral Medium和GPT-3.5这些知名模型。
Llama-3之所以能够取得如此出色的成绩,离不开它预训练模型的优异性能。在众多基准测试中,8B模型超越了Mistral 7B和Gemma 7B,70B模型则战胜了Gemini Pro 1.0和Mixtral 8x22B。
另外,Meta表示,最大的Llama-3仍在训练中,其参数超过400B,并在多项基准测试中取得了出色的成绩。一旦完成训练,Meta将发表一篇详细的研究论文。
值得注意的是,根据英伟达科学家Jim Fan的整理,Llama3 400B基本逼近Claude-3-Opus和GPT-4-turbo,这将意味着开源社区即将迎来GPT-4级大模型。
6. 社区影响
本节将简要介绍Llama模型对开源社区的影响。
6.1 开放源代码模型的力量
自Meta发布Llama模型以来,它对全球AI社区产生了深远的影响。作为一个开源的大语言模型(LLM),Llama不仅提供了一个强大的技术基础,还推动了全球范围内对AI技术的广泛采用和创新。
Llama模型的开源策略被视为LLM时代的“安卓”,这意味着它提供了一个模块化和可自定义的平台,使研究人员和开发者能够根据自己的需要调整和优化模型。这种开放性极大地降低了进入门槛,使得从小型创业公司到大型企业都能够利用这一技术。四月十九日的Llama 3的发布,一日的下载量已经突破了1.14k,两个8B的模型位列trending第一。
6.2 对全球AI研发的影响
在OpenAI转向更封闭的商业模式后,Llama的发布为全球进行AI项目研发的团队和个人提供了一种可靠的选择。这种开源模型确保了用户不必完全依赖单一的商业API,从而增加了企业的运营安全感和自由度,尤其是在数据安全和成本控制方面。
6.3 技术进步和社区创新
技术上,Llama模型已经展示了与GPT相媲美的性能,这证明了开源社区在推动前沿技术方面的能力。此外,社区通过对模型的不断优化和调整,在不同的垂直领域中开发出适用的解决方案,类似于Stable Diffusion和Midjourney等社区驱动的大模型。
6.4 生态系统和多样性
Llama的应用已经扩展到多种平台和设备,包括移动和边缘设备。这种多样化的应用不仅推动了技术的普及,也加速了新应用的创新。例如,云平台如AWS和Google Cloud的积极参与,证明了Llama模型的广泛适用性和强大功能。
6.5 Llama社区的未来展望
随着Llama模型的持续发展和优化,Meta强调了对多模态AI、安全性和责任以及社区支持的持续关注。这些方向不仅符合当前AI发展的趋势,也为Llama社区的未来提供了明确的路线图。
7. 总结
总之,Llama模型的发布不仅证明了开源模型在全球AI领域的重要性,也为AI的未来发展方向提供了新的视角和动力。通过持续的技术进步和社区驱动的创新,Llama有望继续推动全球AI技术的广泛应用和发展。
#多智能体协作是新关键,软件开发等任务将更高效
起了众多讨论。其中,吴恩达谈到基于 GPT-3.5 构建的智能体工作流在应用中表现比 GPT-4 要好。这表明,将目光局限于大模型不一定可取,智能体或许会比其所用的基础模型更加优秀。
在软件开发领域,这些智能体展示了其独特的能力,能够高效协作,处理编程中的复杂问题,甚至进行代码自动生成。最新的技术动态显示,AI 智能通在软件开发中显示出巨大的潜力。还记得 Devin 吗?号称世界第一个 AI 软件工程师的它出场就惊艳到了我们,一个智能体就能带给我们如此体验,如果是多个智能体合作,是不是能够直接把体验值直接拉满呢?
想象一下,一个由多个智能体组成的团队,每一个成员都擅长于特定的任务,如代码审查、错误检测或新功能实现。这些智能体可以互补彼此的能力,共同推进软件项目的进度。这岂不是解放了码农的双手,再也不怕腱鞘炎了。
吴恩达撰新文一篇带我们深入这一领域,探索智能体系统的最新动态。文章中提及的 AutoGen 和 LangGraph 等工具,正是在这一大背景下应运而生。这些工具旨在帮助开发者更容易地部署和管理 AI 智能体,从而充分发挥其潜力。凭借它们的力量,即使是没有深厚编程背景的人也能够利用 AI 智能体来优化和自动化软件开发流程。以下是机器之心不改变原义的整理与翻译。
原文链接:https://www.deeplearning.ai/the-batch/issue-245/
多智能体协作是我在最近几封信中描述的四种关键 AI 智能体设计模式中的最后一种。对于像编写软件这样的复杂任务,多智能体方法会将任务分解成由不同角色(如软件工程师、产品经理、设计师、QA 工程师等)执行的子任务,并让不同的智能体完成不同的子任务。
不同的智能体可以通过提示一个 LLM(或多个 LLM)执行不同的任务来构建。例如,要建立一个软件工程师智能体,我们可以提示 LLM:「你是编写清晰、高效代码的专家。请编写代码来执行任务......」。
尽管我们多次调用同一个大型语言模型(LLM),但我们采用多智能体的编程抽象方法,这看似违反直觉,但却有几个理由支持:
- 它有效!许多团队使用这种方法取得了良好的效果,没有什么比结果更有说服力的了。此外,消融研究(例如在 AutoGen 论文中)表明,多智能体的表现优于单一智能体。
- 虽然现今的一些 LLM 能接受非常长的输入上下文(例如,Gemini 1.5 Pro 可以接受 100 万个 token),但它们真正理解长而复杂输入的能力是参差不齐的。采用智能体工作流,让 LLM 一次专注于一件事,可以获得更好的表现。
- 最重要的是,多智能体设计模式为开发者提供了一个框架,用以将复杂任务分解成子任务。当在单个 CPU 上运行代码时,我们经常将程序分解成不同的进程或线程。这种抽象有助于我们将任务分解成更易于编码的子任务。使用多智能体角色进行思考同样是一个有用的抽象。
在许多公司中,管理者通常会决定招聘哪些角色,然后如何将复杂项目 —— 如编写一大块软件或准备研究报告 —— 分解为更小的任务分配给具有不同专长的员工。使用多个智能体的做法与此类似。每个智能体实施自己的工作流程,拥有自己的记忆(这本身是智能体技术中一个迅速发展的领域:一个智能体如何记住足够多的过去互动以在未来的任务中表现得更好),并可能请求其他智能体的帮助。智能体还可以进行规划和使用工具。这会产生了大量的 LLM 调用和智能体间的信息传递,可能形成非常复杂的工作流程。
虽然管理人员困难,但这是我们非常熟悉的,它为我们如何「雇佣」和分配任务给我们的 AI 智能体提供了一个心理框架。幸运的是,管理不善 AI 智能体的损害远低于管理不善人类!
像 AutoGen、Crew AI 和 LangGraph 这样的新兴框架为解决问题提供了丰富的多智能体解决方案。如果你对玩乐趣十足的多智能体系统感兴趣,不妨看看 ChatDev,这是一个运行虚拟软件公司的智能体集合的开源实现。你可以查看他们的 GitHub repo,也许克隆 repo 并亲自运行系统。虽然它可能不总是产生你想要的结果,但你可能会对它的表现感到惊讶。
就像规划这一设计模式一样,我发现多智能体协作的输出质量很难预测,特别是当允许智能体自由交互并为它们提供多种工具时。更成熟的反思和工具使用模式更为可靠。希望你能享受这些智能体设计模式的乐趣,并且它们能为你带来惊人的结果!如果你有兴趣了解更多,可以阅读以下文章:
- 论文标题:Communicative Agents for Software Development
- 论文链接:https://arxiv.org/pdf/2307.07924.pdf
- 论文标题:AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation
- 论文链接:https://arxiv.org/pdf/2308.08155.pdf
- 论文标题:METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORK
- 论文链接:https://arxiv.org/pdf/2308.00352.pdf
更多详细内容,请阅读原文。
看了本篇文章,网友们大受启发,不过也有网友提出,多智能体系统在执行相同或类似任务时表现出的稳定性和可预测性还有待考量。你觉得多智能体协作的益弊何在呢?
#MIMIC-Diff-VQA
大模型想打开应用前景,要从数据集入手。
胸部 X 光片图像作为临床诊断最常用的手段之一,是计算机与医学结合的一个重要领域。其丰富的视觉和病例报告文本信息促进了 vision-language 在医学领域发展。医学 VQA 是其中的一个重要方向,近年来比较著名的 ImageCLEF-VQA-Med,和 VQA-RAD 数据集包含了许多了胸部 X 光片问答对。
然而,尽管 X 胸片检查报告中包含大量临床信息,现有医学 VQA 任务的问题种类和数量有限,在临床方面的贡献也相对有限。例如,ImageCLEF-VQA-Med 对于胸部 X 光片模态只有两种问题,“这张图片里是否有异常?”,以及 “这张图片里最主要的异常是什么?”,VQA-RAD 的问题种类虽然更丰富,但是却只含有 315 张图片。
在今年的 KDD2023 上,来自德州大学阿灵顿分校,NIH 以及日本理化学研究所,东京大学,国立癌症研究中心的研究人员和放射科医生,联合设计了一个服务临床诊断的大型 VQA 数据集,MIMIC-Diff-VQA。
论文地址:https://arxiv.org/abs/2307.11986
该数据基于放射科胸片报告,设计了种类更加丰富,内容更加准确的具有逻辑递进的问答对,涵盖 7 种不同的问题类型。
图 1:临床的诊断过程,医生通过比较病程前后图像的差异做出判断
该研究同时提出了一个全新任务,图像对比 VQA (difference VQA):给定两张图片,回答关于这两张图片差异性的问题。在医学领域,这个任务直接反映了放射科医生的需求。在临床实践中,如图 1 所示,医生经常需要对比回看病人之前的医学影像,评估病灶变化情况并以评价诊疗过程。因此 Difference VQA 提出的问题包括” 这张图片与过去的图片相比有什么变化?”, “疾病的严重程度是否有减轻?”
本次公布的数据集包含 16 万张图片和 70 万问题,这大大刷新了此前的医学 VQA 数据集的大小记录。基于该数据集,本文同时也提供了一个利用 GNN 的 VQA 方法作为 basline。为了解决临床放射科图片中病人姿态差异的问题,该研究使用 Faster R-CNN 提取器官的特征作为图的节点,通过整合隐含关系、空间关系和语义关系三种图网络关系来融合了医学专家的知识。其中空间关系是指各个器官之间的位置关系,语义关系包括解剖学和疾病关系知识图,隐含关系通过全连接关系作为前两者的补充。这些节点间的关系被嵌入到图网络的边中,并通过 ReGAT (Relation-aware graph attention network) 用于对最终图特征进行计算。研究团队希望这个数据集能够促进医学领域视觉问答技术的发展,特别是为如 GPT-4 等 LLM 真正服务于临床提供基准,真正成为支持临床决策和患者教育有用的工具。
目前医学 Vision Language 发展现状
医学 Vision Language 领域对现有医疗数据库进行了很多探索来训练深度学习模型。这些数据库包括,MIMIC-CXR, NIH14 和 CheXpert 等。在这些工作通常分为三类:疾病标签的直接分类 (图 2 (b)),医学报告生成 (图 2 (c)) 以及视觉问答任务 (图 2 (d))。疾病标签分类任务首先通过简单的 rule-based 工具,例如 NegBio 和 CheXpert,从报告内容中提取生成预先定义的标签, 随后对正样本和负样本进行分类。报告生成领域的方法繁多,诸如对比学习,Attention 模型,Encoder-Decoder 模型等,核心工作都是将图片信息转化为文字来拟合原始的报告。尽管这些任务取得了很多进展,但从具体临床应用角度来看仍存在局限性。
例如在疾病标签分类中 (图 2 (b)) 中,自然语言处理(NLP)规则经常处理不好不确定性和否定项,导致提取的标签出了不准确。同时,简单的标签只提供了单一的异常信息,无法反映临床疾病的多样性。报告生成系统 (图 2 (c)) 通过挖掘图像中的隐含信息避免这个问题,但是它不能结合临床情况回答医生关注的特定问题。例如图 2 (a) 中,原始放射学报告中排除了多种常见或是医生较为关注的疾病,但是人工报告生成器很难猜测放射科医师想要排除哪些疾病。
相比之下,视觉问答(VQA)任务 (图 2 (c)) 更加可行,因为它可以回答医生或病人所关注的特定问题,比如在之前提到的例子中,问题可以设定为 “图像中是否有气胸 ",而答案无疑是" 没有 "。然而,现有的 VQA 数据集 ImageCLEF-VQA-Med 仅仅包含少量通用问题,比如" 图像有什么问题吗?这张图像的主要异常是什么?",缺乏多样性。这样的问题不仅将 VQA 问题降级为分类问题,而且对临床提供的帮助信息也有限。虽然 VQA-RAD 涵盖 11 种问题类型的问题更加多样,但该数据集仅含有 315 张图像,无法充分发挥出需要大量数据投喂的深度学习模型的性能。为了填补医学 Vision Language 领域的这个空缺,该研究充分结合放射科医生的实践,提出了这项图像对比 VQA(difference VQA)任务,并且基于此任务构建了一个大型的 MIMIC-Diff-VQA 数据集。
图 2:目前医学 Vision Language 各种方法的对比
数据集介绍
MIMIC-Diff-VQA 数据集包括 164,654 张图片,和 700,703 问题,含盖 7 种不同的具有临床意义的问题类型,包括异常,存在,方位,位置,级别,类型,和差异。前六种问题和传统 VQA 一致,针对于当前图片提问,只有差异类型问题是针对两张图片的问题。各个问题的比例数据和完整问题列表请分别见图 3 和见表格 1。
图 3:MIMIC-Diff-VQA 问题类型的统计数据
表 1:每种问题类型的问题示例
数据集构建
依托于 MIMIC-CXR 提供的海量的胸部 X 光片图像和文本报告,从 377110 张图片和 227835 个放射学报告中,该研究在放射科医生的指导下构建了 MIMIC-Diff-VQA 数据集。
构造 MIMIC-Diff-VQA 数据集的第一步是提取一个 KeyInfo dataset。这个 KeyInfo dataset 包含每个放射学报告中的关键信息,比如报告中出现的肯定的异常对象,及其对应的异常名称、级别、类型、位置,以及否定出现的对象名。提取过程的第一步是根据医生的意见选取出最常用的异常关键词,和其对应的属性关键词(级别、类型、位置),之后再设定相应的规则对这些关键信息进行提取,同时保留其” 肯定 / 否定 “信息。
为了保证数据集构建的质量,该研究主要遵循 “提取 - 检查 - 修改” 的步骤,首先通过正则表达式设定的规则对数据库报告中的关键信息进行提取,然后利用手动和自动的方法对提取结果进行检查,接下来对出现问题的地方进行修改使提取结果更加准确。其中,检查时使用的自动方法包括:使用 ScispaCy 提取报告中的 entity 名称,考虑 Part-of-Speech 在句子中的作用,交叉验证 MIMIC-CXR-JPG 数据集中的 label 提取结果。综合这些自动化方法和手动验证筛选,通过 “提取 - 检查 - 修改” 的步骤,该研究最终完成了 KeyInfo dataset 的构建。
在完成 KeyInfo dataset 的构建之后,该研究便可以在其基础上设计每一个病人的单次或多次访问对应的问题和答案,最终构成了 MIMIC-Diff-VQA 数据集。
质量保证
为了进一步保证生成数据集的质量,该研究使用三个人工验证者随机对总计 1700 个考题和答案进行了人工验证,如表 2 所示,最终的平均正确率达到了 97.4%。
表 2:人工验证数据集结果
Baseline 模型介绍
同时,在提出的数据集基础上,该研究针对胸部 X 光片和 Difference VQA 任务设计了一个图网络模型。如图 4 所示,考虑拍摄胸部 X 光片的过程中,到同一个病人在不同时间点可能由于身体姿态的不同,拍摄的图像可能伴随着大尺度的位移和改变。
图 4:该研究提出方法的模型结构
因此,gai通过对输入的图片进行解剖学结构定位,并提取对应检测对象的特征作为图网络的节点,以排除病人身体姿态对特征的影响。图网络中的每一个节点是一个解剖学结构位置的特征与问题特征的结合。为了充分挖掘图像中可能包含的病变信息,该研究通过不同的预训练模型为每一个解剖学结构提取一个纯解剖学结构特征和一个疾病特征。
在 “多关系图网络模块” 中,该研究进行了三种不同的图网络关系来计算最终的图网络特征,包括:隐含关系,空间关系,语义关系。对于隐含关系,使用简单的全连接以让模型在潜在关系中发掘有价值的信息。对于空间关系,研究团队考虑了节点之间 11 种不同的空间关系作为边,并用 ReGAT (Relation-aware Graph Attention Network) 进行计算。对于语义关系,该研究引入了两种知识图谱,即,共现知识图谱(Co-occurrence Knowledge graph),和解剖学知识图谱(Anatomical Knowledge graph)。前者考虑不同疾病之间共同出现的概率关系,后者考虑疾病与解剖学之间的关系。
由于该研究在第一步提取了对应的解剖学结构特征和疾病特征,于是便可以将他们嵌入到这两种知识图谱当中。与空间关系的图网络计算类似,该研究考虑了三种语义关系:共现关系,解剖学关系,无关系,来作为图网络的边,每一种关系用一个数字标签来进行表征,并使用 ReGAT 进行运算。
最终,三种关系图网络计算后的节点特征进行全局平均池化,得到最终图像对应的图特征。将两张图片的图特征相减便可得到差异图特征。对这些特征通过注意力机制得到对应的特征向量,然后将两张图片的特征向量和相减后得到的差异特征向量输入最终的 LSTM 答案生成器,便可得到最终的答案。
该研究将模型与领域内最先进的方法做对比,包括 MMQ (Multiple Meta-model Quantifying), MCCFormers ( Multi-Change Captioning transformers), 和 IDCPCL (Image Difference Captioning with Pre-training and Contrastive Learning)。其中 MMQ 是传统医学 VQA 模型,MCCFormers 和 IDCPCL 是差异描述(Difference Captioning)模型。由于 MMQ 无法处理多张图像,该研究仅在除了 Difference 类问题以外的其他六种问题上将它与所提模型作对比。对于 MCCFormers 和 IDCPCL,由于他们不是 VQA 模型并且必须同时输入两张图片,因此该研究仅在 Difference 类问题上与他们进行对比。对比结果如表 3 和表 4 所示,该模型在 Difference VQA 上显示出了更优越的性能。
表 3:该研究提出的方法与 MMQ 在 non-difference 类问题上的准确率对比
表 4:几种方法与差异描述方法在 Difference 类问题上的对比
总结与讨论
该研究提出了一个医学 Difference VQA 问题,并收集了一个大规模的 MIMIC-Diff-VQA 数据集,以此希望能对推动学界相关技术的发展,同时为医学界提供有力的支持,包括提供临床决策辅助和患者教育工具等方面。同时,该研究设计了一个专家知识感知的多关系图网络模型来解决这个问题,为学界提供了一个基准模型作为参照。与当前在相关领域最先进的方法的比较表明,该研究所提方法取得了显著改进。
然而,该研究的数据集和方法仍存在一定的局限性,比如数据集没有考虑对于特殊情况下同一个病灶出现在多于两处的情况,以及同义词的合并也有进一步的提升空间。
此外,所提模型也会产生一些错误,包括:1、对同一异常的不同呈现方面的混淆,例如肺不张和肺浸润被互相误认。2、相同类型异常的不同名称,例如心影增大被错误分类为心脏肥大。3、用于提取图像特征的预训练模型(Faster-RCNN)可能提供不准确的特征,并导致错误的预测,例如错误地将肺浸润识别为胸膜积液。
#大模型训练の坑
大模型不太会 就给自己看看哦 浅谈谈对大模型训练的一些看法。
在没有完全复现chatgpt之前,这些东西都是包大人根据公开资料和实践经验收敛出来的判断,仅供参考,所有的论断都有可能被新技术推翻。
1.冷启动可能是一个很重要的东西。
大模型的训练过程就是一步一步从全网数据得到的语言模型逐渐逼近接近人的语言习惯。
pretraining是给SFT冷启动,SFT是给RL冷启动。
在每一个独立环节里,冷启动的也是需要的,比如LLama2里面提到了一个SFT的bootstrap的方法,RL中的迭代式和拒绝采样的方法。
pretraining让大模型具有基本的知识储备和语言模型的泛化,这样给SFT一个很好的初始化,降低SFT阶段的数据消耗,让他初步对齐人的习惯。
SFT更像是给RL阶段的采样一个冷启动的能力,防止采样到的东西超出了RM的判别能力圈,让他尽量的接近RM限定的好的和坏的的范围之内。
但是SFT的数据构造成本是很高的,比如国内有扒gpt数据,想去通过SFT蒸馏gpt的能力,这个思路挺符合直觉,如果没有很好的人力物力的话,也不失为一种方法。
SFT相比RL训练过程,其达到的泛化能力上限是比较差的,因为数据总有尽头,高质量的数据更是难上加难,直接的训练更像是方向上的指引,SFT阶段的冷启动可能也是必要的。
最后在RL阶段,把无限的数据生成交给采样的过程,把判别好坏的过程交给RM。这个过程中,LLM和RM的能力需要同步匹配进化,防止LLM太强之后,RM丧失判断力, 这就是我们看到的llama2迭代式更新。
RM的水很深
RL的过程大家的目的性很明确,像经典的PPO的思路就很符合直觉,解决的问题关键就是RL用在LLM的稳定性上的问题。
稳定性算是有一些明确的技术导向的东西,比如学习过程中加入“正常的参考”,防止学习的过程太激进等,让他尽量保持较好LLM的能力,而不是单纯拟合高分。
但在RM这里,却有很多深坑,有一种叫做reward hacking的现象, 经常出现。
LLM的策略空间太开放了,不像RL打游戏,只有上上下下AABB几个键的组合。
LLM的词表下选哪个词,词组成什么序列,都是一个策略。
开放的决策对于模拟打分环境来说难度太大了,对RM的泛化程度有极其高的要求。
假设一个场景,如果你的LLM有badcase,你想把所有已知的badcase在RM中设置为差,随便标点数据的正常的话设置为好。
然后把判别badcase的rm用来做强化学习,妄图消灭所有的badcase,这个很符合直觉的思路有巨大的坑。
你会发现你的RL最终学习到的是一种未知的高分模式,在你badcase之外又找到了另外一种badcase当成了高分。
就像蚂蚁在白纸上走路,四周都是大坑,只有一小块地安全,他随机游走,你不停地在他经过的不好的方向上打X。
结果发现不好的方向无穷尽,根本打不完。
最终大概率你的模型学习到了输出一堆没什么用的东西,但是RM分数很高。
这就是reward hacking。
如果你不在本质上提升RM全知全能的打分能力,仅仅靠加大KL散度惩罚,value裁剪等方式,都是缓解问题的发生而不是根本解决。
最后一头包。。
这个在LLama2的论文的过程中有所体现,meta团队很重注保持RM的能力,当发现RM丧失判断力的时候,及时更新迭代它。
防止让RL鼓励出一些奇奇怪怪的东西。
RM的能力除了体现在泛化性,也体现在区分度上,所以我们看到了meta把人脸里面的margin搬过来了。。
效率与效果的权衡
除了硬件和流水线上的优化,样本的构造,learning的过程中有很多这样的优化点。
比如之前提到的多轮对话的构造trick大模型微调样本构造的trick,这就是能极大提高学习效率的方法,我们在LLama2中也看到了同样思路的操作。
不过llama做的更离谱和激进一些,把不同session也搞到一起了。通过的special token让模区分开,这个细节要确认下。
这里认为有一种特殊的结束符分割了不同的session,普通结束符号类似分割轮次。
除了在数据构造上,learning的过程中,也有一些效率和效果的权衡,像DPO这种方法,可以省掉PPO采样的时间。
DPO在对齐的时候,把RM和采样的压力,转化为标注数据的压力。
这样的方法也可以提高训练效率,不过在对齐阶段,追求数据的绝对的量似乎太困难了,大家基本都用了相对数据比较少的质量高数据,通过已有LLM的基础得到的RM来训练。
DPO这种方法似乎走了反方向,需要你你充足够多的钱,标足够多的数据,效果能否达到PPO的天花板有待考证。
效率和效果永远是个权衡,LLama2在最后一个阶段就选取了牺牲效率获取质量,使用了拒绝采样的方法,防止 RL过程中学习到一些未知的惊喜。
这个多次采样选一个基本把资源的消耗提升了采样次数的倍数。
整体看起来,越靠近pipelin的后面,越要关注质量,当然越靠近后面的实际上在整体中的资源耗费是比较小的,所以可以相对牺牲一些效率。
这样看起来DPO就不是很科学了,反而拒绝采样是一个相对合理的解法。
大模型评估很关键,水很深。
这个前面写过大模型评测,也太难了吧,和大模型训练太难了!里面总结过一些原因,其中关键的观点就是评估做不好的话,会影响实验效率,实验效率可以折算成单位时间的算力消耗,
可以推导出评估做不好 = 费钱费时。
所以你做实验慢了,相当于比别人少了GPU,足够触目惊心吧。
openai不仅仅卡多,还有实验效率倍增的buff,相当于 卡 * 效率倍数。
至今也没有一个公开的特别靠谱的自动化评估方
下游微调的水很深。
这个前面写过大模型评测,也太难了吧,和大模型训练太难了!里面总结过一些原因,其中关键的观点就是评估做不好的话,会影响实验效率,实验效率可以折算成单位时间的算力消耗,
可以推导出评估做不好 = 费钱费时。
所以你做实验慢了,相当于比别人少了GPU,足够触目惊心吧。
openai不仅仅卡多,还有实验效率倍增的buff,相当于 卡 * 效率倍数。
至今也没有一个公开的特别靠谱的自动化评估方
大家都想着的是我通过标一些领域数据,然后在领域数据上进行SFT和对齐,使它用于领域额外的能力。
这里我们分两种情况,如果你把他当成一个场景单一模型的话,当成bert T5这么用的话还好。
如果你想着让他保持原有大模型的能力,再嵌入一些额外的知识,这里难度是非常大的。
实践发现你就会完全不是那么回事,基本上就是捡了芝麻丢了西瓜,除非你你只在乎捡芝麻这一件事。
试过就发现要只用领域数据非常容易过拟合到领域数据上,对OOD的处理会表现的非常差。
如果想保持原有的能力的话,对各个环节的数据配比要求会很高,最好是在原来规模程度的数据上,增加额外的场景数据,重新走部分流程。
但是困难的是,原有数据保持分布的采样,你拿到的模型是个黑盒,别人并没有给你原始的数据分布,更何况海涉及到了惊细的清洗。
所以最终的领域大模型,也几乎只是一个丧失了通用能力,基础能力的领域生成模型。
至于你想让他在某一个方向加深能力,并且保持原有的能力不下降,整体要付出的成本不下于重新塑造一个通用大模型。
#SmartMoE
PACMAN 实验室探索大模型分布式训练系统再出新成果。
2023 年 7 月,清华大学计算机系 PACMAN 实验室发布稀疏大模型训练系统 SmartMoE,支持用户一键实现 MoE 模型分布式训练,通过自动搜索复杂并行策略,达到开源 MoE 训练系统领先性能。同时,PACMAN 实验室在国际顶级系统会议 USENIX ATC’23 发表长文,作者包括博士生翟明书、何家傲等,通讯作者为翟季冬教授。PACMAN 实验室在机器学习系统领域持续深入研究,SmartMoE 是继 FastMoE, FasterMoE 和 “八卦炉” 后在大模型分布式训练系统上的又一次探索。欲了解更多相关成果可查看翟季冬教授首页:https://pacman.cs.tsinghua.edu.cn/~zjd
Mixture-of-Experts (MoE) 是一种模型稀疏化技术,因其高效扩展大模型参数量的特性而备受研究者关注。为了提高 MoE 模型的易用性、优化 MoE 模型训练性能,PACMAN 实验室在 MoE 大模型训练系统上进行了系统深入的研究。2021 年初,开源发布了 FastMoE 系统,它是第一个基于 PyTorch 的 MoE 分布式训练系统开源实现,在业界产生了较大的影响力。进一步,为了解决专家并行的稀疏、动态计算模式带来的严重性能问题,FasterMoE 系统地分析、优化了专家并行策略。FasterMoE 中设计的「影子专家」技术显著缓解了负载不均问题、通信 - 计算协同调度算法有效隐藏了 all-to-all 通信的高延迟。FasterMoE 成果发表在 PPoPP’22 国际会议。
- 论文地址:https://www.usenix.org/system/files/atc23-zhai.pdf
- 项目地址:https://github.com/zms1999/SmartMoE
MoE 模型遇到的难题
不同于稠密模型直接通过增大模型尺寸实现扩展,如图一所示,MoE 技术通过将一个小模型转变为多个稀疏激活的小模型实现参数扩展。由于各个专家在训练时稀疏激活,MoE 模型得以在不增加每轮迭代计算量的前提下增加模型参数量;从而有望在相同训练时间内获得更强的模型能力。
图一:通过 MoE 技术扩展模型规模为了实现 MoE 大模型的分布式训练,业界提出了专家并行(Expert Parallelism)技术。如图二所示,各个专家被分布式地存储在不同节点上,在训练过程中通过 all-to-all 通信将训练数据发送至对应专家所在节点。专家并行相较于数据并行(Data Parallelism)有更小的内存开销,因为专家参数无冗余存储。可以认为专家并行是一种针对 MoE 结构的模型并行(Model Parallelism)。
图二:专家并行示意图
然而,使用朴素的专家并行技术训练 MoE 模型有严重的性能问题,其根因是 MoE 模型的稀疏激活模式。它会导致节点间产生大量不规则 all-to-all 通信增加延迟、计算量负载不均造成硬件利用率低。如图三所示的真实模型训练过程中的专家选择分布,可以观察到专家间显著的负载不均现象,且分布随训练进行动态变化。
图三:真实训练中的专家选择分布
随着学界对各并行策略的深入研究,使用各并行策略的复杂组合(称为混合并行)进行大模型训练成为必要模式。混合并行的策略调优过程十分复杂,为了提高可用性,学界提出了自动并行算法自动搜索、调优混合并行策略。然而,现有混合并行、自动并行系统无法高效处理 MoE 大模型,他们缺少对 MoE 模型训练稀疏激活、计算负载不均且动态变化的特征的针对性设计。
SmartMoE 带来解决方案
为了实现 MoE 模型的高效训练,SmartMoE 系统对 MoE 模型的分布式训练策略进行了全面的支持。对于常用的四种并行策略(数据并行、流水线并行、模型并行和专家并行),SmartMoE 系统做出了全面的支持,允许用户对它们任意组合;在论文投稿时(2023 年 1 月),尚未有其他系统能做到这一点(如图四所示)。
为了处理 MoE 的动态计算负载,SmartMoE 独特设计了专家放置(Expert Placement)策略,在经典并行策略组合的基础上,实现了动态负载均衡。如图五所示,MoE 模型不同的计算负载(workload)会造成不同专家的过载;使用不同的专家放置顺序,能在特定负载下实现节点间负载均衡。
图四:开源分布式系统对各并行策略的支持情况对比
图五:不同 MoE 训练负载需要不同专家放置策略
为了提高 MoE 模型复杂混合并行策略的易用性,SmartMoE 设计了一套轻量级且有效的两阶段自动并行算法。现有自动并行系统只能在训练开始前进行策略搜索,无法根据负载情况动态调整策略。简单的将现有自动并行搜索算法在训练过程中周期性使用亦不可行,因为训练过程中的并行策略搜索和调整对延迟要求很高,现有算法的开销过大。
SmartMoE 独创性地将自动并行搜索过程分为两阶段:
- 训练开始前,使用经典算法搜索,获得一个较小的候选策略集合
- 训练过程中,根据当前负载,在候选策略集合中动态调整,由于候选策略集合大小有限,此过程的开销可以得到控制。
最终,SmartMoE 实现了轻量级且有效的自动并行,达到了业界领先的性能。
在性能测试中,SmartMoE 在不同模型结构、集群环境和规模下均有优异的表现。例如,在 GPT-MoE 模型的训练性能测试中,相较于 FasterMoE,SmartMoE 有最高 1.88x 的加速比。值得注意的,在对每一轮迭代的性能观察中发现,动态的并行策略调整是必要的,且需要使用合适的调整频率,如图六所示。更多实验细节请参考论文原文。
图六:MoE 模型在不同迭代的运行时间。”dyn.X” 表示每 X 轮进行一次策略调整。
图七:SmartMoE 在 GPT-MoE 模型端到端训练中的性能提升
结语
SmartMoE 现已开源,开发者维护活跃,且仍在持续优化迭代,助力 MoE 大模型的发展。这是 PACMAN 实验室继 FastMoE,[PPoPP’22] FasterMoE,[PPoPP’22] BaGuaLu 后在大模型分布式训练系统上的又一次探索。
#XVERSE-13B
性能超越Llama2-13B,可免费商用,姚星创业公司开源百亿参数通用大模型
高性能、可商用,国产大模型又有开源新动向。
8 月 7 日,百亿参数高性能通用大模型「XVERSE-13B」宣布开源。
- Hugging Face:https://huggingface.co/xverse/XVERSE-13B
- Github:https://github.com/xverse-ai/XVERSE-13B
而 XVERSE-13B 的打造者,正是前腾讯公司副总裁姚星老师于2021年初创立的AI 与元宇宙技术服务公司元象 XVERSE。
在离职创业之前,姚星主导创建了腾讯首个人工智能实验室 AI Lab(2016 年)和首个机器人实验室 Robotics X (2018 年),曾推进腾讯在机器学习、计算机视觉、语音到自然语言处理等前沿 AI 技术的研究与应用,主导推出多个有行业影响力的应用与产品,包括国家围棋队 AI 陪练「绝艺」、王者荣耀 AI「绝悟」、中国首款临床用智能显微镜、AI 驱动的新药发现平台「云深智药」及腾讯智慧种植方案 iGrow 等。
打造最强性能的开源大模型
XVERSE-13B 是目前同尺寸中效果最好的多语言大模型,可免费商用。它具备了高性能、全开源、可商用等诸多优势,能大大降低高校和企业部署使用大模型的成本,不仅实现了国产可替代,也是中文应用更好的选择。
在多项权威的标准中文和英文测评中,性能超越了 Llama-2-13B、Baichuan-13B 等国内外开源大模型(见下图一)。
图一:经过多项权威测评,XVERSE-13B 是目前同尺寸中效果最好的多语言大模型。
作为一个通用大模型,XVERSE-13B 可提供文本生成、自动化写作、数据分析、知识问答、多语言翻译、个性化交互、人物角色扮演、专业小助手等多方面的生成服务,在医疗、文旅、金融和娱乐等多个行业具有广阔应用前景。
据了解,元象近期还将发布大模型 Chat 版,开箱即用,持续优化开发者体验。
训练语料对大模型效果至关重要。XVERSE-13B 构建了一个高达 1.4 万亿高质量、多样化 tokens 的训练数据集,同时优化采样策略和数据组织方式,让模型支持中、英、俄、西等 40 多种语言,并且多语言任务处理的性能与效果俱佳。
XVERSE-13B 支持 8192 的上下文窗口,是同尺寸模型中最长的,从而能出色应对复杂场景,比如更长的多轮对话、知识问答与摘要等,应用范围更广泛。
模型使用标准 Transformer 网络结构,从零开始训练,还自主研发多项关键技术,包括高效算子、显存优化、并行调度策略、数据 - 计算 - 通信重叠、平台和框架协同等,让训练效率更高,模型稳定性强,在千卡集群上的峰值算力利用率可达到 58.5%,位居业界前列。
多个权威中文测评中表现优异,超越 Baichuan-13B
为验证模型各项能力,XVERSE-13B 通过 C-Eval、AGIEval 和 GAOKAO-Bench 等三个最具影响力的中文测评基准的综合评估(图二),表现优异,超越了同参数规模主流模型,如 Baichuan-13B、Llama-2-13B、Ziya-LLaMA-13B 等。
图二:在多个权威中文测评中,XVERSE-13B 表现超越了同参数规模的主流模型。在中文 C-Eval 的测评中(图三),XVERSE-13B 综合评分达到了 54.7 分,超越了同参数规模的主流模型。C-EVAL 测评基准由上海交通大学、清华大学以及爱丁堡大学联合创建,是面向中文语言模型的综合考试测试集,覆盖了 52 个来自不同行业领域的学科。
图三:C-Eval 中文测评结果。
在 AGIEval 测评里,XVERSE-13B 综合评分达到 41.4 分,超越了同参数规模主流模型(图二)。AGIEval 测评基准由微软研究院发起,旨在全面评估基础模型在人类认知和问题解决相关任务上的能力,包含了中国的高考、司法考试,以及美国的 SAT、LSAT、GRE 和 GMAT 等 20 个公开且严谨的官方入学和职业资格考试。
在 GAOKAO-Bench 测评中,XVERSE-13B 综合评分达到了 53.9 分,显著领先于同参数规模的主流模型(图二)。GAOKAO-Bench 测评基准是复旦大学研究团队创建的测评框架,以中国高考题目作为数据集,用于测评大模型在中文语言理解和逻辑推理能力方面的表现。
英文测评表现领先 Llama-2-13B
XVERSE-13B 的英文表现同样出色,在英文最权威评测 MMLU 中,其综合评分高达 55.1 分,几乎在所有维度超越了同参数规模的主流模型(图四),包括 Llama-2-13B、Baichuan-13B 等。
图四:MMLU 英文测评结果。
MMLU 由加州大学伯克利分校等知名高校共同打造,集合了科学、工程、数学、人文、社会科学等领域的 57 个科目,主要目标是对模型的英文跨学科专业能力进行深入测评。其内容广泛,从初级水平一直涵盖到高级专业水平。
需要强调的是,测评只反映了大模型底座的核心能力,元象将持续迭代优化,全面提升模型能力。
免费可商用 哈工大率先使用助力研究
秉持开源精神,XVERSE-13B 代码采用 Apache-2.0 协议,向学术研究完全开源,企业只需简单登记,即可免费商用。
哈尔滨工业大学(下称「哈工大」)作为我国最早从事自然语言处理研究的顶级科研团队,已经率先使用 XVERSE-13B 大模型推进相关研究工作。哈工大计算机科学与技术学院张伟男教授表示,「开源是互联网时代主流模式,不仅能贡献社区,推动技术持续创新,还能利用协同解决算法透明性、稳定性、公众信任度等共性问题。」
元象 XVERSE 创始人姚星表示:「真实世界的感知智能(3D),与真实世界的认知智能(AI),是探索通用人工智能(AGI)的必由之路,也是元象持续探索 3D 与 AI 前沿技术的动力。XVERSE-13B 是我们在国产技术自立自强上迈出的一小步,而开源开放将激发大模型生态活力,让 AI 的未来发展迈出一大步,为实体经济、数字经济的发展注入强劲动力。我们期待与众多企业与开发者携手,开创大模型商用新纪元。」
#llama.cpp
在一些大模型的推理任务上,瓶颈不是算力 FLOPS。
最近在开源社区,很多人都在探索大模型的优化方法。有一个叫 llama.cpp 的项目用原始 C++ 重写了 LLaMa 的推理代码,效果极好,获得了人们的广泛关注。
通过一些优化和量化权重,它能让我们在各种以前无法想象的硬件上本地运行 LLaMa 模型。其中:
- 在谷歌 Pixel5 手机上,它能以 1 token/s 的速度运行 7B 参数模型。
- 在 M2 芯片的 Macbook Pro 上,使用 7B 参数模型的速度约为 16 token/s
- 我们甚至于可以在 4GB RAM 的树莓派上运行 7B 模型,尽管速度只有 0.1 token/s
GitHub 链接:https://github.com/ggerganov/llama.cpp
我们知道,除了通用化能力,大模型落地的关键在于推理性能的优化,然而如今这个优化程度超出了我们的预料。llama.cpp 至今在 GitHub 上已经收获了 3.8 万个 Star,几乎和 LLaMa 模型本身一样多。以至于到了 6 月份,llama.cpp 的作者 Georgi Gerganov 干脆开始创业,宣布创立一家新公司 ggml.ai,旨在用纯 C 语言框架降低大模型运行成本。
很多人看到这里都会发问:这怎么可能?大语言模型不是需要英伟达 H100 之类的 GPU 才能跑的吗?为了解决这个疑惑,最近有人深入研究了围绕大模型推理的数学,并试图进行解答。
让我们从「为什么 AI 训练都需要用 GPU?」开始,GPU 对深度学习有两个主要好处:
- 它们具有很大的内存带宽(如 A100:1935 GB/s,RTX 4090:1008 GB/s)
- 它们具有很大的算力(A100:FP16 有 312 TFLOPS,RTX 4090:FP16 有 82.6 TFLOPS)
内存带宽之所以重要,是因为它关系到数据从 HBM 内存(即 RAM)移动到片上内存需要花费的时间。在实际使用 GPU 进行数学计算时,我们需要将相关矩阵移至片上内存,该内存相当小(A100 上为 40MB,而 RAM 为 40-80GB)。内存带宽比计算性能小约 2 个数量级 —— 这稍后会很重要,因为内存带宽往往是推理的瓶颈。
从计算机体系结构的角度而言,我们需要把不同速度和容量的 memory 分出层级,以追求效率和成本之间的平衡。需要频繁访问的数据放在速度最快,但又容量最小的寄存器和 L1 cache 里,访问量最少的数据放在最慢最大的内存条里。
这在 LLaMa 推理任务上意味着什么?让我们从一些推理数学计算开始。我们可以使用 Kipply 的文章(https://kipp.ly/transformer-param-count/)对 LLM 的推理性能进行一些粗略的计算。
首先有关模型尺寸:
- Q、K 和 V 权重矩阵的形状都是 [ d_model, d_head],每层有 n_heads;注意力输出矩阵具有相同的形状,总共 4 * [ d_model, n_heads * d_head]。按照惯例,GPT 风格的网络具有 d_head * n_heads = d_model。
- MLP 有两个权重矩阵,形状为 [d_model, 4 * d_model] 和 [4 * d_model,d_model]
- 嵌入矩阵的大小为 [d_vocab, d_model]。
这为我们提供了一个方便的类 GPT 模型参数数量方程:
除了将 KV 缓存存储在内存中之外,我们还需要将权重本身存储在内存中;这需要 n_bytes * P 字节。
这是量化的主要优点之一。通过使用较低的精度,我们可以从根本上减少存储模型所需的内存量。请注意,在 int4 精度下,所有这些模型都适合英伟达的 A100(也是目前数据中心里常见的 GPU)上的内存,并且除了最大的模型之外,所有这些模型都适合高端消费级 GPU(如 RTX 3090/4090,具有 24GB RAM)。
现在,当谈到实际运行推理时,每个 token 大约需要 2P FLOPS,因为我们正在使用总共 P 个参数进行一系列矩阵乘法,与之相乘的矩阵尺寸是 (m, n) 向量 ( n,),成本为 200 mn。
完成所有数学计算后,让我们计算一下使用 LLaMa 运行推理的要求。sampling 的主要要求是:
- 除了所有参数之外,还将 KV 缓存保留在内存中。
- 将 HBM 中的所有权重读入片上存储。因为我们是自回归采样,所以我们必须对采样的每个 token 重复此操作。
- 进行实际的矩阵乘法来计算我们网络的输出。
延迟是计算延迟或内存延迟的最大值,因为在所有现代张量编程库中将参数读取到片上内存中都是异步发生的。因此,我们写道:
其中 B 是 batch size。由于内存带宽约为 1.935e12,需要的 FLOPS 量约为 3.12e14,所以只要 batch size 小于 161,模型就会受到内存限制。
当 batch size 为 1,即在计算机上仅生成单个预测流时,这是相同的等式,就像在大多数硬件(如英伟达的 GPU)上一样,当你降低精度时,会出现线性加速:使用 fp16 代替 fp32 时,FLOPS 会翻倍,转到 int 8,FLOPS 会再增加一倍,用 int4 时再次加倍。
由于 llama.cpp 使用目前深度学习推理中较为激进的 int4 格式,因此 KV 缓存的 RAM 需求减少到 1.33GB,模型参数的 VRAM 减少到 16.25GB。这看起来很不错
由于内存带宽几乎总是远小于 FLOPS 数,因此内存带宽是瓶颈所在。
请注意,FLOPS/token 的数量与所需的内存带宽相同,因为我们必须 1) 将所有参数加载到片上内存中,然后 2) 使用这些参数来计算结果。这些都是同时发生的,因为所有现代张量编程框架都能够异步处理「加载到内存」位,因此所需的总时间是 max(compute time, memory time)。
在英伟达 A100 上运行 LLaMa
在 A100 (80GB PCIe) 上,内存带宽为 1935GB/s。int4 计算量为 1248 TOPS。因此,该模型较严重地受到内存的限制。我们预计 65B 模型的速度约为 30 token/s,7B 模型的速度约为 277 token/s。
在 MacBook 上运行 LLaMa
接下来是正片了,苹果 MacBook 上常见的 M1 芯片,其 GPU 的带宽为 68.25 GB/s,而 M1 GPU 可执行高达 5.5 TFLOPS 的 fp16 计算。因此,我们预计使用 int4 的 65B 模型采样的上限为大约 1 token/s,使用 7B 模型的采样上限为 10 token/s。
由于 M2 Pro 芯片具有 200 GB/s 的带宽,而 M2 Max 具有 400 GB/s 的带宽,因此我们应该期待它们在这里可以获得巨大的性能提升,使用 65B 版模型时 M2 Max 可以达到 6 token/s。这对于笔记本电脑来说已经很不错了。
在树莓派 4 上运行 LLaMa
Raspberry Pi 4 具有 13.5 GFLOPS 的计算能力和约 4GB/s 的内存带宽。鉴于此,如果 7B 模型受内存限制,我们预计会看到大约 2 token/s 的推理速度。然而我们目前看到的是约 0.1 token/s,有理由怀疑这实际上是因为算力受限导致的。这个尝试是在不知道硬件性能的条件下进行的 —— 我们无法找到有关 Raspberry Pi 低精度运算规格的足够信息来确定这一点。
总结
内存带宽几乎是与 transformer 采样相关的最大限制因素。任何降低这些模型内存需求的方法都会使它们更容易提供服务 —— 比如量化!这是蒸馏(或者只是长时间训练较小的模型)非常重要的另一个原因。
OpenAI 科学家 Andrej Karpathy 对于这个观察进行了进一步解释。
他表示:除了并行推理和训练之外,提示编码即使在 batch_size = 1 时也是可并行的,因为提示标记可以由 LLM 并行编码,而不是一一串行解码。随着提示越来越长,MacBook 的推理性能就会越落后于 A100。
但另一方面,苹果的 M2 芯片看起来在大模型的推理任务上展示了强大的实力。「因此,M2 Ultra 是当今体量最小、最漂亮、开箱即用、最简单、最强大的个人 LLM 节点。」
陈天奇也对这种观点表示赞同。
当然这一切并不是免费的午餐。从本质上讲,使用低精度会损失一些准确性,并且可能会出现一些奇怪的答案,让大模型的回应偏离轨道或产生幻觉。不过随着模型参数越多,质量损失就越低。因此,对于非常大的模型体量,差异或许可以忽略不计。此外,这只是推理成本。训练就完全是另一回事了。
通过对于各种性能参数的权衡,或许我们很快就会真正拥有更加「智能」的设备。
参考内容:
https://finbarrtimbers.substack.com/p/how-is-llamacpp-possible
https://news.ycombinator.com/item?id=37140013
https://twitter.com/karpathy/status/1691571869051445433
#BuboGPT
字节大模型,BuboGPT来了。 这肯定是大佬的啊 搬来的
支持文本、图像、音频三种模态,做到细粒度的多模态联合理解。
答哪指哪,什么讲了什么没讲,一目了然:
除了有“慧眼”,还有“聪耳”。人类都注意不到的细节BuboGPT能听到:
前方高能!
三模态联合理解,文字描述+图像定位+声音定位,一键搞定,准确判断声音来源:
别着急,还没完!
即使音频和图像之间没有直接关系,也可以合理描述两者之间的可能关系,看图辨音讲故事也可以:
这么一看,BuboGPT干点活,够“细”的。
研究人员表示:
MiniGPT-4,LLaVA和X-LLM等最近爆火的多模态大模型未对输入的特定部分进行基础性连接,只构建了粗粒度的映射。
而BuboGPT利用文本与其它模态之间丰富的信息且明确的对应关系,可以提供对视觉对象及给定模态的细粒度理解。
因此,当BuboGPT对图像进行描述时,能够指出图中对象的具体位置。
BuboGPT:首次将视觉连接引入LLM
除了上面作者分享在YouTube的示例,研究团队在论文中也展示了BuboGPT玩出的各种花样。
活久见青蛙弹琴!这样的图BuboGPT也能准确描述吗?
一起康康回答得怎么样:
不仅能够准确描述青蛙的姿势,还知道手摸的是班卓琴?
问它图片都有哪些有趣的地方,它也能把图片背景里的东西都概括上。
BuboGPT“眼力+听力+表达力测试”,研究人员是这样玩的,大家伙儿先来听这段音频。
再来看看BuboGPT的描述怎么样:
图片上的人的性别、声音来源、图片中发生的事情,BuboGPT都能准确理解。
效果这么好,是因为字节这次用了将视觉定位引入LLM的方法。
具体方法我们接着往下看。
BuboGPT的架构是通过学习一个共享的语义空间,并进一步探索不同视觉对象和不同模态之间的细粒度关系,从而实现多模态理解。
为探索不同视觉对象和多种模态之间的细粒度关系,研究人员首先基于SAM构建了一个现成的视觉定位pipeline。
这个pipeline由标记模块(Tagging Module)、定位模块(Grounding Module)和实体匹配模块(Entity-matching Module)三个模块组成。
流程大概是这样婶儿的:
首先,标记模块是一个预训练模型,可以生成与输入图像相关的多个文本标签。
基于SAM的定位模块进一步定位图像上与每个文本标签相关的语义掩模或边界框。
然后,实体匹配模块利用LLM的推理能力从标签和图像描述中检索匹配的实体。
研究人员就是通过这种方式,使用语言作为桥梁将视觉对象与其它模态连接起来。
为了让三种模态任意组合输入都能有不错的效果,研究人员采用了类似于Mini-GTP4的两阶段走训练方案:
单模态预训练和多模态指令调整。
具体而言,BuboGPT使用了ImageBind作为音频编码器,BLIP-2作为视觉编码器,以及Vicuna作为预训练LLM。
在单模态预训练阶段,在大量的模态-文本配对数据上训练相应的模态Q-Former和线性投影层。
对于视觉感知,研究人员仅对图像标题生成部分进行投影层的训练,并且保持来自BLIP2的Q-Former固定。
对于音频理解,他们同时训练了Q-Former和音频标题生成部分。
在这两种设置下都不使用任何提示(prompt),模型仅接收相应的图像或音频作为输入,并预测相应的标题(caption)。
多模态指令调整阶段,构建了一个高质量的多模态指令数据集对线性投影层进行微调,包括:
- 图像-文本:使用MiniGPT-4和LLaVa中的两个数据集进行视觉指令调优。
- 音频-文本:基于Clotho数据集构建了一系列表达性和描述性数据。
- 音频-图像-文本:基于VGGSS数据集构建了<音频,图像,文本>三模态指导调优数据对,并进一步引入负样本来增强模型。
值得注意的是,通过引入负样本“图像-音频对”进行语义匹配,BuboGPT可以更好地对齐,多模态联合理解能力更强。
目前BuboGPT代码、数据集已开源,demo也已发布啦,我们赶紧上手体验了一把。
demo浅玩体验
BuboGPT demo页面功能区一目了然,操作起来也非常简单,右侧可以上传图片或者音频,左侧是BuboGPT的回答窗口以及用户提问窗口:
上传好照片后,直接点击下方第一个按钮来上传拆分图片:
就拿一张长城照片来说,BuboGPT拆成了这个样子,识别出了山、旅游胜地以及城墙:
当我们让它描述一下这幅图时,它的回答也比较具体,基本准确:
可以看到拆分框上的内容也有了变化,与回答的文本内容相对应。
再来一张图片,并带有一段音频,BuboGPT也正确匹配了声音来源:
当然,它也会出现识别不成功,表述错误的情况,比如说下面这张图中并没有人,音频也只是钟声,但它的描述和图片似乎并不搭边。
[1]https://bubo-gpt.github.io/
[2]https://huggingface.co/spaces/magicr/BuboGPT(demo)