OpenELM是苹果开源的一系列高效语言模型,采用了独特的逐层缩放(layer-wise scaling)策略,使得每个Transformer层的参数配置不同,从而提高了模型的整体性能。在配置OpenELM时,需要注意以下几个细节:
模型设计
- 逐层缩放策略:OpenELM通过调整每层的注意力头数(n_h)和前馈网络维度(FFN multiplier m)来实现参数在各层之间的非均匀分配。
- 不使用可学习偏置参数:在所有全连接层中不使用可学习的偏置参数,而是使用RMSNorm进行预归一化。
- 位置编码:使用旋转位置嵌入(ROPE)来编码位置信息。
- 注意力机制:使用分组查询注意力(GQA)代替多头注意力(MHA)。
- 前馈网络:用SwiGLU FFN替换传统的前馈网络(FFN)。
数据预处理
- 数据来源:预训练数据包括RefinedWeb、去重后的PILE、RedPajama的子集以及Dolma v1.6的子集,总计约1.8万亿个token。
- 数据过滤:实时过滤和标记文本数据,过滤掉短序列(字符级别或token级别)。
训练细节
- 训练超参数:使用AdamW优化器,cosine学习率调度,预热阶段为5次迭代,最终学习率衰减至最大学习率的某个值。
- 训练迭代次数:总共进行约350k次训练迭代。
- 梯度裁剪:梯度裁剪值为1.0。
微调和评估
- 评估任务:在Standard zero-shot tasks、OpenLLM leaderboard tasks和LLM360 leaderboard tasks上评估模型性能。
- 指令调优:使用经过清理的UltraFeedback数据集的变种进行指令调优,能够提高模型的平均准确率1-2%。
- 参数高效微调:使用LoRA和DoRA等方法进行参数高效微调,能够在常识推理基准上有良好的表现。
其他注意事项
- 使用公开数据集:OpenELM在预训练时使用了公开可用数据集,这有助于提高模型在多种任务上的泛化能力。
- 框架完整性:OpenELM提供了完整的训练和推理框架,包括数据准备、训练、微调和评估流程,以及多个预训练checkpoint和训练日志。
在配置OpenELM时,需要特别注意上述细节,以确保模型能够充分发挥其性能优势。同时,利用OpenELM提供的完整框架和开源资源,可以大大简化配置和开发过程。