Build a Large Language Model (From Scratch) 学习笔记(一)

一、简介

作者Sebastian Raschka,这本书讲解了从头构建大语言模型的全过程,包括如何创建、训练和调整大语言模型!项目地址:https://github.com/rasbt/LLMs-from-scratch

  • 第1章:深入理解大语言模型(LLM)

  • 第2章:解密文本数据处理技巧

  • 第3章:编程实现注意力机制(Attention Mechanisms)

  • 第4章:从无到有实现类似GPT模型

  • 第5章:对未标注数据进行预训练

  • 第6章:针对文本分类进行模型微调

  • 第7章:在实践中应用大语言模型

二、本篇范围

第1章:深入理解大语言模型(LLM)

三、什么是LLM(What is an LLM)

3.1 理解LLM

本章主要内容包括:大型语言模型(LLMs)背后基本概念的高层次阐释、对 LLMs 所源自的 Transformer 架构的洞察、一个从头开始构建 LLM 的计划。

大型语言模型(LLM)利用深度神经网络,在大量文本数据上进行训练,旨在理解、生成和响应类似人类的文本。得益于深度学习(机器学习和人工智能(AI)的一个子集,专注于神经网络)的进步,LLM能够以看似连贯和上下文相关的方式处理和生成文本,并在广泛的NLP任务中,包括文本翻译、情感分析、问题回答等,性能得到了显著提升。“大型”既指模型的参数规模,也指其训练所用的庞大数据集,这样的模型通常有数十亿甚至数百亿个参数,这些参数是网络中的可调权重,在训练过程中进行优化以预测序列中的下一个词,因为它利用了语言固有的序列性质来训练模型理解文本中的上下文、结构和关系,所以下一个词的预测是合理的。

不同领域之间关系的层级式

图1

如上图所示,深度学习是机器学习的一个子集,它专注于利用具有三层或更多层的神经网络(也称为深度神经网络)来对数据中的复杂模式和抽象概念进行建模。人工智能领域如今主要由机器学习和深度学习占据主导地位,但它也包括其他方法 —— 例如,使用基于规则的系统、遗传算法、专家系统、模糊逻辑或符号推理。

机器学习涉及开发一些算法,这些算法能够基于数据进行学习,并在无需明确编程的情况下做出预测或决策。举例说明:垃圾邮件过滤器。在传统机器学习中,人类专家可能会手动从邮件文本中提取特征,比如某些触发词(例如 “奖品”“赢”“免费”)的出现频率、感叹号的数量、全部大写单词的使用情况或者可疑链接的存在,基于这些由专家定义的特征所创建的数据集,随后会被用于训练模型。深度学习不需要手动提取特征。这意味着人类专家不需要为深度学习模型识别并选择最相关的特征,向机器学习算法提供被标记为垃圾邮件和正常邮件的示例,通过在训练数据集上尽量减少其预测误差,该模型随后学会识别表明是垃圾邮件的模式和特征,从而能够将新邮件分类为垃圾邮件或非垃圾邮件。(然而,无论是传统机器学习还是用于垃圾邮件分类的深度学习,仍然都需要收集标签,比如垃圾邮件或非垃圾邮件,这些标签要么由专家要么由用户来收集。)

3.2 应用LLM

由于其解析和理解非结构化文本数据的先进能力,大型语言模型(LLMs)在各个领域都有广泛的应用。如今,大型语言模型被用于机器翻译、新颖文本生成、情感分析、文本摘要以及许多其他任务。最近,大型语言模型还被用于内容创作,如撰写小说、文章,甚至编写计算机代码、为高级聊天机器人和虚拟助手提供动力、可用于从医学或法律等专门领域的大量文本中有效检索知识等。

3.3 构建和使用大型语言模型(LLMs)的阶段

当今大多数LLM都是使用PyTorch深度学习库实现的,本篇也采用PyTorch深度学习库。

研究表明,在建模性能方面,为特定任务或领域量身定制的自定义LLM可以超越如ChatGPT提供的通用LLM,使用自定义LLM提供了多个优势,特别是在数据隐私方面。例如,由于保密性考虑,公司可能不希望与像OpenAI这样的第三方LLM提供商共享敏感数据。此外,开发较小的自定义LLM使得可以直接在客户设备(如笔记本电脑和智能手机)上部署,这是苹果公司等目前正在探索的方向。这种本地实现可以显著降低延迟并减少与服务器相关的成本。此外,自定义LLM还赋予了开发人员完全的自主权,使他们能够根据需要控制模型的更新和修改。

创建LLM的一般过程包括预训练和微调。在“预训练”中,“预”指的是初始阶段,即在大规模、多样化的数据集上训练LLM等模型,以发展对语言的广泛理解。然后,这个预训练模型可以作为基础资源,通过微调进一步精炼。微调是指在更狭窄、更特定于特定任务或领域的数据集上对模型进行专门训练的过程。这种由预训练和微调组成的两阶段训练方法在图中得到了展示。

图2

从图中可以看出创建大型语言模型(LLM)的第一步是在大量的文本数据上进行训练,这些数据有时被称为原始文本。在这里,“原始”指的是这些数据只是普通的文本,没有任何标注信息。(可能会进行一些过滤,比如去除格式字符或未知语言的文档。)

第二步是预训练,创建了一个初始的预训练LLM,通常被称为基础模型或基石模型。一个典型的例子是GPT-3模型(ChatGPT中提供的原始模型的前身)。这个模型能够进行文本补全,即完成用户提供的半句句子。它还具有有限的少样本学习能力,这意味着它可以根据仅有的几个例子学习执行新任务,而不需要大量的训练数据。在通过大型文本数据集训练获得预训练的LLM后(在这个阶段,LLM被训练来预测文本中的下一个词),我们可以进一步在标注数据上训练LLM,这也被称为微调。微调LLM最受欢迎的两种类型是指令微调和分类微调。在指令微调中,标注数据集由指令和答案对组成,比如一个要求翻译文本的查询以及相应的正确翻译文本。在分类微调中,标注数据集由文本和相关的类别标签组成,例如,与“垃圾邮件”和“非垃圾邮件”标签相关联的电子邮件。

第三步是特定任务的LLM。

3.4 介绍Transformer架构

大多数现代大型语言模型(LLMs)都依赖于Transformer架构。Transformer架构的核心在于其完全基于注意力(Attention)机制,摒弃了传统循环神经网络(RNN)或卷积神经网络(CNN)中常用的递归和卷积操作。这一创新使得Transformer在处理序列数据(如文本)时具有更高的效率和更强的能力。Transformer架构主要由两个部分组成:编码器(Encoder)和解码(Decoder)。编码器负责处理输入序列,将其转换成一系列向量表示(通常称为编码向量)。解码器则负责根据这些编码向量生成输出序列。在编码器和解码器中,都使用了多头注意力(Multi-Head Attention)机制。这种机制允许模型在不同的表示子空间(即“头”)中并行地关注输入序列的不同部分。这增加了模型的表示能力和对输入序列不同部分的敏感性。此外,Transformer还使用了位置编码(Positional Encoding)来提供序列中单词的位置信息,因为注意力机制本身并不考虑输入序列的顺序。位置编码通常是通过将正弦和余弦函数应用于不同频率的输入来实现的。

图3

        总的来说,Transformer架构通过其独特的注意力机制和位置编码方式,为自然语言处理(NLP)领域带来了革命性的变化。它使得模型能够更有效地处理长序列数据,并在多个NLP任务上取得了显著的性能提升。Transformer架构的后续变体,如BERT(双向编码器表示Transformer中提取)和各种GPT模型(生成式预训练Transformer的缩写),都是基于这个概念,以适应不同任务的需求。BERT建立在原始Transformer的编码器子模块之上,其训练方法与GPT有所不同。虽然GPT是为生成任务设计的,但BERT及其变体擅长于掩码词预测(Masked Word Prediction),即模型预测给定句子中被掩码或隐藏的单词。这种独特的训练策略使BERT在文本分类任务(包括情感预测和文档分类)中具有优势。作为BERT能力的一个应用,截至本文撰写时,X(前身为Twitter)使用BERT来检测有毒内容。GPT(Generative Pre-trained Transformer)侧重于原始Transformer架构中的解码器部分,并设计为用于需要生成文本的任务。这包括机器翻译、文本摘要、小说创作、编写计算机代码等更多领域。GPT模型主要被设计和训练来执行文本补全任务,同时它们的能力也展现出了惊人的多功能性。这些模型擅长执行零样本学习和少样本学习任务。零样本学习指的是模型能够泛化到完全未见过的任务上,而无需任何先前的具体示例。另一方面,少样本学习涉及从用户提供的极少量示例中学习,如图4所示。

图4

GPT模型的这种能力使得它们能够在没有大量训练数据的情况下快速适应新的任务,这在许多实际应用场景中是非常有用的。例如,在对话系统中,GPT模型可以根据用户的输入快速生成回复,而无需为每个可能的对话场景都准备大量的训练数据。同样,在文本生成任务中,GPT模型可以根据给定的提示或上下文生成连贯且相关的文本,这对于自动化写作、内容创作等领域来说是非常有价值的。

图5

Transformers与LLMs(大型语言模型)之间的关系:

简而言之,虽然Transformer和LLM在很多时候被视作同义词,但它们并不完全等同。Transformer是一种更广泛的架构,可以被应用于多种任务,比如计算机视觉等其他领域。而LLM则通常指的是专门用于处理自然语言任务的大型模型,其中许多是基于Transformer构建的。然而,也存在其他架构的LLM,这些模型在尝试提高计算效率的同时,也在探索自然语言处理的新方法。

3.5 利用大型数据集

大型训练数据集代表了包含数十亿词汇的多样化且全面的文本语料库,涵盖了广泛的主题以及自然语言和计算机语言。例如,表1概述了用于预训练GPT-3的数据集,GPT-3是ChatGPT第一版的基础模型。在表1中可以看到GPT-3的训练数据集由多个大型文本语料库组成,这些语料库来自互联网上的各种来源,如网页、书籍、文章、社交媒体帖子等。这些数据集经过精心挑选和处理,以确保它们能够代表广泛的语言使用和知识领域。

通过利用如此庞大且多样化的数据集进行预训练,GPT-3(以及基于此的ChatGPT)能够学习到丰富的语言知识和上下文理解能力,从而在生成文本、回答问题、进行对话等方面表现出色。这种大数据驱动的方法已经成为自然语言处理领域的一种趋势,推动了诸如问答系统、聊天机器人、内容生成等应用的发展。需要注意的是,数据的收集、处理和使用也需要遵守相关的隐私保护、版权和伦理规范。

据估计,GPT-3的预训练成本按云计算费用计算高达460万美元,许多作为开源模型提供的大型语言模型可以被用作通用工具,来编写、提取和编辑那些并未包含在训练数据中的文本。此外,大型语言模型可以使用相对较小的数据集针对特定任务进行微调,这减少了所需的计算资源并提高了性能。

3.6 GPT架构

GPT最初是由OpenAI的Radford等人在论文《通过生成式预训练改进语言理解》(https://mng.bz/x2qg)中提出的。GPT-3是这个模型的扩展版,具有更多的参数,并且在更大的数据集上进行了训练。此外,ChatGPT中提供的原始模型是通过使用OpenAI的InstructGPT论文(https://arxiv.org/abs/2203.02155)中的方法,在一个大型指令数据集上对GPT-3进行微调而创建的。如图1.6所示,这些模型是出色的文本补全模型,并且可以执行其他任务,如拼写校正、分类或语言翻译。考虑到GPT模型是在相对简单的下一个词预测任务上进行预训练的(如图1.7所示),这实际上是非常了不起的。

下一个词预测任务是一种自监督学习的形式,也是一种自我标注。这意味着我们不需要显式地为训练数据收集标签,而是可以使用数据本身的结构:我们可以将句子或文档中的下一个词作为模型应该预测的标签。由于这种下一个词预测任务允许我们“即时”创建标签,因此可以使用庞大的未标注文本数据集来训练大型语言模型(LLM)。与前面介绍的原始Transformer架构相比,通用的GPT架构相对简单。本质上,它只是解码器部分,没有编码器(图6)。由于像GPT这样的解码器式模型是通过一次预测一个词来生成文本的,因此它们被视为一种自回归模型。自回归模型将其之前的输出作为未来预测的输入。因此,在GPT中,每个新词的选择都是基于其前面的序列,这提高了生成文本的连贯性。

像GPT-3这样的架构也比原始的Transformer模型大得多。例如,原始的Transformer重复了六次编码器和解码器块。而GPT-3总共有96个Transformer层和1750亿个参数。

图6

3.6 构建大模型

图7

分为三个阶段,在第一阶段,学习基本的数据预处理步骤,并编写每个大型语言模型(LLM)核心中的注意力机制代码。在第二阶段,学习如何编写代码并预训练一个能够生成新文本的类似GPT的大型语言模型。第二阶段的重点是出于教育目的,使用一个小数据集来实施训练。此外,提供了加载公开可用的模型权重的代码示例。在第三阶段,我们将采用一个预训练的大型语言模型,并对其进行微调,以使其能够遵循指令,如回答查询或分类文本——这是许多实际应用和研究中最常见的任务。

四、总结

  1. 大型语言模型(LLM)已经彻底改变了自然语言处理领域,该领域此前主要依赖于基于明确规则的系统和更简单的统计方法。LLM的出现引入了新的基于深度学习的方法,这些方法推动了人类语言理解、生成和翻译方面的进步。

  2. 现代大型语言模型(LLM)的训练主要分为两个步骤:首先,它们通过使用句子中下一个词的预测作为标签,在大量未标注的文本语料库上进行预训练。然后,它们在一个更小、已标注的目标数据集上进行微调,以遵循指令或执行分类任务。

  3. 大型语言模型(LLM)基于Transformer架构。Transformer架构的核心思想是一种注意力机制,该机制使LLM在逐个生成输出单词时,能够有选择地访问整个输入序列。

  4. 原始的Transformer架构由用于解析文本的编码器(encoder)和用于生成文本的解码器(decoder)组成。

  5. 用于生成文本和遵循指令的大型语言模型,如GPT-3和ChatGPT,仅实现了解码器模块,从而简化了架构。这意味着这些模型专注于生成文本,而不需要编码器的解析功能,因为它们的任务主要是根据输入或指令生成连贯的文本输出。

  6. 由数十亿单词组成的大型数据集对于LLM的预训练至关重要

  7. 虽然类似GPT的模型的一般预训练任务是预测句子中的下一个词,但这些大型语言模型(LLM)却展现出了涌现特性,如分类、翻译或总结文本的能力。

  8. 一旦大型语言模型(LLM)完成预训练,所得的基础模型就可以更高效地针对各种下游任务进行微调。

  9. 在自定义数据集上微调的大型语言模型(LLM)在特定任务上的表现可以优于通用LLM。

参考:

LLM入门指南及资料下载~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值