深入浅出LLM大语言模型

Posted by WGrape的博客 on February 10, 2024

文章内容更新请以 WGrape GitHub博客 : 深入浅出LLM大语言模型 为准

深入浅出LLM大语言模型

一. 前言

本文原创,著作权归WGrape所有,未经授权,严禁转载

2022年末,聊天程序ChatGPT的上线,在短短5天被注册用户就破百万。ChatGPT的爆火,在一夜之间,带领人类穿越到了真正的人工智能时代。

本文会从ChatGPT作为切入点,在介绍其底层的GPT模型诞生史后,再深入浅出地讲解大语言模型(LLM)及工作原理。在整篇文章中,从点到面到又介绍了自然语言处理(NLP)、深度学习、Transformer模型等,让你对LLM和AI领域有更加清晰透彻的理解。

二. GPT模型的诞生史

1. 自然语言处理的局限性

自然语言处理(Natural Language Processing, NLP)是人工智能领域(AI)的一个重要分支,其发展已经有数十年的历史。NLP旨在使计算机能够理解、处理和生成人类语言,为实现智能对话系统奠定了基础。

在NLP技术演进前期,NLP主要基于规则、统计模型等实现,所以传统的NLP技术存在一些局限性,例如对复杂语境的理解能力不足、生成自然流畅文本的难度较大等。

所以在ChatGPT出现之前,虽然已经产生了非常多智能聊天工具,但是只可以完成简单、生硬、且固定模板下的对话。原因就在于自然语言处理的局限性。

2. 机器学习的崛起

机器学习(Machine Learning, ML)也是AI领域的一个重要分支,随着机器学习技术的不断进步和普及,NLP领域也迎来了新的机遇。

机器学习技术主要包括无监督学习,和有监督学习。通过大规模数据的学习和模式识别,使得计算机能够更好地理解和处理自然语言。

传统的NLP任务,如文本分类、命名实体识别等,开始采用机器学习方法,取得了显著的进展。然而,传统的机器学习方法在处理复杂的自然语言任务时仍然存在一些挑战,例如需要手动提取特征、模型泛化能力有限等。

3. 深度学习的崭露头角

深度学习(Deep Learning, DL)是机器学习中的一种有监督学习,它模仿人类大脑的结构和工作方式,通过构建深层神经网络来处理和理解复杂的数据,常见的神经网络模型有传统的循环神经网络(RNN)和卷积神经网络(CNN)等。

image

深度学习的出现,为NLP提供了更加强大和灵活的工具。NLP领域也开始出现了一系列重大突破。这些深度学习模型利用大规模数据的学习能力以及复杂的神经网络结构,可以从原始的文本数据中提取高层次的语义表示,从而实现更准确和更灵活的NLP任务。

(1) 如何对神经网络训练

深度学习是有监督学习,通过为人工神经网络提供标记数据集和对应的正确答案,达到对神经网络训练的目的。

例如,面部识别领域内的某项深度学习网络训练首先处理数十万张人脸图像,使用各种与性别或情绪相关的术语描述每幅图像。

该神经网络将通过这些提前提供正确答案的数据集慢慢构建知识网络。在该网络完成训练后,即可开始对以前未处理过的新人脸图像进行关于性别或情绪相关的猜测。

(2) 神经网络面临的挑战

神经网络作为一种强大的机器学习工具,已经在许多领域取得了巨大成功。然而,它也面临着一些挑战,这些挑战可能会限制神经网络在某些任务上的性能和应用。一些主要的挑战包括:

  • 记忆长度: 传统的神经网络在处理长序列时往往会出现记忆衰减的问题
  • 并行性 :传统的神经网络在处理序列数据时通常是逐步顺序处理的,因此难以利用并行计算的优势。
  • 长距离依赖性: 传统的神经网络在处理长距离文本时,会存在梯度消失和梯度爆炸问题,导致在处理长序列时性能下降

4. Transformer横空出世

Transformer模型首次在2017年的论文《Attention is All You Need》中提出,它引入了自注意力机制(Self-Attention Mechanism)和位置编码(Positional Encoding)等,在处理序列数据时取得了巨大成功。Transformer模型具有更高的并行性和更长的记忆长度,能够更好地处理序列数据中的长距离依赖关系,解决了传统神经网络面临的问题。基于Transformer可以生成自然、流畅、复杂的文本。极大地提高了NLP的能力。

Transformer模型的出现标志着NLP领域迈入了一个新的阶段,为诸如语言模型预训练、序列到序列学习等任务带来了革命性的变革。Transformer模型的成功也为后续更多基于深度学习的NLP模型,如BERT、GPT等,铺平了道路,为NLP技术的进一步发展打下了坚实的基础。

5. GPT模型的诞生

随着深度学习和神经网络技术的不断发展,研究人员开始探索如何利用大规模的语言数据来训练更加智能和自然的语言模型。在这样的背景下,GPT(Generative Pre-trained Transformer)由OpenAI于2018年提出,基于GPT模型的ChatGPT产品也于2022年末上线。

(1) 主要特点

GPT是一种 ①基于Transformer架构 ②预训练的 ③生成式的 NLP模型。

① 基于Transformer架构

GPT是基于Transformer架构实现的,并没有创新性的提出一种新的模型架构

② 预训练的

GPT模型与传统Transformer模型的区别,主要在于它的Pre-trained预训练,通过预训练-微调(pre-training, fine-tuning)的方法实现。

  1. 预训练(无监督):首先在大规模语料上进行预训练得到一个通用的模型,主要是获得语言理解和生成能力
  2. 微调(有监督):然后在特定任务上进行微调,以适应更贴合用户和实际特定场景的需求
③ 生成式的

需要知道的是,GPT模型并不是第一个使用预训练的Transformer模型,比如在2018年Google提出了BERT模型。

BERT(Bidirectional Encoder Representations from Transformers)模型是一个典型的双向语言表示学习模型。它专注于双向的语言表示学习,即模型在学习语言表示时能够同时考虑文本中的左侧和右侧上下文信息,从而更全面地理解文本的语境和含义。

GPT模型是在这些先前工作的基础上发展而来的,它与之前的模型相比的一个主要特点是采用了单向语言模型的预训练方法,所以这种单向的语言模型预训练方法使得GPT模型更适合于生成式任务,这也是GPT模型被称为生成式(Generative)模型的原因。

(2) 大力出奇迹

当GPT模型找到了适合自己的方向后,便开始在生成式模型这条道路上,开始了大力的投入。在它的背后,是在疯狂的堆加参数,疯狂的读取海量语料数据,对GPT进行疯狂的训练。

这些大规模的参数和数据量,使得训练一次的费用达到了惊人的千万美元。GPT-4的参数规模更是在GPT-3的10倍以上,这背后的费用是完全不敢衡量的。

image

三. 大语言模型时代来临

虽然在技术创新方面,GPT模型似乎并未带来全新的技术突破,但毫无疑问的是,这种通过大规模预训练来学习语言模型的方法,不仅直接推动了行业内大型语言模型(Large Language Model, LLM)的兴起,更是引发了生成式人工智能(Artificial Intelligence Generated Content, AIGC)领域的革命。

四. 揭开LLM的面纱

1. 什么是LLM

LLM(large language model,LLM)大语言模型是在2018年左右出现的一种语言模型,由具有许多参数(通常数十亿个权重或更多)的人工神经网络组成,使用无监督学习对大量未标记语料进行预训练生成通用模型,然后再在不同特定任务下进行微调。

LLM每个单词的释义如下:

  • Large(大型): 表示该模型具有大量的参数、大量的语料、复杂庞大的结构
  • Language(语言): 表示该模型用于NLP任务,可以处理和生成自然语言,如英语、中文等
  • Model(模型): 表示该模型是基于深度学习构建的神经网络模型,一般都是基于Transformer架构

GPT模型作为LLM的重要代表和标杆,行业内的LLM大都和GPT模型类似,所以在讲解LLM的时候也是基于GPT这种标准模型,不考虑其他特殊的模型。

2. LLM的构成特点

在前面介绍《GPT模型的诞生史》中,可以知道GPT模型的三个核心构成特点主要是 ①Transformer架构 ②预训练 ③生成式。

(1) Transformer架构

在LLM中,Transformer架构也是至关重要的组成部分之一。Transformer模型的核心是由多个编码器和解码器层组成的深度神经网络结构。编码器负责将输入文本进行编码,提取语义信息,而解码器则负责生成输出文本或者解码任务特定的表示。Transformer架构具有高度的并行性和可扩展性,能够有效地处理长序列数据,并且在自然语言处理领域取得了巨大成功。

① Input Embedding

神经网络需要数字作为输入(因为神经网络中大部分都是很多数学函数,比如线性函数等),但是文本数据是如何输入的呢,毕竟你不能将线性函数应用于文本数据。

幸运的是科学家们想到了如何使用非数字数据进行模型训练,那就是one-hot encode技术 ,即用唯一的向量替换每个可能的变量值的技术。

所以首先先对输入的文本,进行向量化处理,也称为Embedding:

  • Raw Input : Hi how are you
  • Tokens : [ Hi, how, are, you ] 先对原始文本进行分词处理,依次找到每个token
  • Token Ids : [ 10, 15, 26, 30 ] 再定义一个token表,然后依次找到每个token对应的tokenID
  • Input Embedding : [ [0.1, 0.54, 0.29], [0.3, 0.12, 0.62], [0.13, 0.14, 0.9], [0.1, 0.2, 0.19] ]

② Positional Encoding

Positional Encoding是解决长距离依赖的重要过程之一,它是一种将序列中的位置信息嵌入到词向量中的技术。通过在词向量中添加位置编码来表示每个词的位置信息。这样模型在接收输入时,不仅可以学习词的语义信息,还可以了解词在序列中的顺序。

  • Positional index : 0, 1, 2, 3
  • Positional Embedding : [ [0.2, 0.3, 0.0], [0.2, 0.3, 0.1], [0.2, 0.3, 0.2], [0.2, 0.3, 0.3], ]
  • Positional Embedding + Input Embedding : [ […], […], […] ]

③ encoder编码器

编码器是负责将输入序列转换为一系列隐藏表示的部分。它负责对输入序列进行编码和提取特征,为后续的任务提供语义信息。Transformer中的编码器由多个相同的层堆叠而成,每一层都由两个子层组成:自注意力机制层和前馈神经网络层。它的工作流程如下:

  • 自注意力机制层(Self-Attention Layer): 这一层负责计算输入序列中每个位置的注意力权重,以便模型能够在整个序列中捕捉上下文信息和长距离依赖关系。每个位置的隐藏表示会根据其他位置的信息进行加权求和,从而得到更丰富的表示。
  • 前馈神经网络层(Feedforward Neural Network Layer): 这一层对每个位置的隐藏表示进行非线性变换和映射,以提取更高级的特征。通常包括一个全连接层和一个激活函数,用于增强编码器的表征能力。

通过多层编码器的堆叠,Transformer模型能够逐层地提取输入序列中的特征,并将其转换为适合后续任务处理的表示形式。编码器的输出可以被用于解码器进行下游任务的执行,如语言建模、机器翻译等。

  1. 隐藏表示(Hidden Representation)是指输入数据经过一系列的线性变换和非线性变换后得到的一个向量,它用来表示输入数据的抽象特征。比如在解码器中,隐藏表示是关于当前位置的输入序列信息的一个抽象表示,它包含了输入序列的语义信息,但已经被转换成了一个更加紧凑的形式,便于后续的处理和生成。
  2. 在长距离文本计算中,使用到了成对卷积层Pairwise Convolutional Layer技术
④ decoder解码器

解码器是负责将编码器产生的隐藏表示转换为目标序列的部分。它主要通过自注意力机制和编码-解码注意力机制来理解输入序列的语义信息,并将其转换为目标序列的表示。它的工作流程如下:

  • 自注意力机制层(Self-Attention Layer): 解码器的每个位置都会对自己位置的词进行注意力计算,以捕捉目标序列中的内部依赖关系。
  • 编码-解码注意力机制层(Encoder-Decoder Attention Layer): 这一层允许解码器在生成每个位置的输出时,与编码器的隐藏表示进行交互。通过计算解码器当前位置与编码器各个位置之间的注意力权重,解码器可以聚焦于输入序列的不同部分,提取相关信息。
  • 前馈神经网络层(Feedforward Neural Network Layer): 最后一层是一个前馈神经网络层,负责将解码器当前位置的隐藏表示转换为目标序列的输出。通过多层的全连接层和激活函数,前馈神经网络层能够提取更高级的特征,以产生最终的输出。

通过以上三个步骤,解码器能够逐步生成并调整目标序列的每个位置的输出,并在生成过程中根据输入序列和先前生成的部分来进行动态调整。这使得Transformer模型在各种序列生成任务中表现出色,如机器翻译、文本总结等。

⑤ 如何理解整个过程
  1. 输入向量化(向量) :先把输入文本和每一个词的位置信息进行向量化并计算得出每一个词的向量值
  2. 编码器处理(压缩) :在编码器中对输入的向量值进行一层又一层的无数次数学计算,保证每一层都有上一层的所有上下文信息,最终输出一系列高度抽象的隐藏表示(向量数据)。这些隐藏表示包含了输入序列的语义信息,但已经被转换成了一个更为紧凑的形式,以便后续的处理。
  3. 解码器理解(解压):编码器产生的隐藏表示并不直接包含目标序列的信息。因此,需要解码器对这些隐藏表示进行解压,将其中包含的输入序列的语义信息转换为目标序列。解码器通过多次迭代生成和调整的过程,逐步将编码器的输出转化为完整的目标序列。
  4. 解码器输出(输出):解码器最终负责逐步生成和调整目标序列的每个位置的输出。在这个过程中,解码器根据先前已生成的部分目标序列以及编码器的输出,不断地预测并生成下一个位置的目标序列元素。通过多次迭代,解码器逐步生成完整的目标序列,从而完成了序列到序列的转换任务。

(2) 预训练

LLM的预训练阶段也是其关键组成部分之一。通过大规模的预训练,LLM能够在海量文本数据上学习到丰富的语言表示,从而具备了通用的语言理解能力。预训练通常采用无监督或者半监督的方式进行,这种预训练策略使得LLM能够更好地理解文本的语义和语境,为后续的微调任务打下了坚实的基础。

(3) 生成式

LLM通常被设计用于生成式任务,如文本生成、机器翻译、对话生成等。在生成式任务中,LLM利用预训练学习到的语言表示,通过解码器部分生成连贯自然的文本序列。生成式任务的优势在于能够根据输入文本生成新的文本,能够应用于多种自然语言处理任务中,并在诸多应用领域取得了成功。

3. LLM是如何工作的

LLM通过预训练和微调两个阶段来完成自然语言处理任务。预训练阶段通过大规模语料库学习语言模型的普适知识,微调阶段则通过在特定任务上的有标注数据上进行训练,使得模型适应具体的应用场景。

(1) 预训练阶段:

在预训练阶段,LLM使用大规模的文本数据来学习语言模型。这些文本数据通常是来自于互联网等大规模文本语料库,包含了各种类型的文本,如新闻、百科、社交媒体等。LLM通过预训练阶段学习文本中的语言模式、语法结构和语义信息,从而掌握语言的普遍规律和知识。

在预训练过程中,LLM模型会经过多轮迭代,通过自监督学习的方式来训练模型。通常采用的方法是掩盖(masking)部分输入文本中的词语或句子,然后让模型预测被掩盖的部分。通过这种方式,模型能够学习到词语之间的关联性、语义信息以及上下文的语境。

正是因为LLM提前预训练了海量的语料数据,所以当我们向GPT提问各行各业问题时,它大部分都可以比较正确输出。为什么说是大部分呢 ?这个会在下面《RAG场景》中讲到。

(2) 微调阶段:

在预训练完成后,LLM模型通常需要在特定任务上进行微调,以适应具体的应用场景。微调阶段的目的是通过在特定任务上的有标注数据上进行训练,进一步提升模型的性能和泛化能力。

在微调阶段,LLM模型会被输入一些与任务相关的有标注数据,比如文本分类、命名实体识别、机器翻译等任务的训练数据。然后,通过在这些数据上进行训练,模型可以调整自身参数,使得模型在特定任务上表现更好。

五. LLM的应用场景

1. RAG场景

(1) LLM存在的问题

在上面《LLM是如何工作的》中留了一个伏笔,LLM在哪些情况下会输出不正确呢 ?很简单,比如GPT训练的数据可能只截止到22年左右,如果向GPT问发生在24年的事情,那它肯定是不知道的。所以简单说LLM存在下面两个问题

  • 时效性不及时 :LLM依赖训练的语料,语料的时效性就决定了LLM回答的正确性
  • 数据源不充足 :LLM依赖训练的语料,如果缺少某一个领域内的语料,那么LLM也无法回答正确

如何解决这个问题呢 ?换句话说如何让LLM可以更准确的回答我们的问题呢 ?

(2) 什么是RAG

RAG(Retrieval-Augmented Generation)它是一种结合了检索和生成的方法,用于自然语言处理任务。它的思路很简单,既然LLM的语料存在时效性和数据源的问题,那么提供语料的这个操作就由用户传递过去。

① 检索阶段(Retrieval)

由于语料通常是几十MB甚至更大的文件,不可能全部传递过去,所以这就需要用到检索,即只传递相关性最高的数据,以减少资源的消耗。

首先,系统会使用检索式方法从大型知识库或文档集合中检索与当前任务相关的文本片段或文档。这和一般的检索/搜索系统是没有任何区别的,只不过为了提高相关性搜索的准确率,很多系统会使用向量存储的方式,这样的话就可以尽可能从知识库中检索到准确性更高的数据。

检索到的文本通常包含与待生成内容相关的信息,比如问题回答等。它会作为LLM的输入,提供给LLM作为上下文环境,以便LLM在生成阶段生成更加相关和准确的内容。

  1. 检索阶段通常是由一个专门的检索系统来完成的,而不是由大型语言模型(LLM)直接执行。
  2. 为保证检索到相关性最高的数据,一般情况下语料数据会使用向量存储,通过向量计算的方式,提高检索的相关性。
② 增强阶段(Augmented)

RAG模型通过在上下文中添加检索到的相关数据来增强用户输入(或提示)。此步骤使用提示工程技术与 LLM 进行有效沟通。增强提示允许大型语言模型为用户查询生成准确的答案。

③ 生成阶段(Generation)

在检索阶段检索到对应的文本后,会传递给LLM,当LLM获得文本后,会利用这些文本作为上下文,进行生成式任务。

生成阶段的输入是文本数据,也就是说传递给LLM模型的通常是文本数据,而不是向量数据!

(3) 结合RAG场景使用

相比于传统的检索系统,RAG这种检索增强系统,由于有了增强这个阶段,所以可以把LLM可以与信息检索模型相结合,根据用户的查询检索相关的信息,并生成与检索结果相关的文本,大大提高了准确性。

所以RAG场景常见的应用包括智能问答系统、文档总结生成等。

2. AIGC场景

AIGC(Artificial Intelligence Generated Content,人工智能生成内容)是一个涵盖多种生成式任务的场景,包括文本生成、图片生成、代码生成、视频生成、语音生成等等。在这些任务中,LLM(Large Language Model,大语言模型)可以发挥重要作用,解决各种问题,为各种应用场景提供支持。

在AIGC场景中,LLM作为一个通用的生成模型,可以灵活应用于各种生成式任务中,为内容创作和生成提供强大支持。通过LLM的应用,可以实现自动化的内容生成和创作,提高生产效率,拓展创作领域。

六、总结

在本文中,我们探讨了ChatGPT的诞生以及其对自然语言处理(NLP)领域的影响。首先,我们从自然语言处理(NLP)、机器学习和深度学习等方面介绍了ChatGPT的背景。随后,我们详细讨论了NLP领域的技术发展历程,从传统方法到深度学习的崭露头角,再到Transformer模型的出现,为理解ChatGPT的诞生奠定了基础。

接着,我们深入探讨了LLM的技术实现原理,包括Transformer架构、预训练和生成式等关键技术。我们分析了GPT模型的出现对生成式人工智能的推动,以及其在大语言模型(LLM)时代的作用。在AIGC场景中,LLM展现出了强大的生成能力,可以应用于文本生成、图片生成、代码生成、视频生成、语音生成等多个领域。

总之,ChatGPT的诞生标志着人工智能技术迈向了一个新的阶段,为未来的研究和应用开辟了新的道路。