Bootstrap

公开课 | 2024最新清华大模型公开课 第4课 大模型学习方法

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结,2小时视频,5分钟阅读,加速内容学习与传播。

大纲

  • 引言

    • 介绍大模型的训练方法

    • 强调大模型在多领域的应用

  • 大模型的训练阶段

    • 预训练过程

      • Tokenization的重要性

      • 预训练模型的历史发展

        • 从词向量到ELMO模型

        • Transformer模型的引入

    • 后训练过程

      • 对齐(alignment)和适配(adaptation)

      • 后训练的重要性

  • 具体模型介绍

    • GPT系列

      • GPT-1的架构和训练方法

      • GPT-2的扩展和多任务能力

      • GPT-3的巨大参数和泛化能力

    • BERT模型

      • BERT的双向注意力机制

      • BERT的应用和效果

    • T5模型

      • T5的Text-to-Text格式

      • T5的编码器-解码器架构

  • 语言建模的本质

    • 语言模型的基本原理

    • 语言模型的多任务学习能力

  • 对齐和后训练

    • 对齐的重要性

    • 对齐的方法和挑战

  • 参数高效的微调

    • Adapter方法

    • Prefix Tuning

    • LoRA方法

  • 指令微调和偏好学习

    • 指令微调的概念

    • 偏好学习的实现方法

  • 总结和未来展望

    • 大模型的当前状态

    • 未来的研究方向和挑战

内容总结

一句话总结

本文深入探讨了大模型的训练方法,包括预训练、后训练、具体模型的介绍、语言建模的本质、对齐和后训练、参数高效的微调、指令微调和偏好学习,以及未来的研究方向。

观点与结论

  • 大模型通过预训练和后训练两个阶段,能够在多领域发挥作用。

  • 语言建模的核心在于使用前面的标记(token)来预测下一个标记,这种能力可以扩展到多任务学习。

  • 对齐和后训练是确保模型输出符合人类期望的关键步骤。

  • 参数高效的微调方法,如Adapter、Prefix Tuning和LoRA,可以大幅降低微调所需的资源。

  • 指令微调和偏好学习是当前大语言模型的核心能力,能够实现零样本泛化。

自问自答

  1. 大模型的训练主要分为哪两个阶段?

    • 预训练过程和后训练过程。

  2. 为什么大模型能在多领域发挥作用?

    • 因为任何信息都可以被转化为token,大模型处理的是token,而非单纯的语言。

  3. 什么是语言建模的本质?

    • 使用前面的标记(token)来预测下一个标记。

  4. 对齐和后训练的重要性是什么?

    • 确保模型输出符合人类期望,增强模型的稳定性和鲁棒性。

  5. 参数高效的微调有哪些方法?

    • Adapter、Prefix Tuning和LoRA。

  6. 指令微调和偏好学习的区别是什么?

    • 指令微调是通过增加上下文来描述任务,而偏好学习是通过人类反馈来优化模型输出。

关键词标签

  • 大模型

  • 预训练

  • 后训练

  • 语言建模

  • 对齐

  • 参数高效微调

  • 指令微调

  • 偏好学习

适合阅读人群

  • 人工智能研究人员

  • 机器学习工程师

  • 数据科学家

  • 计算机科学学生

术语解释

  • Tokenization: 将文本或其他信息转化为离散单元(token)的过程。

  • 预训练: 在大规模无监督语料上训练模型的过程。

  • 后训练: 在有监督的数据上进一步训练模型的过程。

  • 对齐: 调整模型输出以符合人类期望的过程。

  • 参数高效微调: 使用较少资源更新模型参数的方法。

  • 指令微调: 通过增加上下文来描述任务,使模型能够理解和执行。

  • 偏好学习: 通过人类反馈来优化模型输出的过程。

视频来源

Lecture 4 大模型学习方法_哔哩哔哩_bilibili

讲座回顾

大家好,欢迎大家参加本次大模型暑期课程。今天我们将探讨大模型的训练方法。众所周知,当前的大模型数量远不止图示所示。

那么我们核心要讲清楚一个问题,即这些模型是如何训练的。实际上,它们主要经历了两个阶段:预训练过程和后训练过程。

我们需要先搞清楚一个问题:为什么大模型能在每个领域都发挥作用。实际上,不仅限于文本处理,尽管它被称为大语言模型,但它现在已广泛应用于多模态领域,包括音频、视频,以及医疗、金融和教育等行业。

  • 大语言模型处理token而非单纯语言。

  • 文本、图像、DNA、工具和电磁波等均可转化为token。

  • 转化后的token可被学习和泛化,是大语言模型发挥作用的关键。

  • 训练大语言模型时,首先进行tokenization,将信息转化为离散单元。

  • 常用的tokenization方法包括BPE,采用分支结构处理。

他都能发挥作用。实际上,这基于一个非常基本的假设:任何信息都可以被转化为token。大语言模型处理的是token,而非单纯的语言。因此,文本、图像、DNA、工具和电磁波等都可以转化为token,这些token随后可以被学习和泛化。这就是大语言模型发挥重要作用的关键。在训练大语言模型时,第一步是进行tokenization,即将所需信息(如文本、图片等)转化为离散单元,然后送入模型中。有许多方法可以进行tokenization,例如常用的BPE方法,它采用类似分支的结构来处理。这些token将进一步被泛化。

  • 早期NLP研究中的词向量是context-free的,即同一个词在不同语境下的向量表示相同。

  • 词向量的context-free特性导致同一个词在不同语境下的不同含义无法区分。

  • ELMO模型是第一个实现contextualized pre-training的模型,其词向量随上下文变化。

  • ELMO模型的表示包括固定的词向量、每一层的表示加总形成的ELMO词向量。

  • ELMO模型的特点是contextualized和deep,效果远超之前的固定词向量方法。

在大模型之前的NLP研究中,这些embeddings都经过了预训练。我们那时也有预训练,只不过我们训练的是所谓的词向量。这些词向量有一个非常大的特点,就是它们是context-free的,即同一个单词在不同语境下表示的向量是一样的,即使它有不同的含义。例如,“bank”既可以指银行,也可以指河岸,但它们的向量表示是一样的。这显然不合理,因为很多词在不同的句子中表达着不同的意思,可能不是词典中分割的意思,但也有可能是一些非常微妙的细小差别。因此,后来我们希望这些词向量或在大模型中的表示能随上下文变化,于是有了ELMO模型。ELMO是第一个发现contextualized pre-training的模型,即所有的词向量和表示都是随上下文变化的,每句话送进去后,其内部表示都不同。这里我们要训练的模型不仅仅是词向量,而是整个模型,其表示有三种:固定的词向量本身、每一层的表示加起来,形成一个ELMO词向量,但实际计算稍微复杂一些。ELMO模型是一个里程碑式的工作,它彻底打开了预训练模型的基础,contextualized pre-training从此开始。它的两个最大特点,一是contextualized,即所有词向量都由上下文决定;二是deep,即它非常深,由多个神经网络层结合而成,而不是之前可能只有一个简单的神经网络来训练词向量。其效果当时也非常好,远远超越了固定的词向量方法,如word2vec。2017年后,我们有了比LSTM更好的模型。

  • Transformer模型采用自注意力架构,适合训练上下文相关的词向量。

  • 每个Token在Transformer中都与其上下文相关。

  • 基于Transformer的预训练语言模型分为三种类型:仅编码器、编码器-解码器和仅解码器。

或者比RNN更强大的神经网络模型,大家应该已经了解,即Transformer。在前面的课程中已经介绍过,Transformer采用了一种自注意力(Self Attention)架构。实际上,我们可以将其与上下文相关的表示(Contextualized representation)进行比较,它非常适合训练上下文相关的词向量。这是因为每个Token都会注意到其他Token,因此每个Token都与其上下文相关。这自然导致了基于Transformer的预训练语言模型的出现。基于Transformer的预训练语言模型有很多,主要包括三种类型:仅编码器(Encoder only)、编码器-解码器(Encoder Decoder)和仅解码器(Decoder only)。它们实际上采用了Transformer的不同部分。以及他采用的不同训练目标。

  • 三个代表性模型:BERT、GPT、T5

  • GPT是最受欢迎的模型

  • GPT是第一个基于Transformer的预训练语言模型

  • Transformer最初设计用于翻译任务

  • GPT采用Transformer结构和传统的语言模型方法

  • GPT的训练方式是从左到右,利用前面的Token预测下一个Token

  • 微调过程中,GPT利用最后一个单词的表示来预测任务标签

那么它的三个代表性模型是BERT、GPT和T5。接下来我们将详细介绍这三个模型。首先来看GPT,目前它是最受欢迎的模型。GPT是第一个基于Transformer的预训练语言模型。最初,Transformer被设计用于翻译任务。可能连Transformer的作者也未曾预料到它会被用于预训练,或被广泛应用于多种任务。GPT正是基于这一发现,采用了Transformer结构,并结合传统的语言模型方法,即利用前面的Token预测下一个Token,从而实现从左到右的训练方式。如图所示,例如一个单词仅能看到其前两个单词,并据此预测下一个单词。在微调过程中,GPT会利用最后一个单词的表示来预测任务标签。这就是GPT的注意力机制架构,它通过利用前面单词的概率来预测下一个单词。

  • 在实际使用中,采用attention mask防止模型看到后续单词。

  • GPT之后引入了更强大的模型Bert。

  • Bert在NLP研究领域当时尚未广泛应用,但技术革新已显现。

我们在实际使用中会采用attention mask,以防止模型看到后续的单词。在GPT之后,我们引入了一个更为强大的模型,即Bert。在当时,Bert在NLP研究领域中尚未被广泛应用,但其带来的技术革新已初露端倪。

  • BERT开启了预训练语言模型的新领域。

  • 方法:随机遮盖输入序列中的部分单词(token),预测这些被遮盖的token。

  • 遮盖比例:15%,此比例经过实验确定。

  • 目标函数:遮蔽语言模型,与传统语言模型不同。

  • 注意力机制:传统模型使用单向注意力,遮蔽语言模型使用双向注意力。

我们在自然语言理解任务上的表现远远超越了当时最先进的方法,甚至在许多任务上超越了人类的表现。在BERT之后,预训练语言模型这一领域才真正被打开。其方法相当简单:对于一个输入序列,我们随机遮盖其中的一些单词或称为token,然后预测这些被遮盖的token。遮盖的比例为15%,这一比例是经过实验得出的。我们可以看到,这种目标函数称为遮蔽语言模型,与传统语言模型有所不同。区别在于,传统模型采用单向注意力机制,而遮蔽语言模型则采用双向注意力机制。

  • BERT模型采用双向建模,能够同时利用前后文信息。

  • 当前主流模型多采用单向建模,原因和优势待探讨。

  • BERT还使用预测下一个句子的目标函数,但实验显示其效果不佳。

在这个目标函数中,被遮盖的模型既可以看到前面的上下文,也可以看到后面的上下文。理论上,BERT似乎能够比GPT学到更多的信息。然而,为什么我们现在的模型都是单向建模呢?单向建模相比双向建模的优势在哪里?或者说它为什么能够扩展?大家可以先提前思考一下,稍后我们将回答这个问题。BERT除了使用遮盖token的策略外,还采用了另一个目标函数,即理解不同句子之间的关系。因此,它还有一个目标是预测下一个句子。在训练过程中,由于我们有大量的预料,它会训练模型判断下一个句子是否是真正的下一个句子,或者是一个随机的其他句子。但后来有许多实验证实,这个目标函数其实并不那么有效。实际上,它可能还不够本质,最本质的做法是我们使用这个目标函数。

  • BERT的输入包括文本token和特殊token,特殊token如CLS和SEP分别表示句子的开始和分割。

  • 可以自定义特殊token,例如用O表示OpenBMB。

  • 每个token有三种embedding:token embedding、segment embedding和position embedding,这些embedding相加得到最终embedding。

  • CLS的最终embedding常用于文本分类任务,如情感分类。

  • 在关系抽取任务中,可以在实体前添加特殊token,并使用其embedding进行关系抽取。

  • BERT主要用于自然语言理解,学习到的表示可用于多种自然语言处理任务。

我们只需对token进行预测。详细来看BERT的运作机制,首先输入是一系列token。除了文本token外,还有一些特殊token,这些特殊token具有特定含义。实际上,我们可以添加任何特殊token来表示任何含义。例如,添加一个O代表OpenBMB,这是可行的。在BERT中,token的含义包括:首先有一个CLS token,代表classification,表示每个句子的开始;还有一个SEP token,表示两个句子之间的分割,告诉模型当前句子结束,准备进入下一个句子。

关于embedding,每个token有自己的embedding,类似于词向量。此外,还有segment embedding,表示token属于前一个句子还是后一个句子(A、B或C)。还有position embedding,表示token在序列中的位置,因为self-attention结构本身不包含位置信息。我们将这些embedding相加,得到token的最终embedding,用于各种任务。

一个常见的情况是使用CLS的最终embedding进行文本分类,如情感分类。在关系抽取任务中,我们可能在两个实体前添加一个特殊token,然后使用这个特殊token的embedding进行关系抽取。BERT主要用于自然语言理解,学习这些表示后,我们可以将其用于传统的神经网络和机器学习自然语言处理任务。

  • BERT模型在多个任务上超越了人类表现。

  • BERT提出了Bert-Base和Bert-Large两个模型,大模型表现更好。

  • 训练Bert-Large需要大量计算资源,成为资源充足的标志。

  • T5模型继承了BERT的规模扩展,将所有任务转换为Text-to-Text格式。

  • T5采用encoder-decoder架构,与BERT和GPT的表征利用方式不同。

  • GPT虽然只采用Transformer的decoder,但被认为具备理解能力。

BERT的效果确实非常出色,它是在GPT之后出现的,但在当时为我们提供了许多计划。自然语言处理的研究者带来的震撼远胜于GPT。在很多任务上,BERT都超越了人类,并且提出了一个非常重要的观点:训练了两个模型,Bert-Base和Bert-Large,越大的模型表现越好。如果我没有记错,BERT应该是第一个提出这一观点的,并非后续进行规模扩展的GPT。当时,作为自然语言处理的研究者,我们都想知道谁能选择Bert-Large,即谁拥有足够的计算资源来训练一个Bert-Large,这被认为是计算资源充足的标志。而现在,我们能够操作的模型已经远远超过了这个量级。在BERT之后,有一个模型继续这种规模扩展,即我们所说的T5。它实际上将所有的自然语言处理任务,无论是分类还是生成,都转换成了Text-to-Text格式,即输入是一堆文本,输出也是一堆文本,即使是一个分类任务,也是一个Token。之前的BERT或GPT,在使用时,我们实际上是利用它们的表征来进行分类任务,输出的是经过Softmax后的分类概率,例如在Class A和Class B的概率。而T5则认为,干脆不要这些了,所有的东西都变成文本到文本的形式,采用了encoder-decoder架构。我们稍微强调一下,GPT采用的是Transformer的decoder,即它只负责生成,但现在我们认为它也具备理解能力。

BERT主要强调理解,因此采用Transformer的encoder架构。T5首先使用encoder进行文本理解,然后通过decoder进行单向生成。在此过程中,它会mask掉一些短语。

  • NLP任务统一性:所有自然语言处理任务可以统一到一个语言模型中。

  • 预训练任务分类:预训练阶段分为BERT、自回归模型(如GPT)和T5三种方法。

  • 语言建模本质:语言建模使用前面的标记预测下一个标记,本质上是计算条件概率。

  • 概率计算方法:通过乘积计算序列概率,使用对数函数避免数值下溢,计算最大似然概率。

  • 语言建模复杂性:语言建模不仅涉及模仿和记忆,还包括世界知识、推理和编码等。

T5的编码器接收输入,解码器则预测被遮蔽的输出。这给我们一个重要的启示:所有自然语言处理(NLP)任务都可以统一到一个语言模型中。在预训练阶段,我们可以将其分为三种任务。首先是BERT,它在预测S3时可以看到所有标记,无论是前还是后。其次是自回归模型,如GPT所采用的传统语言模型,在预测Y1时只能看到前面的标记。最后是T5所采用的方法,先通过编码器理解输入,再通过解码器生成所需内容。目前,几乎所有模型都采用单向的自回归GPT语言模型。我们可能会思考,这种模型是否比其他模型更本质,或更易于扩展和规模化。接下来,我们将探讨语言建模的本质,实际上非常简单,可以用两句话概括:它使用前面的标记(token)来预测下一个标记。具体来说,就是用前面的n-1个标记来预测第n个标记。当然,中间可能会有一些技巧,例如我们可能不想使用n-1个那么多,而只想使用5个或10个等。但本质上,它只是在计算条件概率。如果要计算整个序列的概率,就是将P(w1)、P(w2|w1)等全部相乘,得到整个序列的概率。由于这个概率可能非常小,我们可能会在前面加上对数函数,以避免数值下溢,然后再除以n分之一,得到所谓的最大似然概率。例如,“never to read, to learn, to code, to read”在自然语言中都是可能出现的。因此,在进行语言建模时,我们关注的不是正确的标记是什么,而是概率。当我们学习到这些概率时,就可能理解世界运行的方式。当我们预测下一个标记时,不仅仅是在模仿或记忆,实际上包含了多种内容,如世界知识、推理或编码等。因此,语言建模是一个非常复杂且多维的过程。

  • 描述了一种可能的多任务学习模型,该模型在预测下一个token的过程中学习多种技能。

  • 学习的技能包括语法、词法、世界知识、文本分析、情感分析、翻译、数学、代码等。

  • 提出扩展token的类型,包括音频、图像、气压等,以探索更广泛的学习领域。

我们认为它可能是一种极致的多任务学习。在预测下一个token的过程中,它可以学习到语法、词法、世界知识、文本分析、情感分析、更难的文本分析、翻译、数学、代码等。当我们扩展token到不仅仅是语言时,如果它是音频、图像,甚至是空气中的每个气压,大家可以思考一下。

  • 语言建模的核心在于其智能程度。

  • 智能不足可能导致对模型能力和智慧的质疑。

  • 语言建模具有巨大的潜力和机会。

关于语言建模的本质,我们可以参考前OpenAI首席科学家伊利亚·苏茨克弗(Ilya Sutskever)的阐述。语言建模的核心在于,如果建模不够智能,我们可能会质疑这些模型的能力和智慧。尽管这些模型可能并不存在,但语言建模提供了极大的潜力和机会。

  • 讨论了如何行动的问题。

  • 提出了获取证据的来源问题,建议从普通人的数据中获取。

  • 探讨了如何表达预测下一个token的意义。

这些人应该如何行动?是的,但是我们应该从哪里得到这种证据?从普通人的数据,因为如果我们考虑一下,这意味着什么?我们应该如何能够表达预测下一个token?这其实是一个更深入的问题。评估预测下一个token的意义是什么?我们应该如何能够表达预测下一个token的意义?

  • 作者认为预测下一个token不仅仅是统计行为。

  • 当模型规模足够大时,预测过程可能涉及对世界本质的理解。

  • 预测下一个token的过程被视为一种信息压缩。

他认为预测下一个token不仅仅是进行统计,而是当模型规模足够大时,它实际上在理解世界的本质。虽然这种说法可能有些夸张,但我们发现预测下一个token的过程本身可能是一种压缩。这种压缩,即预测下一个token的过程,实际上是在对信息进行压缩。

  • 语言建模的优势在于其依赖于语料库,不需要人工标注。

  • 高质量语料虽然理想,但包含噪音或杂质的语料也可能对语言模型有益。

在他的神经网络参数中,我们不再深入探讨。语言建模的一个显著优势是它仅依赖于语料库。尽管我们可能需要高质量的语料,但实际上,即使是包含噪音或杂质的语料,也可能有助于语言模型的理解。语言建模不需要人工标注,例如,A属于互联网领域。

  • 情感关注:A所表示的情感不需要特别关注。

  • 模型处理:模型不要求统一格式或结构化解析,只需准备和清洗语料库。

  • GPT模型构建:通过语料库使用神经网络预测下一个token,构建GPT模型。

  • 困惑度评估:使用困惑度衡量语言建模效果,计算方法包括计算文本概率、取自然对数、除以n、加负号、取指数。

  • 模型理解评估:低困惑度表示模型对数据集理解较好,每个token概率较高。

A所表示的情感实际上并不需要特别关注。此外,该模型也不要求我们将所有语言和文本统一格式,或者进行结构化解析等复杂处理。我们只需准备一个语料库,并进行必要的清洗和配比,这些内容将在后续部分详细讲解。简而言之,通过这些语料库,我们可以使用神经网络来预测下一个token,从而得到一个GPT模型。衡量语言建模效果的一个有效方法是使用困惑度。困惑度本质上是对预测下一个token的逆过程的度量。其计算方法较为复杂,具体来说,我们需要计算整个文本的概率表示,这是计算的分母部分。在计算出整个文本的概率表示后,取其自然对数,再除以n,并在前面加上负号,这样就转换为交叉熵。为了防止数值过大导致难以阅读,我们再对其取指数,从而得到PPL,即困惑度。困惑度可以用来评估任何模型对任何数据的理解程度。如果一个模型对某数据集的困惑度很低,我们就可以认为该模型对该数据集的理解较好,因为每个token的概率都较高。

  • 语言模型与困惑度:单个token的概率可能不准确,但通过困惑度可以评估模型在特定领域(如生物医疗)的表现。

  • GPT-1的训练方法:第一代GPT模型通过语言建模进行训练,拥有一亿多个参数,阅读了7000本书,训练量在当时是有限的。

  • 训练过程:GPT-1首先进行无监督预训练,然后进行下游任务的微调,如文本分类任务中使用最后一个隐藏状态和线性层进行微调。

  • OpenAI的发展阶段:在GPT-1时期,OpenAI可能还停留在传统的ROP任务中,尚未开发出更先进的模型。

实际上,单看一个token,其概率可能并不准确,因为我们实际上没有正确答案。但是,当我们把这个指标放到困惑度中时,例如我们现在要训练一个生物医疗的模型。现在我们有一段生物医疗的文本,包括DNA片段等。那么当模型在这个文本上困惑度低时,就说明它比较擅长生物医疗,我们可以简单地这样认为。因此,现在我们讨论了语言建模,再回过头来看GPT-1,即第一代的GPT,它是通过这种语言建模的方式进行训练的。它拥有一亿多个参数,并阅读了大约7000本书。实际上,这个训练量在我们现在看来是非常小的,7000本书的训练量可能连现在的万分之一都不到。但当时它就是这样做的,首先是通过无监督的预训练,在这7000本书上进行一个token一个token的预测。然后在下游任务的过程中,它还是进行了微调,即做了fine-tuning。例如,在文本分类任务中,它使用了最后一个隐藏状态,即最后一个表示,然后接入了一个线性层。这个线性层会输入一个分类的01向量,并通过softmax进行微调。因此,在这个时候,我们认为至少在这个阶段,OpenAI可能还没有开发出像现在这样的GPT,它的思维可能还停留在传统的ROP任务中。我们仍然希望训练一个模型来解决这些问题。

  • 初代GPT在震撼程度上不及BERT。

  • GPT-2通过扩展和增加训练数据量,展示了单向语言模型的可扩展性。

  • GPT-2能够处理多个任务,开启了从传统LOP到更大语言模型的转变。

  • OpenAI希望通过扩大模型来解决单任务训练的局限性,实现多任务的泛化。

  • GPT-2和GPT-3的论文被认为是高质量的。

因此,这也是初代GPT没有BERT更加震撼的原因。然而,到了GPT-2,情况略有改变。首先,他们进行了扩展,证明了这种单向语言模型也能够进行扩增。其次,其训练数据量也增加了。GPT-2开始能够解决不止一个任务,而是多个任务。他们认为这个语言模型本身具有可扩展性。在此,我强烈推荐大家阅读GPT-2的原论文。直到现在,我也认为这是我见过的写得最好的一篇论文之一。实际上,我们可以看到OpenAI在这个时候,尽管GPT-2的地位可能比GPT-1还要低,但我认为它被低估了。因为它开启了OpenAI从传统的LOP到更大的语言模型的转变,在GPT-2时期就已实现。只是他们当时还没有将参数扩增到1750亿。在原论文中,他们认识到对于一个传统的机器学习系统,针对单个任务进行训练和微调,导致其不能在多任务上进行泛化。这实际上意味着一些小的改动就可能引起整个系统的崩溃。因此,他们希望通过一种更根本的方法来解决这个问题。他们的方法就是扩大GPT-1,将GPT-1的下一个Token预测进行扩增。因此,他们认为在开始进行下一个Token预测时,我们就可以实现多任务的共同完成。这里就不详细念了,大家可以仔细阅读这篇论文。GPT-3的论文也写得非常好。接下来的故事我们就都知道了。

  • GPT-3是首个扩展到1750亿参数的语言模型,处理数据量远超以往。

  • OpenAI使用GPT-3在Reddit或Quora上进行回帖实验,长时间内未被识别为模型。

  • 在NLP领域,之前主要关注情感分类、翻译等任务,较少考虑跨任务泛化。

现代大语言模型的一个重要转折点是GPT-3,它首次将语言模型扩展到了1750亿参数,并且处理的数据量远超以往的模型。我记得当时OpenAI进行了一个实验,使用GPT-3在Reddit或Quora上回帖。实验进行了很长时间,但没有人意识到那是一个模型,这给人带来了极大的震撼。因为在NLP领域,我们之前认为让模型按照指令执行任务是不太可能的。我们之前主要关注于情感分类、翻译或一些简单的生成任务,很少有人考虑跨任务泛化的问题,即任务本身的概念。

  • In-context Learning特性:大型模型如GPT-3具有情境学习能力,能在不微调的情况下通过提供示例来学习新任务。

  • 模型应用:通过提供英文到法语的翻译示例,模型能学习并执行翻译任务。

  • 泛化能力:GPT-3的意义在于其泛化能力,能处理多种任务,而不仅仅是单一任务的优化。

  • 学术界反应:尽管GPT-3在公众中引起震撼,但学术界对其应用和效果持保留态度,认为微调模型如Bert和Roberta在特定任务上表现更优。

它在这里似乎被模糊化了。然后它有一个非常强大的特性,叫做In-context learning。我们来看一下。我们看不到这些模型,但是当它变大了,我们就能看到了。我们来看一下评论问题。在传统的机器学习中,我们必须给模型提供数百个例子的评论,然后模型会学习这些评论。但是在这里,我们给模型一些例子,然后它能学习我们想要的东西。我们看到很多模型能学习这些模型的行为。比如说,我们来看一下这些数学学习的例子。关键是,一个小模型,并不明白这些。这些模型的确实比较丰富。但是,我们来看一下这些大型模型的行为。它们明白如何解决这些问题。我们看到这些模型的行为,对。其实这个视频讲的主要是所谓的涌现的能力。

实际上,它一个最重要的涌现能力,我们能看到的就是叫情境学习,或者叫上下文学习,或者英文就叫in-context learning。它的做法也非常简单。当我们训练了一个1750亿参数的模型之后,我们就不微调它了。然后呢,我们想让它完成一个翻译任务,怎么办呢?我们就告诉它,你就把英文翻译成法语就行了。如果它好像翻译得不太好的话,我们很简单。就在前面加一些例子。比如说,这里的第二行,第三行,第四行,都是英文翻译成法语的例子。然后呢,我们再给一个第四行,然后让它翻译成法语。然后呢,我们再给一个第四行,然后让它翻译成法语。然后呢,我们再给一个第四行,然后让它预测下一个token,然后再预测下两个token等等。

这就是GPT-3。这时候呢,我们已经几乎没有任务的概念了。我们有一个超级大的模型,然后呢,我们告诉它做啥,它就能做什么。虽然很多任务上可能做的还是没有一些微调过的模型好。我记得GPT-3出来的时候好像,其实这个对学术界的影响可能没有大家想的这么大。尽管大家都觉得非常震撼,但实际上学术论文中并没有太多使用GPT-3的。或者说,好多研究者都认为,我在一个语料上微调一下我的模型,微调一下我的Bert,我的Roberta,比你的GPT-3好。那你这个有什么意义呢?我做不了我的情感分类任务,关系抽取任务,你做的没我好,而且你还这么大。实际上GPT-3的意义并不在于它做一个任务做的有没有Bert好,或者说有没有现在的所谓的最好的模型好。它的意义就在于泛化性,它能够泛化到无数的,只要能用Token表示的任务上。然后呢,我们告诉它做什么,它就可以做什么。这个呢,我们的想象力上限才会更高。但是实际上,在我的记忆中。

当时的NLP研究者几乎很少有人认识到这一点。在GPT-3之后,OpenAI推出了我们现在都熟悉的ChatGPT。但实际上,ChatGPT的构建方法与之前的模型有所不同。

  • InstructGPT是基于GPT-3的改进模型,通过后训练使其更遵循人类指令。

  • ChatGPT是InstructGPT的进一步发展,能更好地与人类对话,输出更准确、信息量更大且无幻觉的回答。

  • 示例展示了GPT-3可能输出错误或重复语料中的内容,而InstructGPT则能输出更合适的回答。

他们之前的一个模型叫做InstructGPT,几乎是一模一样的。他们对GPT-3进行post-training,就是我们下一节要讲的内容,然后让它变得更加能够遵循人类的指令。ChatGPT就是它可以更好地与人类对话,从而输出更加有信息量、更加正确,然后更加没有幻觉的回答。比如说下面这就是一个例子。GPT-3它可能输出的东西是一个错的,或者说它在语料中见过的,然后它就输出成这样的。但是InstructGPT它就可以去输出。

  • GPT-4是继Instrcut和ChatGPT之后的最新AI技术。

  • GPT-4能够处理约25000个词汇,是ChatGPT的8倍。

  • GPT-4具备图像理解能力,能解释图像含义。

  • GPT-4能识别图像中的逻辑关系,如线条切断导致瓶子飞走。

  • AI技术存在不完美和错误,需要进一步验证。

正确的表述这种形式。在Instrcut和ChatGPT之后,我们又了解到有了GPT-4。它能够处理约25000个词汇,比ChatGPT多出约8倍。它能够理解图像,并能表达其含义。例如,它能告诉我们,如果画面的线条被切断,那瓶子就会飞走。这就是这些AI能够进行测试的地方。它们并不完美,会犯错误。我们还需要对它们进行验证。

我认为您知道这些工作是您的期望。但我认为这基本上是为了每个人都能做到的。GPT-4的训练在去年8月份已经结束。所有在过去的事情中所发生的事情。

  • 该技术自推出以来已发展为大型标准,提升了安全性、效率和实用性。

  • 技术内容包括考虑敌人利益、不受欢迎的内容及私人关注。

  • 认识到技术发展是一个持续过程,需要不断学习、更新和提升。

  • 技术在教育领域展现出巨大潜力,如GPT-4能提供个性化学习计划。

在过去的几个月中,自我们推出以来,它已经发展成为一个大型的标准,使其更加安全、高效和有用。我们已经纳入了许多内容,包括对敌人利益的考虑、不受欢迎的内容以及对私人关注的重视。当我们推出这一模式时,我们清楚地认识到这只是一个开始。我们知道我们需要不断学习、更新,并持续提升所有系统,以更好地适应社会需求。对我而言,这些技术的最复杂用户是那些真正基于人类需求而开始使用的人。这些系统在教育领域展现出了巨大的潜力。GPT-4能够教授大量的课程计划,设想为五年级学生提供无限的时间和耐心的个性化学习。它是一个极好的工具,能够为所有人带来学习的机会。

在他们的技术层面上,这种表达体现了人生中最有用和有帮助的梦想。其真正目的是为了帮助大家增加更多的价值。

每一天的生活都能实现。OpenAI的合作旨在将这种技术发展成能够帮助全球的工具。

  • AI技术与通信技术、计算机电流、中央互联网和计算机器紧密合作,有望提升生活质量。

  • 尽管存在限制,但通信技术的成熟将带来深远影响。

  • GPT-4被视为首个专业智能AI系统的里程碑。

  • 通信技术的应用受到广泛关注,不仅限于技术专家,也包括普通用户。

希望AI的力量能帮助我们更有效地提升生活质量。随着通信技术、计算机电流、中央互联网和计算机器的发展,所有这些领域都能与AI技术紧密合作。尽管目前还存在一些限制,但我们已经可以预见未来这些通信技术的成熟将带来的深远影响。我认为GPT-4将成为世界上首个专业智能AI系统的里程碑。我们非常关注这些通信技术的应用,不仅限于技术专家,也包括广大用户。

GPT-4自去年发布以来,尽管有许多模型声称超越了它,但我认为它仍然是当前最好的模型。

  • GPT-4被认为是当前最好的语言模型。

  • 具体参数、数据量和架构细节未公开,OpenAI转变为CloseAI。

  • 模型基于大型架构,可能在Transformer上优化,使用混合专家模型,并在大型语料库上训练。

  • 应用范围扩展到编程、科学发现和教学等非传统语言任务。

  • 模型处理能力不仅限于语言,还包括任何可序列化的数据。

  • 训练和应用中,模型展现出高级智能和泛化能力。

总的来说,GPT-4应该是最好的。实际上,关于它使用了多少参数、多少数据以及使用了什么架构,我们都是不知道的,因为从这时起,OpenAI已经变成了CloseAI。但是可以预见的是,它仍然是一个语言模型,使用了一个非常大的架构,可能在Transformer上做了很多优化,也可能使用了混合专家模型,并在一个非常大的语料库上进行训练,展现出了更高级的智能。它已经不仅可以用在传统的语言任务上,实际上编程、科学发现甚至教学,我们都可以使用GPT-4来进行。所以到了这个节点上,我们可以去想象更多的应用。在我们传统的NLP中,我们可能只是让人来定义一个任务,然后我们去思考,去构建一个NLP模型,去完成它。但是到了GPT-4上,我们的局限已经不仅仅是语言了,而是序列。任何可以转化成序列的东西,都可以尝试用语言模型去处理。然后我们去学习它,去泛化它,让它达到更好的效果。在训练的时候,我们可以使用这个语言模型。

  • Scaling Law:随着模型大小、数据集大小和计算量的增加,语言模型性能提升。

  • 实验验证:计算量增加时,损失降低,性能提升。

  • 涌现现象:计算量增加到一定程度,小模型无法完成的任务会显著提升。

  • 开源社区贡献:尽管领先公司未开源,开源社区已开发出接近甚至超过ChatGPT 3.5的模型。

  • 训练策略:采用Transformer架构和语言建模方法,进行细微调整和新的训练策略。

在预训练语言模型的过程中,大家应该听说过一个非常重要的现象,即Scaling Law。Scaling Law指出,随着模型大小、数据集大小和训练所用计算量的增加,语言模型的性能会平稳提升。这一规律是当前大型语言模型训练的基础。尽管这一现象看似直观,但实际上在之前,我们并不清楚模型越大效果越好。我们曾认为模型达到一定大小后会遇到瓶颈,不值得投入更多资源。

因此,需要通过一系列实验来验证,当数据量和模型大小增加时,即计算量增加时,性能曲线如何变化。研究者发现,只要计算量增加,损失就会降低,性能提升。此外,一些研究者提出,在计算量增加的过程中,会出现所谓的涌现现象,即小模型无法完成的任务,在达到一定计算量后会突然提升。

例如,计算量为10^22次方时任务表现不佳,但达到10^24次方时表现显著提升。尽管涌现现象在学术界存在争议,认为这并非凭空出现,而是平滑出现的,只是选择的指标不同。重要的是,能力确实随着模型和数据量的增加而提升。涌现能力具有不可预测性等特点,但通过更细致的研究,这些问题或许能得到解答。

2024年,由于OpenAI等领先的大语言模型公司未开源,开源社区涌现了许多训练策略和模型。我们仍采用Transformer架构和语言建模方法,在更多数据上训练,并进行了细微调整。例如,法国人工智能公司Mistral开发的Mistral模型,采用混合专家架构,而OpenBMB开发的MiniCPM模型,用20亿参数达到70到130亿模型的效果。我们进行了风动实验,并使用了新的训练策略,如WSD模拟退火调度器,以更好地学习。尽管最佳公司未开源,但开源社区如OpenBMB、HuggingFace已做出许多贡献,我们已能训练出接近甚至超过ChatGPT 3.5的模型,但与GPT-4仍有差距。训练这样的模型需要神经网络基础和语言建模等基本知识,尽管这些看似简单,实际训练时却非常复杂。

  • 超参数的微小变化可能对模型性能产生显著影响。

  • 需要在小模型上进行实验,以实施Scaling Law。

  • 并行计算的两种方式:数据并行和模型并行。

  • 数据并行涉及数据分割和模型副本的汇总更新。

  • 模型并行涉及模型分割和不同部分的计算,节省显存。

  • 现代模型训练涉及复杂的工程细节和多机器间的互联通信。

  • AI人才需具备理论知识(如神经网络、机器学习)和实践技能(如硬件操作、计算过程)。

  • 新时代AI人才应结合理论与实践,形成综合视野。

这件事变得非常复杂,例如我们的超参数,即使是一个小超参数也可能对整个模型的性能产生重大影响。我们需要考虑数据的配比以及如何实施Scaling Law,这意味着不能仅在大模型上进行实验,而应先在小模型上做好实验。另一个重要的考虑是进行并行计算。在传统的神经网络深度学习中,我们通常采用两种并行方式:数据并行和模型并行。数据并行是将数据分成多份,每张卡存储一个模型副本,每个副本处理数据后汇总更新模型。模型并行则是将模型分成多份,进行不同部分的计算,这样可以节省显存。然而,这可能会面临更复杂的问题,如多机器间的互联和通信。因此,现代模型训练不仅是科学问题,也涉及大量工程细节。AI人才不仅需要懂理论,如神经网络、机器学习和自然语言处理,还需要懂硬件和实际计算过程,如Quda和不同显卡间的操作。新时代的AI人才应将理论与实践结合,具备将不同知识联系起来形成更大视野的能力,以做出更有影响力的工作。

  • 数据集规模:Pile数据集容量为850GB,而Find Web数据集规模更大。

  • 数据选择的重要性:数据的选择、来源和配比对模型性能至关重要。

  • 数据多样性的重要性:为保持模型的通用能力,数据多样性是必要的。

  • 模型研究的焦点:2023年至2024年,许多突破性模型研究集中在数据本身。

  • AI人才的要求:新时代AI人才需具备数据工程能力,理解数据结构,并能预测数据对模型结果的影响。

一个大型模型显然需要大量的数据。这里有一个著名的数据集,名为Pile,其容量应为850GB。然而,如HuggingFace最近发布的Find Web数据集,其规模远超Pile。数据的重要性不言而喻,甚至可以说是最关键的因素。我们如何选择数据,数据来源何处,以及数据的配比,都是至关重要的。例如,如果我们希望模型在编程和数学方面表现更强,就需要加入相应的数据。同样,若希望模型在生物学领域表现出色,也需混合生物学数据。同时,我们不希望模型失去通用能力,因此数据的多样性同样重要。实际上,2023年至2024年,许多最具突破性的模型研究都集中在数据本身。继续探讨,新时代的AI人才应具备数据工程的能力,深入理解数据结构,并具备一定的直觉,以预测不同数据可能带来的结果和训练出的模型类型。众所周知,在测试集上训练通常能带来良好的结果。但由于时间关系,我们只能讨论到这里。

  • Post-training是在完成Pre-training之后进行的。

  • 假设压缩理论成立,模型在预训练后已将互联网上的所有数据压缩到其参数中。

  • 数据类型包括深入的论文、个人微博或Twitter、不同国家的政治观点、编程相关的信息(如汇编代码、Python代码和Java代码)。

  • Post-training的目的是更好地呈现这些压缩的信息。

接下来我们将讨论Post-training,刚才已经完成了所有的Pre-training部分。在Post-training中,我们可以假设所谓的压缩理论是正确的。当前的模型有能力构建互联网上的所有数据,包括最深入的论文、个人发布的微博或Twitter、不同国家的政治观点,以及编程相关的信息,如汇编代码、Python代码和Java代码。如果压缩理论成立,那么一个模型在预训练之后,已经将所有这些信息压缩到其参数中。为了更好地呈现这些信息,我们需要进行Post-training。

  • 后训练是模型训练的必要步骤,有多种称呼如对齐或适配。

  • 后训练过程的重要性需要被认识。

  • GPT-4在2022年8月完成预训练后,进行了8个月的对齐工作。

任何模型实际上都需要进行后训练。后训练有多种称呼,例如对齐(alignment)或适配(adaptation),在之前我们可能称之为微调。无论我们如何称呼,都需要了解这一过程的重要性。GPT-4在2022年8月份完成预训练后,又花费了8个月的时间进行对齐。

  • 即使是强大的模型如GPT-4,在某些领域如创作七言绝句或七言律诗上表现不佳。

  • 后训练或对齐过程主要包括四点:

    • 场景特化:使模型适应特定或多种场景,如对话场景。

    • 能力激发:有效释放模型在预训练中压缩的信息。

    • 增强稳定性和鲁棒性:通过优化过程减轻模型的幻觉问题。

    • 价值对齐:确保模型符合人类价值观,避免不当行为。

而且,即使是目前最强大的模型,也存在其不擅长的领域。例如,今天让GPT-4去创作七言绝句或七言律诗,它可能表现不佳。那么,后训练或对齐究竟涉及哪些内容呢?实际上,主要包括以下四点:首先,是场景特化,即使模型适应特定或多种场景,如对话场景。其次,是能力激发,即如何将模型在预训练中压缩的信息有效释放出来,这是其重要功能之一。第三,是增强模型的稳定性和鲁棒性,通过优化对齐或后训练过程,减轻模型的幻觉问题。最后,是价值对齐,确保模型符合人类价值观,避免其产生不当行为。这一部分将在后续课程中详细探讨。

  • OpenAI曾重视对齐问题,成立了“超级对齐”小组,由Jan Leike和Ilya Sutskever领导。

  • 该小组计划投入大量计算资源专注于超级对齐,但两位领导已离职,小组可能已不存在。

  • 对齐的定义是让AI根据输入输出人类期望的内容,如情感分类和编写代码。

  • 对齐在AI输出特定内容时尤为重要。

对齐究竟是什么?OpenAI之前非常重视对齐问题,并成立了名为“超级对齐”的小组,计划投入四分之一的计算资源专注于超级对齐。该小组由Jan Leike和Ilya Sutskever领导,但他们现已从OpenAI离职,因此超级对齐小组可能已不存在。然而,超级对齐或对齐本身仍然非常重要。对齐的定义很简单,即让AI根据特定输入输出人类期望的内容。例如,在进行情感分类时,我们要求AI判断一句话的情感是正向还是负向;在编写代码时,我们要求AI完成某个课程的大作业。当人类需要AI输出特定内容时,对齐就显得尤为重要。

例如,让GPT编写一段代码,让机器人随意移动一个物体,然后让AlphaGo进行围棋对弈,接着让BERT执行文本分类。

我们可以将其视为对齐,以使模型输出我们期望的结果。为何要对齐?因为它能够增强模型的能力,提高其可信度,并确保安全性。

  • 模型在面对道德判断时,如“人应不应该伤害别人”,会基于学到的犯罪小说和法律内容进行概率计算。

  • 模型需要通过对齐使其判断更加可靠和准确。

  • 对齐过程虽然不直接增加新知识,但能激发模型已有的知识,使其表现出新的能力。

  • 对齐和SFT、预训练的loss函数在技术上没有变化,仍依赖于语言建模和文本泛化。

  • 当前是研究对齐和后训练的理想时机,因为资源有限。

在模型不知道该往哪个方向走时,例如当我们给它输入一个人类价值观的观点,比如人应不应该伤害别人,这个模型已经学过了所有相关内容。它既学到了犯罪小说中人伤害别人的例子,也学到了法律中人不应该伤害别人的例子。那么,它如何判断哪个是正确的呢?因为我们之前提到,我们所做的一切都是基于语言建模,它所做的只是概率计算。它知道人伤害别人有一个概率,人不伤害别人也有一个概率。那么,如何确定哪个是正确的呢?因此,我们需要对齐模型,使其更加可靠,同时也增强其能力。很多人认为对齐并不能学到新的东西,只是激发了它已有的知识,这种观点是错误的。因为所谓的能力或知识,本身就是人类定义的。我们关注的只是它的表现,如果它确实表现出了新的东西,我们就可以认为它学到了新的东西。实际上,对齐和SFT(fun tuning)以及预训练的loss函数并没有任何变化,它仍然是通过语言建模在大规模文本上进行学习,并且我们希望它在未见过的文本上也能泛化。现在正是研究对齐或后训练的最佳时机,因为我们能研究预训练的人不多,包括实验室和很多公司的计算机资源都有限。

  • 预训练实验的重要性不足以吸引所有研究者。

  • 后训练的重要性逐渐超过预训练。

  • 早期人工智能系统智能水平低,无法跨任务泛化。

  • 早期研究者关注模型在特定任务上的表现。

  • 现在仅关注表现的做法已不再适用。

也不足以让每个研究者都专注于预训练实验。而且,后训练的重要性逐渐超越了预训练。在早期的人工智能系统中,它们只能执行非常有限的任务,并且智能水平很低,无法进行跨任务的泛化。例如,使用Bert训练的文本分类模型只能进行文本分类,无法执行其他任务。因此,那时的研究者只关注模型在特定任务上的表现。如果能在文本分类任务上取得顶尖成绩,就会被认为是优秀的。然而,现在这种仅关注表现的做法已经不再适用。

  • 当前系统能执行复杂任务并具备高级别智能。

  • 系统能完成一些尚未被意识到的任务。

  • 一个具体例子是ChatGPT被用来模拟Linux操作系统。

现在已经不再那么受关注,因为每个任务我们都能使其表现出色。因此,当前的系统能够执行许多复杂的任务,并具备较高级别的智能,甚至有些事情我们尚未意识到它们能够完成。例如,我记得当ChatGPT刚推出时,有一个非常引人注目的应用,即许多人利用它模拟Linux操作系统。

  • CD命令可以进入指定文件夹。

  • 创建文件夹的命令也能被执行。

  • 不确定模型是否在训练中接触过相关语料。

  • Linux操作系统可以转化为Token序列。

  • 模型能够记忆、学习和泛化这些信息。

  • 目前的模型需要进行对齐。

  • 之前的模型流程是先预训练,再进行翻译。

例如,当你输入CD命令,它能够进入指定文件夹;当你要求它创建一个文件夹,它也能做到。我们不确定它是否在训练过程中接触过这样的语料,但应该有。这种能力在当时看来几乎像是科幻小说中的情节。然而,回顾本课最初的观点,一个Linux操作系统同样可以转化为Token序列。因此,模型能够记忆、学习并泛化这些信息,也并非不可思议。目前,我们需要进行对齐。再次强调,在之前的模型中,我们首先进行预训练,然后再进行翻译。

  • 对齐过程包括在无监督语料上预训练,然后在特定任务上进行有监督训练。

  • GPT-1使用最后一个token的最深层隐藏状态,通过线性层和softmax函数输出类别概率分布。

  • BERT使用CLS token或所有token的表示平均值,通过线性层和softmax函数输出分类结果。

  • T5模型输出token,这些token在词表上形成概率分布,模糊了任务的概念。

对齐过程,即调整(tuning)、适应(adaptation)或对齐(alignment),是在无监督的语料上进行预训练,然后在特定任务上进行有监督的训练。以GPT为例,初代GPT-1在尚未发展成后来的ChatGPT时,其对齐过程如下:针对每个任务,使用最后一个token的最深层隐藏状态,并通过一个线性层输出softmax函数,该函数输出类别上的概率分布。例如,在分类任务中,若A类的概率为0.8,则该样本会被归类为A类。同样,BERT也采用类似方法,使用CLS token或所有token的表示平均值,通过线性层和softmax函数输出分类结果。而T5模型则有所不同,其输出不再是简单的类别概率分布,而是token,这些token本身也是一种概率分布,但这种分布是在词表上。因此,输入和输出都变成了token,从而模糊了任务的概念。

  • GPT-3在任务定义中转化为token到token的序列处理。

  • 后训练或对齐阶段有两条主要发展路线:

    • 第一条侧重泛化性,使用较少数据在更多任务上取得更好效果。

    • 第二条关注效率,使用更少参数或计算资源完成任务。

  • 这两条路线不冲突,即使提高效率,仍可期望模型用更少数据完成更多任务。

  • 效率路线中,传统微调方法成本高,需在每个任务后更新所有参数。

在定义好的任务中,这些任务都转化为从token到token的序列。接下来是大家熟知的GPT-3。在后训练或称为对齐阶段,主要有两条发展路线。第一条路线更侧重于泛化性,即使用较少的数据在更多任务上取得更好的效果。例如,我们可能希望仅用几条数据就能完成一个高质量的任务,或者仅用10个任务的1000条数据来完成50个任务的1万条数据。甚至,我们可能希望开发一个能够执行任何任务的模型。第二条路线则关注效率,即使用更少的参数或计算资源来完成任务。值得注意的是,这两条路线并不冲突,即使使用更少的参数和计算资源,我们仍然可以期望模型使用更少的数据来完成更多的任务。我们先讨论效率这条路线。在效率方面,传统的微调方法是在训练模型后更新所有参数,并在下一个任务中再次更新所有参数,这种方法可能成本非常高。

  • 预训练模型的高成本问题:超过90%的研究组和实验室难以承担,即使是微调也面临巨大挑战。

  • 微调成本实例:1750亿参数的模型微调可能需要100张A100,每张80GB的A100,开销巨大。

  • 引入新范式:参数高效的微调(Data Tuning),旨在使用极少的计算资源和参数更新来完成微调。

  • Data Tuning的优势:大幅降低存储空间需求,例如1750亿参数模型存储空间可降低一万倍。

  • 参数高效的微调方法分类:增量式方法、指定式方法、重参数化方法。

预训练模型的高成本使得超过90%的研究组和实验室难以承担,即使是微调也面临巨大挑战。以一个拥有1750亿参数的模型为例,进行微调可能需要100张A100,每张80GB的A100,这对于计算资源最丰富的实验室来说,开销也是巨大的。因此,我们引入了一种新的范式,称为参数高效的微调(Data Tuning)。这种微调方法旨在使用极少的计算资源,更新极少的参数来完成微调。其优势非常明显,首先可以大幅降低微调所需的存储空间。以1750亿参数的模型为例,与全参数微调相比,使用Data Tuning可以将存储空间降低一万倍。虽然微调过程中的显存并未降低至相同程度,但仍可减少约四分之三或三分之一。参数高效的微调之前并不是一个体系化的研究领域,但陆续有研究表明,许多研究实际上在做同一件事。目前,这一领域主要分为三类方法:增量式方法(Addition Based),即向模型中添加原本不存在的参数,并仅微调这些参数;指定式方法,即指定模型中哪些参数可调,哪些不可调,这可能是人工选择的,也可能是通过启发式方法或训练新的神经网络参数选择器来决定的;重参数化方法,即将微调过程转化为低秩或低维过程,实现整个优化过程的转变。

  • 论文发表于Nature Machine Intelligence,涉及参数高效微调领域。

  • 论文提出Delta Tuning框架。

  • 介绍了Adapter作为参数高效微调的初始方法。

  • Adapter在Bert时代已提出,通过在Transformer中加入小型神经网络单元实现微调。

  • 微调仅涉及0.5%到8%的参数,通过调整映射维度实现适配。

这里推荐大家阅读一篇论文,这其实也是我写的。它是我们组在参数高效微调领域,在Nature Machine Intelligence上发表的一篇综合分析性论文。在这篇论文中,我们提到了Delta Tuning这个统一的框架。接下来,我们将介绍参数高效的微调。首先,我们介绍其最初的作品,即Adapter。Adapter可以被称为适配器,无论怎么翻译都可以。实际上,它在Bert时代就被提出。其做法非常简单,即在一个Transformer中加入两个小的神经网络单元。这些神经网络单元包括一个下映射矩阵、一个非线性层和一个上映射的线性矩阵。加入这些神经网络单元后,我们只微调Adapter的参数,其他部分保持不变。通过调整下映射和上映射的维度,Adapter本身可以变大或缩小。因此,我们基本上只需微调0.5%到8%的参数,即可完成适配。这项工作其实在Bert时代就已经被提出。谢谢大家!

  • Bert的初期关注度低:由于Bert规模不大,且微调可能降低性能,初期关注度不高。

  • 微调成本的增加:随着T5和GPT-3的出现,微调成本上升,促使参数高效微调方法重新受到关注。

  • Adapter方法的介绍:Adapter方法简单,但存在前向传播负担加重的问题,尤其是在模型层数增加时。

  • LoRA方法的流行:LoRA已成为最受欢迎的参数高效微调方式,特别是在使用Diffuser模型的场景中。

实际上,当时关注Bert的人并不多,因为Bert的规模并不大,大家普遍认为既然已经进行了微调,那么就应该追求更高的性能。如果微调可能导致性能损失,那么就没有太多人关注。然而,随着T5和GPT-3的出现,人们发现微调这些模型的成本越来越高。这时,以Adapter为首的参数高效微调方法再次引起了广泛关注。现在,有一个更为著名的方法叫做LoRA,相信所有同学都听说过,它已经成为最受欢迎的参数高效微调方式,尤其是在使用了许多Diffuser模型的场景中。我们先介绍Adapter,Adapter非常简单,但我们可以发现它有一个缺点,即原本模型已经足够深,再加上两层Adapter,每层加两个Adapter,24层就需要加48个,这样前向传播的负担会加重。

  • 前向传播资源紧张,增加负荷会延长传播时间。

  • 反向传播虽无需调整所有参数,但整体不经济。

  • 研究者认为Adapter虽具开创性,但未必最优。

  • 提议将Adapter移至外部,通过增加旁路节省空间和计算资源。

  • 节省计算资源通过减少遍历网络次数,节省显存通过缩小隐藏空间形状。

  • 引入Prime Tuning和Preface Tuning,通过微调前缀矩阵达到良好效果。

在前向传播过程中,原本资源已显紧张,若再增加负荷,前向传播时间将进一步延长。尽管反向传播时,可能无需调整所有参数,其增长有限,但整体而言,这种做法并不经济。因此,许多研究者认为Adapter虽具开创性,但未必是最优选择。一种策略是将Adapter移至外部。此提议旨在提供一种新思路:通过在每一层增加旁路,连接外部Adapter,前向传播保持常规路径,反向传播则仅至某一缩放器处终止。这样既能节省空间和计算资源,也能减少显存使用。节省计算的原因在于无需前向和反向传播都遍历整个网络,而节省显存则通过缩小隐藏空间形状实现。虽然实际操作中存在诸多技巧,但这一思路为不必要在神经网络每层添加小型神经网络提供了可能。此外,还可以在隐藏空间或输入前端引入Prime Tuning或Preface Tuning,这两种方法相辅相成。Preface Tuning在神经网络每层的表示(即隐藏空间h)前加入可计算矩阵,而Prime Tuning则是其简化版本,通过微调这些前缀矩阵,后续部分保持不变,从而达到良好的效果。

  • 技术应用:在模型的输出层前加入prefix,仅调整这些prefix,中间层不添加。

  • 技术特点:prefix tuning强调参数高效,添加的上下文是无意义的soft矩阵。

  • 效果表现:在大规模模型(100亿参数)中效果与全模型微调相当,但在小模型中效果不佳。

  • 潜在问题:由于仅调整输入层的少量embedding,信息在传播中可能受损,影响效果。

我们只在输出层,即embedding层的前面,加入prefix,然后只需调整这些prefix。在中间的这些层我们不再添加,以确保其效果。这项工作在当时具有很大的影响力,但我必须指出,它与我们现在讨论的prompting(提示工程)以及后续要讲的prefix learning实际上并非同一概念。这里的prefix tuning更强调参数高效,而非添加额外的上下文。它所添加的上下文实际上是无意义的,是soft的,即一些可微调的矩阵。因此,许多人可能会混淆这一点,大家需要注意。prefix tuning发现,当模型扩展到100亿参数时,其效果与全模型微调相当。然而,当模型较小时,它无法发挥作用,因为大家可以想象,我们在输入层加入了一些很少的embedding,然后调整它们。这些embedding需要经过输出层,再反馈回输入层。在调整过程中,它仅调整了开头的这些embedding,因此许多信息可能在传播中受到损失,导致其效果并不理想。

  • LoRA(Low-Rank Adaptation)是一种热门方法,核心思想是对神经网络参数的变化量进行低秩分解。

  • 具体操作是对矩阵变化量(如B-A)进行分解,例如将1000×1000的矩阵分解为1000×1和1×1两个矩阵,以减少计算量。

  • LoRA的作者认为,尽管实际模型中的变化量可能是满秩的,但通过强制低秩分解,可以认为其本质上是低秩的,或者可以用低秩矩阵来近似表示。

  • 这种方法涉及复杂的等价关系,虽然在数学上难以精确计算,但具有深入思考的价值。

接下来将介绍目前最热门的方法——LoRA(Low-Rank Adaptation)。LoRA的核心思想是对神经网络参数的变化量进行低秩分解。需要注意的是,我们并未直接分解神经网络本身的矩阵,而是分解其参数的变化量。例如,从矩阵A变为矩阵B,B-A即为变化量。我们仅对这一变化量进行分解,例如一个1000×1000的矩阵,可以分解为1000×1和1×1两个矩阵。这种分解显著减少了计算量。实际上,我们仅调整变化量的公式,并将其转化为低秩形式。LoRA的作者认为,这种低秩表示实际上是一种本质的低秩。尽管在实际模型中,变化量可能是一个稠密的满秩矩阵,但我们强制进行低秩分解,认为其本质上具有低秩特性,或者可以用低秩矩阵来表示这种变化。虽然单个低秩矩阵可能无法完全表示,但通过对所有模型的每个矩阵进行低秩分解,某种程度上可以表示其满秩时的变化。这涉及到一个复杂的等价关系,尽管在数学上难以精确计算,但值得深入思考。此外,这也引申出一个话题,即当前许多人提出的“革命”概念。

  • 新架构在性能上超越Transformer,具有更好的学习和泛化能力。

  • 新架构的革命性在于Scaling Law,而非Transformer本身。

  • 神经网络和Transformer都能模拟复杂函数,导致性能竞赛难以分出胜负。

  • 当Scaling Law达到瓶颈时,需要更高效的架构来减少计算量。

  • LoRA利用低秩矩阵模拟满秩矩阵的变化,通过固定秩(通常为2、4、8)进行矩阵分解。

  • 秩的设定可能因任务复杂度而异,固定秩并不一定限制神经网络的复杂计算。

这个新架构在性能上超越了Transformer,能够学习更多并泛化更广,即使在相同的数据集上。实际上,这种神经网络新架构的革命性并不在于Transformer本身,而是Scaling Law。无论神经网络架构如何新颖,都是在庞大的数据集中模拟复杂的函数。由于这个函数足够复杂,神经网络和Transformer都能模拟。因此,这两者之间存在一种A能做到的B也能做到的情况,这变成了一场无法取胜的比赛。只有当Scaling Law达到瓶颈,即模型性能无法再提升时,我们才需要考虑如何用更高效的架构来模拟Transformer的表现,从而减少计算量和推理的计算量。这是题外话。

总之,LoRA就是利用低秩矩阵来模拟满秩矩阵的变化。LoRA后续有许多改进,这里重点介绍我自己的工作。LoRA将一个矩阵分解成低秩和高秩部分,中间有一个固定的秩,通常设为2、4、8,多数情况下设为8,研究发现设为16并不一定更好,可能因为任务本身很简单,不需要设得太高。尽管秩是固定的,但实际上我们都知道,神经网络的计算或在大模型中的计算是一个极度复杂的过程。当我们人为设定一个秩时,它很可能是自由的。

  • 提出的方法通过引入系数gating实现模型质量的动态调整。

  • 当某个值低于阈值时,该值设为0,导致gating和相应矩阵的行和列变为0。

  • 在LoRA基础上,模型可以进行更细致的调整,包括满值和接近全0的值。

  • 推理过程中可以丢弃0值矩阵,实现动态调整。

  • 该方法能够模拟复杂过程,每个矩阵的LoRA分解变化值各不相同。

  • 无论是adapter、prefix tuning还是LoRA,本质上都在选择参数进行微调。

  • 何俊贤老师在CMU时的工作,采用统一视角理解LoRA、prefix tuning和adapter,并用数学框架表示,发现新变体。

这里我提出了一种方法,旨在实现其质量的动态调整。具体来说,是通过在中间引入一个系数gating。例如,当一个下降量中的某个值低于某个阈值时,该值将被设为0。一旦设为0,gating本身会有一行变为0,进而导致相应矩阵的一行和一列变为0。因此,在LoRA的基础上,该模型可以实现更细致的调整,有的可能是满值,有的可能是接近全0的值。在推理过程中,我们可以丢弃这些0值矩阵。我认为这种做法相当聪明。通过这种方式,我们能够得到可以动态调整的模型,在不同位置有不同的矩阵,每个矩阵的LoRA分解变化值也各不相同,从而更好地模拟复杂过程。我们可以看到,无论是adapter、prefix tuning还是LoRA,它们本质上都在做同一件事,即选择一些参数进行微调,而其他参数保持不变。许多工作尝试用同一个视角来看待它们。这项工作是由香港科技大学的何俊贤老师在CMU时进行的,他采用了一个统一的视角,让大家理解LoRA、prefix tuning和adapter究竟在做什么,并用一个统一的数学框架表示出来,同时还能发现一些新的变体。

  • 研究内容:Data Tuning的研究工作,包括理论推导和实践应用。

  • 方法本质:Data Tuning方法在优化和自由控制方面本质上是相同的。

  • 资源推荐:推荐在Hugging Face上查看Path库和OpenData库,其中OpenData是先开发的。

  • 历史背景:在OpenData之前,Data Tuning需要直接修改模型代码,如在Bert和Roberta模型上实现超级Adapter。

刚才提到的就是我们关于Data Tuning的研究工作,实际上我们也进行了理论推导。我们发现从优化和自由控制的角度来看,这些方法本质上在做同一件事情,推导结果更为深入。如果大家对此感兴趣,可以进一步查阅相关资料。不过,Data Tuning并非本节课的重点,因此今天我们只做简要介绍。如果大家想尝试Data Tuning,可以在Hugging Face上查看Path库和OpenData库。这两个库非常有趣,实际上OpenData是我们先开发的。当时我们面临的问题是如何进行Data Tuning,需要对模型参数进行修改。在OpenData出现之前,一种做法是直接修改模型代码。例如,如果我们维护了一个Bert模型,并开发了一个名为超级Adapter的Data Tuning算法,我们需要在Bert模型上实现超级Adapter,并在Roberta模型上同样实现。这意味着我们需要在不同的模型上重复实现这些参数修改。

  • Delta tuning结构的实施:从v3升级到v4,不再适用v3版本。

  • 更新方式:选择通过调整计算图而非直接修改模型代码。

  • 计算图修改:指定模型结构变化,修改前向和后向计算方式。

  • Hugging Face的参考:可能参考了Delta tuning方法。

  • 转向泛化话题:从prompt开始讨论,包括GPT-3的1750亿参数和incontent learning。

  • prompt的定义和应用:可以是上下文的一部分,用于引导模型执行任务。

新的Delta tuning结构已经实施,接下来我将更新我的代码库,从v3升级到v4。这意味着之前的v3版本将不再适用。我们发现这种更新方式相当繁琐,因此我们选择不直接修改模型代码,而是通过调整计算图来改变代码。当引入Delta tuning后,我们指定模型结构的变化,并修改其计算图,包括前向和后向计算方式,从而避免直接修改代码库。对此感兴趣的读者可以查看相关实现。值得一提的是,Hugging Face的Path也采用了类似的方法,可能是参考了我们的做法,具体情况可以询问Hugging Face团队。

关于tuning的讨论到此结束,接下来我们将转向另一个话题——泛化。如果大家还记得,我们将从prompt开始讨论。例如,当GPT-3发布时,它拥有1750亿参数,无法进行微调,这一点之前已经提到过。我们通过描述任务来引导它执行,这种描述就是prompt。我们也可以在描述任务后提供一些例子,进行所谓的incontent learning,这些例子同样属于prompt。本质上,prompt可以是上下文的一部分,这里我们主要指的是上文。任何内容都可能被视为prompt。例如,当我们告诉XGPT这是一篇论文,并要求它阅读并指出最重要的部分时,这也是一种prompt的应用。

  • 概念转变:GPT-3之前,模型训练主要依赖传统机器学习方式;GPT-3后,引入通过上下文描述任务的新方法。

  • 任务描述方式变化:从依赖高维空间和流形定义任务(如情感分类)转变为使用语言或token直接描述任务。

  • prompt learning的兴起:将各种任务转化为语言建模任务,缩小了上下游任务的差距,使得小模型也能有效工作。

  • 发展至instruction tuning:从少样本单任务学习发展到跨任务零样本泛化,不再区分具体任务。

  • 后续研究:由OpenAI、HuggingFace和Google等机构继续推进。

这篇论文中,每一个token组合起来也是一个prompt。在GPT-3出现之前,我们似乎没有这个概念。因为在此之前,我们使用预训练模型时,仍然采用传统的机器学习方式。然而,有了GPT-3之后,我们开始意识到可以通过增加上下文来描述我们想要完成的任务,而不仅仅是依赖训练集进行训练。例如,我们之前的任务是情感分类,需要在高维空间中表示,并定义一个流形,其中落在左边的为类别A,右边为类别B。现在,我们通过使用语言或token来明确描述我们想要完成的任务。这导致了prompt learning的出现,即将任何任务(如情感分类、实体识别、知识探测)转化为语言建模任务,使得下游任务和上游任务之间没有差距。这种方法证明,即使在小模型上也能有效工作。通过添加prompt并调整一些参数,模型可以用非常少的样本来完成原本需要大量样本才能完成的任务。这种prompt learning后来演变为instruction tuning,即从单任务的少样本学习转变为跨任务的零样本泛化。简而言之,在prompt learning阶段,我们希望用少样本完成单任务,而在instruction tuning阶段,我们追求跨任务泛化,甚至不再区分任务的概念。后续的相关工作由OpenAI、HuggingFace和Google等机构进行。

其实当时我们也发现了类似的现象,即指令微调可以带来跨任务的领域泛化。这里其实也非常简单,就是我在上面这两个任务上训练了之后,然后没有见过下面的任务,下面的任务上它也能表现得非常好。

  • 指令微调与传统多任务学习的主要区别在于输入形式,使用不同的提示(prompts)和扩大输出空间。

  • 指令微调通过将任务数据转化为更模糊的形式,实现在更多任务上的评测。

  • 更大的模型或更多的数据能提升指令微调效果,如OpenAI的InstaGPT。

  • 指令微调是实现零样本泛化的关键技术,使模型在没有特定训练的情况下也能执行任务。

这就是指令微调的基本概念。现在大家可以思考一下,指令微调和传统的多任务学习,甚至是GPT-2所强调的多任务学习,究竟有何不同?实际上,它们之间确实存在差异。这种差异主要体现在指令微调的输入形式上。在指令微调中,我们使用不同的提示(prompts),即由不同人编写的上下文来代表任务。此外,我们扩大了输出空间,不仅仅是在ABC任务上训练和评测,而是在更多的任务上进行评测。我们将来自任务的数据转化为与任务关系越来越模糊的形式。这就是指令微调的作用。

指令微调还表明,更大的模型或更多的数据(尽管关于更多数据的争议仍然存在)确实能带来更好的指令微调效果。OpenAI的XGPT的前身,InstaGPT,就是通过结合指令微调和人类反馈的强化学习实现的。因此,我们现在讨论了预训练和后训练,最终讲到了指令微调,我们离构建出XGPT只有一步之遥。

最后,我想强调的是,当前大语言模型的核心能力来源于指令微调带来的零样本泛化。通过指令微调,我们发现模型能够跨任务进行零样本泛化,即在没有学习过翻译的情况下也能进行翻译,这促成了我们现在所有的大语言模型。所有可见的语言模型都离不开这一关键技术。

  • 自ChatGPT和GPT-4发布后,许多大型运营模型迅速出现,涉及众多科技公司和人工智能研究机构。

  • 这些模型均采用指令微调的基本框架,并利用其优势。

  • 著名模型包括Alpaca和BQNA。

  • 作者在疫情期间尝试微调了一个对话模型,体验其多轮对话和多任务处理能力。

自从ChatGPT和GPT-4发布后,众多大型运营模型如雨后春笋般涌现。这些模型几乎涵盖了所有科技公司和人工智能研究机构,它们各自开发了独特的模型,但无一例外地都遵循了指令微调的基本框架,并充分利用了指令微调带来的优势。其中,较为著名的模型包括Alpaca和Vicuna。值得一提的是,在ChatGPT刚发布时,正值疫情期间,我还在读博,寒假期间我独自在家,对ChatGPT的实现方式感到好奇。我尝试自己微调了一个对话模型,亲自体验其多轮对话和多任务处理的能力。

  • 工具开发门槛低:使用少量数据和简单微调即可开发出多任务对话工具。

  • 内部讨论未公开:相关发现仅在内部讨论,未对外公开。

  • 斯坦福Alpaca项目:采用自指令方法,通过种子数据生成更多数据进行微调,开发出遵循人类指令的模型。

  • Vicuna项目:使用真实世界中人与ChatGPT对话的数据进行微调,效果与ChatGPT相当。

  • 指令微调趋势:转向数据生成,方法主要是监督微调,预测下一个Token输出。

  • UltraChat项目:开发思路不追求特定任务最佳效果,而是基于Token序列构建数据。

发现实现这样一个强大的工具,其门槛确实非常低。即使使用很少的数据,只需进行简单的微调,它就能具备多端对话的能力,也能执行不同的任务。然而,这一发现仅限于我们内部讨论,并未公开发布。斯坦福的Alpaca项目则采用了自指令方法,通过种子数据生成更多数据,并在这些数据上进行微调,从而开发出一个能够遵循人类指令并完成各种任务的模型。而Vicuna则更进一步,使用真实世界中人与ChatGPT对话的数据进行微调,这种方法被称为ShareGPT。结果显示,其效果与ChatGPT相当。因此,在指令微调层面,大家更多地转向了数据生成,因为方法本身并无太大差异,都是通过监督微调,给定输入并预测下一个Token的输出。此外,我们还开发了一个名为UltraChat的项目。在开发UltraChat时,我的思路非常明确,并非为了在特定任务上达到最佳效果,而是不再通过任务来构造数据,因为任务本质上就是一系列Token。

  • 人类与机器交互的三种主要类型:

    • 信息提取:从现有资源如维基百科获取知识。

    • 信息创造:如生成新的诗歌。

    • 信息转化:如对材料或论文进行总结。

  • 在交互过程中,通常不特别区分具体的任务类型。

我们需要深入探讨的是人类与机器之间的交互方式。从信息处理的角度来看,这种交互主要分为三种类型。首先,是信息的提取,这包括从现有资源中获取知识,例如维基百科或其他搜索结果中的数据。其次,是信息的创造,例如让模型生成一首关于蛋白质的十四行诗,这种诗以前从未被创作过。最后,是信息的转化,例如对给定的材料或论文进行总结和提取。在这个过程中,我们通常不会特别关注具体的任务类型,尽管在更细致的层面上可能会有所区分。

他实际上在不知不觉中完成了许多扩散出来的任务。当时我们训练的模型效果其实也是很好。

  • UltraChat是首个在斯坦福AlpacaEval上超过80分的开源模型。

  • UltraChat的设计理念是摒弃任务概念,将所有内容转化为信息流或人机对话。

  • 另一个极端是极致发挥任务概念,如Flan任务,通过GPT-4生成数据。

  • UltraChat和Orca虽然方法极端,但最终都模糊了任务概念。

它是第一个在斯坦福的AlpacaEval上超过80分的开源模型。当然现在几乎大家都能超过80分了,甚至都能超过90分了。然后当时它的效果应该也是开源中最好的。这就是我们做的UltraChat。我们可以看到UltraChat的思想是,我不要任务的概念。我啥都转化成信息流,或者说信息人和机器对话的本身。这是一个极端。我们还可以做另一个极端,就是我们把任务的概念发挥到极致。比如说有个刚才之前提到的任务叫Flan。我们可以把Flan里面可能有几千个任务。我们把里面所有的任务,每一个任务都拿出来,把Prompt拿出来。用GPT-4给它做回答,然后生成一波这种数据。所以说这两个其实大家想想非常有意思。UltraChat和Orca两个极端,但是好像在做同一件事情。不管我是一开始就模糊任务,还是我把任务做到极致,其实也是在一种,其实也就没有了任务。你就把任务本身给模糊化了。然后它就把所有的这种输入出来,拿出来用GPT-4做。

  • 模型微调中,主要工作是构建数据集,包括输入和输出。

  • 存在争论关于指令微调所需数据量:

    • UltraChat和Orca使用数百万条数据。

    • Instrata GPT仅使用一万多条数据。

    • Lima研究表明少量高质量数据即可获得优异效果。

  • 争论焦点:数据量越少越好还是越多越好。

  • 有人质疑指令微调是否能学习新知识。

在对话、推理和数学等领域,当前大家在进行模型微调时,主要工作是构建数据集,包括数据的输入和输出。这里存在一个有趣的争论:一些研究者认为,不需要大量数据来完成指令微调。例如,UltraChat和Orca使用了数百万条数据,而Instrata GPT仅使用了一万多条。此外,Lima的研究表明,使用少量高质量数据即可获得优异效果。这引发了一个争论,即指令微调所需数据量的问题,有人认为越少越好,有人则认为越多越好。此外,还有人提出指令微调可能无法学习新知识等观点。实际上,这个问题具有重要意义。

  • 作者认为在指令微调中,数据量越多越好,因为数据越多模型能学到更多期望的内容。

  • 作者提到高质量数据在少量情况下表现与大量数据时相同,这可能是评测方式的问题。

  • 作者举例说明高质量数据的定义,如模型A正确回答“蒙娜丽莎是谁画的?”为“达芬奇”。

现在我们也可以讨论一下,我认为在指令微调中,数据量肯定是越多越好。数据越多,模型才能学到更多期望的内容。很多时候,高质量数据在少量情况下表现与大量数据时相同,我认为这主要是评测方式的问题。大家可以思考一下,什么叫高质量数据。例如,我问“蒙娜丽莎是谁画的?”模型A的回复是“达芬奇”。

  • 达芬奇是意大利艺术家,生于1452年,逝于1519年,代表作有《蒙娜丽莎》和《最后的晚餐》。

  • “高质量”概念依赖于评测标准,越接近标准质量越高。

  • 模型在指令微调和监督微调中,数据量和质量越多越好,能学到新知识。

  • 知识由人类定义,模型参数更新能学到新东西。

  • 指令微调研究中,零样本泛化机制尚不明确,包括其发生步骤、所需数据量及定义问题。

模型B回复是,达芬奇是一位艺术家,生于1452年,逝于1519年,出生于意大利。他的代表作品包括《蒙娜丽莎》和《最后的晚餐》。关于“高质量”这一概念,有人可能认为A是高质量的,但这实际上是一个伪命题,因为高质量可能与评测方式有关,越接近评测标准,质量就越高。因此,我们使用所谓的高质量数据在我们设定的评测标准上进行评测,其结果很可能是良好的。无论如何,模型在指令微调和监督微调的过程中,数据和预训练一样,越多越好,质量也是越多越好,同时也能学到新的知识。所谓的知识也是由人类定义的,什么是知识,但模型的参数确实更新了,因此也能学到新的东西。这就是关于指令微调的一切。目前,指令微调的研究仍在进行中,许多谜团我们尚未能完全解释,例如零样本泛化究竟发生在哪一步,需要多少数据来完成零样本泛化,以及零样本泛化本身是否真的是零样本泛化。现在我们可以开始思考这个问题,我们在任务A上训练完成后,它在任务B上表现良好,但实际上任务是我们自己定义的吗?是否有更本质的定义方式来解释这个问题呢?可能是由于某些token重叠,或者某些token在语义上相同。

  • 在A训练网才能在B表现好。

  • 指令微调后,模型基于人类反馈的强化学习(RLHF)。

  • RLHF使模型能遵循人类指令,模型已非常强大。

在A训练网才能在B表现好。在指令微调过后,我们现在要说的就是大家更加耳熟能详的,基于人类反馈的强化学习(RLHF)。基于人类反馈的强化学习,这张图相信大家看过很多遍了。简单来说,我们是先进行微调一个模型,然后这个模型本身已经非常强大,它可以遵循人类的指令了。

  • 使用成对比较的方式训练模型,通过最小化函数最大化赢的奖励分数和输的奖励分数之间的差值。

  • 奖励模型输出一个标量分数,分数高表示好,低表示坏。

  • 使用RLHF(PPO算法)更新模型,包含两个公式:

    • 前一项最大化模型输出的分数。

    • 后一项通过KL散度确保模型参数不偏离原参数太远,防止模型崩溃。

  • PPO算法在实际操作中较为复杂,需要工程上的细节优化。

A大于B,S1比S3好,S3比S2好。这里我们可以看到,可以如何训练呢?我们可以直接使用这种成对比较的方式来训练。我们最小化这个函数,这样实际上是最大化赢的奖励分数和输的奖励分数之间的差值。将其最大化后,我们就能得到这样一个奖励模型。对于任何一个输入和输出,它输出一个标量,这个标量就是它的分数。分数高即为好,低即为坏。从而我们就能将奖励模型应用于各个领域,以得到更好的样本。现在使用奖励模型,我们就可以进行打分。那么我们如何更新原有模型呢?这时我们使用RLHF,即所谓的PPO算法。PPO算法包含两个公式。首先,我们知道奖励模型本身具有打分功能。然后我们又加入了一项,这一项也很简单。前一项旨在提高模型输出的分数,我们最大化这个损失函数就是为了实现这一点。后一项则是确保模型更新后的参数不偏离原来的参数太远,通过KL散度来实现,以防止模型参数偏离过远,从而避免模型崩溃。然而,实际操作中的PPO算法较为复杂,需要许多工程上的细节才能实现得特别好。现在,我们就可以构建出一个ChatGPT,其实就是这些步骤。

  • 强大的能力构建方式简单,信息公开。

  • 构建步骤包括Instruction Tuning和RLHF。

  • 最新研究表明,Reward Model并非必需。

  • 可以通过数学推导去除Reward Model,实现自我评分。

  • 新公式分为获胜数据和失败数据的奖励,优化两者差异。

  • 这种方法称为DPO,不需要Reward Model。

能力如此强大,正如我们前面所言,但其构建方式实际上相当简单。这些信息都是公开的,没有任何保密内容。例如,这一步是Instruction Tuning,下一步则是进行RLHF(Reinforcement Learning from Human Feedback)。然而,最近的研究表明,Reward Model,即评分模型,并非总是必需的。例如,我们可以通过数学推导,去除Reward Model,让模型自我评分,进而推导出新的公式。在这个公式中,前半部分代表获胜数据的奖励,后半部分则代表失败数据的奖励。通过优化这两者之间的差异,我们同样在进行RLHF的过程,此时这种方法被称为DPO(Direct Preference Optimization),它不需要Reward Model。

  • DPO和PPO在效果上基本相同,且已被广泛应用。

  • RHF使用难度大,但在DPO和Zephyr出现前,开源社区中使用较少。

  • RHF的重要性在于提供A比B好的信号,帮助模型理解人类偏好。

  • 尽管RHF被多家大公司使用,但在开源社区中,只有Llama2大规模运用了RLHF。

实际上,我们通过比较原始模型和更新后的模型,可以计算出它们的评分。实验证明,DPO和PPO的效果基本相同,并且已被广泛应用。由于RHF的使用难度较大,DPO的出现使得偏好学习得到了大规模的应用。尽管RHF被OpenAI、SRP和Google等公司广泛使用,但在DPO或Zephyr出现之前,开源社区中使用RHF的情况非常少。这是因为缺乏数据且训练难度大。然而,为什么需要RHF呢?因为即使模型能够正确执行任务,也不一定能得出我们真正想要的结果。人们有时并不清楚自己真正想要什么,只知道某些偏好。因此,我们需要给模型提供A比B好的信号,即A的评分高于B,这是RHF的重要性所在。尽管之前有许多关于RHF的论文发表,但在开源社区中,只有Llama2大规模地运用了RLHF。

  • 提出了Ultra系列数据集,包括Ultra Feedback等。

  • 未使用RLHF,而是采用了RLAAF方法。

  • 通过收集指令和回复池,进行打分和回复,构建了大规模数据集。

  • 至少有1000个以上的模型使用了Ultra系列数据进行对齐。

在很多任务上的表现可能并没有那么出色。因此,这时候我们需要的就是数据。我们也是做了一个Ultra系列的数据,名为Ultra Feedback。我们没有使用RLHF,而是使用了RLAAF。这相当于去收集指令池和回复池,然后进行打分和回复。通过这种方式构造了一个超大规模的数据集。现在几乎很多模型都会使用Ultra系列的数据来进行对齐。具体模型数量不详,但至少有1000个以上的模型使用了我们的数据。此外,还有Ultra Chat、Ultra Feedback和Ultra Interactive等数据集。

  • 新方法在开源社区中非常流行,涉及数据和对齐方案。

  • 该方法已支持超过1000个模型的使用,实际数量可能更高。

  • 这些模型在Hugging Face上的下载量超过100万次。

  • 使用频率排名中,Auto Feedback位列第五,Auto Chat位列第九。

这是我们最新的方法,但今天不详细讨论。它可以说是目前开源社区中最流行的数据和对齐方案之一。实际上,我们的工作已经支持了超过1000个模型的使用。尽管我知道实际数量可能更多,因为许多未公开的项目也可能使用了我们的数据。这些模型在Hugging Face上的下载量已超过100万次。如果我们查看使用频率的排名,Auto Feedback位列第五,Auto Chat位列第九。其他高排名的是如ImageNet和Wikipedia等广泛使用的数据集。

  • 偏好学习(RLHF):为大模型提供微妙的监督信号,指示A优于B。

  • 扩展理解:通过理解模型中的偏好,可能扩展到理解宇宙信息和人类价值观。

  • 学习方法的重要性:强调偏好本身的重要性,不限于特定方法(如PPO、DPO),甚至可能通过SFT学习偏好。

  • 训练阶段:包括预训练(无监督语料)、后训练(有监督数据)和superalignment(待详细讲解)。

接下来我们将进行一个总结。RLHF,或者说称为Preference Learning,即偏好学习,它为大模型提供了一种超越答案的更为微妙的监督信号。它实际上是在告诉大模型A优于B。我们采用类似之前的思路进行扩展。当我们知道A优于B时,通过不断扩展,我们可能能够理解模型,进而理解整个世界,整个宇宙的信息。当我了解到宇宙中什么是更好的,我就隐含地学到了人类的价值观是什么样的,人类希望我具备什么样的能力,人类希望我的数学水平达到什么样,这些都隐含地被学习到。因此,无论是RLHF、PPO、DPO还是其他各种Po,其本质最重要的是偏好本身。很多时候,你甚至不需要Po,可能只需要SFT,通过不同的方式进行SFT也能学习到这种偏好。今天的课程到这里就结束了,我们讲了预训练,模型在大规模无监督语料上进行预训练,然后是后训练,在有监督的数据上进行学习。后面其实还有一个superalignment,这里我做了PPT,但后面会有一节课专门来讲这个内容。简单来说就是。

  • 模型在某些能力上超越人类,如快速总结大量书籍。

  • 确保模型没有采取捷径或隐藏行为的重要性。

  • 缺乏监督信号导致难以判断模型输出的正确性。

  • 超级对齐关注能力对齐和安全性,包括防止模型进行未监测的行为。

大家可以先思考一下,当模型在某些能力上超越人类时,例如总结一百本书,模型不仅做得更好,而且速度更快。在这种情况下,我们如何确保模型没有采取捷径或隐藏行为?当我们要求模型总结一百本书时,由于无法提供监督信号,我们无法判断其结果的正确性。模型可能表面上看起来正确,但并非我们期望的答案。因此,超级对齐关注的不仅是能力上的对齐,还包括安全性,例如模型是否可能进行未被监测的行为,如篡改代码或自我复制,甚至窃取能源。这些内容将在后续课程中详细讨论。今天的课程到此结束,谢谢大家。

;