LLaMA: Open and Efficient Foundation Language Models论文原文代码学习

LLaMA: Open and Efficient Foundation Language Models 

论文:LLaMA: Open and Efficient Foundation Language Models

模型代码:llama/llama/model.py at main · meta-llama/llama · GitHub

        《LLaMA: Open and Efficient Foundation Language Models》主要介绍了Meta AI团队提出的一系列开源的基础语言模型LLaMA(Large Language Model Meta AI)。该论文的关键点可以总结如下:

        LLaMA模型系列从7B到65B不等,展示了不同参数规模下的表现。

        尽管LLaMA-13B的参数数量远小于GPT-3的175B,但在大多数基准测试中表现优于GPT-3。LLaMA-65B的性能与Chinchilla-70B和PaLM-540B等大模型相当。LLaMA模型使用的是公开可获得的数据集,而不是依赖专有或不可访问的数据源。

        该模型训练的数据量达到了数万亿个token,证明通过公开数据也能训练出性能强劲的模型。

        论文强调LLaMA-13B模型在多个任务中超越了GPT-3,证明较小规模的模型通过优化和良好的训练也能实现较好的表现。

        LLaMA-65B模型的性能与当前最强的大模型(如Chinchilla和PaLM)非常接近,表明其在现有基础模型竞争中的可行性和优越性。

        Meta AI将LLaMA模型开放给了研究社区,鼓励更多的研究人员使用并改进该模型。这种开放性对语言模型的研究具有重要推动作用,尤其是在需要透明性和可重复性的领域。

        通过LLaMA-13B的成功,可以看出,在现有的硬件和算法优化技术的帮助下,模型规模不一定决定最终的性能。训练集的质量、训练策略以及参数的调整可以使得中等规模的模型与大型模型展开竞争。相比于GPT-3,LLaMA更小,但更高效,这表明小而精的模型设计可能是未来的趋势。

        LLaMA的成功展示了使用公开数据集训练大模型的可行性。此前很多大型模型依赖于专有数据集,使得学术界的研究门槛较高,而LLaMA的出现打破了这一障碍。随着更多公开数据的使用,研究人员可以更轻松地复现和改进语言模型。

        Meta AI选择开放LLaMA模型,将其发布给研究社区,这一举动显著提升了语言模型领域的开放合作氛围。相比其他封闭的大模型(如GPT-3和PaLM),LLaMA的开源性将推动更多研究成果的共享,进而加速领域发展。

        LLaMA-65B模型与Chinchilla-70B和PaLM-540B等大模型在多个基准测试中的竞争表明,LLaMA具备了成为顶尖基础模型的潜力。在开源社区中,研究人员可以利用LLaMA作为起点,探索不同的下游任务,进行进一步优化和创新。

这篇模型最优秀的地方就在于它的数据集非常透明:

  • CommonCrawl (67%):使用2017到2020年间的五个CommonCrawl数据集,经过CCNet流水线预处理。该过程包括行级数据去重、语言识别(使用fastText分类器去除非英语页面)、低质量内容过滤(通过n-gram语言模型),并使用线性模型分类Wikipedia引用的页面与随机页面。
  • C4 (15%):引入C4数据集,类似于CommonCrawl,但质量过滤主要依赖于启发式规则,如标点符号、单词和句子数量。
  • GitHub (4.5%):使用Google BigQuery上的公共GitHub数据集,仅保留Apache、BSD和MIT许可下的项目,去除低质量文件和模板文件。
  • Wikipedia (4.5%):使用2022年6月至8月期间的Wikipedia数据,覆盖20种语言,处理步骤包括去除超链接、注释和格式模板。
  • Books (4.5%):未详细说明来源,但该数据集可能包含书籍类文本。
  • ArXiv (2.5%):使用来自ArXiv的学术论文数据集。
  • StackExchange (2%):从StackExchange平台收集数据,经过过滤处理。

训练关键点如下:

  • 优化器选择

    • 使用了AdamW优化器,超参数设置为:β1=0.9\beta_1 = 0.9β1​=0.9,β2=0.95\beta_2 = 0.95β2​=0.95。
    • 采用余弦学习率调度,最终学习率为最大学习率的10%。
    • 使用了权重衰减0.1和梯度裁剪1.0。
    • 进行了2000步的预热(warmup)。
  • 训练损失

    • 训练过程中,LLaMA的模型在不同大小(7B、13B、33B、65B)上表现出一致的训练损失曲线。
    • LLaMA-33B和LLaMA-65B在1.4T tokens上训练,而较小的模型在1.0T tokens上训练。
  • 高效实现

    • 进行了多项优化以提高模型的训练速度。
    • 实现了高效的因果多头注意力机制,降低内存使用和运行时间。这一实现来源于xformers库,灵感来自于Rabe和Staats(2021)的研究,采用了Dao等人(2022)的反向传播方法。
    • 通过检查点(checkpointing)减少反向传递过程中重新计算的激活量,保存计算开销大的激活输出,如线性层的输出。
    • 通过手动实现Transformer层的反向函数,进一步优化性能,而不是依赖PyTorch的自动求导功能。

结果也非常喜人!

        评估使用了多个常识推理基准,包括HellaSwag、WinoGrande、ARC easy和challenge以及OpenBookQA,涵盖了Cloze和Winograd样式的任务及多项选择问题回答。

        在多个基准上,LLaMA-65B超越Chinchilla-70B,唯独在BoolQ上表现不佳;同时,在所有基准上也优于PaLM-540B。

        在Natural Questions和TriviaQA两个闭卷问答基准上评估LLaMA模型,报告精确匹配性能。

LLaMA-65B在零样本和少样本设置中达到当前最先进的性能,LLaMA-13B在这些基准上也与GPT-3和Chinchilla具有竞争力,尽管它的参数规模更小。

        在RACE阅读理解基准上,LLaMA-65B与PaLM-540B相竞争,而LLaMA-13B在这一任务上超过了GPT-3。

        在数学推理基准MATH和GSM8k上评估LLaMA模型,与PaLM和Minerva进行比较。尽管LLaMA未在数学数据上进行微调,但在GSM8k上超越了Minerva-62B。

        评估模型从自然语言描述生成代码的能力,使用HumanEval和MBPP两个基准。

在HumanEval中,模型不仅接收程序描述,还接收输入输出示例,并以自然代码格式呈现提示。

------------------------------------------------------

LLaMA大模型与BERT算法在架构、训练目标和应用范围等方面有很大的的区别,这些因素使得LLaMA能够在多个任务中表现出色。

1. 架构

  • LLaMA:

    • 基于解码器架构的Transformer模型,主要用于生成任务。这使得它能够有效地处理生成文本的任务,如对话生成、文本补全和代码生成。
    • 采用了一些先进的技术,如预归一化、SwiGLU激活函数和旋转位置嵌入(RoPE),使其在训练和推理过程中更加高效。
  • BERT:

    • 基于编码器架构的Transformer模型,主要用于理解任务。BERT的设计使得它在上下文理解、情感分析和问答等任务中表现良好。
    • BERT通过遮蔽语言模型(Masked Language Model)进行训练,即在输入文本中随机遮蔽一些单词,模型需要预测这些被遮蔽的单词。
特征LLaMABERT
架构- 基于解码器架构的Transformer模型,主要用于生成任务。
- 采用预归一化、SwiGLU激活函数和旋转位置嵌入(RoPE)等先进技术,提高训练和推理效率。
- 基于编码器架构的Transformer模型,主要用于理解任务。
- 通过遮蔽语言模型(Masked Language Model)进行训练,预测输入中被遮蔽的单词。
训练目标- 通过自回归语言建模进行训练,预测序列中下一个单词。
- 优秀的生成任务性能。
- 采用双向编码,同时考虑上下文,通过遮蔽语言模型进行训练。
- 在理解任务上表现优异,但在生成文本方面能力较弱。
应用范围- 自回归特性使其适用于文本生成、问答、常识推理、数学推理、代码生成等广泛任务。- 主要用于理解类任务,如情感分析、文本分类和问答;在文本生成方面表现较为有限。
微调与应用- 支持少量样本的少量微调(few-shot tuning),快速适应特定任务。
- 能够实现零样本学习(zero-shot learning)。
- 通常需要进行有监督的微调,训练时通常需要较多的标注数据以适应特定任

不知道有没有大佬和我一开始有一样的问题,就是觉得问答任务和生成任务(生成答案)的任务有什么区别,我一开始很不理解为什么这边仅仅使用解码器生成就可以,一开始我一直以为模型应该理解我的问题,然后根据我的问题生成回答这才叫问答任务= =,后来我发现,问答任务和生成任务还是有比较大的区别,我觉得有必要在这里提醒一下我自己。

问答任务与生成任务对比表

特征问答任务生成任务
任务目标- 从给定文本或知识库中提取答案,或生成对用户问题的回答。
- 问题通常具体,回答需要准确对应问题内容。
- 生成新的文本,通常基于给定提示或上下文。
- 生成内容自由,涉及创意和内容构建,如故事、对话或代码。
输入输出形式- 输入:一个问题和相关上下文(如段落、文章或知识库)。
- 输出:简短答案(文本的一部分、数字或日期等)。
例如:输入“谁是美国第一任总统?”上下文为相关历史文本。
- 输入:文本提示、主题或问题,但没有特定上下文限制。
- 输出:生成的文本段落、句子或代码块,内容多样。
例如:输入“写一篇关于气候变化的文章”,输出完整段落。
应用场景- 信息检索、智能助手、客户支持和教育等领域,提供快速准确的信息。
例子:搜索引擎问答功能、医疗问答系统。
- 创意写作、对话生成、代码自动生成和内容创作等领域,提供灵活多样的文本输出。
例子:对话系统、文本生成模型(如GPT系列)。
模型架构和训练- 常用模型包括BERT、RoBERTa等,通常经过专门微调以提高问答性能。
- 使用提取式问答或生成式问答。
- 常用模型包括GPT、LLaMA等,经过大规模自回归训练,能生成连贯文本。
- 模型学习如何基于上下文生成合理输出,而非仅选择已有内容。

GPT、BERT和LLaMA的区别

特征BERTGPTLLaMA
架构- 基于编码器架构的Transformer模型,主要用于理解任务。- 基于解码器架构的Transformer模型,主要用于生成任务。- 基于解码器架构的Transformer模型,强调生成能力,采用先进技术提高效率。
训练目标- 使用遮蔽语言模型(Masked Language Model),进行双向上下文理解。- 通过自回归语言建模,预测序列中下一个单词,适合生成任务。- 自回归语言建模,优化生成性能,支持零样本学习和少量样本微调。
应用范围- 主要用于理解类任务,如问答、情感分析、文本分类等。- 适用于文本生成任务,如故事创作、对话生成和代码生成等。- 自回归特性使其适用于更广泛的任务,包括文本生成、问答、常识推理等。
微调与应用- 通常需要监督微调,以适应特定任务,且通常需要较多标注数据。- 可以通过少量样本微调(few-shot tuning),适应特定任务。- 能够在特定任务上快速适应,并且在许多任务上可以做到零样本学习。

GPT在回答问题时确实表现得像是在执行问答任务,但它的核心设计和工作原理使其主要属于生成任务。以下是具体的解释:

1. 任务性质

  • 问答任务:通常是指模型从给定的上下文中提取出准确的答案。这意味着模型需要定位和提取特定信息,通常是针对具体问题的直接答案。问答系统可能使用提取式问答或生成式问答,但提取式问答更加关注准确性。

  • 生成任务:模型基于输入的提示或上下文生成新的文本。这不仅限于回答问题,还包括创意写作、对话生成等。GPT等模型被设计为可以生成连贯和上下文相关的文本,不仅是回答问题。

2. 模型架构和训练目标

  • GPT:基于解码器的架构,通过自回归语言建模进行训练。它生成文本的方式是根据给定的输入提示逐字预测后续内容。这意味着它可以在各种上下文中生成丰富的、开放性的问题回答,而不仅仅是提取现有信息。

  • BERT:则是基于编码器的架构,主要是通过遮蔽语言模型进行训练,专注于理解和处理输入的文本。这使得BERT在信息提取和理解任务中表现出色,但在生成文本方面的能力有限。

3. 应用场景

  • GPT作为生成模型:虽然可以用于问答任务,但它也能处理许多其他生成任务,例如撰写文章、编写代码、生成对话等。GPT被广泛应用于需要生成连贯文本的场景。

  • 问答模型:通常被设计用于处理特定问题并返回精确答案,特别是在需要从长文本中提取信息的情况下。

4. 问答形式的多样性

  • 在实际应用中,GPT确实可以用作问答系统,但其回答的方式更倾向于生成新内容,而不是仅仅提取现有内容。这种灵活性使得GPT不仅可以回答问题,还可以进行更广泛的对话、讨论和创作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值