OpenELM是什么
OpenELM是Apple苹果公司最新推出的系列高效开源的语言模型,包括OpenELM-270M、OpenELM-450M、OpenELM-1_1B和OpenELM-3B不同参数规模的版本(分为预训练版和指令微调版)。该大模型利用层间缩放策略在Transformer模型的每一层中进行参数的非均匀分配,以此提高模型的准确度和效率。该模型在公共数据集上进行了预训练,并且在多个自然语言处理任务上展现出了优异的性能。OpenELM的代码、预训练模型权重以及训练和评估流程全部开放,旨在促进开放研究和社区的进一步发展。
OpenELM的基本信息
- 参数规模:OpenELM总共有八个模型,其中四个是预训练的,四个是指令微调的,涵盖了 2.7 亿到 30 亿个参数之间的不同参数规模(270M、450M、1.1B和3B)。
- 技术架构:OpenELM采用了基于Transformer的架构,使用了层间缩放(layer-wise scaling)策略,通过调整注意力头数和前馈网络(FFN)的乘数来实现参数的非均匀分配。该模型采用了分组查询注意力(Grouped Query Attention, GQA)代替多头注意力(Multi-Head Attention, MHA),使用SwiGLU激活函数代替传统的ReLU,以及RMSNorm作为归一化层。
- 预训练数据:OpenELM使用了多个公共数据集进行预训练,包括RefinedWeb、deduplicated PILE、RedPajama的子集和Dolma v1.6的子集,总计约1.8万亿个token。
- 开源许可:OpenELM的代码、预训练模型权重和训练指南都是在开放源代码许可证下发布的。此外,苹果还发布了将模型转换为 MLX 库的代码,从而在苹果设备上进行推理和微调。
OpenELM的官网入口
- arXiv研究论文:https://arxiv.org/abs/2404.14619
- GitHub模型权重和训练配置:https://github.com/apple/corenet
- 指令微调版模型Hugging Face地址:https://huggingface.co/collections/apple/openelm-instruct-models-6619ad295d7ae9f868b759ca
- 预训练版模型Hugging Face地址:https://huggingface.co/collections/apple/openelm-pretrained-models-6619ac6ca12a10bd0d0df89e
OpenELM的技术架构
- Transformer架构:OpenELM采用了仅解码器(decoder-only)的Transformer模型架构,这是一种在自然语言处理中广泛使用的架构,特别适用于处理序列数据。
- 层间缩放(Layer-wise Scaling):OpenELM通过层间缩放技术有效地在模型的每一层分配参数。这意味着模型的早期层(接近输入端)使用较小的注意力维度和前馈网络维度,而接近输出端的层则逐渐增加这些维度的大小。
- 分组查询注意力(Grouped Query Attention, GQA):OpenELM使用了GQA代替传统的多头注意力(Multi-Head Attention, MHA)。GQA是一种注意力机制的变体,旨在提高模型处理长距离依赖的能力。
- RMSNorm归一化:OpenELM使用了RMSNorm作为其归一化层,一种有助于稳定训练过程的技术。
- SwiGLU激活函数:在前馈网络(Feed Forward Network, FFN)中,OpenELM使用了SwiGLU激活函数,一种门控激活函数,有助于模型捕捉复杂的模式。
- RoPE位置编码:为了编码位置信息,OpenELM使用了旋转位置编码(Rotary Positional Embedding, RoPE),一种可以处理序列中元素顺序的编码方式。
- Flash注意力:在计算缩放点积注意力(scaled dot-product attention)时,OpenELM使用了Flash注意力,这是一种快速且内存高效的注意力计算方法。
OpenELM的性能表现
研究人员将OpenELM与PyThia、Cerebras-GPT、TinyLlama、OpenLM、MobiLlama和OLMo等模型进行了比较。在相似的模型大小下,OpenELM在ARC、BoolQ、HellaSwag、PIQA、SciQ和WinoGrande等主流的任务测试中的多数任务上展现出了更高的准确度。尤其是,与OLMo模型相比,OpenELM在参数数量和预训练数据更少的情况下,准确率依然更高。
© 版权声明
文章版权归作者所有,未经允许请勿转载。