OpenELM是什么?
OpenELM是Apple苹果公司发布的一系列开源语言模型,包含OpenELM-270M、OpenELM-450M、OpenELM-1_1B和OpenELM-3B不同参数规模版本(包含预训练和指令微调)。
OpenELM通过高效的层级缩放策略实现了优异的性能,来有效分配Transformer模型每一层参数,从而提升准确率。在参数预算约为10亿的情况下,OpenELM 的准确率比OLMo提高了2.36%,预训练token需求减少了2倍。
OpenELM不仅开源了模型权重,还包括了训练和评估的完整框架,如训练日志、checkpoints和预训练配置。他们还发布了将模型转换为 MLX 库的代码,以便在 Apple 设备上进行高效推理和微调。而且,苹果还开源了神经网络库CoreNet。
OpenELM的技术架构
- 基于 Transformer 的模型:OpenELM 采用了仅解码器(decoder-only)的 Transformer 架构,这是一种在自然语言处理中广泛使用的模型结构。
- 层级缩放:OpenELM 通过层级缩放策略在 Transformer 模型的每一层中高效分配参数。这意味着模型的注意力头数和前馈网络(FFN)的宽度会随着层的深入而增加,从而更高效地利用参数预算。
- 预训练和微调:模型首先在大规模的公开数据集上进行预训练,然后在特定任务上进行微调,以提高在这些任务上的性能。
- 优化的注意力机制:OpenELM 使用分组查询注意力代替传统的多头注意力,并使用 Flash Attention 来计算缩放点积注意力。
- 前归一化和位置编码:模型采用 RMSNorm 进行前归一化,并使用旋转位置编码来编码位置信息。
- 激活函数:在 Transformer 的 FFN 中,OpenELM 使用 SwiGLU 激活函数。
- 权重共享:为了减少模型大小,OpenELM 可能在某些层之间共享权重。
- 训练优化技术:包括使用 AdamW 优化器、余弦学习率调度器、权重衰减和梯度裁剪。
OpenELM 的这些技术架构设计使其在保持较小模型尺寸的同时,能够实现与大型模型相媲美的性能,这对于希望在资源受限的环境中部署高效语言模型的研究者和开发者来说是非常有价值的。
OpenELM的性能表现
在与现有公开可用的大型语言模型(LLMs)的比较中,OpenELM在预训练令牌数量较少的情况下,表现出了更高的准确率。例如,OpenELM在参数数量约为11亿(1.1 B)时,比参数数量为12亿(1.2 B)的OLMo模型高出2.36%的准确率,同时预训练所需的令牌数量减少了2倍。
如何使用OpenELM?
苹果开放了OpenELM的论文、代码和模型,相关资源链接如下:
- 论文链接: https://arxiv.org/abs/2404.14619
- GitHub代码: https://github.com/apple/corenet
- 模型链接: https://huggingface.co/apple/OpenELM
OpenELM其开源性质和跨平台支持为自然语言处理领域的研究者和开发者提供了宝贵的资源,推动了开放AI研究的进展。