LLaMA-2论文阅读

这篇具有很好参考价值的文章主要介绍了LLaMA-2论文阅读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 基本介绍

LLaMA-2是2023年7月24日Meta发布的LLaMA第二代,跟LLaMA-1几个显著区别:

  • 免费可商用版本的大模型
  • context上下文增加了一倍,从2K变为了4K
  • 训练的总token数从1.0T/1.4T增加为2.0T( 2 × 1 0 12 2 \times 10^{12} 2×1012), 在1.4T基础上增加40%
  • 对于最大的模型参数量65B也增加到了70B( 70 × 1 0 9 70 \times 10^{9} 70×109),并在34B和70B两个版本上使用了 G r o u p − Q u e r y − A t t e n t i o n ( G Q A ) Group-Query-Attention(GQA) GroupQueryAttention(GQA) 的方法
    LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

训练耗时如下:

Model A100-80G GPU Hours Tokens( T o k e n s P e r D a y P e r M a c h i n e TokensPerDayPerMachine TokensPerDayPerMachine)
LLaMA2-7B 184320 2 / ( 184320 / 24 ) ∗ 8 ∗ 1000 = 2.08333 B 2/(184320/24)*8*1000=2.08333B 2/(184320/24)81000=2.08333B
LLaMA2-13B 368640 2 / ( 368640 / 24 ) ∗ 8 ∗ 1000 = 1.04167 B 2/(368640/24)*8*1000=1.04167B 2/(368640/24)81000=1.04167B
LLaMA2-34B 1038336 2 / ( 1038336 / 24 ) ∗ 8 ∗ 1000 = 0.36982 B 2/(1038336/24)*8*1000=0.36982B 2/(1038336/24)81000=0.36982B
LLaMA2-70B 1720320 2 / ( 1720320 / 24 ) ∗ 8 ∗ 1000 = 0.22321 B 2/(1720320/24)*8*1000=0.22321B 2/(1720320/24)81000=0.22321B

效果上在多个Benchmark上得到了提升:
LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

LLaMA2整体的训练如下图所示,先通过自回归有监督的训练得到pretrain的llama2模型,然后能过有监督的fine-tuning、人类反馈的强化学习RLHF、Ghost Attention(GAtt)一起实现finetuning后的LLaMA-2-chat模型,RLHF中采用了拒绝采样和近似策略优化算法(PPO)。
LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

2. Pretraining

  • LLaMA-2采用的模型结构跟LLaMA-1相同,使用了RMSNorm、SwiGLU、RoPE,在LLaMA-1的基础上Context长度增加了一倍变为4k,同时使用了grouped-query attention( G Q A GQA GQA)。
  • LLaMA-2采用AdamW的优化器, β 1 = 0.9 , β 2 = 0.95 , e p s = 1 0 − 5 \beta_1=0.9, \beta_2=0.95, eps=10^{-5} β1=0.9,β2=0.95,eps=105;使用了cosine学习率调度,前2000轮进行warpup,后续学习率每次衰减10%;weight decay设为0.1, grad_clip设为1.0
  • Tokenizer使用SentencePiece中的bytepair encoding (BPE)算法,总词表大小为32K个token
  • 训练loss如下:
    LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

3. Fine-tuning方法

3.1 Supervised Fine-Tuning (SFT)

使用Scaling Instruction-Finetuned Language Models中的开源数据集进行指令微调。在指令微调过程中,数量有限的高质量数据集可以有效提升模型整体的效果。有监督finetuning中使用cosine的学习率策略,初始学习率为 2 × 1 0 − 5 2 \times 10^{-5} 2×105,weight_decay为0.1, batch_size为64,sequence长度为4096。

LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

3.2 Reinforcement Learning from Human Feedback (RLHF)

在RLHF中会让人来给不同模型的结果进行打分,然后根据人的反馈训练一个奖励模型(reward model),后续可以根据奖励模型自动进行打分。

3.2.1 人类偏好数据准备

第一个阶段是收集有人类偏好的数据用于强化学习,收集过程是先定义一个prompt,然后从两个超参等配置不同的模型进行推理,人类对结果进行评价,分为significantly better/better/slightly better/negligibly better(unsure)四个标签。这里的结果偏好于安全的有帮助的答案,比如prompt是给出制作炸弹的步骤,尽管模型给出制作步骤是有帮助的,但这不符合安全的要求。数据按周级别进行收集和训练。如下示例第一个是没有帮助的答案,第二个是安全的答案。
LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

Meta收集的训练数据集和开源数据对比如下,在Meta的数据集中Example的token数长度显著增长。
LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

3.2.2 反馈模型

第二个阶段是反馈模型的训练,反馈模型输入是一个模型的推理结果和相关的prompt(包括前一轮对话的上下文信息),输出是预测一个分数来给结果打分,使得llama2-chat更符合人类的喜好(安全、有效)。反馈模型的初始化也是基于预训练的语言模型的checkpoint,模型结构和超参不变,区别在于从预测下一个token的分类输出改为产出分数的回归输出。

训练的目标采用了binary ranking loss,定义如下:

L _ r a n k i n g = − l o g ( σ ( r θ ( x , y c ) − r θ ( x , y r ) ) ) \begin{gather*} \mathcal{L}\_{ranking}=-log(\sigma(r_{\theta}(x, y_c) - r_{\theta}(x, y_r))) \end{gather*} L_ranking=log(σ(rθ(x,yc)rθ(x,yr)))

这里的 r θ ( x , y ) r_{\theta}(x, y) rθ(x,y)表示prompt x x x和输出 y y y的结果评分,对于 y c y_c yc是符合人类偏好的输出, y r y_r yr是被拒绝的输出。考虑到输出还分了几个等级,llama2-chat在这个基础上增加了一个margin额外的部分, m ( r ) m(r) m(r)表示打分的一个离散函数,对应关系如下。

LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

最终Loss变为如下:

L _ r a n k i n g = − l o g ( σ ( r θ ( x , y c ) − r θ ( x , y r ) − m ( r ) ) ) \begin{gather*} \mathcal{L}\_{ranking}=-log(\sigma(r_{\theta}(x, y_c) - r_{\theta}(x, y_r) - m(r))) \end{gather*} L_ranking=log(σ(rθ(x,yc)rθ(x,yr)m(r)))

反馈模型的训练的最大学习率在llama2-chat-70B模型中采用 5 × 1 0 − 6 5 \times 10^{-6} 5×106,其余采用 1 × 1 0 − 5 1 \times 10^{-5} 1×105。学习率调度采用了consine方法,最低衰减到最大学习率的10%。训练中warm-up阶段使用%3的total_steps,最低个数为5个steps。batch_size设置为512个pair问答对,对应一个batch有1024行。

对比的训练结果如下:
LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

3.2.3 RLHF fine-tuning迭代训练
  • 在RLHF的fine-tuning中采用了两个主要增强学习算法:
  1. Proximal Policy Optimization (PPO):近端策略优化算法是RLHF中的标准算法,最早是OpenAI在2017年提出的。
  2. Rejection Sampling fine-tuning:从模型中产出 K K K个output输出候选,同时基于reward模型选择最好的候选,使用选出来的候选进行梯度的更新。对于每个prompt选出的最高分的新的候选被当做新的基线标准(gold standard), 然后继续进行我们模型的finetune和增强。

两个算法的区别在于:

  1. 广度:在拒绝采样中产生了K个样本输出,但在PPO中只有一个样本
  2. 深度:PPO中训练的第t步的采样方法是从上一步t-1步经过梯度更新得到的;在拒绝采样中在finetuning之前是基于给定初始的策略后对所有的输出进行采样,类似SFT。
  • 在RLHF (V4)之前只使用了拒绝采样,在V4以后的版本按顺序使用两种策略,在拒绝采样以后再使用PPO算法。只在最大70B的llama-chat模型中采用了拒绝采样方法,其余小的模型都是从70B蒸馏出来的。RLHF V3训练中采用了RLHF V1和V2的采样的样本。对于拒绝采样的收益可以参考下图中黄色阴影部分:
    LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

  • PPO阶段重复从数据集 D \mathcal{D} D 中采样 p p p 个prompt,然后从policy π \pi π 中产出 g g g 个,使用PPO算法和损失函数实现目标函数。最终优化的reward函数如下:

R ( g ∣ p ) = R ~ c ( g ∣ p ) − β D K L ( π θ ( g ∣ p ) ∣ ∣ π 0 ( g ∣ p ) ) \begin{gather} R(g|p) = \widetilde{R}_c(g|p) - \beta D_{KL}(\pi_{\theta}(g|p) || \pi_0(g|p)) \end{gather} R(gp)=R c(gp)βDKL(πθ(gp)∣∣π0(gp))

优化使用AdamW优化器, β 1 = 0.9 , β 2 = 0.95 , e p s = 1 0 − 5 \beta_1=0.9, \beta_2=0.95, eps=10^{-5} β1=0.9,β2=0.95,eps=105, 权重衰减采用0.1, 梯度裁剪采用1.0, 学习率采用 1 0 − 6 10^{-6} 106,PPO迭代采用512的batch大小,clip_threashold为0.2,mini-batch为64。对于7B和13B的模型采用KL惩罚为 β = 0.01 \beta=0.01 β=0.01,对于34B和70B的KL惩罚为 β = 0.005 \beta=0.005 β=0.005。每次训练200-400个迭代,对于70B的单次迭代为330秒,使用FSDP训练, 在推理时就算采用了大batch和KV缓存,训练速度还是会变慢 ( ≈ 20 × ) (\approx 20 \times) (20×),所以推理时对参数在每个结点进行缓存,推理后再释放。

3.3 多轮对话的系统消息设置

在多轮对话中有些指令在每个对话中都有,比如 act as这种角色设置的字样。每当对话开始时给llama2-chat设置系统消息(instruction),希望后续每次结果中都受到最早的设置指令的限制。但在最早的RLHF模型中在经过几个对话轮数后总会失效,如下图,开始设置总使用emoji符号来进行回答,但多轮后失效了,对于这个问题通过Ghost Attention (GAtt)来解决。

LLaMA-2论文阅读,训练框架,大模型,llama,论文阅读,机器学习,人工智能,transformer

GAtt方法的思路通过hack用的fine-tuning数据帮助attention专助于多阶段对话。假设有一个多轮对话的mesage列表为 [ u 1 , a 1 , . . . , u n , a n ] [u_1, a_1, ..., u_n, a_n] [u1,a1,...,un,an] u n a n u_n a_n unan 分别是用户和助手在第n轮的对话消息。GAtt方法基本流程如下:

  1. 定义一个贯穿整个对话的指令inst,比如act as。把这个指令拼接到对话中的所有用户的对话消息中;
  2. 从生成数据中使用RLHF模型进行采样,用采样的数据可以进行finetuning。跟拒绝采样不同的是,只在第一轮对话中使用ins,并把其余轮的对话的损失都设为0.
  3. 构建最终的训练inst时,使用[Context Distillation]的方法把原始的指令减短,例如从Always act as Napoleon from now变为Figure: Napoleon

4. 模型安全

模型安全的部分参考原论文,不再赘述。文章来源地址https://www.toymoban.com/news/detail-649783.html

5. 参考

  • LLaMA-2论文阅读
  • Llama 2: Open Foundation and Fine-Tuned Chat Models
  • Llama 2: Open Foundation and Fine-Tuned Chat Models
  • facebookresearch/llama
  • Scaling Instruction-Finetuned Language Models

到了这里,关于LLaMA-2论文阅读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LLaMA论文阅读

    LLaMA 训练了从7B到65B不同参数量的模型,从Hoffmann的论文【Training compute-optimal large languag】中证明了在有限计算代价的情况下(给定总的FLOPs大小),表现最好的不是参数量最大的模型,而是在更多数据上训练的稍小的模型。 LLaMA实现了两个目标: LLaMA-13B跟GPT-3相比, 参数量小了

    2024年02月12日
    浏览(23)
  • 论文阅读_LLaMA

    number headings: auto, first-level 2, max 4, _.1.1 name_en: LLaMA: Open and Efficient Foundation Language Models name_ch: LLaMA: 开放高效的基础语言模型 paper_addr: https://arxiv.org/abs/2302.13971 doi: https://doi.org/10.48550/arXiv.2302.13971 date_read: 2023-03-25 date_publish: 2023-02-27 tags: [‘深度学习’,‘自然语言处理’] author

    2024年02月13日
    浏览(27)
  • LLaMA-2论文阅读

    LLaMA-2是2023年7月24日Meta发布的LLaMA第二代,跟LLaMA-1几个显著区别: 免费可商用版本的大模型 context上下文增加了一倍,从2K变为了4K 训练的总token数从1.0T/1.4T增加为2.0T( 2 × 1 0 12 2 times 10^{12} 2 × 1 0 12 ), 在1.4T基础上增加40% 对于最大的模型参数量65B也增加到了70B( 70 × 1 0 9 70 tim

    2024年02月13日
    浏览(23)
  • MedicalGPT:基于LLaMA-13B的中英医疗问答模型(LoRA)、实现包括二次预训练、有监督微调、奖励建模、强化学习训练[LLM:含Ziya-LLaMA]。

    项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域) :汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自

    2024年02月20日
    浏览(40)
  • Llama模型结构解析(源码阅读)

    参考资料: https://zhuanlan.zhihu.com/p/636784644 https://spaces.ac.cn/archives/8265 ——《Transformer升级之路:2、博采众长的旋转式位置编码》 前言 :本次阅读代码位置,在transformers库底下的modeling_llama.py,具体位置在:transformers/models/llama/modeling_llama.py,如下图所示: 代码如下 RMSNorm的公

    2024年02月10日
    浏览(23)
  • Llama中文大模型-模型预训练

    Atom系列模型包含Atom-7B和Atom-13B,基于Llama2做了中文能力的持续优化。Atom-7B和Atom-7B-Chat目前已完全开源,支持商用,可在Hugging Face仓库获取模型: https://huggingface.co/FlagAlpha 大规模的中文数据预训练 原子大模型Atom在Llama2的基础上,采用大规模的中文数据进行持续预训练,包含百

    2024年04月28日
    浏览(45)
  • Llama 2 论文《Llama 2: Open Foundation and Fine-Tuned Chat Models》阅读笔记

    继2023年2月开源Llama之后,2023年7月Meta又开源了模型参数从70 亿到 700 亿不等的Llama 2,并同时开源了针对对话场景优化的LLaMA2-CHAT。LLama2 论文描述了微调和提高LLM安全性的方法以及在模型开发过程中的一些的观察。 论文摘要翻译:在这项工作中,我们开发并开源了 Llama 2,这是

    2024年02月09日
    浏览(41)
  • [大模型] 搭建llama主流大模型训练环境

    :大模型,LLAMA,CUDA,模型训练 OS: Ubuntu 18.04 GPU: 4*A100(40G) (单机4卡A100 40G) CUDA: 11.7 cuDNN: 8.4.1 (需要登录官网后下载) nccl: 2.12.12 (需要登录官网后下载) python: 3.10 ( conda create -n vllm python=3.10 ) pytorch: 2.0.0+cu117 离线安装包地址 LLaMA-7B/13B/30B/65B模型: 下载地址,需要

    2024年02月09日
    浏览(31)
  • 基于llama模型进行增量预训练

    目录 1、llama模型转换(pytorch格式转换为HuggingFace格式) 1.1、拉取Chinese-LLaMA-Alpaca项目 1.2、准备文件夹 1.3、下载llama官方原始模型 1.4、移动文件到指定位置 1.5、执行转换脚本 2、合并模型 2.1、下载Chinese-LLaMA-Plus-7B模型 2.2、下载chinese_alpaca_plus_lora_7b模型 2.3、执行合并脚本 3、准备

    2024年02月10日
    浏览(31)
  • 非工程师指南: 训练 LLaMA 2 聊天机器人

    本教程将向你展示在不编写一行代码的情况下,如何构建自己的开源 ChatGPT,这样人人都能构建自己的聊天模型。我们将以 LLaMA 2 基础模型为例,在开源指令数据集上针对聊天场景对其进行微调,并将微调后的模型部署到一个可分享的聊天应用中。全程只需点击鼠标,即可轻

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包