1、背景
本文基于谷歌云的官方视频:《Introduction to Large Language Models》 ,整理而成,希望对大家入门大语言模型有帮助。
本课程主要包括以下 4 方面的内容:
- 大语言模型的定义
- 描述大语言模型的用例
- 解释提示词调优
- 谷歌的 Gen AI 开发工具介绍
2、大语言模型介绍
2.1 大语言模型的定义
大语言模型是深度学习的分支
深度学习是机器学习的分支,大语言模型是深度学习的分支。
机器学习是人工智能(AI)的一个子领域,它的核心是让计算机系统能够通过对数据的学习来提高性能。在机器学习中,我们不是直接编程告诉计算机如何完成任务,而是提供大量的数据,让机器通过数据找出隐藏的模式或规律,然后用这些规律来预测新的、未知的数据。
深度学习是机器学习的一个子领域,它尝试模拟人脑的工作方式,创建所谓的人工神经网络来处理数据。这些神经网络包含多个处理层,因此被称为“深度”学习。深度学习模型能够学习和表示大量复杂的模式,这使它们在诸如图像识别、语音识别和自然语言处理等任务中非常有效。
大语言模型是深度学习的应用之一,尤其在自然语言处理(NLP)领域。这些模型的目标是理解和生成人类语言。为了实现这个目标,模型需要在大量文本数据上进行训练,以学习语言的各种模式和结构。如 ChatGPT,就是一个大语言模型的例子。被训练来理解和生成人类语言,以便进行有效的对话和解答各种问题。
大语言模型和生成式 AI 存在交集
生成式AI是一种能够创造新的内容或预测未来数据的人工智能技术。
这种技术包括用于生成文本、图像、音频和视频等各种类型的内容的模型。生成式AI的一个关键特性是,它不仅可以理解和分析数据,还可以创造新的、独特的输出,这些输出是从学习的数据模式中派生出来的。
大型通用语言模型预训练和微调
大型通用语言模型可以进行预训练,然后针对特定目标进行微调。
训练: 训练狗狗为例,可以训练它坐、跑过来、蹲下、保持不动。
如果想训练警犬、导盲犬和猎犬,则需要特殊的训练方法。
大语言模型的训练也采用与之类似的思路。
大型语言模型被训练来解决通用(常见)的语言问题,如文本分类、问答、文档总结和文本生成等。
(1)文本分类:大型语言模型可以通过对输入文本进行分析和学习,将其归类到一个或多个预定义的类别中。例如,可以使用大型语言模型来分类电子邮件是否为垃圾邮件,或将推文归类为积极、消极或中立。
(2)问答:大型语言模型可以回答用户提出的自然语言问题。例如,可以使用大型语言模型来回答搜索引擎中的用户查询,或者回答智能助手中的用户问题。
(3)文档总结:大型语言模型可以自动提取文本中的主要信息,以生成文档摘要或摘录。例如,可以使用大型语言模型来生成新闻文章的概要,或从长篇小说中提取关键情节和事件。
(4)文本生成:大型语言模型可以使用先前学习的模式和结构来生成新的文本。例如,可以使用大型语言模型来生成诗歌、短故事、或者以特定主题的文章。
大语言模型(LLMs)可以基于特定领域的小规模的数据集上进行训练,来定制化解决不同领域如零售、金融、娱乐等的特定问题。
大语言模型的特征和训练关键词
Large(大):在"大语言模型"的上下文中,"大"主要有两层含义。一方面,它指的是模型的参数数量。在这些模型中,参数的数量通常会非常大,达到数十亿甚至数百亿。这使得模型能够学习和表示非常复杂的模式。另一方面,"大"也指的是训练数据的规模。大语言模型通常在大规模的文本数据上进行训练,这种数据可以来自互联网、书籍、新闻等各种来源。
General-purpose(通用):这个词描述的是模型的应用范围。通用语言模型在训练时使用了来自各种领域的数据,因此它们能够处理各种类型的任务,不仅限于某一个特定的任务或领域。这使得这些模型在处理新的、未见过的任务时具有很强的泛化能力。
Pre-trained and fine-tuned(预训练和微调):这是描述模型训练过程的关键词。在预训练阶段,模型在大规模的通用文本数据上进行训练,学习语言的基本结构和各种常识。然后,在微调阶段,模型在更小、更特定的数据集上进行进一步的训练。这个数据集通常是针对某个特定任务或领域的,例如医学文本、法律文本,或者是特定的对话数据。微调可以让模型更好地理解和生成这个特定领域的语言,从而更好地完成特定的任务。
大语言模型的好处
单一模型可用于不同任务:由于大语言模型是通用的,并且具有强大的泛化能力,所以它们可以处理各种类型的任务,比如文本分类、命名实体识别、情感分析、问答系统、文本生成等。这意味着我们可以使用同一个预训练的模型来处理不同的任务,只需要进行相应的微调就可以。这大大减少了开发和维护不同模型的复杂性和成本。
微调过程只需要最小的数据:尽管大语言模型在预训练阶段需要大量的通用文本数据,但在微调阶段,它们通常只需要相对较小的领域特定数据。这是因为模型在预训练阶段已经学习了大量的语言知识和常识,微调阶段主要是让模型适应特定的任务或领域。这使得大语言模型能够在数据稀缺的领域中也能表现出色。
随着更多的数据和参数,性能持续提升:大语言模型的性能通常随着训练数据的增加和模型参数的增加而提升。这意味着,通过训练更大的模型,并使用更多的数据,我们可以获得更好的性能。这是因为更大的模型有更多的参数,能够学习和表示更复杂的模式;同时,更多的数据能够提供更丰富的信息,帮助模型更好地理解语言。
Pathways 语言模型 (PaLM)
拥有5400亿参数:这是一个庞大的模型,参数数量远超过 GPT-3 的参数数量。这些参数使得 PaLM 能够更好地理解和生成语言。
利用新的 Pathway 系统:PaLM是首个大规模使用 Pathways 系统的模型。Pathways 系统使得 PaLM 能够将训练扩展到 6144 个芯片,这是迄今为止用于训练的最大的基于TPU的系统配置。与之前的大型语言模型相比,这是一个显著的规模提升。
为加速器编排分布式计算:Pathways 系统能够高效地管理分布式计算,使得 PaLM 能够在多个 TPU v4 Pods上进行训练。这个系统的设计使得 PaLM能 够在硬件 FLOPs 利用率上达到 57.8%,这是迄今为止在此规模的大型语言模型中所达到的最高利用率。
Transformer 模型
Transformer 模型是一种在自然语言处理(NLP)领域中广泛使用的深度学习模型,它最初在 "Attention is All You Need" 这篇论文中被介绍。Transformer 模型的主要特点是使用了自注意力(self-attention)机制,这种机制允许模型在处理序列数据时考虑到序列中所有元素的上下文关系。
Transformer 模型主要由两个部分组成:编码器(Encoder)和解码器(Decoder)。
- 编码器(Encoder):编码器由多个相同的层组成,每一层都有两个子层。第一个子层是自注意力层,它可以考虑到输入序列中所有元素的上下文关系。第二个子层是一个前馈神经网络(Feed Forward Neural Network)。每个子层后面都跟有一个残差连接和层归一化。编码器的任务是将输入序列转换为一组连续的表示,这些表示考虑了输入序列中每个元素的上下文。
- 解码器(Decoder):解码器也由多个相同的层组成,每一层有三个子层。第一个子层是自注意力层,但它在处理当前元素时,只考虑到该元素及其之前的元素,不考虑其后的元素,这种机制被称为掩码自注意力。第二个子层是一个编码器-解码器注意力层,它使解码器可以关注到编码器的输出。第三个子层是一个前馈神经网络。每个子层后面都跟有一个残差连接和层归一化。解码器的任务是基于编码器的输出和前面已经生成的元素,生成下一个元素。
传统语言开发中,需要对 Cat 的规则进行硬编码。
2012年前的神经网络,我们可以将是否为猫的数据喂给模型,然后给出一张图片让它判断图片中是否是一只猫。
通过生成式语言模型,如 LaMDA、PaLM、GPT 等,它们可以阅读大量的资料,和海量的关于猫相关的知识。我们就可以对它提问,猫是什么?它可以回答出它知道的关于猫的所有特征。
大语言模型开发 VS 传统机器学习开发
使用预训练的大型语言模型(LLM)进行开发和传统的机器学习开发存在很多不同之处。
使用预训练的大型语言模型(LLM)开发:
- 不需要机器学习专业知识:因为大型语言模型已经预训练完成,开发者无需对机器学习的专业知识有深入理解,只需要知道如何调用模型API,即可使用模型生成相应的语言输出。
- 不需要训练样本:在许多情况下,只需要向模型提供合适的提示(prompt),模型就能生成相应的输出,而无需大量的训练样本。
- 不需要训练模型:模型已经在大规模数据集上进行了预训练,开发者无需再次训练模型。
- 主要关注提示词设计:开发者的主要工作变为设计有效的提示词,使模型能够理解并生成合适的输出。
传统的机器学习开发:
- 需要机器学习专业知识:开发者需要理解不同的机器学习算法,知道如何选择合适的算法,如何设置参数,以及如何解决可能出现的问题。
- 需要训练样本:开发者需要收集和准备大量的训练样本,以便训练模型。
- 需要训练模型:开发者需要使用训练样本来训练模型,这通常需要消耗大量的时间和计算资源。
- 需要计算时间和硬件资源:传统的机器学习模型训练通常需要大量的计算时间和硬件资源。
- 主要关注最小化损失函数:开发者需要设计和优化损失函数,以便模型在训练过程中尽可能地减小损失,提高模型的性能。
简单来说,使用预训练的大型语言模型(LLM)开发的主要优势在于简化了开发过程,降低了开发的难度和门槛,而传统的机器学习开发则需要更多的专业知识和资源投入。
2.2 大语言模型的用例
问题系统
大语言模型的典型应用场景是问答系统。
问答(QA)是自然语言处理的一个子领域,它处理的任务是自动回答以自然语言提出的问题。
问答模型能够从给定的文本中检索出问题的答案。这在从文档中搜索答案时非常有用。根据所使用的模型不同,问答系统可以直接从文本中提取答案,也可以生成新的文本作为答案。
在自然语言处理中的问答任务,往往需要一定的领域知识。这是因为,要理解和回答特定领域的问题,模型需要有相关的背景知识。例如,如果要回答医学相关的问题,模型需要知道医学术语和基本的医学知识。如果要回答法律相关的问题,模型需要知道法律术语和基本的法律原理。
这种领域知识通常通过训练数据来提供。训练数据中的文本会包含大量的领域知识,模型通过学习这些文本,可以获取到这些知识。然而,这种方式获取的知识可能会有限,因为它只能获取到训练数据中包含的知识。因此,对于一些复杂的领域问题,可能需要专门的领域知识库或者专门训练的领域模型来提供更准确的答案。
生成式 QA,可以直接根据上下文生成自由文本。利用的是文本生成模型,不需要领域知识。
生成式问答是一种自然语言处理中的问答技术,其特点是直接根据上下文生成自由文本作为答案,而不是从原文中提取答案。这种技术通常利用的是文本生成模型,例如Transformer等。
生成式问答“不需要领域知识”。这可能是指在一般情况下,生成式问答模型可以通过训练数据学习到一般的语言知识,而不需要特定领域的知识。然而,这并不意味着领域知识对生成式问答模型没有帮助。在处理特定领域的问题时,如果模型具有相关的领域知识,往往能够生成更准确、更具深度的答案。
2.3 提示词调优
Bard 问答示例
下面是三个对 谷歌的 Bard 提问的示例。
提示词设计
提示词设计是创建能引导语言模型产生期望响应的提示的过程。
在使用语言模型,尤其是生成式语言模型时,如何设计输入的提示词(Prompt)是非常重要的。因为模型的输出(即生成的文本)将根据输入的提示进行生成。好的提示可以引导模型生成有用、准确的文本,而差的提示可能导致模型的输出偏离期望,或者产生含糊不清、语义不明确的结果。
提示设计的过程可能包括考虑提示的语法结构、使用的词汇、上下文信息等因素,以尽可能地引导模型生成期望的响应。
提示词设计和提示词工程
提示词设计(Prompt Design)指的是传递给语言模型的指令或信息,它们告诉模型要做什么。提示通常包括一些上下文信息和具体的任务指示。
提示词工程(Prompt Engineering)是一种实践,它涉及到开发和优化这些提示,以便更有效地使用语言模型。这可能包括测试不同的提示格式、考虑不同的上下文信息,以及使用一些技术手段(如微调等)来改进模型对提示的理解和响应。在许多情况下,通过精心设计和优化的提示,可以显著提高模型的性能,使其更好地适应各种任务和应用场景。
三种主要的大语言模型
主要有三种类型的大语言模型,每种都需要以不同的方式进行提示。前两者容易被混淆,但给出的输出非常不同。
1、通用(或原始)语言模型:这些模型根据训练数据中的语言预测下一个词(技术上说,是预测下一个词元)。这种模型通常使用大量的未标记文本进行训练,学习语言的统计规律,但没有特定的任务指向。
2、指令调整模型:这些模型经过训练,以预测对输入中给出的指令的响应。这种模型在通用语言模型的基础上,通过对特定任务数据的训练,使其能够对给定的指令做出适当的响应。这类模型可以理解和执行特定的语言任务,如问答、文本分类、总结、写作、关键词提取等。
3、对话调整模型:这些模型经过训练,以通过预测下一个响应进行对话。这种模型在通用语言模型的基础上,通过对对话数据的训练,使其能够进行对话。这类模型可以理解和生成对话,例如生成聊天机器人的回答。
链式思考推理
当模型在给出答案之前首先输出解释答案原因的文本时,它们更有可能得到正确的答案。这被称为"链式思维推理"。也就是说,模型在进行推理时,不仅仅直接给出答案,而是先阐述出达到答案的推理过程或原因,这样可以提高答案的准确性。
第 1 次对话:模型直接得出正确答案的可能性较小。
Q: Roger 有 5 个网球。他买了 2 罐网球。每罐有 3 个网球。他现在有多少个网球?
A:
第 2 次对话:现在,输出更有可能以正确的答案结束。
Q: Roger 有5个网球。他买了2罐网球。每罐有3个网球。他现在有多少个网球?我们逐步思考一下这个问题(Let's think this through step by step)。
A: Roger最初有5个球。2 罐每罐有 3 个网球,总共是6个网球。5 + 6=11。答案是 11。
一个通用模型在实际应用中有其局限性。针对特定任务的调优可以使大型语言模型(LLMs)变得更可靠。
"一个通用的模型在实际应用中有其局限性",意味着尽管 LLMs 被训练为理解和生成自然语言,并能够处理广泛的任务,但在实际应用中,它们仍然有限制。例如,它们可能在理解复杂或专业领域的内容方面表现不佳,或者在没有足够相关训练数据的情况下,其预测可能偏离实际。
"针对特定任务的调优可以使大型语言模型(LLMs)变得更可靠",是在指出通过特定任务的微调,可以改进LLMs 的表现。这种微调通常涉及在特定任务的数据上进一步训练模型,使其更好地适应该任务。例如,如果我们有一个在广泛语料库上预训练的 LLM,我们可以在法律文档上对其进行微调,以提高其在法律问题解答任务上的表现。这种任务特定的调优可以使模型在特定应用上更加可靠和准确。
Model Garden 是 Google 的一个开源项目,旨在为研究者和开发者提供预训练的机器学习模型和相关的训练和优化技术。这些模型覆盖了许多不同的机器学习任务,例如图像分类、物体检测和自然语言处理等。
Model Garden 中的模型分为两大类:语言模型和视觉模型。
- 语言模型:这类模型可以进行一些特定的语言处理任务,如:
- 提取(Extraction):这类任务包括语法分析(Syntax Analysis),它可以理解文本的语法结构。
- 分类(Classification):这类任务包括实体分析(Entity Analysis,识别文本中的特定实体,如人名、地名等)、内容分类(Content Classification,根据内容的主题进行分类)、情感分析(Sentiment Analysis,评估文本的情感倾向,如积极、消极等)、实体情感分析(Entity Sentiment Analysis,评估特定实体在文本中的情感倾向)。
- 视觉模型:这类模型可以进行一些特定的视觉任务,如:
- 分类(Classification):这类任务包括对象检测(Object Detector,识别图片中的特定对象)。
- 检测(Detection):这类任务包括人流量分析(Occupancy Analytics,分析特定区域内的人流量)、人/车辆检测(Person/Vehicle Detector,识别图片中的人或车辆)、个人防护设备检测(PPE Detector,识别图片中是否有人穿戴个人防护设备)、人物模糊(Person Blur,将图片中的人物进行模糊处理)。
这些模型都是为特定的任务进行训练和优化的,可以用来解决一些具体的实际问题。
"调优(Tuning)"是一种通过在新数据上训练模型来使模型适应新领域或一组定制用例的过程。例如,我们可能会收集训练数据并专门为法律或医学领域"调优"大型语言模型(LLM)。
"微调 (Fine tuning)" 是一种训练方法,你可以带来自己的数据集,并通过调整 LLM 中的每个权重来重新训练模型。这需要一个大型的训练任务(真的很大),并且你需要托管你自己微调过的模型。具体来说,微调过程中,你会在你的特定任务数据上继续训练预训练的大型语言模型,使模型的所有参数更适应你的任务。这种方法通常需要大量的计算资源,因为你需要在整个模型上进行训练,这也是为什么这段话中提到的"训练任务很大"。
上图,展示了人工智能(AI)在医疗健康领域微调模型的过程。
- "Healthcare data (Millions of EHRs)":这是模型训练的第一步,需要大量的医疗健康数据。EHRs 是电子健康记录(Electronic Health Records)的缩写,这里指的是数百万份的电子健康记录数据。
- "Reusable Components (Medical Foundation Model)":在拥有大量的医疗健康数据后,接下来的步骤是使用这些数据来训练一个基础模型,这个模型被称为 "Medical Foundation Model"。这个模型可以被看作是一个可复用的组件,因为它可以被用于多个不同的任务。
- "Task adoption (Question answering, Chart summarizing, Image analysis -> risk stratification, finding similar patients)":这一步是对基础模型进行微调,使其适应特定的任务。这里列举的任务包括问题回答(Question answering)、图表总结(Chart summarizing)和图像分析/打标(Image analysis/ 打标)。这些任务的目标可能是风险分层(risk stratification)和寻找相似的患者(finding similar patients)。
- "Human-AI collaboration (Natural language interactions)":这一步是实现人工智能与人类的协同工作。在这个过程中,人类可以通过自然语言交互(Natural language interactions)与 AI 进行沟通,这可以帮助人类更好地理解 AI 的分析结果,也可以帮助 AI 更好地理解人类的需求。
微调 (Fine tuning) 通常很昂贵并且在许多情况下不现实。
那么, 有没有更高效的调整方法呢?
这里介绍两种更有效率的大型语言模型(LLM)调优方法:参数高效方法(Parameter-Efficient Methods,PETM)和提示调优(Prompt Tuning)。
- 参数高效方法(PETM):这是一种在不复制模型的情况下在自定义数据上调优LLM的方法。基础模型本身并未被改变。相反,会调优一小部分可添加的层,这些层可以在推理时刻加入和移出。这种方法的主要优势在于,它只需要修改模型的一小部分参数,因此在计算和存储需求上比全模型微调更为经济。
- 提示词调优:这是参数高效调优方法中最简单的一种。它的基本思想是优化模型生成的提示词,而不是改变模型的参数。通过精心设计的提示,可以引导模型生成特定的输出,而不需要昂贵的模型重新训练过程。这种方法的优点是,它在不需要大量计算资源的情况下,可以有效地利用大型语言模型。 举例来说,如果我们有一个预训练的语言模型,但是要应用于某特定领域(比如法律领域)的文档,我们可以在输入端添加一个“这是一篇法律文档”的提示,让模型学习对法律文档进行正确推理,而无需调整模型中的绝大部分参数。这就是 Prompt Tuning 的基本思想。
2.4 谷歌的 Gen AI 开发工具介绍
"Gen AI Studio" 平台,可以用来微调模型,将模型部署到生产环境,创建聊天机器人,生成图像,以及其他更多功能。
- 语言:在 "Gen AI Studio" 平台上,用户可以测试,微调,并部署生成型 AI 语言模型。例如,可以使用PaLM API(可能是一种基于 Pathways 语言模型的 API)进行内容生成、聊天、摘要生成等等。
- 视觉:在 "Gen AI Studio" 平台上,用户可以编写文本提示来生成新的图像,或者在已有的图像上生成新的区域。这可能是利用一种文本到图像的生成模型,通过用户提供的文本提示,模型可以生成与文本内容相关的图像。
总的来说,"Gen AI Studio"是一个集成了多种AI模型和功能的平台,可以方便用户进行AI模型的微调,部署,以及其他的应用。
Generative AI App Builder 可以用来创建基于生成式人工智能的应用,而且不需要编写任何代码。这个工具使得无需深入了解编程或人工智能的用户也能创建出使用生成式人工智能模型的应用。这些应用可能包括但不限于内容生成、图像生成、音频生成等各种基于生成式人工智能模型的应用。
PaLM API 和 MakerSuite 简化生成性开发周期。
- "PaLM API":这是一个简单的入口,让开发者能够使用Google的大型语言模型(LLMs)。它为开发者提供了访问已经为特定用例(如摘要、分类等)优化过的模型的途径。
- "MakerSuite":这是一个入门级的工具,让开发者可以开始原型设计和构建生成性AI应用。它允许开发者迭代优化提示(prompts),用合成数据扩充数据集,并调整定制模型。
"PaLM API"是为开发者提供方便访问和使用大型语言模型的接口,而"MakerSuite"则是一种便于开发者开始设计和构建生成性AI应用的工具,它提供了在构建应用的过程中可能需要的一系列功能,如迭代优化提示、数据集扩充、模型调优等。