论文笔记:Llama 2: Open Foundation and Fine-Tuned Chat Models

news2024/11/17 23:48:42

导语

Llama 2 是之前广受欢迎的开源大型语言模型 LLaMA 的新版本,该模型已公开发布,可用于研究和商业用途。本文记录了阅读该论文的一些关键笔记。

  • 链接:https://arxiv.org/abs/2307.09288

1 引言

大型语言模型(LLMs)在多个领域表现出卓越的能力,尤其是在需要复杂推理和专业知识的任务中,例如编程和创意写作。LLMs通过直观的聊天界面与人类互动,导致了它们在公众中的快速普及。LLMs通常通过自回归式的Transformer在大量自监督数据上进行预训练,然后通过诸如人类反馈的强化学习(RLHF)等技术进行微调,使其更符合人类偏好。尽管训练方法相对简单,但高计算要求限制了LLMs的发展。已有公开发布的预训练LLMs在性能上可以与GPT-3和Chinchilla等闭源模型相媲美,但这些模型并不适合作为诸如ChatGPT、BARD、Claude这样的闭源“产品”LLMs的替代品。

本文开发并发布了Llama 2和Llama 2-Chat,以供研究和商业使用,这是一系列预训练和微调的LLMs,模型规模最大可达70亿参数。Llama 2-Chat在有用性和安全性方面的测试中普遍优于现有的开源模型,并且在人类评估中与一些闭源模型相当。本文还采取了提高模型安全性的措施,包括特定的数据注释和调整,红队测试,以及迭代评估。同时作者强调,虽然LLMs是一项新技术,可能带来潜在风险,但如果安全地进行,公开发布LLMs将对社会有益。作者提供了负责任使用指南和代码示例,以促进Llama 2和Llama 2-Chat的安全部署。

image.png

image.png

image.png

2 预训练

2.1 预训练数据

  • 数据来源:训练数据来自公开可用的源,排除了来自 Meta 产品或服务的数据。
  • 数据清洗:移除了已知包含大量个人信息的网站数据。
  • 训练token数:训练了2万亿(2T)token的数据,以获得良好的性能和成本平衡。

image.png

image.png

2.2 训练细节

  • 使用标准Transformer架构
  • 使用RMSNorm而不是原始的LayerNorm
  • 使用SwiGLU激活函数
  • 相对于LLaMA的2k上下文长度,LLaMA2增加到了4k上下文长度
  • 使用了Grouped-Query Attention (GQA),而不是之前的MQA、MHA
  • 使用了RoPE方式进行位置编码,使用旋转矩阵来编码位置信息,直接融合到自注意力的计算中

RMSNorm

原始的LayerNorm需要计算均值和方差,然后再进行归一化:

image.png

image.png

而RMSNorm(Root Mean Square Normalization)是LayerNorm的一种变体,其通过计算层中所有神经元输出的均方根(Root Mean Square)来归一化这些输出。这样可以减少不同层输出分布的差异,有助于加速训练并提高模型的稳定性。

image.png

SwiGLU

SwiGLU(Sigmoid-Weighted Linear Unit)是一种神经网络中的激活函数,它是 Gated Linear Unit (GLU) 的一种变体,由两部分组成:一个线性变换和一个 sigmoid 函数。输入先通过一个线性变换,然后用 sigmoid 函数的输出加权。

image.png

GQA

GQA则是介于Multi-query和Multi-head之间的一种中间形式,传统的Multi-head Self-attention中每个Head都有各自的Q,K,V;而Multi-Query Self-attention中,各个头之间共享一个K、V;而GQA则是介于两者之间,即对头进行分块,每块中的若干头使用同样的K,V。

image.png

2.3 Llama 2 预训练模型评估

本文对Llama 2 模型在一系列标准学术基准测试中的性能进行了报告。与其他模型相比,Llama 2 模型不仅超过了 Llama,还在多个分类基准上超过了其他开源模型和某些闭源模型。在长上下文(Long-context)数据集上效果比Llama提升显著。

image.png

image.png

image.png

3 微调

Llama 2-Chat 的开发涉及了多次迭代应用的对齐技术,包括指令调整和人类反馈的强化学习(RLHF)。这个过程需要大量的计算资源和注释工作。

3.1 监督式微调 (SFT)

  • 初始步骤:使用公开可用的指令微调数据作为 SFT 的起点。
  • 数据质量:重点放在收集高质量的 SFT 数据上,因为作者发现许多第三方数据质量和多样性不足。通过放弃第三方数据集中的数百万个示例,并使用基于供应商的标注工作中更少但质量更高的示例,结果显著提高。作者发现数万级别的 SFT 标注就足以达到高质量结果,本文收集了总共27,540个标注。
  • 训练细节:训练时,prompt和答案拼接在一起,使用特殊的 token 来分开这两个部分。采用自回归损失并设置prompt不参与反向传播(即Prompt部分不计算loss)。

image.png

3.2 强化学习与人类反馈 (RLHF)

3.2.1 人类偏好数据收集

在 Llama 2-Chat 模型的 RLHF 过程中,首先进行了人类偏好数据的收集,这些数据用于后续的奖励建模,收集了超过一百万个基于人类指定指南的二元比较的大型数据集,这些数据的特点是对话轮次更多,平均长度更长:

  • 二元比较:使用二元比较方法(即只需判断哪一个更好,不需要对各自进行打分)来收集偏好数据,主要是为了最大化收集的prompt的多样性。
  • 标注过程:注释者首先编写提示,然后在两个模型响应中选择一个,同时标记他们对所选响应的偏好程度(significantly better, better, slightly better, or negligibly better/ unsure)。
  • 注重有用性和安全性:在收集偏好数据时,重点放在模型响应的有用性和安全性上。
  • 安全标签收集:在安全阶段,额外收集安全标签,将响应分为三个类别:安全、双方均安全、双方均不安全。
  • 数据分布和奖励模型:每周收集偏好数据(即每次都使用本周最新的模型进行响应然后收集偏好数据)。因为没有充足的新偏好样本分布,会导致奖励模型效果退化。

image.png

3.2.2 奖励建模(Reward Modeling)

奖励模型将模型响应及其相应的提示(包括来自前一个回合的上下文)作为输入,并输出一个标量分数来指示模型生成的质量(例如,有用性和安全性)。利用这样的反应分数作为奖励,可以在RLHF期间优化Llama 2-Chat,以更好地调整人类的偏好,提高帮助和安全性。

之前的研究发现有用性和安全性存在一个Trade-off,为此本文训练了两个奖励模型分别单独考虑有用性和安全性。奖励模型和chat模型初始化于同样的预训练checkpoint,这样可以保证两个模型从同样的预训练中获得一样的知识。两个模型的结构和超参数都保持一致,只是替换了模型的分类头/回归头。

训练目标 采用二元排序损失(binary ranking loss):

image.png

由于本文采用了4个不同的偏好等级(significantly better, better, slightly better, or negligibly better/ unsure),所以作者对原始的loss进行了一些修改,引入 m ( r ) m(r) m(r)代表偏好等级的离散函数(discrete function)。

image.png

数据组合 Helpfulness奖励模型最终在所有Meta Helpfulness数据上进行训练,并结合从Meta Safety和开源数据集中统一采样的同等部分剩余数据。Meta Safety奖励模型在所有Meta Safety和Anthropic无害数据上进行训练,并以90/10的比例混合Meta Helpfulness和开源有用数据。作者发现,10%有用数据的设置特别有利于样本的准确性,其中选择和拒绝的回答都被认为是安全的。

image.png

训练细节 对训练数据进行了一个epoch的训练(防止过拟合)。使用与基础模型相同的优化器参数。70B 参数 Llama 2-Chat 的最大学习率为 5 × 10^−6,其他模型为 1 × 10^−5。学习率根据余弦学习率策略逐渐减小。

奖励模型的结果 Llama 2-Chat 的奖励模型在内部测试集上表现最佳,尤其是在有用性和安全性测试集上。Llama 2-Chat 的奖励模型在准确率上优于所有基线模型,包括 GPT-4。而且,GPT-4 在没有针对性训练的情况下也表现出色。由于有用性和安全性之间可能存在张力,因此优化两个分开的模型(有用性和安全性)更为有效。

image.png

Scaling趋势 研究了奖励模型在数据量和模型大小方面的扩展趋势,这些模型使用了每周收集的奖励模型数据量逐渐增加。图6显示了预期的结果,即更大的模型对于相似的数据量能获得更高的性能。更重要的是,考虑到用于训练的现有数据注释量,扩展性能尚未达到平台期,这表明随着更多注释的增加,还有改进的空间。注意到,奖励模型的准确性是 Llama 2-Chat 最终性能的最重要代理之一。虽然全面评估生成模型的最佳实践仍是一个开放的研究问题,但奖励的排名任务没有歧义。因此,在其他条件相同的情况下,奖励模型的改进可以直接转化为 Llama 2-Chat 的改进。

3.2.3 迭代式微调(Iterative Fine-Tuning)

随着更多批次的人类偏好数据注释的收集,作者训练了连续版本的 RLHF 模型,在此称为 RLHF-V1、…、RLHF-V5。使用两种主要算法对 RLHF 进行了微调:

  • 近端策略优化(Proximal Policy Optimization, PPO),这是 RLHF 文献中的标准算法。
  • 拒绝采样微调(Rejection Sampling fine-tuning)。对模型中的 K 个输出进行采样,然后用奖励模型选出最佳候选,这里作者将所选输出用于梯度更新。对于每个提示,获得最高奖励分数的样本被视为新的gold label。

这两种 RL 算法的主要区别在于:

  • 广度(Breadth)-- 在拒绝采样算法中,模型会针对给定的提示探索 K 个样本,而 PPO 算法只进行一次生成。
  • 深度(Depth) - 在PPO算法中,第 t 步的训练过程中,样本是上一步梯度更新后第 t - 1 步更新模型策略的函数。拒绝采样微调会对模型初始策略下的所有输出进行采样,以收集新的数据集,然后再应用类似于 SFT 的微调。

在 RLHF(V4)之前,只使用了拒绝采样微调,而在此之后,将这两种算法依次结合起来。

image.png

3.3 多轮一致性的系统消息 (System Message for Multi-Turn Consistency)

  • Ghost Attention (GAtt):提出了一种新技术 GAtt,帮助控制多轮对话中的对话流。
  • 方法:GAtt 通过在微调数据中修改以帮助注意力集中在多阶段的对话上。

image.png

image.png

3.4 RLHF 结果

  • 模型评估:使用基于模型的评估来选择每次迭代中表现最好的模型。
  • 人类评估:通过人类评估来评价模型在有用性和安全性方面的表现。

image.png

image.png

4-6 安全性、讨论、相关工作

7 结论

本研究引入了 Llama 2,这是一个新的预训练和微调模型系列,参数量级为 70 亿到 700 亿。这些模型已经证明了它们与现有开源聊天模型的竞争力,并且在检查的评估集上与一些专有模型相当,尽管它们仍然落后于 GPT-4 等其他模型。本文细致地阐述了实现模型所采用的方法和技术,并着重强调了它们与有用性和安全性原则的一致性。为了对社会做出更大的贡献并促进研究的步伐,作者尽责地开放了“Llama 2”和“Llama 2-Chat”的访问权限。作为对透明度和安全性持续承诺的一部分,作者计划在今后的工作中进一步改进 Llama 2-Chat。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1526090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python异常:Exception、BaseException接收异常,并打印异常信息msg

except IOEerror 只能接收到 IO 类型的错误,对于抛出的 NameError 类型的错误,在 Python 中所有的异常类都继承 Exception,所以我们可以使用它来接收所有的异常。 1.Exception接收异常 源码: open("test1.py",r) pr…

什么是React属性钻取(Prop Drilling)

一、介绍 在React开发过程中,状态管理是一个绕不开的话题。无论是新手还是有经验的开发者,都会面临如何有效管理组件状态的挑战。React为我们提供了多种状态管理方案,如直接的状态传递(俗称"属性钻取")、Co…

【Android】工厂测试中 局部 字体显示重叠 问题分析与解决(Android14)

继上一篇【Android】工厂模式中 字体大小/显示重叠/显示不完整 相关 问题分析与解决 的分析与解决,可以实现调整所有字符整体的宽高。 但在局部,如果只希望修改局部的某一行字符的样式,且这一行字符没有直接的资源布局控制文件,而…

YOLOv8独家改进:block改进 | RepViTBlock和C2f进行结合实现二次创新 | CVPR2024清华RepViT

💡💡💡本文独家改进:CVPR2024 清华提出RepViT:轻量级新主干!从ViT角度重新审视移动CNN,RepViTBlock和C2f进行结合实现二次创新 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡…

modbus客户端

通信方式支持 串口 / udp / tcp通信; 设备协议支持RTU / ASCII / TCP; 读取类型支持bool / short / int / float / double / long / batchbool / batchword

sdwan上外网合法吗?sdwan访问外网的实现方式

随着企业网络的不断发展,越来越多的企业开始探索使用SD-WAN(软件定义广域网)技术来提升网络性能和灵活性。然而,一些人对于SD-WAN是否可以实现与外部网络的连接和访问产生疑问。 SD-WAN是一种基于虚拟化和软件定义的网络技术&…

JavaScript进阶:js的一些学习笔记-原型

文章目录 js面向对象1. 原型2. constructor属性3. 对象原型4. 原型继承5. 原型链 js面向对象 构造函数 属性和方法 function Person(name,age){this.name name;this.age age;this.play ()>{console.log(玩!);} } const a new Person(1,12),b new Person(2…

使用数字人SadTalker创建免费AI主播

很有趣的GitHub项目SadTalker,它能够将一张图片跟一段音频合成一段视频,看起来毫无违和感,如果不仔细看,甚至很难辨别真假,预计未来某一天,一大波网红即将失业。 虽然这个项目目前的主要研究方向还是基于c…

HarmonyOS NEXT应用开发—图片压缩方案

介绍 图片压缩在应用开发中是一个非常常见的需求,特别是在处理用户上传图片时,需要上传指定大小以内的图片。目前图片压缩支持jpeg、webp、png格式。本例中以jpeg图片为例介绍如何通过packing和scale实现图片压缩到目标大小以内。 效果图预览 使用说明…

Vulnhub靶机:Kioptrix_Level1.3

一、介绍 运行环境:Virtualbox 攻击机:kali(192.168.56.101) 靶机:Kioptrix_Level1.3(192.168.56.109) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vul…

大规模采集主流电商平台商品详情页获取商品详情,SKU,价格操作流程

taobao API 接入 参数说明 通用参数说明 参数不要乱传,否则不管成功失败都会扣费url说明 n/平台/API类型/ 平台:淘宝,京东等, API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_ke…

【周赛】第385场周赛

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 【1】100212.统计前后缀下标对 100212. 统计前后缀下标对 Ihttps://leetcode.cn/problems/count-prefix-and-suffix-pairs-i/ 熟…

【解读】Gartner 2023 DevOps平台魔法四象限

2023年6月5日Gartner发布了DevOps平台魔法四象限洞察报告(Magic Quadrant for DevOps Platforms DevOps),Gartner指出,DevOps平台正在成为DevOps工具链的一种更简单的替代品,为组织提供一套整合的集成能力。软件工程领…

力扣Lc17--- 345.反转字符串中的元音字母(java版)-2024年3月18日

1.题目 2.知识点 注1: indexOf() 是 Java 中 String 类的方法之一,它用于查找指定字符或字符串在字符串中第一次出现的位置。如果找到了该字符或字符串,则返回它在字符串中的索引位置(从0开始),如果没有找…

【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】

【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx 解决方式自我尝试记录】 1、前言2、实验环境3、问题说明4、我的努力与查到解决的方式(1)补充两个文件,让软件正常执行(2)尝试修复d…

Elasticsearch8.x版本Java客户端Elasticsearch Java API 如何并发修改

前言 并发控制,一般有两种方案,悲观锁和乐观锁,其中悲观锁是默认每次更新操作肯定会冲突,所以每次操作都要先获取锁,操作完毕再释放锁,适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突&#…

51单片机学习笔记6 数码管显示

51单片机学习笔记5 数码管显示 一、动态数码管1. 动态数码管工作原理2. 工作过程3. 原理图(1)数码管及74HC245(2)74HC138译码器 4. 74HC245介绍(1)**功能**(2)**引脚**(3…

文件操作和异常处理1-读写文件

Python 之 lambda 函数完整详解 & 巧妙运用: https://blog.csdn.net/PY0312/article/details/88956795

jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合

jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合 文章目录 jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合 Sentinel概述基本介绍 Sentinel安装下载地址: http…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…