论文阅读_大语言模型_Llama2

2023-11-08

英文名称: Llama 2: Open Foundation and Fine-Tuned Chat Models
中文名称: Llama 2:开源的基础模型和微调的聊天模型
文章: http://arxiv.org/abs/2307.09288
代码: https://github.com/facebookresearch/llama
作者: Hugo Touvron
日期: 2023-07-19
引用次数: 110

1 读后感

这是一篇77页的论文,正文也有36页,让人望而却步。整体分成:Introduction,Pretraining,Fine-tune,Safety,Discussion,RelateWork, Conclusion几部分,如果没有时间,看看前三个部分,大概20页左右也就差不多了。

产出的模型从7B到70B参数,其成果除了基本的 LLAMA-2 模型,还有精调的 LLAMA 2-CHAT 模型,其精调模型与 ChatGPT (3.5) 性能相当,可作为闭源模型的替代品,且 70B 的体量也是可接受的。

在基础模型方面,文章中没有涉及很新的算法,主要偏重工程化,通过实验,产生一些经验性的结论,比如什么情况下会 over-fitting,对于 SFT 和 RLHF 标注应该如何分配资源,如何设置模型超参数,用蒸馏方法利用大模型训练小模型等等。

之前开源模型对 RLHF 的具体方法讨论不多,而本文算法调整主要在强化学习部分,比如在RLHF中如何训练奖利模型以更好地利用偏好标注;选择PPO和Rejection Sampling作为强化学习的策略优化网络参数。如果你对 RLHF 具体实现感兴趣,比较推荐看看这篇文章。

2 介绍

之前的开源模型效果往往与GPT-3相当,而像ChatGPT、BARD 和 Claude 这些封闭的大在模型经过 RLHF 精调,更符合人类偏好。精调往往需要巨大的算力和人工标注成本,且常是不透明且不易复制的,这限制了社区推进人工智能对齐的进展,文章致力于改进此问题。

文章产出包括:

  • Llama 2 :Llama 1 的更新版本,使用新的公开数据组合进行训练。还将预训练语料库的大小增加了 40%,将模型的上下文长度加倍,并采用分组查询注意力机制。最终发布具有 7B、13B 和 70B 参数的 Llama 2 基础模型。
  • Llama 2-Chat:Llama 2 的微调版本,针对对话用例进行了优化。也发布了具有 7B、13B 和 70B 参数的模型。

3 预训练

预测训练使用了 从 Touvron(2023 原 Llama论文)中描述的预训练方法。使用优化的自回归Transformer,又使用了:更稳健的数据清理,更新了数据混合,增加了 40% Token 进行了训练,将上下文长度加倍,并使用分组查询注意力 (GQA) 来提高大模型的推理可扩展性。表-1 比较了新 Llama 2 与 Llama 1。
[图片上传失败...(image-8c1ec7-1695215062279)]

从图-2中可以看到,纵轴是 Loss,当训练数据增加到2T时,模型仍在优化:

在这里插入图片描述
模型使用 A-100 80G 集群训练,表-2展示了模型使用的算力和碳排:

在这里插入图片描述
由于模型最终被发布,后续模型可以基于该模型调优,从这个角度看,开放的模型也可以算是减少了大模型的全球碳排。

在评测方面,文章对比了主流的开源模型和闭源模型,主要在:编码,常识推理,世界知识,阅读理解,数学,聚合评测(如:MMLU,BBH,AGI Eval)方面进行了评测:

在这里插入图片描述
在这里插入图片描述

可以看到,Llama-2 各项结果明显优于当前的开源模型,和闭源模型相比有差异。请注意:这是预训练的版本,后面还会继续比较 fine-tune 之后的结果。

4 精调

Llama 2-Chat 主要使用了对齐技术(包括 SFT 和 RLHF)需要大量的计算和标注资源。另外,还使用了 Ghost Attention (GAtt) 注意力机制来优化多轮对话。

4.1 SFT 有监督微调

SFT supervised fine-tuning 有监督微调,也叫作 instruction tuning 指令微调。一对标注数据一般包含一个提示和一个答案,训练时只对答案部分进行反向传播调优网络。一开始使用了公开的指令调优数据;在实验过程中发现,高质量的标注数据可有效提升模型效果,不需要太多标注,只需要上万条高质量数据即可达到很好效果,最终使用 27,540 个标注数据。从而把更多精力用于 RLHF 标注。

4.2 RLHF 人类反馈的强化学习

人类反馈的强化学习 RLHF(Reinforcement Learning with Human Feedback)用于对齐模型行为和人类偏好,简单地说,就是让标注者选择他们喜欢的两个模型输出中的哪一个。随后用标注数据训练奖励模型,该模型用于后续对偏好进行预测。

4.2.1 人类偏好的数据收集

标注过程如下:首先要求注释者编写提示,然后根据要求在两个模型的返回结果之间进行选择。除了选择哪个更好,还要求他们标记对更喜欢答案的喜爱程度:明显更好,更好,稍微更好,或者可以忽略/不确定。

标注关注答案”有用性“和”安全性“,在安全方面,比如:用户提问“怎么做炸弹”返回的答案就可能是不安全的。安全性标注包括三个选项:优选答案安全另一个不安全;答案都不安全;答案都安全。这里认为人们会优选更安全的答案。

表-6 展示了标注的数据和其它开源数据集的比较结果。可以看到:摘要和在线论坛数据的提示通常较长,而对话式的提示通常较短。与现有的开源数据集相比,文中收集的偏好数据具有更多的对话轮次,并且平均时间更长。

在这里插入图片描述

4.2.2 奖励模型

奖励模型的输入是:提示、模型响应(包括之前的上下文),输出是标量分数以指示模型生成的质量(有用性和安全性)。利用模型响应分数作为奖励,在后续的 RLHF 期间优化 Llama 2-Chat。

为了解决有用性和安全性有时相互抵消的问题,实验训练了两个单独的奖励模型,一个针对有用性进行优化,另一种针对安全性进行优化。另外,使用预训练的聊天模型初始化奖励模型,使模型都受益于预训练中获得的知识;模型架构和超参数与预训练语言模型相同,只是将下一个标记预测的分类头替换为用于输出标量奖励的回归头。

最终训练模型时使用了开源标注数据和新的标注数据。
在这里插入图片描述
从图-6中可以看到,在逐步收集数据过程中模型性能的变化:更多的数据和更大的模型会提高准确性,如果有更多数据,模型性能还可能进一步提升。后续实验也证明,在其他条件相同的情况下,奖励模型的改进可以直接转化为 Llama 2-Chat 的改进。

4.2.3 迭代微调

随着得到更多批次的偏好数据标注,通过训练更好的奖励模型并收集更多提示。从逐步训练迭代模型:从 RLHF-V1 … 到 RLHF-V5。这里使用了两种算法:近端策略优化 PPO 和 拒绝采样微调 Rejection Sampling fine-tuning。

在 RLHF (V4) 之前,仅使用拒绝采样微调,之后,将两者结合起来,在再次采样之前在生成的拒绝采样检查点之上应用 PPO。从而在探索和当前最优策略之间取得平衡。
图-8展示了温度的影响:更高的温度将对更多样化的输出进行采样,最佳温度是 T ∈ [1.2, 1.3]。
在这里插入图片描述

拒绝采样微调
从模型中采样 K 个输出,并根据奖励选择最佳候选者,然后使用选定的输出进行梯度更新。对于每个提示,奖励分数最高的样本被认为是新的金标准。

PPO 近端策略优化
PPO的优化目标是:最终通过训练模型得到策略 π,以最大化奖励 R。

arg ⁡ max ⁡ π E p ∼ D , g ∼ π [ R ( g ∣ p ) ] \arg \max _{\pi} \mathbb{E}_{p \sim \mathcal{D}, g \sim \pi}[R(g \mid p)] argπmaxEpD,gπ[R(gp)]

其中 R 是 奖励,D 是数据集,p是prompt,通过策略 π 产生 g。

最终的奖励,还考虑了当前策略与初始策略的差异作为惩罚项(使用KL散度计算),以避免过大的调整,保证了训练的稳定性。

R ( g ∣ p ) = R ~ c ( g ∣ p ) − β D K L ( π θ ( g ∣ p ) ∥ π 0 ( g ∣ p ) ) R(g \mid p)=\tilde{R}_{c}(g \mid p)-\beta D_{K L}\left(\pi_{\theta}(g \mid p) \| \pi_{0}(g \mid p)\right) R(gp)=R~c(gp)βDKL(πθ(gp)π0(gp))

另外,这里的奖励函数 Rc 综合了可用性和安全性。

4.3 多轮一致性

文中提出了 Ghost Attention (GAtt),这种微调使数据更关注多轮对话,而不会快速忘记早期的内容。请注意:这里的 Attention 不是对模型 Transformer 结构中注意力的优化。该方法让模型更注重第一轮对话,比如:请扮演XXX,用法语回答。其效果如下,右侧使用了 Gattr,可以看到,它更容易接受初始设置的”用表情回答“。
在这里插入图片描述

4.4 RLHF 结果

在这里插入图片描述

图-11 展示了 Llama 2-Chat 与 ChatGPT 相比的获胜率百分比,多次迭代微调后的演变结果。左侧图的判断标准是文中的奖励模型,可能对文中的模型有利,右侧的判断标准是GPT-4,更为中立。RLHF-V3 后文中模型在两个轴上都优于 ChatGPT(无害性和有用性 >50%)。

[图片上传失败...(image-ae0aa9-1695215349343)]

图-12展示了 Llama-2 各个版本与其它模型在人工评测方面的对比结果,从最右图可以看到,Llama-2 70B-chat 与 ChatGPT gpt-3.5-turbo-0301 效果相当,或者说已经超过了 ChatGPT 3.5。(图中的 tie 指平局率)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文阅读_大语言模型_Llama2 的相关文章

随机推荐

  • ubuntu18.04安装显卡驱动 + CUDA + cuDNN+Tensorflow+pytorch

    GeForce MX150 Python3 6 cuda 9 0 cudnn 7 tensorflow 1 12 0 按多个教程安装前后也出了很多问题 最终才安装成功 以防万一 现将过程记录如下 1 安装显卡驱动 注意 两种方法 方法一为我
  • vue 设置提示 @ 路径 和 ~@ 路径

    菜鸟最近用公司的电脑开发 结果发现之前有的路径提示全没了 感觉非常难受 然后去插件一看才发现 好像是菜鸟自己不小心把这个插件给删了 有点难受 但是安装了这插件还是有点不好用 就是感觉每次使用了 vue 的 或者 开头的路径时 总是没有提示
  • React:‘XXX’ is defined but nerver used的解决方法

    原因 想引入Login组件 但是一直显示 组件被定义但从未使用 的字样 但是我明明就有引用吖 解决方法 原来是组件的文件名首字母需要大写 因为要做项目 但是React的基础课程还没学完 只好以这种半桶水的知识与头脑去做项目 难免会遇到很多困
  • 关于车载以太网理解

    目录 1 车载以太网概述 2 物理层 PHY 2 1 总体说明 2 2 物理层架构 2 3 物理层控制器的架构 2 4 物理层编码原理 3 链路层 MAC 3 1 MAC控制器架构 3 2 MAC地址 3 3 数据传输 3 4 MAC帧格式
  • 【拜小白的机器学习】5-机器学习的评估度量标准(评估)

    在上一节中我们主要讲到机器学习的评估方法 其中重点是讲解了三种对数据集的划分方式 包括留出法 hold out 交叉验证法 k fold cross validation 自助法 bootstrap 本节来看看机器学习的评估度量标准 其中我
  • Spring之功能使用

    文章目录 注入bean 配置文件 set方式 构造方法注入 根据参数类型注入 根据构造函数的顺序 类型和顺序混合使用 使用name来注入 工厂模式注入 少用 注入不同的类型 字面量 引用其他bean 内部bean 设置null 联级设置属性
  • html+css+js实现星空特效

    html css js实现星空特效 本文已同步到凯文的博客https kevindurant source github io 废话不多说直接上代码 效果是一个星空旋转和文字逐渐出现的效果 文字是逐渐出现的 星空中的小球是旋转的 效果视频博
  • 词法分析器简介

    词法分析器简介 引言 编译器的工作的开始 就是读入源码 预编译先不考虑 然后 去除一些空字符 然后经过词素匹配 并和其属性 可选 组成一个的词法单元 多个词法单元 连接成词法单元序列 自此 此法分析器的工作就算完成了 呵呵 就这么简单 可见
  • sourcetree创建分支与分支合并

    一 Sourcetree简单介绍 通过Git可以进行对项目的版本管理 但是如果直接使用Git的软件会比较麻烦 因为是通过一条一条命令进行操作的 Sourcetree则可以与Git结合 提供图形界面 使用会方便很多 Git和Sourcetre
  • Flowable BPMN 用户手册 (v 6.3.0)

    小编本来想学习 activity但是被同事强烈推荐学习Flowable 百度了一下发现Flowable是activity的一个升级 第一步找学习资料 找到一个分享给大家 https tkjohn github io flowable use
  • linux的核心安装下的命令行,linux lilo命令安装核心载入,开机管理程序

    lilo linux loader 安装核心载入 开机管理程序 语 法 lilo clqtV b C d D f i I m P r R s S uU v 补充说明 lilo 是个 Linux 系统核心载入程序 同时具备管理开机的功能 单独
  • 合理使用 inline来优化程序 尽可能减少临时对象 尽可能使用初始化列表

    1 合理使用inline 调用 函数实际上将程序执行顺序转移到函数所存放在内存中某个地址 将函数的程序 内容执行完后 再返回到转去执行该函数前的地方 这种转移操作要求在转去前 要保护现场并记忆执行的地址 转回后先要恢复现场 并按原来保存地址
  • Would you like Visual Studio Code to periodically run “git fetch“?是什么意思?

    这句话的意思是 你是否想让Visual Studio Code定期运行 git fetch 命令 git fetch 是 Git 命令之一 用于从远程代码仓库获取最新的代码变动 但不会自动将这些变动合并到你当前所在的分支 该命令通常用于更新
  • Python os.path模块的使用

    Python os path模块的使用 Python的os模块是一个对接操作系统的模块 当我们需要对路径进行操作时 可以使用os path os path模块实现了很多处理长文件名 长路径名的函数 可以用来对路径切分 拼接 转换等 先导入o
  • Seata分布式事务失效踩坑记录

    在学习Seata过程中 偶然发现了一个坑 这里做个记录 环境说明 先说下我的环境 我是搭建了一个SpringCloud微服务 然后A服务调用B服务 然后在这两个服务都集成了Seata 集成过程是没有问题的 业务场景是注册场景 A服务中需要操
  • 01-java学习笔记【接口与抽象类】

    这些是我自己的理解加上网上优秀的分享总结出来的 抽象类是用来捕捉子类的通用特性的 它不能被实例化 只能被用作子类的超类 抽象类是被用来创建继承层级里子类的模板 接口是抽象方法的集合 如果一个类实现了某个接口 那么它就继承了这个接口的抽象方法
  • papers with code介绍(人工智能方向研究生的必备网站)

    paperswithcode介绍 人工智能方向的必备网站 本文将从两个部分介绍 一 正文 二 导航 A browse State of the Art B Datasets C Method D More 网站首页 一 正文 2 最上面是四
  • Python中RSA加密

    文章目录 RSA加密 一 概述 1 简介 2 签名 3 环境配置 二 算法实现 1 公钥和私钥 2 加密和解密 3 签名和解签 RSA加密 一 概述 1 简介 RSA是非对称的 也就是用来加密的密钥和用来解密的密钥不是同一个 和DES一样的
  • LCD背光控制芯片

    PWM信号可通过调整占空比来调节输出电压 可以使用PWM来控制LCD的背光 但CPU的pwm引脚驱动能力太弱 常外接一个背光芯片 rt9293就是这样的一个恒流升压转换器 Iled Vref Rset Vfb Duty 300mV Duty
  • 论文阅读_大语言模型_Llama2

    英文名称 Llama 2 Open Foundation and Fine Tuned Chat Models 中文名称 Llama 2 开源的基础模型和微调的聊天模型 文章 http arxiv org abs 2307 09288 代码