大语言模型(一)OLMo

OLMo是AI2发布的开源大语言模型框架,包括训练数据、代码及评估工具。模型基于Transformer Decoder-only架构,引入了SwiGLU激活函数和RoPE旋转位置嵌入,以提高稳定性和性能。此外,还对词汇表进行了优化,以处理个人身份信息。模型架构上,SwiGLU解决了ReLU可能导致的神经元失效问题,RoPE则实现了相对位置编码。

一、简介

OLMo 是由AI2 发布的大语言模型以及构建框架,与大多数之前的尝试只发布模型权重和推理代码不同,OLMo 开源了整个框架,包括训练数据、训练代码以及模型评估代码。

OLMo框架包括构建和研究语言模型所需的工具和资源。对于训练和建模,它包括完整的模型权重、训练代码、训练日志、消融实验、以Weights & Biases日志形式的训练指标,以及推理代码。这次发布包括我们的语言模型在7B规模上的四个变体,对应不同的架构、优化器和训练硬件,以及一个1B规模的模型,所有模型都至少训练了2T token。OLMo 作者还在HuggingFace上作为修订版发布了数百个中间检查点。对于数据集构建和分析,它包括用于这些模型的完整训练数据,包括生成训练数据的代码,来自AI2的Dolma 和用于分析预训练数据的WIMBD。对于评估,它包括AI2的Catwalk 用于下游评估和Paloma 用于基于困惑度的评估。

OLMo 也是基于Transformer Decoder-only 架构,并做了如下主要改变:

  1. 无偏置项,以提高训练稳定性。
  2. 非参数化层归一化,对比参数化层归一化和RMSNorm,OLMo 作者认为这是最安全的选择,也是最快的选择。
  3. SwiGLU激活函数,与LLaMA、PaLM和其他模型一样,使用SwiGLU 代替ReLU。
  4. 旋转位置嵌入(RoPE),与LLaMA、PaLM和其他模型一样,用RoPE 替换了绝对位置嵌入。
  5. 词汇表,OLMo 作者修改 GPT-NeoX-20B tokenizer ,添加了用于屏蔽个人身份信息(PII)的额外标记。最终的词汇表大小为50,2
大语言模型不同模型之间的区别体现在多个方面,以下从模型变体和模型结构两方面进行阐述。 在模型变体方面,常见的基础版本(Base)、指令跟随版本(Instruct)和量化版本(Quantized)存在明显差异,主要体现在模型能力、应用场景和技术实现上 [^1]。 - 基础版本(Base Model):它是模型的原始形态,具备通用的语言理解和生成能力,没有针对特定任务进行微调。适用于广泛的自然语言处理任务研究和开发,为进步的定制和优化提供基础。 - 指令跟随版本(Instruct):经过专门的微调,能够更好地理解和遵循人类的指令,在特定任务上表现更出色,如问答系统、文本摘要等。它在实际应用中更能满足用户的具体需求。 - 量化版本(Quantized):通过量化技术减少模型参数的精度,从而降低模型的存储和计算成本。虽然在定程度上可能会损失些精度,但在资源受限的环境中具有优势,如移动设备或边缘计算场景。 在模型结构方面,不同开源大语言模型也存在区别。以openai的gpt2、开源鼻祖llama、国内的代表qwen2、欧洲的代表号称效果很好的模型mistral、和号称完全开源的模型olmo为例 [^2]。 - gpt2和transformer结构的区别:gpt2在transformer的基础上进行了改进和优化,具体体现在层数、注意力机制等方面。 - gpt2到llama的演变:llama在gpt2的基础上进步发展,可能在模型架构、训练数据和方法等方面有所创新。 - llama、qwen2、mistral和olmo模型结构的区别:这些模型在整体架构、层数、注意力机制、参数规模等方面可能存在差异,导致它们在性能、应用场景和效果上有所不同。 ```python # 以下为简单示例代码,用于模拟不同模型的使用 # 假设这里有个基础模型类 class BaseModel: def __init__(self): self.name = "Base Model" def generate_text(self, input_text): return f"Generated text by {self.name}: {input_text}" # 指令跟随模型类,继承自基础模型 class InstructModel(BaseModel): def __init__(self): super().__init__() self.name = "Instruct Model" def follow_instruction(self, instruction): return f"Following instruction by {self.name}: {instruction}" # 量化模型类,继承自基础模型 class QuantizedModel(BaseModel): def __init__(self): super().__init__() self.name = "Quantized Model" def generate_text_quantized(self, input_text): return f"Generated quantized text by {self.name}: {input_text}" # 创建不同模型的实例 base_model = BaseModel() instruct_model = InstructModel() quantized_model = QuantizedModel() # 使用不同模型 print(base_model.generate_text("Hello")) print(instruct_model.follow_instruction("Generate a summary")) print(quantized_model.generate_text_quantized("World")) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅唱书令

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值