LLaMA论文阅读笔记

论文https://arxiv.org/pdf/2302.13971

1、为什么要做这个研究(理论走向和目前缺陷) ?

之前的效果的模型要么不开源,要么用了私有数据训练,完全开源的效果都不咋地。
2、他们怎么做这个研究 (方法,尤其是与之前不同之处) ?

用完全开源的数据(1.4万亿tokens),并没有大的离谱模型(7B到65B), 做了一系列前面研究做的优化,如RMSNorm的Pre-normalization减少计算量,FFN的激活函数替换为SwiGLU增强表现能力更好,旋转位置编码RoPE提升模型长度外推性。这些优化基本都成了后续大模型设计的标配。
3、发现了什么(总结结果,补充和理论的关系)?

算是首个完全开源且效果和闭源模型相当的LLM模型,候选qwen也是基于这个模型改进得到的。

摘要

发布LLaMA系列模型,参数量从7B到65B量级,训练数据在1.5万亿tokens,且全是开源的数据,13B参数量的比175B的GPT-3性能还要好,65B的模型达到当前最好的大语言模型效果。

1 引言

在算力固定的情况下,小模型+大数据比大模型+小数据效果更好,而且小模型+大数据可能训练时间很长,但是推理时长比较短。

2 方案

2.1 预训练数据

全是开源数据,大部分都是其他LLM训练用的数据。
英文爬虫获取数据(67%) 。预处理之前别人通过爬虫获得的(2017-2020)文献,但做了以下处理,1)数据去重。2)用fastText线性分类器区分是否英文数据,把非英文的踢掉。3)ngram语言模型滤除内容质量底下的数据。4)训练了一个分类器区分是否来自维基百科数据,把非维基百科的数据丢弃掉。
C4数据(15%) 。预处理包括去重以及去非英文数据。
github数据(4.5%) 。去重,去低质量数据。
Wiki百科(4.5%) 。2022年1月-2022年月的数据。把超链接、评论、及废话去掉。
Gutenberg and Books3 [4.5%] 。来自书本的预料库,也做了去重。
ArXiv [2.5%] . 移除文章第一节前的所有内容,包括作者信息也被移除。
Stack Exchange [2%]. 有高质量问答数据的网站,类似stackoverflow。

分词器 : BPE.

最终获得共计1.4T(1.4万亿)个训练tokens,大多数训练数据只会被训练一次,除了维基百科和书本里的数据训练了两次。

2.2 架构

基于transformer了架构,并混合了后续模型提出的各种优化方法。包括:
Pre-normalization [GPT3]. 使用RMSNorm在transofmer子层输入之前先做归一化,而不是像标准的transfomer一样在输出之后做LayerNorm归一化,可以提升训练的稳定性。注:LayerNorm和RMSNorm的主要区别在于是否有中心化,LayerNorm会减去特征均值,实现数据中心化,而RMSNorm没有这一步,故不会中心化。在大模型训练时,中心化不是必须的,而缩放是必要的,且RMSNorm计算量更小,

SwiGLU activation function [PaLM] 。SwiGLU替换FFN层中ReLU层。SwiGLU中的G即gate,引入了门控(0~1)之间权重逐元素和线性变换后的原始值相乘。虽然增加了计算量,但在大模型中表现能力更好,基本是现代大模型的标配。

Rotary Embeddings [GPTNeo] 。即RoPE相对位置编码。位置编码一般有绝对位置编码,即可学习的位置编码或标准的transfomer中使用的Sinusoidal位置编码。可学习的位置编码缺点是模型不具有长度外推性,因为位置编码矩阵的大小是预设的,若对其进行扩展,将会破坏模型在预训练阶段学习到的位置信息。Sinusoidal位置编码还具有远程衰减的性质,具体表现为对于两个相同的词向量,如果它们之间的距离越近,则他们的内积分数越高,反之则越低。Sinusoidal位置编码中的正弦余弦函数具备周期性,并且具备远程衰减的特性,所以理论上也具备一定长度外推的能力。而RoPE作者的出发点为:通过绝对位置编码的方式实现相对位置编码。Sinusoidal位置编码通过加法把相对位置信息融入到内容信息中,但需要模型隐式学习这种相对位置信息,而RoPE通过旋转(乘法)把相对位置信息融入到内容信息中,是一种显式的注入,不需要隐式学习,在长度外推性方面,RoPE比Sinusoidal更好。参考

https://hub.baai.ac.cn/view/32862 获取更详细的信息。

2.3 优化器

AdamW 优化器,cosine learning rate schedule等

2.4 高效实现

做了一些优化提升训练速度。首先是采用高效因果多头注意力(from xformers)减少内存占用和运行时间,即下三角矩阵只计算需要的部分,不用的部分不存不算,从而减少显存占用。其次,保存线性层的激活值,避免反向传播时还要重新计算。

最终训练65B的模型,1.4万亿的tokens数据,需要80G A100训练21天。

3 主要结果

在20个benchmarks做了实验。

  1. Zero-shot: 提供任务描述和一道测试题输入到模型中,让模型生成问题解答或选择正确答案。
  2. Few-shot: 提供一些任务解答案例和一道测试题,让模型生成问题解答或选择正确答案。
    对比的模型:
  • 闭源:GPT-3 2020, Gopher 2021, Chinchilla 2022, PaLM 2022
  • 开源:OPT 2022, GPT-J 2021, GPT-Neo 2022, 以及指令微调的模型OPT-IML, Flan-PaLM.

3.1 常识推理

8个benchmark: BoolQ, PIQA,SIQA , HellaSwag, WinoGrande, ARC easy/challenge, OpenBookQA.

3.2 书本知识问答

两个benchmark: Natural Questions和TriviaQA

3.3 阅读理解

RACE benchmark,来源于中国初高中英语测试的阅读理解题。

3.4 数学推理

2 benchmark : MATH, GSM8k,初高中数学题。

Minerva是PaLM在arxiv以及数学网站数据微调出来的模型,故效果很好。

3.5 代码生成

2个benchmark: HumanEval, MBPP

3.6 大规模多任务语言理解

MMLU benchmark

3.7 训练时的性能进化

训练时评估模型性能,一般情况下,训的tokens越多,性能越好。

4 指令微调

加点指令微调后,模型效果大幅提升。

5 偏见、戾气以及错误

6 碳排放

7 相关研究

8 结论

开源了不同大小的LLaMA模型,通过相对较小模型+大量数据实现不错的效果,且所有数据都是开源的。

相关推荐
saoys2 小时前
Opencv 学习笔记:提取轮廓中心点坐标(矩计算法)
笔记·opencv·学习
AI视觉网奇2 小时前
ue 安装报错MD-DL ue 安装笔记
笔记·学习·ue5
KeeBoom2 小时前
嵌入式 Linux 应用开发完全手册——阅读笔记14
linux·笔记
pop_xiaoli2 小时前
effective-Objective-C 第一章阅读笔记
开发语言·笔记·ios·objective-c·cocoa·xcode
暴躁小师兄数据学院2 小时前
【WEB3.0零基础转行笔记】基础知识篇-第二讲:以太坊基础
笔记·web3·区块链
tq10862 小时前
别为问题预设答案
笔记
木卫二号Coding2 小时前
第七十七篇-V100+llama-cpp-python-server+Qwen3-30B+GGUF
开发语言·python·llama
半夏知半秋2 小时前
lua5.5版本新特性学习
开发语言·笔记·学习
木卫二号Coding2 小时前
第七十六篇-V100+llama-cpp-python+Qwen3-30B+GGUF
开发语言·python·llama