谷歌 Gemma LLM 讲解:彻底改变大型语言模型基准

大型语言模型 (LLM) 市场有望显着增长,专家预测,到 2030 年,该市场可能会达到惊人的 259,817.73 百万美元,而 2023 年为 1,590.93 美元。 [1] 考虑到 LLM 在各个领域的广泛使用,这并不奇怪。行业因其在解决复杂语言任务方面的卓越能力而受到青睐。

为了跟上该领域日益激烈的竞争,谷歌发布了另一个开放访问的大型语言模型,称为 Gemma 模型。基于 Gemini 模型,Gemma 显示出巨大的潜力,可以彻底改变各个领域的 LLM 利用率,并缓解与以前模型相关的一些挑战,特别是在性能方面。

Gemma 是作为 Gemini Models 计划的一部分而开发的最新法学硕士阵容。它是一个大型语言模型家族,经过多达 6 万亿个文本标记的训练,使其比 Gemini 模型轻得多。

Gemma 大语言模型系列包含两种大小,每种大小都适合特定的应用程序和设备。较轻的版本(20 亿参数模型)专为 CPU 和设备上应用程序而设计,而较大的 70 亿参数模型可以有效部署在 GPU 和 TPU 上。

Gemma 系列模型的最大卖点之一是其强大的通用能力和大规模理解和推理任务的 SoTA 性能。当与类似大小的模型进行比较时,Gemma LLM 在各种自然语言处理任务中表现出明显更好的性能,包括常识推理、问题回答、科学、数学和编码。

在开发过程中,谷歌利用了 Transformer、序列模型、大规模训练和深度学习方面的一些最新进展,创建了一个能够超越市场上大多数模型的模型。

谷歌表示,Gemma模型旨在提供LLM技术的公平获取,提高前沿模型的安全性,为当前技术的严格评估和分析铺平道路,并促进未来技术的发展。


Gemma 的模型架构是什么?

Gemma 模型采用2017 年推出的仅解码器转换器架构。70亿和 20 亿参数模型的上下文长度均为 8192 个标记,词汇量为 256,000 个标记。

它还包括 Transformer 模型架构的最新进展,包括:

  • 绳索嵌入

大多数基于变压器的模型都使用绝对位置编码。 [2] 不幸的是,这存在一些限制,包括有限的序列长度和位置嵌入的独立性——这些因素可能会对法学硕士的性能产生负面影响。

为了克服这些限制,谷歌选择在每一层中采用旋转位置嵌入,这提供了多种好处,包括可以灵活地扩展到任何序列长度。

这极大地提高了模型在自然语言处理任务中的性能,特别是在文本生成、摘要、问答和机器翻译方面。

  • 多查询注意力

20 亿参数模型使用多查询注意力,这是一种注意力机制,它将每个输入单词的表示视为一个查询,以访问和合并一组值中的信息。 [3]

这显着提高了编码器中生成令牌的速度,而不会对模型性能产生负面影响。

相反,70亿参数模型采用多头注意力机制。多头注意力机制并行运行注意力机制多次,然后将输出连接并线性转换为预期维度。 [4]

最终,这使得模型能够以各种方式处理各种输入序列片段,从而获得更好的性能。

  • 格鲁激活

与大多数使用常规 ReLU 激活函数的模型不同,Gemma 模型使用 GeGLU 激活函数,从而获得更好的性能。

简而言之,GeGLU 激活函数结合了 GELU 和 GLU 激活的功能,从而产生了控制网络信息流的独特机制。 [5]

当在大型语言模型中使用时,GeGLU 激活可以帮助神经网络学习更复杂的模式,从而在自然语言处理任务中获得更好的性能。

  • 标准化器位置

以前的语言模型主要使用 goto 实践,这在复杂的程序中不太可靠,因为非结构化跳转可能使理解程序中发生的情况变得更加困难。

另一方面,Gemma 利用 RMSNorm 对每个 Transformer 子层输入和输出进行归一化,从而稳定层转换并提高模型收敛性。

Gemma 使用了哪些训练数据集?

Gemma 模型在海量文本数据集上进行训练,包含多达 6 万亿个标记。数据集由几个关键组成部分组成,包括:

  • 网络文档
    Google 使用大量网络文本源将模型暴露给丰富的词汇、语言风格和主题。
  • 数学
    在模型的训练数据中加入数学文本有助于 Gemma LLM 获得与符号表示、逻辑推理和处理数学查询相关的技能,从而形成能够执行各种任务的全面模型。
  • Code
    Gemma 与各种代码示例集成,使其能够掌握编程语言语法和模式。通过这样做,谷歌开发人员显着增强了理解代码相关查询和生成代码的能力。

杰玛是如何训练的?

这两个模型都分别使用 2 万亿和 6 万亿个标记进行训练,这些标记主要包含从网络文档、代码和数学中获得的英语数据集。在训练过程中,谷歌开发人员采用了与 Gemini 模型不同的方法,该模型针对多语言任务进行了优化,并包含多模式元素。

相反,开发人员专注于训练模型来执行英语任务。在将模型暴露给训练数据之前,首先对数据进行过滤,以删除任何不需要或不安全的内容,包括敏感数据和个人信息。过滤过程主要涉及基于模型的分类器和启发式方法,以确保训练数据集的安全性和质量。

这两个模型还根据人类反馈进行了强化学习(RLHF)和监督微调(SFT),以进一步提高其性能。在这两种情况下,监督微调都涉及纯英语、纯文本、合成和人工生成的提示响应对的混合。

为了进一步提高模型性能,Google 的开发人员和数据科学家根据基于 LM 的并行评估仔细选择了数据混合物进行微调。在这种方法中,设计了不同的提示集来突出特定的模型能力,包括事实性、遵循指令、安全性和创造力。

训练过程中使用的合成数据也经过了几个阶段的过滤,以删除任何包含有毒输入和个人信息的示例,就像 Gemini 模型所发生的情况一样。最终,这提高了模型性能,且不会对安全性产生负面影响。

开发人员还在人类评分者进行的强化学习阶段使用 Bradley-Terry 模型作为奖励函数。他们还使用一种 REINFORCE 进一步优化模型,以减轻奖励黑客等潜在问题并提高模型的性能。

Gemma 的基准和性能指标

与 Mistral 相比,Gemma 在六个基准测试中的五个上都优于它,唯一的例外是 HellaSwag 基准测试,两个模型都获得了相似的结果。 Gemma 在这些基准测试中无可否认的主导地位在 TruthfulQA 和 ARC-c 等任务中显而易见,它在准确性和 F1 分数方面分别超过 Mistral 2.5% 和 2%。

在 MMLU 基准测试中,Gemma 实现了较低的困惑度,表明其在掌握语言模式方面具有无与伦比的能力。

考虑到这些基准测试的结果,很明显Gemma 是一个强大的语言模型,能够以出色的效率和准确性处理各种自然语言处理任务。

开始使用杰玛

Gemma LLM 有一个非常简单的界面,但您仍然需要一些技术知识才能正确使用它。您可以通过多种方式访问​​和利用这两种模型。它们包括Kaggle、Vertical AI 和 Hugging Face。

我们在本教程中选择使用 Kaggle,因为它提供免费访问并且不需要云帐户。

要使用 Kaggle,您首先需要在 kaggle.com 上注册,打开 Gemma 模型卡并请求访问权限。您还必须接受网站上规定的条款和条件。

设置好 Kaggle 帐户后,您可以继续执行安装过程中的以下步骤。

安装依赖项

pip install –升级 keras-nlp

pip install –升级keras

为了在 Kaggle 上有效运行 Gemma LLM,您首先需要安装 KerasNLP。但是,您可能需要重新安装 Keras 3,因为 TensorFlow 目前固定到 Keras 2。这一关键步骤背后的原因是 KerasNLP 目前依赖于 TensorFlow-text。 TensorFlow-text 会自动安装 TensorFlow 2.15,不幸的是,它会用 Keras 2.15 覆盖您的 Keras 安装。 [7] 但是,一旦 TensorFlow 2.16 发布,您就不需要执行此操作。

导入包

导入keras

导入keras_nlp

导入操作系统

选择一个后端

操作系统。environ [ “KERAS_BACKEND” ] = “torch” # 或“tensorflow”或“jax”。

Keras 3 让您可以灵活地选择您喜欢的后端。对此,你有三种选择:JAX、TensorFlow 或 PyTorch。此外,在使用 Keras 3 时,您可以将模型启动为 PyTorch 模块,将其导出为 TensorFlow SavedModel,甚至将其启动为无状态 JAX 函数。

这种无与伦比的多功能性使您能够维护组件的单一实现并在所有框架中使用它,而不会影响数值结果。

策划模型

KerasNLP 具有流行模型架构的各种实现。对于 Gemma,您将找到 GemmaPreprocessor 层、GemmaCausalLM 模型、GemmaTokenizer、GemmaBackbone 模型和 GemmaCausalLMPreprocessor 层等组件。

GemmaBackbone 组件是 Gemma 模型的基础。它包含转换器层和嵌入查找。它不是在整个词汇空间中生成预测,而是为每个标记生成最终的隐藏状态。

考虑到其复杂性,我们选择在本教程中使用 GemmaCausalLM。 GemmaCausalLM 是一种端到端 Gemma 模型,专为休闲语言建模而定制,通常涉及根据先前的标记来预测后续标记。

要启动 GemmaCausalLM 模型,您首先需要使用预设架构以及与其关联的任何权重。

GemmaCausalLM。from_preset ()

该函数所需的参数包括:
预设:这是指定“gemma_2b_en”、“gemma_7b_en”、“gemma_instruct_7b_en”或“gemma_instruct_2b_en”预设的字符串。

load_weights:该参数主要决定是否应将预训练的权重加载到模型中。

gemma_model = keras_nlp.楷模。杰玛因果LM 。来自_预设(

“gemma_2b_cn” ,

负载权重=

您还可以使用摘要获取有关模型的更多信息。

gemma_model。概括()

生成文本

作为一个大型语言模型,Gemma 提供了一种通过generate 方法生成各种类型文本的简便方法。您还可以使用max_length参数指定生成的文本序列的最大长度。

它的工作原理如下:

生成方法分析您的输入并根据对输入的理解生成文本。您还可以使用示例通过compile()方法生成文本。基本上,如果您将输入提供为tf.数据。数据集,模型将批量生成其输出,然后将它们连接起来。但是,它将所有输入视为单个批次。

如果将预处理器附加到 Gemma 模型,它会预处理generate ()函数中的输入。这些输入通常是原始字符串,不应与预处理器层期望的结构匹配。但是,如果您不附加预处理器,则所有输入都应与主干网期望的结构保持一致。

提示= “我正在听”

gemma_model。编译(采样器= “top_k” )

gemma_model。生成(提示,max_length = 10 )

#输出

“我正在听 绘画姿势 perbaikan 姿势”

#改变采样器

gemma_model。编译( sampler =

keras_nlp.samplers.BeamSampler (num_beams = 2 ))

gemma_model。生成(提示,max_length = 0 )

#输出

‘我正在听 LED LED RSVP RSVP RSVP’

该模型还提供了使用各种 Keras_nlp 重新编译的灵活性。采样器对象来微调生成的文本。默认情况下,Gemma 使用“贪婪”采样,但您也可以尝试使用各种其他采样器,包括beam、random、CustomSampler 和 top_p。

您还可以根据提供的令牌 ID 访问生成的序列的质量。然而,为了让您更容易理解其功能,我们将使用评分方法人为地将它们整理为 TensorFlow 插件。

GemmaCausalLM。分数(

令牌_id,

padding_mask=无,

Scoring_mode= “logits” ,

layer_intercept_fn=无,

target_ids=无,

该函数所需的参数包括:

token-aids: 这通常是一个形状为 [ batch_size, num_tokens ] 的张量,其中包含要评分的标记。该张量通常捕获GemmaCausalLM.generate()调用的输出,其中包含输入文本和生成文本的标记。

Padding_mask:这是一个形状为 [ batch_size, num_tokens ] 的张量,指示在文本生成过程中应保留标记。然而,它主要充当 GemmaBackbone 所需的工件,因此不会显着影响该函数的计算。如果不包含它,该函数通常会使用Keras.ops.ones()生成适当形状的张量。

Scoring_mode:此参数指定要返回的分数类型。它可以将它们指定为“logits”或“loss”,但两者通常都由输入标记计算。

Layer_intercept_fn:这是一个可选函数,旨在通过额外计算来增强激活。因此,它通常用于研究中的可解释性。该函数通常将激活作为其第一个参数传递,然后传递与特定骨干层关联的数字索引。

Target_ids:这是一个形状为 [batch_size, num_tokens] 的张量。它包含模型计算损失的预测标记。如果您提供一系列令牌,模型会将损失计算为令牌的聚合。

将张量流导入为 tf

世代= gemma_model。产生(

[ “是什么” ,“你在哪里” ] ,

最大长度= 10

预处理 = gemma_model.预处理器。生成_预处理(生成)

Generation_ids = 预处理[ “token_ids” ]

padding_mask = 预处理[ “padding_mask” ]

目标 ID = tf.随机的。均匀(形状= (8192 ,),dtype=tf.int32 ,minval= 0 ,maxval= 8192 )

# 将张量转换为int32

目标 ID = tf.强制转换( target_ids, dtype= tf.int32 )

损失 = gemma_model.分数(

token_ids = Generation_ids,

填充掩码=填充掩码,

Scoring_mode= “损失” ,

target_ids=随机张量,

不利的一面是,要获得包含这些参数的输出,您可能需要升级到 Google Cloud AI Platform Notebooks。这只是为了让您了解如何计算损失的本质。

将 Gemma 与 Transformer 结合使用

为此,您首先需要登录 HuggingFace 平台并访问 Gemma。完成所有设置后,请使用以下代码

!pip install -U “transformers==4.38.1” –upgrade

!pip 安装加速

!pip install -i https://pypi.org/simple/bitsandbytes

!huggingface-cli 登录 –token < Huggingface_token >

使用 Qlora 和 Unsloth 微调 Gemma 7B

在深入研究微调过程之前,您必须首先允许 Notebook 安装 Unsloth 库并导入必要的模块。

下面是实例化名为FastLanguageModel的 Unsloth 组件的代码。该组件包括特定的配置,例如数据类型、序列长度和 4 位加载。

!pip install “unsloth[colab] @ git+https://github.com/unslothai/unsloth.git” –q

PEFT(参数高效微调)

PEFT 策略有选择地微调几个附加参数,而不影响大多数预训练的 LLM 参数。最终,它显着降低了存储和计算成本,并解决了微调法学硕士时常见的灾难性遗忘的挑战。

类似地,FastLanguageModel对象提供了一个get_peft_model属性,允许您配置各种参数进行微调,包括目标模块、注意力头数量、LoRa alpha、丢弃率等等。

数据准备和格式化

为了有效地微调模型,您需要使用提示模板为其提供访问未见过的数据集的权限。例如,您可以使用databricks/databricks-dolly-15k [8] 文本生成数据集。

但是,为了使模型可以访问数据,您必须将所有数据点映射为标准化格式。这通常涉及确保带有标记的输入和输出的一致提示结构。例如,您可以将它们分类为上下文、指令和响应。

微调LLM

微调过程的最后一步是初始化一个有监督的微调训练器来帮助微调过程。训练器初始化模型以及训练数据集、分词器以及所有必需的参数,例如学习率、权重衰减、学习步骤和优化。

最后的想法

Gemma 的开源特性及其卓越的性能在法学硕士社区中引起了极大的关注。因此,它可能会导致法学硕士领域的进一步进步,并为该技术的未来进步提供乐观的前景。

此外,通过提供彻底的访问和灵活性,Gemma 将为更广泛的受众提供先进的人工智能功能,推动创新和协作,最终将推动自然语言处理的进步并塑造人工智能的未来。

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

版权信息 © 2024 本站资源收集于网络仅供用于学习和交流,本站一切资源不代表本站立场,如有侵权,请联系本站删除处理!