上周,Meta 发布了免费可商用的开源大模型 Llama 2,来自 Huggingface 的机器学习科学家 Nathan Lambert 根据论文内容迅速写了一篇分析文章来梳理 Llama 2 的技术要点,现在他又写了一篇后续文章来补充内容,以下是文章原文。
有用 VS 无害
有人发现,Llama-2-chat 在安全过滤器方面表现出一些过于敏感的行为。即使是询问一些无害的事情,比如「如何制作辣椒蛋黄酱」或「如何终止一个进程」,结果会导致该模型疯狂地表示它无法做到,如下图所示:
对于这种现象,一种常见的理论解释是使用 RLHF(Reinforcement Learning from Human Feedback)方法太久导致的,这也揭示了大型语言模型领域的趋势。在 RLHF 中,训练期间使用的主要性能指标是偏好模型(preference model)中奖励的单调增加。这就存在两个问题:a)训练时使用的奖励模型是不完整的。b)忽视了对中间训练技巧的有效评估。
只要我们训练的奖励模型在验证集上只能达到 65-75% 的准确率,模型就会因为过长时间的 RLHF 而出现这种情况。当模型对于奖励模型采取过多优化步骤时,它会过于偏向该奖励模型喜欢的行为,如果对模型进行更全面的评估可能会得出不同的结论。
目前还没有一个有效且全面的解决方案,但是本文作者的团队正在尝试在 RL 训练的每个 epoch 中使用 MT Bench 和其他自动的 NLP 评估方法。目前,至少在对话模型领域,LLM 的训练与用户期望非常不匹配。
Meta 的评估显示,对话模型可能有两个潜在的致命弱点:
1、该模型据会拒绝回答高达 27%的边缘问题,这与初创公司 Anthropic 的研究紧密相关。Anthropic 提出一种方案:首先开发出一个有用的语言模型,然后再让这个语言模型无害,因为同时进行这两项工作会导致模型出现「回避行为」。Meta 应该正在想办法解决这个问题。
这种「有用性 VS 无害性」之间的权衡是开源社区面临的根本问题。如下图(右)所示,模型在「边缘数据集」上拒绝回答的情况骤增。
2、奖励模型集成方法还有一个重要问题 —— 在有些情况下会出现高度分歧 —— 例如,有用性很强、安全性很低时应该怎么做,反之亦然,如下图所示:
显然,这种集成方法虽然是一个很棒的技术创新,但还需要进一步改进。
如今,在人工智能领域,「公开(public)」这个概念被极度滥用,网络上的信息和数据被视为公开的,但事实却并非如此。Meta 无法明确地说明他们是否涉嫌侵犯了版权或服务条款,但毫无疑问的是,Meta 在访问数据和文档方面还有很大的改进空间。
推理与微调
现在有很多方法可以让 7b 或 13b 的大模型在 GPU 上运行,并且将很快就可以在 iPhone 上运行。
但 70b 的更大模型要复杂一些。有研究表明 70b 的模型在加载 4 位量化的情况下会使用 36-38GB 的 VRAM。如果将量化增加到 8 位(float16),内存预计会相应地增加。而在任何单个 GPU 上使用完整的、非量化模型会非常困难。
在文本生成推理方面,HuggingFace 提供了如下 GPU 建议:
- 对于 7B 模型,建议选择 "GPU [medium] - 1x Nvidia A10G";
- 对于 13B 模型,建议选择 "GPU [xlarge] - 1x Nvidia A100";
- 对于 70B 模型,建议选择 "GPU [xxxlarge] - 8x Nvidia A100"。
HuggingFace 社区成员重新编写了 HuggingFace Transformers 的部分代码,使其对 Llama 模型更加节省内存、更快速,并支持使用 RoPE 方法扩展上下文长度。
具体来说,这种改进使 Llama 2 70B 模型在序列长度是 4096 时推理速度约为 10.5 tokens / 秒,并且没有出现内存溢出的情况。同时,序列长度为 8192 时,推理速度为每秒 8 tokens / 秒,仍然没有内存溢出。
在微调方面,使用 TRL 库(Transformer Reinforcement Learning)就可以很容易地运行有监督的微调,你可以在 T4 GPU 上训练 Llama 2 7B 模型,甚至可以在单个 A100 GPU 上训练 70B 模型。这说明这种技术是相当容易实现的,大多数消费级 GPU 都可以用于微调 7B 或 13B 的模型变体。值得注意的是,RLHF 方法需要在内存中存储更多的梯度计算。
然而,Open LLM 排行榜的榜首仍然是从 LLaMA v1 微调出来的模型,为什么会这样?
有些讨论表明,这似乎是因为排行榜上缺乏足够多的评估类型(即将进行更改),在评估集上或类似的数据集上微调模型很容易获得更高的性能。随着时间的推移,使用相同数据集微调 Llama 2 得到的模型几乎肯定会性能更好。
此外,Llama 2 还有一些值得关注的方面,包括:
工具的应用:Llama 2-Chat 仅通过语义就能够理解工具的应用和 API 参数,尽管其从未接受过使用工具的训练。将 LLM 用作工具具有极大的潜力。为了推动其发展,我们需要一些标准的评估环境。
Prompt 方面的问题:prompt 可能是导致回避行为的问题所在。Llama 2 的 prompt 是个需要持续关注的问题,因为根据 LLaMA v1 的评估结果,prompt 是导致不一致结果的重要因素。
代码生成:Llama 2 在代码生成方面不够好,很多人表示他们更愿意使用 ChatGPT。关于这一点,Yann Lecun 暗示 Meta 可能会再发布一个版本。
有趣的商业许可:Meta 的许可规定,在发布时拥有超过 7 亿活跃用户的公司不能商业化使用该模型。
Ghost 注意力
许多语言模型都存在一个问题:你在第一轮告诉它做某事(例如「用海盗的风格回答」,那么经过一两轮对话后模型就会忘记这个要求。
Meta 在论文中解释了这种多轮指令的要求:
在对话设置中,有些指令应该适用于所有对话轮次,例如简洁地回答,或者「扮演」某个角色。
为了让 Llama 2 有效地遵循多轮指令,Meta 提出了 Ghost Attention(GAtt),这是一种类似于上下文蒸馏的新方法。GAtt 并不是必须实现的步骤,但它确实能让语言模型更好地遵循多轮指令。
RLHF 的一些细节
RS
训练过程:Llama 2 使用的损失函数实际上并不是那么清楚。在 Meta 的论文中,他们说使用了迭代式训练,因此实际结果与 PPO(Proximal Policy Optimization)并没有太大的区别,但他们并未对损失函数进行详细说明。这有点让人难以理解,该研究几乎肯定是在高奖励样本上使用了 LLM 的标准自回归预测损失,而这对结果有很大影响。
研究团队观察到拒绝采样(RS)重新训练样本会导致模型能力退化。为了解决这个问题,他们重新引入了过去版本中的高分样本,改善了模型性能。这是 RLHF 方法中常见的对奖励模型过拟合的一种形式。
所有较小的对话模型都是在大模型的数据上进行训练的,ChatGPT 很可能也是这样训练的。这是因为科技公司希望充分利用其最大和最优模型的出色推理能力,将其优势延续下去。
在采样过程中,他们使用高温度(high temperature)参数来获得多样化的输出,并增加批量样本的最大奖励。
必须根据模型和批量大小(batch size)逐渐调整温度参数。Llama 2 的论文中有很多关于温度参数的内容,不太清楚有多少是针对特定情况的。
你可以参考如下项目的内容来更好地理解 Llama 2 模型:
项目地址:https://github.com/lvwerra/trl/blob/main/examples/notebooks/best_of_n.ipynb
PPO
在 Llama 2 中,PPO 的实现包含很多罕见的技巧,并继续简化了 RLHF 方法,包括:
- 使用了 InstructGPT 中提出的 SFT 约束项,通过在损失函数中添加额外的项来比较人类注释者编写的文本与模型生成结果之间的距离,以保持模型分布接近人类书写示例。
- 使用来自偏好集合的安全 tag,将生成结果传递给安全性偏好模型。这种方法很可能在未来会应用到更多的模型中,也有可能 GPT-4 模型已经使用了该方法。
- 对最后的线性层得分进行白化(whiten)处理以稳定训练。本质上讲,Llama 2 的研究创建了一个不同的线性层,帮助梯度在奖励模型中表现得更好。这是一个有趣的技巧。
以上就是 Nathan Lambert 关于 Llama 2 的第二篇分析文章的主要内容。
原文链接:https://www.interconnects.ai/p/llama-2-part-2