了解 Zephyr

社区文章 发布于 2023 年 11 月 17 日

image/png

大家好!欢迎阅读我关于 Zephyr 的文章。Zephyr 是 Huggingface 开发的一个模型,您可以在这里这里查看,该模型在与 GPT 4 的评估中表现相当出色,甚至在 Alpaca 排行榜上,作为一个只有 7B 参数的模型,其性能超越了 GPT 3.5 (ChatGPT)。我用Zephyr Chat为个人项目做了一些测试,它在遵循用户意图方面表现得非常好。然而,我注意到这个模型的一些小缺点是,可能因为它只是一个 7B 模型,它在逻辑方面有困难,这可以从OpenLLM 排行榜中看出。目前,我不认为完整模型已列入 OpenLLM 排行榜,但论文中声称它在所有 7B 模型中表现最好,并且确实超越了一些 40B 模型,这令人印象深刻。但它在逻辑方面不如 33B 或 70B 参数模型以及 ChatGPT 等大型模型,这是有道理的。所以总的来说,这个模型适用于对话,但不适用于逻辑/知识本身,这正是这篇论文的目标。

LLM 评估(可选)

现在,我认为了解 LLM 是如何被评估的对我们来说很重要。LLM 的评估主要有两种方式:

  1. 与 GPT-4 进行评估

这很简单。您给 GPT-4 一个如下所示的提示(以 Alpaca 为例):

<|im_start|>system
You are a helpful assistant, who ranks models by the quality of their answers.
<|im_end|>
<|im_start|>user
I want you to create a leaderboard of different large-language models. To do so, I will give you the instructions (prompts) given to the models, and the responses of two models. Please rank the models based on which responses would be preferred by humans. All inputs and outputs should be Python dictionaries.

Here is the prompt:
{
    "instruction": """{instruction}""",
}

Here are the outputs of the models:
[
    {
        "model": "model_1",
        "answer": """{output_1}"""
    },
    {
        "model": "model_2",
        "answer": """{output_2}"""
    }
]

Now please rank the models by the quality of their answers, so that the model with rank 1 has the best output. Then return a list of the model names and ranks, i.e., produce the following output:
[
    {'model': <model-name>, 'rank': <model-rank>},
    {'model': <model-name>, 'rank': <model-rank>}
]

Your response must be a valid Python dictionary and should contain nothing else because we will directly execute it in Python. Please provide the ranking that the majority of humans would give.
<|im_end|>

因此,本质上,您会获得输出并将其直接放入代码中,以判断哪个模型表现更好。对于 MTBench,方法也类似。

这种方法的主要缺点是您使用 GPT-4 作为评估器。因为它是一个闭源模型,虽然令人印象深刻,但我们不知道它的能力是否保持不变。因此,通过这种评估,我们几乎完全依赖 OpenAI 来保持 GPT-4 完全相同。而且已经有研究表明情况并非如此。

另一种评估 LLM 的方法是:

  1. 查看最有可能的下一个 token

这个想法的背后几乎都在 Eleutherharness 仓库中,OpenLLM 排行榜就是基于它的:https://github.com/EleutherAI/lm-evaluation-harness

主要思想是这样的:你给 AI 一个有 4 个选项的问题,SAT 考试风格,并询问 a、b、c 或 d 哪个是正确答案。然后,你只需找出 a、b、c 或 d 中哪个 token 被选中的概率最高!这是一种相当有趣的方法,但它有点缺陷,因为它假设 LLMs 会以给出答案开始,或者至少会考虑开始给出答案,但这并非总是如此,你可能从与 Chat GPT 的对话中注意到。这个方法有点缺陷的另一个原因是它不允许我们与闭源模型进行比较,我确实注意到播客上有人提到过。主要原因是,我们不知道闭源模型的下一个最有可能的 token 是什么。

所以现在,如果想要一个能遵循人类意图的模型,优先使用 GPT-4 进行评估是有道理的,因为它可以整体评估文本。但如果想评估逻辑,那么“最有可能的下一个 token”方法会更好。

Zephyr 的 3 个阶段

为了理解 Zephyr 是如何被创建的,我们需要了解构成 Zephyr 的三个训练过程。它们是:i. 监督微调 ii. 反馈 iii. 强化学习

image/png

这与 Open AI 训练其 Chat GPT 的方式非常接近,从它们与 Chat GPT 的示意图对比中可以看出。

image/png

然而,这篇论文以及之前的相关论文消除了对人类参与的需求,这大大降低了整个过程的成本。尽管如此,像大多数 LLM 论文一样,它仍然依赖 GPT-4 进行训练。

首先,让我们看看监督微调

如何微调 LLM

现在,即使我们说要微调一个大型语言模型 (LLM),我认为我们首先会问的问题是,我们到底应该怎么做。一个想法是,我们有一个喜欢的文本数据集,然后仅仅用它来微调我们的大型语言模型,这样它预测的下一个 token 就会像数据集中的文本一样。

然而,我认为您很快就会发现,这几乎完全消除了 LLM 的所有“聊天”方面。我们想要的是让我们的模型做某事,并且它能完全照做。所以,下一个选项,并取得了相当大的成功,被称为监督微调(SFT)。据我所知,这最早在 Chat GPT 中流行起来,并可以在上图的第一步中看到。其思想是您向 LLM 写入指令和您想要的输出。然后,您用这些指令和输出制作一个庞大的数据集。然后您让 LLM 学习对这些指令的最佳响应。我是从这里学到的,这是一个很棒的博客。强烈推荐。

然而,这里的一个主要问题是,这需要人类生成大量的任务和输出,而这非常昂贵且依赖于人类。那么,有没有办法减少人类的工作呢?

image/png

解决这个问题的方法是这篇论文发现并称为“自指导(Self Instruct)”。其思想是,你给一个强大的 LLM(如 GPT-3.5)一些人类生成的输入和输出示例,它就能生成更多类似的指令-输出对。这确实会显著降低可靠性,而且你也要依赖 GPT-3.5 来生成出色的输出,但它确实带来了一些收益。例如,这已经是很久以前的消息了,但斯坦福大学的 Alpaca 模型就是通过这种方式变得非常强大的。

现在,这些方法统称为监督微调(SFT)。它是 Zephyr 训练的第一部分。在 Zephyr 中,他们对数据集的生成方式做了一点改动。作者决定,除了让 LLM 根据人类制作的自指导类别示例生成随机指令和响应之外,还要

  1. 根据其中一个种子提示生成响应(我们没有真实提示)
  2. 根据原始提示和生成的答案生成一个修订提示
  3. 再次重复,但这次是根据生成的提示进行。然后最终在这个数据集上对 7B 模型进行监督微调!我觉得这种方法很有趣。在某种程度上,它有点像玩 Pictionary 游戏。然而,我认为这里的一个局限性是,这会导致模型的输出缺乏多样性。主要是因为所有种子提示中的任务似乎都应该与生成的提示相当接近。

为了解决这个问题,我们需要一个智能或准智能的实体来判断我们的响应。

反馈

Chat-GPT 首次推出时,这是论文中非常有趣的部分之一!其想法是让大型语言模型生成多个候选输出。然后,让人类对它们进行排序。最后,训练一个小模型,使其根据模型的输出学习输出的好坏。现在,虽然这有效,但有一个小问题,那就是人类非常昂贵。此外,我认为有几篇论文表明 GPT 4 的表现优于众包劳动力,而 Mechanical Turk 的工人只是使用 chat gpt 进行注释。因此,目前看来,更便宜、更好的方法是只使用 GPT-4。这被称为人工智能反馈(而不是人类反馈)。具体任务如下:

  1. 我们有一系列提示
  2. 我们将这些输入到一些语言模型中,如 Claude、Falcon、Llama 等。
  3. 我们将其输入 GPT-4,由它对响应进行评分
  4. 有趣的是,我们保存表现最佳的响应以及表现最差的响应。因此,我们将拥有提示、最佳响应和最差响应三元组。

所以有趣的是,我们似乎没有训练一个模型来预测奖励。

现在,这是强化学习的最终阶段!

强化学习

在 Chat GPT 中,最后一部分的主要思想是,给定经过监督微调的模型,让它生成输出。然后,一个经过训练的模型(用于判断输出的好坏)会给监督微调模型奖励,并根据奖励的有无,它将学习生成更好的输出。所使用的强化算法称为 PPO,是一种相当标准的强化学习方法。

在这里,作者转而使用了一种称为“直接偏好优化”的技术,该技术消除了对另一个模型进行输出评估的需要。然而,如果我理解正确,他们会复制蒸馏后的微调权重并冻结蒸馏后的微调模型。

然后,他们试图在给定提示的情况下,最大化生成获胜响应的概率,同时最小化生成失败响应的概率,如下所示:

image/png

我认为他们除以蒸馏微调模型概率的原因仅仅是为了让模型最初的输出为 0。随着训练的进行,变化会很小,这对于神经网络来说非常有利,因为它们对大值非常糟糕。此外,他们在这里使用对数的原因很简单!如果在损失函数中乘以很多变量,这就像要求无限值一样。但如果将其更改为对数,它就变成了一堆加法和减法。总的来说,这是非常理想的有界输出。

结果

对于数据集,他们使用了名为 UltraChat 和 UltraFeedback 的数据集。有趣的是,即使是 Chat GPT 的输出,UltraChat 中也存在语法错误,需要修复,并且可能会提供无益的输出,例如“我没有个人经验”。对于 UltraFeedback,似乎不需要太多清理,因为 GPT-4 是评估器。然而,他们确实对选择最佳和最差选项进行了稍微修改,以使强化学习阶段更加困难。因此,这种方法的一个优点是,几乎所有昂贵的 GPT-4 提示都已完成并开源。

一些有趣的结果是,是的,它使 Zephyr 在与用户意图对齐方面表现出色。但对我来说更令人惊讶的结果是,这个训练过程使其在 Open LLM 排行榜上的表现优于原始的 Mistral 模型。我对此的主要猜测是来自 DDPO 阶段,因为监督微调阶段只使用了 Chat GPT。但有趣的是,在他们的消融研究中,对于 Alpaca 评估,监督微调阶段在获得良好结果方面至关重要。例如,仅使用 DDPO 的胜率仅为 30%,而加上监督微调后,胜率跃升至 86%!这并不能说明逻辑本身有多好,但我确实想知道它是从哪里学到在学术方面表现更好的。作者承认这项研究的一个局限性是我们不知道它在规模方面表现如何,我想我们将来可能会从 Huggingface 那里看到!

社区

注册登录 发表评论