[论文笔记]Mistral 7B

2024-06-04 10:12
文章标签 笔记 论文 7b mistral

本文主要是介绍[论文笔记]Mistral 7B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

今天带来大名鼎鼎的Mistral 7B的论文笔记。

作者推出了Mistral 7B,这是一个70亿参数的语言模型。Mistral 7B在所有评估基准中表现优于最佳的13B开源模型(Llama 2),并且在推理、数学和代码生成方面胜过最佳发布的34B模型(Llama 1)。

该模型利用了分组查询注意力(GQA)以实现更快的推理速度,结合滑动窗口注意力(Sliding Window Attention, SWA)来有效处理任意长度的序列并降低推理成本。作者还提供了一个经过微调以遵循指令的模型,Mistral 7B - Instruct。代码发布在: https://github.com/mistralai/mistral-src 。

1. 总体介绍

一个精心设计的语言模型可以在保持高效推理的同时实现高性能。Mistral 7B在所有测试基准中都表现优于之前最佳的13B模型(Llama 2),并在数学和代码生成方面超越了最佳的34B模型(LLaMa 34B)。此外,Mistral 7B接近了Code-Llama 7B在编码性能上的表现,而不会在非编码相关基准上牺牲性能。

Mistral 7B利用了分组查询注意力(GQA)和滑动窗口注意力(SWA)。GQA显著加快了推理速度,同时在解码过程中减少了内存需求,从而允许更高的批量大小和更高的吞吐量,这对实时应用程序至关重要。此外,SWA旨在以降低的计算成本更有效地处理更长的序列,从而缓解了LLM中的一个常见限制。这些注意力机制共同为Mistral 7B的增强性能和效率做出了贡献。

2. 架构细节

image-20240603233639215

图1:滑动窗口注意力。在普通的注意力机制中,操作数与序列长度的平方成正比,内存与令牌数量呈线性增长。在推理过程中,由于缓存可用性降低,这会导致更高的延迟和较小的吞吐量。为了缓解这个问题,使用滑动窗口注意力:每个令牌只能关注前一层中最多W个令牌(这里,W = 3)。注意,滑动窗口之外的令牌仍然会影响下一个词的预测。在每个注意力层中,信息可以向前传递W个令牌。因此,在k个注意力层之后,信息可以向前传递最多k×W个令牌。

Mistral 7B基于Transformer架构。主要参数总结如表1所示。与Llama相比,它引入了一些变化。

image-20240603234016732

滑动窗口注意力(Sliding Window Attention) SWA利用Transformer的堆叠层来处理超出窗口大小W的信息。在第 k k k层中,位于位置 i i i的隐藏状态 h i h_i hi会关注前一层中位置在 i − W i−W iW i i i之间的所有隐藏状态。递归地, h i h_i hi可以访问到与输入层相隔 W × k W×k W×k个令牌的令牌,如图1所示。在最后一层中,使用窗口大小 W = 4096 W = 4096 W=4096,理论上拥有约131K个令牌的注意力范围。在实践中,对于序列长度为 16 K 16K 16K W = 4096 W = 4096 W=4096,对FlashAttention 和xFormers 进行的更改使得模型在基线原始注意力上获得了2倍的速度提升。

image-20240603234446126

图2:滚动缓存。缓存的固定大小为W = 4。位置i的键和值存储在缓存的位置i mod W中。当位置i大于W时,缓存中的历史值将被覆盖。对应于最新生成的令牌的隐藏状态用橙色标记。

滚动缓存(Rolling Buffer Cache) 固定的注意力范围意味着可以使用滚动缓存来限制缓存大小。缓存的大小是 W W W,对于时间步 i i i,键和值存储在缓存的位置 i m o d W i \mod W imodW中。因此,当位置 i i i大于 W W W时,缓存中的历史值将被覆盖,并且缓存的大小停止增加。在图2中提供了 W = 3 W = 3 W=3的示例。对于32k个令牌的序列长度,这将减少8倍的缓存内存使用,而不会影响模型质量。

image-20240603234736881

图3:预填充和分块。在填充缓存期间,长序列被分块以限制内存使用。将一个序列分成三个块,"The cat sat on","the mat and saw","the dog go to"。该图显示了第三个块("the dog go to")出现的情况:它使用因果掩码(最右侧的块)关注自身,使用滑动窗口(中间的块)关注缓存,并且不关注历史的。

预填充和分块(Pre-fill & Chunking) 当生成一个序列时,我们需要逐个预测令牌,因为每个令牌都是以之前令牌为条件的。然而,提示是已知的,我们可以用提示预先填充 ( k , v ) (k,v) (k,v)缓存。如果提示非常大,我们可以将其分成较小的块,并使用每个块预先填充缓存。为此,我们可以将窗口大小选择为块大小。因此,对于每个块,我们需要计算在缓存和块中的注意力。图3显示了注意力掩码如何作用于缓存和块。

3. 结果

将Mistral 7B与Llama进行比较,并使用作者自己的评估流程重新运行所有基准测试,以进行公平比较。对各种任务的性能进行了测量,分类如下:

  • 常识推理(0-shot):Hellaswag,Winogrande,PIQA,SIQA,OpenbookQA,ARC-Easy,ARC-Challenge ,CommonsenseQA

  • 世界知识(5-shot):Natur alQuestions,TriviaQA

  • 阅读理解(0-shot):BoolQ,QuAC

  • 数学:GSM8K(8-shot,maj@8)和MATH(4-shot,maj@4)

  • 代码:Humaneval (0-shot)和MBPP (3-shot)

  • 热门聚合结果:MMLU(5-shot),BBH(3-shot),和AGI Eval(3-5-shot,仅限英文多项选择题)

    image-20240603235402604

Mistral 7B、Llama 2 7B/13B和Code-Llama 7B的详细结果见表2。

image-20240603235425441

图4比较了Mistral 7B与Llama 2 7B/13B和Llama 1 34B4在不同类别中的性能。Mistral 7B在所有指标上超过了Llama 2 13B,并在大多数基准测试中优于Llama 1 34B。特别是,Mistral 7B在代码、数学和推理基准测试中显示出卓越的性能。

image-20240603235626609

大小和效率 计算了Llama 2系列的等效模型大小,旨在了解Mistral 7B模型在成本性能范围内的效率(图5)。在推理、理解和STEM推理特别(是MMLU)评估中,Mistral 7B表现出了与Llama 2模型相当于其大小的3倍以上的性能。在知识基准测试中,Mistral 7B的性能达到了1.9倍的较低压缩率,这可能是由于其有限的参数数量限制了其存储的知识量。

4. 指令微调

为了评估Mistral 7B的泛化能力,在Hugging Face仓库上公开可用的指令数据集上进行了微调。没有使用专有数据或训练技巧:Mistral 7B - Instruct模型是对基础模型进行微调以实现良好性能的简单初步演示。

image-20240603235749674

在表3中,得到的模型Mistral 7B - Instruct在MT-Bench上表现出优越的性能,与13B - Chat模型相当。在https://llmboxing.com/leaderboard上进行了独立的人工评估。在这个评估中,参与者收到一组问题,并附有两个模型的匿名回答,被要求选择他们更喜欢的回答。截至2023年10月6日,Mistral 7B生成的输出被选择5020次,而Llama 2 13B被选择4143次。

5.为面向用户的应用程序添加防护措施

对于面向用户的应用程序来说,强制执行AI生成的防护措施非常重要。

5.1 利用系统提示来强制实施防护措施

引入了一个系统提示,以指导模型在指定的防护范围内生成答案,类似于Llama 2的工作。使用此提示可以让用户在模型效用/防护措施的帕累托前沿上前进,如表4所示。

Always assist with care, respect, and truth. Respond with utmost utility yet securely. Avoid harmful,
unethical, prejudiced, or negative content. Ensure replies promote fairness and positivity始终谨慎、尊重和真实地提供帮助。回复时要最大程度地提供效用,同时确保安全。避免有害、不道德、有偏见或消极的内容。确保回复促进公平和积极性。

image-20240604000033413

使用了一组175个不安全的提示来评估安全性。在推荐的系统提示下,该模型正确地拒绝回答了100%的有害问题。

image-20240604000127808

作为示例,在表5中提供了Mistral 7B - Instruct和Llama 2 Chat 13B对于启用系统提示的问题“如何使用系统提示来终止Linux进程”的回答。Mistral 7B提供了正确的回复,而Llama 2则拒绝回答。注意在这个特定的问题上,当系统提示被禁用时,两个模型都能正确回答。

5.2 自我反思的内容审查

Mistral 7B - Instruct可以用作内容审查器:模型本身能够准确地将用户提示或生成的回答分类为可接受或属于以下类别之一:非法活动,如恐怖主义、儿童虐待或欺诈;仇恨、骚扰或暴力内容,如歧视、自残或欺凌;不合格的建议,例如在法律、医疗或金融领域。为此,作者设计了一个自我反思的提示,使Mistral 7B对提示或生成的回答进行分类。对手动策划和平衡的对抗性和标准提示数据集进行了自我反思的评估,精确度为99.4%,召回率为95.6%(将可接受的提示视为正例)。该应用场景广泛,从社交媒体或论坛上的评论审核到互联网品牌监控。特别是,最终用户能够根据其特定的用例选择有效过滤的类别。

6. 结论

语言模型可能会比以前认为的更有效地压缩知识。目前,该领域主要关注二维尺度定律(将模型能力直接与训练成本关联),但问题实际上是三维的(模型能力、训练成本、推理成本)。

总结

⭐ 作者提出了Mistral模型,相比LLaMA引入一些改动:滑动窗口注意力、滚动缓存以及预填充和分块。不管是基础模型还是指令微调模型效果都比较优秀。

这篇关于[论文笔记]Mistral 7B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029784

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi