大模型训练入门实战

目录索引

▶︎
all
running...

跟大牛学LLM训练和使用技巧

【观看视频解说】

1 介绍

最近OpenAI的创始人之一,Andrej Karpathy,在微软Build 2023开发者大会上进行了主题演讲:State of GPT(GPT的现状)。 演讲中他介绍了如何训练和使用LLM,这些内容,对于我们自己理解LLM以及亲自动手来训练LLM都非常的有帮助。今天,我想分享一下我在学习这个演讲时的一些心得体会,希望能对你有所帮助。

参考文档:

  1. 微软官方视频链接: https://build.microsoft.com/en-US/sessions/db3f4859-cd30-4445-a0cd-553c3304f8e2
  2. 演讲PDF: https://karpathy.ai/stateofgpt.pdf
  3. 中文介绍(微信公众号Web3天空之城):https://mp.weixin.qq.com/s/zmEGzm1cdXupNoqZ65h7yg

演讲的内容可以分为两个部分: GPT助手模型的训练,以及应用。
演讲的内容很多,我根据演讲的内容整理了我觉得比较重要的 18 个问题。今天我们通过这18个问题来了解介绍它的演讲。

2 LLM AI助手训练篇

【观看视频解说】

### 问题1:GPT模型是如何训练的?

关于ChatGPT模型的训练过程,虽然已经有相关的论文和官方博客进行了详细介绍,但Andrej在演讲中进一步梳理和总结了这个过程。这份技术介绍非常易于理解,是关于RLHF技术的难得教材。

GPT Assistant training pipeline
图1. GPT AI助手训练流程

如上图所示,模型训练分为四个阶段:预训练(Pretraining)、监督微调(Supervised Finetuning)、奖励建模(Reward Modeling)、以及强化学习(Reinforcement Learning)。

上图主要从三个角度解析了模型训练过程:

通过以上过程,我们可以看到,预训练阶段的资源消耗如此巨大,只有大厂才有能力进行。如果资源有限,我们应将重心放在后三个阶段,例如,我们可以针对自己熟悉的专业领域对模型进行微调等。具体的训练工具,可以参考我之前介绍过的DeepSeed-Chat工具,这款工具正是针对后三步的训练设计的。

问题2:没有大数据,就没法训练模型吗?

是的,也不是。

如果你想进行预训练模型的训练,那么确实需要大量的数据。虽然对数据质量的要求不高,但通常还是需要进行数据清洗,以减少垃圾数据的影响。

然而,如果你想进行监督微调、建立模型,或进行强化学习阶段的训练,那么并不需要大量的数据。尤其是在监督微调阶段,从图1中我们可以看到,其数据量范围是10到100K。也就是说,只需要几十个或几百个高质量的数据,就可以对模型进行微调并取得不错的效果。显然,在监督微调阶段,数据质量比数据量更重要。

这里所说的高质量数据,不仅指问题的答案要准确,更需要注意的是,你的微调数据要能很好地覆盖你的任务。

问题3:模型的 Token 数量是多少?

在训练模型时,我们通常会首先将文本转换为token作为模型的输入。Token通常比单词短,例如在GPT-3模型中,一个Token相当于0.75个单词,而对于中文来说,一个汉字通常对应两个token。

当前的LLM(大型语言模型)的token数量通常在数万。比如,GPT-3模型的Token数量是50257,而LLaMA的Token数量是32000。(参考图2)

模型规模与训练设置
图3. 模型规模与训练设置

问题4:如何设置训练参数,如batch-size、learning rate等?

深度学习模型训练的性能除了受训练方法影响外,训练参数的设定也极其重要。演讲材料中提供了一些参数设置的信息,我们可以快速了解一下。从图2中,我们可以看到GPT-3和LLaMA模型的一些训练参数,如Batch Size、Learning Rate,以及所需的GPU数量等。

首先,我们可以看到预训练阶段的Batch Size非常大,范围在0.5M到4M之间。另外,可以观察到,Learning rate设定较小,且随着网络规模的增大,Learning rate越来越小。

GPT-3和LLaMA模型的技术论文都已经公开,所以在实际训练时,你可以阅读他们的论文以了解更多的细节。

问题5:参数量大是模型能力强的唯一指标吗?

并非如此。参数量并不是衡量模型能力的唯一标准,训练数据量也是一个非常重要的因素。在Andrej的演讲中,他提到了LLaMA模型,尽管它的参数量只有650亿,但其性能与参数量为1750亿的GPT-3模型相比也非常优秀。主要原因在于,LLaMA模型的训练数据量达到了1.4万亿,而GPT-3只有3000亿。

问题6:GPU资源有限时有什么机会?

如果GPU资源有限,那么你的机会可能在专业领域。要训练像ChatGPT这样的通用模型,不仅需要大量的训练数据和GPU资源,还需要针对许多常用任务进行优化和评估。这其中不仅训练成本高昂,数据准备和整理的人力资源投入也非常大。

在资源相对有限的情况下,我们应该将重心放在后三个阶段,例如,我们可以针对自己熟悉的专业领域对模型进行微调等。可以利用公开的预训练模型,针对自己熟悉的专业领域知识,或者根据客户的需求来训练针对特定任务的模型。从图1中,我们可以看到,监督微调等训练所需的计算资源和数据量都不大。

问题7:四个训练阶段的模型中哪些适合部署?

除了最终的模型,预训练模型和监督微调模型也都可以在实际应用中部署。

这三种模型的特点如下:

预训练模型:预训练模型基本不会直接回答问题。如果你向它提问,它可能会以更多的问题来回应你。虽然通过一些技巧可以使其回答问题,但其回答通常并不可靠。然而,这种基础模型具有更多的熵,能够生成许多不同的输出,因此更适合产生多变的内容。

监督微调模型:监督微调模型可以很好地回答问题,目前公开的模型中,绝大多数都属于此类模型。

强化学习与人工反馈(RLHF)模型:这是目前最优秀的模型。与监督微调模型相比,RLHF模型输出的结果变化较小。

问题8:RLHF模型为什么会优秀?

AI助手模型的ELO排名
图3. AI助手模型的ELO排名

上图中是UC Berkeley发布的AI助手的ELO排名, 这个排名中的前三名的模型都属于 RLHF 模型。其他的模型基本都是SFT模型。为什么RLHF(强化学习与人工反馈)模型会优秀,目前并没有定论。

根据OpenAI的评估,与监督微调模型的输出相比,人们更喜欢RLHF模型的输出。那么,为什么会这样呢? Andrej 给出了这样的解释:与生成相比,做判断更容易。这就好比,如果让你写一首诗,你可能会觉得很困难;但是如果让你对几首诗进行排序,就会相对容易很多。

我认为,这可能有两个层面的含义:

问题9:RLHF容易训练吗?

总的来说,SFT比较容易实现,因为你只是在继续进行语言建模任务,相对来说较为简单。但是RLHF是一个深奥的研究领域,让它开始工作的难度更大。
作者解释称,他并不建议任何人尝试推出他们自己的RLHF实现。这些事物通常非常不稳定,难以训练,对初学者并不友好,并且可能会迅速发生变化。

问题10:目前开源的预训练模型有哪些?

在演讲中,Andrej 多次提到了 LLaMA 65B的模型,并表示此模型的性能不错。LLaMA模型目前可以在 HuggingFace 上下载,下载地址为:https://huggingface.co/decapoda-research。
请注意,LLaMA 模型无法商用。

除此之外,还有一些其他的预训练模型,例如:
Bloom 模型:https://huggingface.co/bigscience/bloom
Bloomz 模型:https://huggingface.co/bigscience/bloomz
Opt模型:https://huggingface.co/facebook/opt-66b
GLM模型:https://github.com/THUDM/GLM
以上模型在各自的链接中都有详细的使用说明和使用案例,可以供你参考和学习。

3 LLM AI助手的应用

【观看视频解说】

问题11:如何理解 LLM 助手?

关于如何看待类似chatGPT的LLM AI 助手, 常见的一个说法就是AI副驾驶, 副驾驶这个词来自于飞机的副驾驶员,它主要为机长提供辅助,或者建议,最终决定由机长来决定执行。 这个理解,可以帮助和指导我们如何来使用 ChatGPT 的AI助手。

Andrej 的演讲中提供了另一个对 LLM 助手的理解角度。就是参考人来的思考系统。心理学家丹尼尔·卡内曼在他的著作《思考,快与慢》中提出了一个观点。他在书中介绍了人类的思考系统分为系统1和系统2两个不同的决策和认知系统:
系统1:快速,直觉性和无意识的思考方式。这个系统在我们的大脑中自动运作,不需要我们投入意识的精力,就能做出判断和决策。它可以处理大量的信息,但有时候可能会受到各种偏见和错误的影响。

例如,如果你看到一个表情友好的人,你可能会立刻觉得他很善良。这就是系统1的作用。

系统2:慢速,分析性和有意识的思考方式。这个系统需要我们投入精力去深思熟虑,对信息进行分析和逻辑推理。系统2更慢,更费劲,但也更准确和可靠。

例如,如果你正在解决一个复杂的数学问题,那么你就在使用系统2。

这两个系统并非互相排斥,而是相互协作。很多情况下,我们需要同时运用系统1和系统2。然而,由于系统1的运作速度更快,更自动,所以我们有时候可能会过度依赖系统1,导致决策失误。

Andrej 认为LLM 更像是人类思考系统的系统1,判断快速,直觉,并且是无意识的。但是会出现偏见和错误。

而最近的AutoGPT项目则是尝试模拟系统2的行为方式,虽然,目前AutoGPT实际应用的效果还不是很好,但是类似的思路还是非常有前景的。

问题12:LLM 是否有自知之明?

目前的LLM基本都是基于Transformer结构的, Transformer 的内容生成只是在输出下一个 token,它并不知道自己擅长什么,不擅长什么,只是尽力地预测下一个 token。因此,它们没有独立的内心独白,也就无法主动的纠正它们的错误。它的优势是拥有大量的基于事实的知识,覆盖了广泛的领域。 它还有出色的工作记忆,只要内容在上下文窗口内,通过自注意力机制它可以完美地记住,但是上下文窗口是有限的,GPT-3.5是4k,GPT-4有8k和32k的版本。

问题13:为什么 GPT 会“不听话”?

虽然 LLM 拥有优秀的工作记忆,但它终究只是在努力预测下一个 token 是什么。它会花费相同的算力来计算每个 token,因此,不能期望它对某个 token 进行过多的处理。

问题14:LLM会进行多次尝试吗?

默认情况下,不会。在尝试解答问题时,人们通常会进行多次尝试直到取得成功。然而,与人类不同,LLM并没有自我意识。在默认设置下,LLM只会进行一次采样。如果在这个过程中采样了不好的选项,它会因错误的采样而陷入困境,并且无法自我修复

问题15:GPT-4 是否知道自己没有完成任务?

当你问LLM,“你完成任务了吗?”时,它可能会回答你,“不,我没有完成任务。”
换句话说,它可以评估自己是否完成了任务。
然而,如果你不询问,它不会主动重新评估。因此,你需要在你的提示中补充这一信息。

作者提到了谷歌的AlphaGo的预测和评估并行的策略。
此外,作者还提到了近期非常流行的AutoGPT,他认为虽然AutoGPT在实用性上效果依然有限,但其思路和想法还是具有很大的借鉴意义。

问题16:如何让GPT工作得更好?

魔法提示词:“让我们一步步地思考。(let's think step by step)”
通过告诉模型,让它一步一步地解决问题,它可能会给出更加可靠的答案。

专家假设提示词:你可以说,“假设你是一个领域专家,假设你的IQ是120。” 通过加入这样的提示词,LLM会倾向于给出更高质量的答案。
注意:不要提出过高的要求,比如说,“假设你的IQ是400”,这可能会超出数据分布范围,甚至可能让模型在科幻数据分布中进行角色扮演。

规避它的弱点:我们知道现有的LLM并不擅长计算。针对这个问题,你可以告诉它,“你的心算不太好。每当你需要进行大数加法、乘法或其他操作时,请使用这个计算器(插件)。以下是你如何使用计算器。”

问题17:Prompt design,Prompt tuning 还是 finetuning?


图4. Prompt tuning 与 FineTuning

微调(Finetuning)是一种常用的技术,许多技术(如LoRA)可以使微调更加快速和高效。然而,微调依然是一项复杂的工作,例如,需要理解相关技术并准备数据。通常情况下,SFT可以运作得很好,但是,效果更好的RLHF模型的训练需要高度的技巧。这类技术在未来可能会有很大的变化。

相比微调需要更新模型的参数,prompt design 只需要对prompt进行调整,这也是一种非常有效的方法。
例如,图4中的 one-shot 和 few-shot 通过在prompt中给出问题解答的例子,可以让模型参考这些例子来解答问题,这样也可以非常好地使LLM处理各种新任务。
这有点类似于教科书中给出的例题,通过例题的解答,我们可以学会解题的思路。LLM在这方面也表现得相当好。

另外一个技术就是prompt tuning,这是这一种与finetuning相似的技术,具体技术可以参考:
https://arxiv.org/abs/2104.08691

问题18:Zero-shot,One-shot 和 few-shot 是什么?

Zero-shot:Prompt中只给出需要解答的问题。
One-shot:Prompt中除了问题,还给出一个参考题(包含题目和解答)。
Few-shot:与One-shot只给出一个参考题不同,few-shot是给出多个参考题。

详细解释请参考图4.

参考文献

跟大牛学LLM训练和使用技巧

2 LLM AI助手训练篇

3 LLM AI助手的应用