在过去的二十年里,自然语言处理(NLP)领域取得了显著的进展。我们经历了各种不同的范式,如今已经进入了Transformer架构的时代。这些进步帮助我们能够更有效地表示单词或句子,从而解决NLP任务。另一方面,将文本输入与其他模态(如图像)结合的不同用例也应运而生。对话式人工智能(AI)迎来了一个新时代。开发的聊天机器人能够像人类一样回答问题、描述概念,甚至一步一步地解决数学方程式。所有这些进展都在极短的时间内发生了。而这一巨大进展的推动者之一,无疑就是Transformer模型。
在不同自然语言之间、自然语言与图像之间、自然语言与编程语言之间,甚至在更广泛的意义上,自然语言与几乎任何其他模态之间找到跨语义理解的方法,为我们打开了一扇新大门,使我们能够将自然语言作为主要输入来执行许多复杂的AI任务。最容易想象的方法就是我们只需描述我们在一张图片中寻找的内容,模型就会给我们想要的结果(huggingface.co/spaces/CVPR…)。
这些模型通过持续学习和改进的过程发展出了这种能力。最初,传统上使用分布式语义和n-gram语言模型来理解单词和文档的意义,这种方法已使用多年。然而,这些方法存在诸多局限性。另一方面,随着不同模态融合的新方法兴起,尤其是大语言模型(LLM)的现代训练方法,许多不同的用例得以实现。
传统的深度学习(DL)架构显著提升了NLP任务的性能,并克服了传统方法的局限性。循环神经网络(RNNs)、前馈神经网络(FFNNs)和卷积神经网络(CNNs)是一些广泛应用于解决方案的DL架构。然而,这些模型也面临各自的挑战。最近,Transformer模型成为标准,消除了其他模型的所有缺陷。它不仅在解决单一的单语任务方面表现出色,还在多语言、多任务处理方面表现优异。这些贡献使得在NLP中进行迁移学习(TL)变得更加可行,旨在使模型能够在不同任务或语言之间复用。
在本章中,我们将首先探讨注意力机制,并简要概述Transformer架构。我们还将强调Transformer模型与之前NLP模型之间的区别。
本章将涵盖以下主题:
- NLP方法的演变
- 回顾传统的NLP方法
- 利用深度学习
- Transformer架构概述
- 使用Transformer进行迁移学习
- 多模态学习
NLP方法的演变
让我们讨论过去二十年里NLP的演变,因为这个领域已经发生了显著的进步。最近,这种演变主要体现在Transformer架构的变革性发展上。该架构并非凭空出现,而是从各种基于神经网络的NLP方法演变而来的,最终形成了基于注意力机制的编码器-解码器架构,并且仍在不断发展。在过去十年中,Transformer架构及其变体因以下发展而受到广泛关注:
- 基于自注意力机制的上下文词嵌入
- 注意力机制克服了将输入句子中的所有信息编码到一个上下文向量中的问题
- 更好的子词分词算法,用于处理未见过的词或罕见的词
- 在句子中注入额外的记忆标记,例如Doc2vec中的段落ID或BERT中的分类([CLS])标记
- 可并行化的架构,使训练和微调速度更快
- 模型压缩(蒸馏、量化等)
- 迁移学习能力:深度学习模型可以轻松适应新任务或语言
- 跨语言、多语言和多任务学习能力
- 多模态训练
多年来,传统的NLP方法如n-gram语言模型、基于TF-IDF的模型、BM25信息检索模型以及独热编码的文档-词矩阵被用于解决一系列NLP任务,包括序列分类、语言生成和机器翻译。然而,这些传统方法存在诸多局限性,例如难以处理稀疏性、罕见词和长距离依赖。为了解决这些挑战,我们开发了基于深度学习的方法,如RNN、CNN和FFNN及其多种变体。
由TF-IDF模型创建的文档向量可能具有超过30,000个特征的大小。2013年,word2vec(一种两层FFNN词编码器模型)通过生成紧凑而密集的词表示(即词嵌入)解决了维度诅咒的问题。这个早期模型通过使用附近的邻近词预测目标词,将无监督的文本数据转换为有监督的数据(自监督学习),从而能够快速有效地创建静态词嵌入。同时,另一种广泛使用的模型GloVe提出,基于计数的模型可以比神经网络模型更好。它利用语料库的全局和局部统计数据,基于词-词共现统计来学习嵌入。
词嵌入已经证明在某些句法和语义任务中是有效的,正如下图所示,嵌入中的术语之间的偏移量如何支持基于向量的推理。例如,我们可以从术语“Man”和“Woman”之间的偏移量中推断出性别关系这一语义关系(Man -> Woman)。然后,我们可以通过将术语“Actor”的向量与之前计算的偏移量相加,算出“Actress”的向量。同样,我们可以学习句法关系,如单词的复数形式。例如,如果给出“Actor”、“Actors”和“Actress”的向量,我们可以估算出“Actresses”的向量。
词嵌入的代表性已经成为深度学习模型(如RNN或CNN)的一个基本组成部分。循环神经网络和卷积神经网络分别开始作为编码器和解码器应用于序列到序列(seq2seq)问题中,其中每个标记都用嵌入表示。这些早期模型的主要挑战在于多义词(具有多个含义的单词)。由于每个单词都被赋予一个固定的表示,这忽略了单词的语义差异,特别是对句子语义来说,这是一个严重的问题。
像通用语言模型微调(ULMFiT)和从语言模型中获取嵌入(ELMo)这样的先锋神经网络模型能够编码句子级别的信息,并缓解多义词问题,这与静态词嵌入不同。这样,我们得到了一个新概念,称为上下文词嵌入。
ULMFiT和ELMo方法基于LSTM(长短期记忆)网络,这是一种RNN的变体。它们还利用了预训练和微调的概念,通过在一般文本数据集上训练的预训练模型,并在目标任务上进行监督微调,从而实现了迁移学习。这是一个重要的发展,因为迁移学习此前在图像处理领域取得了成功,而这是首次应用于NLP领域。
与此同时,注意力机制的概念(通过联合学习对齐和翻译的神经机器翻译。Bahdanau等人,2015年)在NLP领域引起了强烈反响,并在seq2seq问题上取得了显著成功。早期的方法将从整个输入序列中获得的最后状态(称为上下文向量或思想向量)传递给输出序列,而没有链接或消除。得益于注意力机制,输入的某些部分可以与输出的某些部分关联起来。
2017年,引入了基于Transformer的编码器-解码器模型,并因其对注意力机制的创新性使用而取得成功。该设计基于前馈神经网络(FFNN),舍弃了RNN的循环性,仅使用注意力机制(Vaswani等人,《注意力就是你所需要的一切》,2017年)。它克服了其他方法所面临的许多困难,成为了一个新范式。在本书中,您将深入探讨并理解基于Transformer的模型如何运作。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
回顾传统的NLP方法
尽管传统模型将很快变得过时,但它们总能为创新设计提供启示。其中最重要的是分布式方法,这种方法至今仍在使用。分布式语义学是一种理论,通过分析词语的分布证据来解释其含义,而不是依赖预定义的词典定义或其他静态资源。这种方法认为,经常出现在相似上下文中的词语通常具有相似的含义。例如,“狗”和“猫”这样的词语常常出现在相似的上下文中,表明它们可能有相关的含义。这个概念最早由Zellig S. Harris在1954年的著作《词的分布结构》中提出。使用分布式方法的一个好处是,它允许研究人员追踪词语随时间或在不同领域或意义上的语义演变,而这仅凭词典定义是无法完成的任务。
多年来,传统的NLP方法依赖于词袋模型(BoW)和n-gram语言模型来理解单词和句子。词袋模型,也称为向量空间模型(VSMs),使用独热编码这种稀疏表示方法来表示单词和文档。这些独热编码技术被用于解决各种NLP任务,如文本分类、词语相似性、语义关系抽取和词义消歧。另一方面,n-gram语言模型为词语序列分配概率,这些概率可以用来计算给定序列属于语料库的可能性,或者根据给定语料库生成随机序列。
在这些模型之外,为了给一个词赋予重要性,通常会使用词频(TF)和逆文档频率(IDF)指标。IDF有助于降低高频词语的权重,如停用词和功能词,它们在理解文档内容方面的区分能力较低。一个词的区分能力还取决于领域——例如,一篇关于深度学习的文章可能几乎每篇都包含“网络”这个词。在领域数据中看到“网络”这个词并不令人惊讶。一个词的文档频率(DF)通过统计它出现在多少篇文档中来计算,这可以用于缩小所有词的权重。词频(TF)则是该词在文档中的出现次数。
基于TF-IDF的词袋模型的优缺点如下:
优点
- 易于实现
- 结果易于理解
- 领域适应性强
缺点
- 维度诅咒
- 对未见过的词没有解决方案
- 难以捕捉语义关系(如is-a, has-a, 同义词)
- 忽略词序
- 对大词汇表处理速度慢
使用词袋模型来表示一个小句子可能是不切实际的,因为它涉及到将词典中的每个词表示为向量中的一个单独维度,无论该词是否出现在句子中。这可能导致一个高维度的向量,其中有许多零值单元,难以处理,并且需要大量内存来存储。
潜在语义分析(LSA)已被广泛用于克服词袋模型的维度问题。它是一种线性方法,可以捕捉词语之间的两两相关性。基于LSA的概率方法仍然可以被视为一层隐藏的主题变量。然而,当前的深度学习模型包括多个隐藏层,拥有数十亿个参数。除此之外,基于Transformer的模型表明,它们能够比这些传统模型更好地发现潜在表示。
传统的NLP任务处理流程通常从一系列预处理步骤开始,如分词、词干提取、名词短语检测、块解析和停用词消除。在这些步骤完成后,使用加权模式构建文档-词矩阵,其中TF-IDF是最常用的选择。然后可以将这个矩阵用作各种机器学习管道的输入,包括情感分析、文档相似性、文档聚类以及查询和文档之间的相关性评分测量。同样,词语可以表示为矩阵,并用作标记分类任务的输入,如命名实体识别和语义关系抽取。分类阶段通常涉及应用监督机器学习算法,如支持向量机(SVM)、随机森林、逻辑回归、朴素贝叶斯和多种学习方法(提升或袋装)。
语言建模与生成
传统的语言生成任务方法通常依赖于n-gram语言模型,也称为马尔可夫过程。这些是基于前一部分词语(事件)来估计下一个词语概率的随机模型。n-gram模型主要有三种类型:一元模型、二元模型和n元模型(广义)。让我们来详细了解这些模型:
- 一元模型 假设所有词语都是独立的,不形成链条。词语在词汇表中的概率通过其在总词数中的频率简单计算得出。
- 二元模型 也称为一阶马尔可夫过程,根据前一个词语来估计下一个词语的概率。这个概率通过两个连续词语的联合概率与第一个词语概率的比值来计算。
- n元模型 也称为n阶马尔可夫过程,根据前n-1个词语来估计下一个词语的概率。
我们已经在回顾传统NLP方法的小节中讨论了传统NLP模型的基本范式,并进行了简要介绍。现在,我们将讨论神经语言模型如何影响NLP领域,以及它们如何解决传统模型的局限性。
利用深度学习
几十年来,我们见证了成功的架构,特别是在单词和句子表示方面。基于神经网络的语言模型在解决特征表示和语言建模问题上表现出色,因为它们能够在大数据集上训练更先进的神经架构,从而学习到紧凑的、高质量的语言表示。
2013年,word2vec模型引入了一种简单而有效的架构,用于学习连续的单词表示,并在多种句法和语义语言任务(如情感分析、释义检测和关系抽取)上表现优于其他模型。word2vec的低计算复杂性也为其普及做出了贡献。由于嵌入方法的成功,词嵌入表示受到了广泛关注,并在现代NLP模型中得到了广泛应用。
Word2vec和类似模型通过基于邻近词预测的预测式神经架构学习词嵌入。这种方法不同于依赖基于计数技术捕捉分布式语义的传统词袋模型。GloVe模型的作者探讨了基于计数的方法与基于预测的方法在分布式词表示中的优劣,认为这两种方法没有显著差异。FastText是另一种广泛使用的模型,它通过将每个单词表示为字符n-gram的词袋来包含子词信息,每个n-gram由一个常量向量表示。单词然后表示为其子向量的和,这一思想最早由H. Schütze在1993年提出。这使得FastText能够计算未见过的词(或罕见词)的词表示,并学习单词的内部结构,如后缀和前缀,这对于形态丰富的语言尤其有用。同样,现代的Transformer架构也利用了子词信息,并使用各种子词分词方法,如WordPiece、SentencePiece或字节对编码(BPE)。
让我们快速讨论一下流行的RNN模型。
使用RNN模型考虑词序
传统的词袋模型不考虑词序,因为它们将所有词语视为独立单元,并将它们放入一个篮子中。另一方面,RNN模型通过累积地结合前一个标记的信息来学习每个标记(单词)的表示,最终的标记提供整个句子的表示。
与其他神经网络模型类似,RNN模型处理由分词算法生成的标记,这些算法将原始文本分解为称为标记的原子单元。这些标记随后与在训练过程中学习的数字向量(称为标记嵌入)相关联。或者,我们可以使用众所周知的词嵌入算法(如word2vec或FastText)提前生成这些标记嵌入。
下面是一个简单的RNN架构示例,针对句子“The cat is sad. ”,其中x₀是“the”的向量嵌入,x₁是“cat”的向量嵌入,依此类推。图1.3展示了RNN如何展开为一个完整的深度神经网络(DNN)。展开意味着我们将每一层与每个单词相关联。对于“The cat is sad. ”序列,我们处理的是五个标记的序列。每层中的隐藏状态充当网络的记忆,并在各个步骤之间共享。它编码了所有先前时间步和当前时间步中发生的信息。这在以下图表中表示:
以下是RNN架构的一些优点:
-
可变长度输入:RNN能够处理可变长度的输入,无论输入句子的长度如何。我们可以使用3个单词或300个单词的句子来训练网络,而无需更改参数。
-
关注词序:RNN按顺序逐词处理序列,关注单词的位置。
-
适用于多种模式:我们可以使用相同的递归范式来训练机器翻译模型或情感分析模型。两种架构都基于RNN:
- 一对多模式:RNN可以设计成一对多模型,用于语言生成或音乐生成。(例如,一个单词 -> 其在句子中的定义)
- 多对一模式:RNN可以用于文本分类或情感分析。(例如,将一个句子作为单词列表 -> 情感得分)
- 多对多模式:多对多模型可用于解决编码器-解码器问题,如机器翻译、问答和文本摘要或类似命名实体识别(NER)的序列标注问题。
RNN架构的缺点如下:
- 长期依赖问题:当我们处理非常长的文档并试图连接彼此相距较远的词语时,我们需要关注并编码这些词语之间的所有无关其他词语。
- 易受梯度爆炸或消失问题的影响:在处理长文档时,更新最初单词的权重是一个大问题,这使得模型由于梯度消失问题而无法训练。
- 难以应用并行化训练:并行化将主要问题分解为较小的问题,并同时执行解决方案,但RNN遵循经典的顺序方法。每一层都严重依赖于前一层,这使得并行化成为不可能。
- 序列越长,计算越慢:RNN对于短文本问题可能非常高效。但处理长文档时不仅会非常慢,还会遇到长期依赖问题。
虽然理论上RNN可以关注到许多时间步之前的信息,但在现实世界中,处理长文档和长期依赖问题是难以解决的。长序列通过多层深度层表示。这些问题已经在许多研究中得到了解决,其中一些研究概述如下:
- Hochreiter和Schmidhuber. 长短期记忆(LSTM),1997年。
- Bengio等人. 使用梯度下降学习长期依赖性是困难的,1993年。
- K. Cho等人. 使用RNN编码器-解码器学习短语表示用于统计机器翻译,2014年。
LSTM和门控循环单元
LSTM网络(Schmidhuber,1997年)和门控循环单元(GRU)(Cho,2014年)是RNN的变体,旨在解决长期依赖问题。LSTM的一个关键特征是使用一个单元状态,这是一个位于LSTM单元上方的水平序列线,由专门的门控控制,用于处理遗忘、插入或更新操作。LSTM的复杂结构如下图所示:
该设计能够决定以下内容:
- 我们将在单元状态中存储什么样的信息
- 哪些信息将被遗忘或删除
在原始的RNN中,为了学习任何标记的状态,它会递归地处理前面所有标记的完整状态。携带来自早期时间步的所有信息会导致梯度消失问题,这使得模型无法训练。你可以这样理解:携带信息的难度随着每一步骤呈指数级增加。例如,假设携带前一个标记的信息的难度为2个单位;携带前两个标记的信息的难度为4个单位,而携带前10个标记的信息的难度则变为1,024个单位。
LSTM中的门控机制允许架构在某个时间步跳过一些不相关的标记,或者记住长距离状态以学习当前标记的状态。GRU在很多方面与LSTM类似,主要区别在于GRU不使用单元状态。相反,GRU通过将单元状态的功能转移到隐藏状态中简化了架构,并且仅包括两个门:更新门和重置门。更新门决定了前一时间步和当前时间步的信息有多少会被向前推进。这一功能帮助模型保留来自过去的相关信息,同时也将梯度消失问题的风险降到最低。重置门检测不相关的数据并使模型忘记它们。
在使用传统RNN的seq2seq管道中,必须将所有信息压缩到输入数据的单一表示中。然而,这可能会使输出标记难以专注于输入标记的特定部分。Bahdanau的注意力机制首先应用于RNN,并证明在解决这一问题上非常有效,成为Transformer架构中的关键概念。在本书的后续部分,我们将更详细地探讨Transformer架构如何使用注意力机制。
上下文词嵌入与迁移学习
传统的词嵌入(如word2vec)是许多神经语言理解模型的重要组成部分。然而,在语言建模任务中使用这些嵌入会导致词语的相同表示,而不论其出现的上下文如何。例如,无论"bank"这个词指的是金融机构还是河岸,在传统向量中都会有相同的嵌入表示。在这一点上,上下文对于人类和机器理解词语的意义都很重要。
在这一领域,ELMo和ULMFiT是实现上下文词嵌入和高效NLP迁移学习的先锋模型。它们在多种语言理解任务中表现出色,如问答、命名实体识别(NER)、关系抽取等。这些上下文嵌入既捕捉了词语的意义,也捕捉了它出现的上下文。与传统的每个词使用静态表示的词嵌入不同,它们使用双向LSTM通过考虑词语所在的整个句子来编码词语。
它们展示了预训练词嵌入在完成预训练后可以被用于其他NLP任务。尤其是ULMFiT在将迁移学习应用于NLP任务中取得了成功。当时,迁移学习在计算机视觉中已经普遍使用,但现有的NLP方法仍然需要特定任务的修改和从头开始训练。ULMFiT引入了一种有效的迁移学习方法,可以应用于任何NLP任务,并展示了微调语言模型的技术。ULMFiT的过程包括三个阶段。第一阶段是在大型语料库上对通用领域的语言模型进行预训练,以在不同层次上捕捉通用语言特征。第二阶段是在目标任务数据集上微调预训练的语言模型,使用判别性微调来学习特定任务的特征。最后阶段是在目标任务上逐步解冻地微调分类器。这种方法在保持低层次表示的同时,适应高层次表示。
现在,终于到了我们讨论的主要话题——Transformers!
Transformer架构概述
Transformer模型因其在从文本分类到文本生成的广泛NLP问题中的高效性而受到极大的关注。注意力机制是这些模型中的一个重要组成部分,起着非常关键的作用。在Transformer模型出现之前,注意力机制被提出作为一种辅助工具,用于改进传统的深度学习模型,如RNNs。为了理解Transformers及其对NLP的影响,我们首先需要研究注意力机制。
注意力机制
注意力机制通过将输入序列中的特定标记与输出序列中的特定标记相连接,促成了更高级模型的创建。例如,假设你在一个英语到土耳其语的翻译任务中有一个输入短语“Canadian Government”。在输出句子中,“Kanada Hükümeti”这个标记与输入短语建立了强烈的连接,并与输入中的其余单词建立了较弱的连接,如下图所示:
这种机制使模型在翻译、问答和文本摘要等序列到序列(seq2seq)任务中更加成功。最早的注意力机制变体之一由Bahdanau等人(2015年)提出。该机制基于这样一个事实,即基于RNN的模型(如GRUs或LSTMs)在神经机器翻译(NMT)等任务中存在信息瓶颈。这些基于编码器-解码器的模型以标记ID的形式获取输入,并以递归方式处理它(编码器)。然后,将处理后的中间表示输入到另一个递归单元(解码器)中以提取结果。这种雪崩式的信息传递就像一个滚动的球,消耗了所有的信息,而解码器部分难以将其展开,因为它看不到所有的依赖关系,只是将中间表示(上下文向量)作为输入。
为了调整这一机制,Bahdanau提出了一种在中间隐藏值上使用权重的注意力机制。这些权重调整了模型在每个解码步骤中必须给予输入的注意力的量。这种出色的引导帮助模型在特定任务(如NMT,这是一个多对多的任务)中表现更好。不同的注意力机制被提出,并带来了不同的改进。加性注意力、乘法注意力、通用注意力和点积注意力都是这些机制的一部分。最后一种是带有缩放参数的改进版本,被称为缩放点积注意力。这种特定的注意力类型是Transformer模型的基础,被称为多头注意力机制。加性注意力也是在NMT任务中引入的显著变革。你可以在这里看到不同类型的注意力机制概览:
名称 | 注意力评分函数 |
---|---|
基于内容的注意力 | 加性 |
基于位置的注意力 | 加性 |
通用注意力 | 乘法 |
点积注意力 | 点积 |
缩放点积注意力 | 缩放点积 |
表1.2 - 注意力机制的类型
在表1.2中,h和s分别表示隐藏状态和状态本身,而W表示特定于注意力机制的权重。
由于注意力机制并不仅限于NLP领域,它们还在从计算机视觉到语音识别的各个领域中的不同用例中使用。下图显示了一个为神经图像字幕生成训练的多模态方法的可视化(K Xu等人,《看、注意和讲:具有视觉注意力的神经图像字幕生成》,2015年):
另一个例子如下:
接下来,让我们了解多头注意力机制。
多头注意力机制
如下图所示的多头注意力机制是Transformer架构中的一个重要部分:
在深入了解缩放点积注意力机制之前,最好先对自注意力有一个清晰的理解。自注意力,如图1.8所示,是一种基本形式的缩放自注意力机制。该机制使用一个输入矩阵,并在各种项之间产生注意力分数。
在图1.9中,Q被称为查询(query),K被称为键(key),V被称为值(value)。如θ、φ和g所示的三种类型的矩阵在生成Q、K和V之前与X相乘。查询(Q)与键(K)之间的乘积结果生成一个注意力分数矩阵。这也可以被视为一个数据库,其中我们使用查询和键来找出各种项在数值评估方面的关系。注意力分数与V矩阵的乘积产生了这种类型的注意力机制的最终结果。之所以称其为自注意力,主要原因在于其统一的输入X(Q、K和V均由X计算得出)。所有这些内容在下图中有详细展示:
缩放点积注意力机制与自注意力(点积)机制非常相似,只是它使用了一个缩放因子。另一方面,多头部分确保模型能够在所有层次上查看输入的各个方面。Transformer模型关注编码器注释和来自前几层的隐藏值。Transformer模型的架构没有递归的逐步流程,而是使用位置编码来获取关于输入序列中每个标记位置的信息。嵌入的连接值(随机初始化)和位置编码的固定值一起构成了输入,它们被馈送到第一部分的编码器层,并在整个架构中传播,如下图所示:
位置信息是通过评估不同频率下的正弦和余弦波获得的。位置编码的示例如下图所示:
下图展示了一个关于Transformer架构和缩放点积注意力机制性能的良好示例:
在不同的上下文中,单词“it”指代不同的实体。如图1.12所示,“it”指代猫。如果我们将“angry”改为“stale”,“it”将指代食物。使用Transformer架构带来的另一个改进是并行性。传统的顺序递归模型如LSTM和GRU不具备这种能力,因为它们逐个处理输入标记。另一方面,前馈层略微加快了速度,因为单次矩阵乘法远比递归单元快。多头注意力层的堆栈能够更好地理解复杂的句子。
在注意力机制的解码器部分,采用了与编码器非常相似的方法,只进行了少量修改。多头注意力机制保持不变,但编码器堆栈的输出也被使用。这个编码被输入到第二个多头注意力层中的每个解码器堆栈中。这一小修改在解码时引入了编码器堆栈的输出。这一修改让模型在解码时能够感知到编码器的输出,同时在训练期间帮助它在各层之间有更好的梯度流动。解码器层末端的最终softmax层用于提供各种应用场景的输出,例如神经机器翻译(NMT),这是最初Transformer架构的设计目的。
该架构有两个输入,分别记为“inputs”和“outputs(向右移位)”。在训练和推理过程中,一个输入(inputs)始终存在,而另一个仅在训练和推理过程中出现,是由模型生成的。我们在推理时不使用模型的预测,是为了防止模型在某些情况下严重出错。但这意味着什么呢?想象一个神经翻译模型试图将句子从英语翻译成法语——在每一步中,它都会对一个单词进行预测,并使用该预测的单词来预测下一个单词。但如果在某一步出错,所有后续的预测也将是错误的。为了防止模型这样出错,我们提供了正确的单词作为向右移位版本。
下图展示了一个Transformer模型的视觉示例。它展示了一个具有两个编码器和两个解码器层的Transformer模型。图中的“Add & Normalize”层将来自前馈层的输入进行相加和归一化:
另一个基于Transformer架构的重要改进是使用一种简单的通用文本压缩方案,以防止输入端出现未见过的标记。这种方法通过使用字节对编码(BPE)和句子片段编码等不同方法,提高了Transformer在处理未见过的标记时的性能。当模型遇到形态上相近的标记时,这种方法也能为其提供指导。这些标记在过去未被见过,并且在训练中很少使用,但在推理中可能会出现。在某些情况下,其部分内容在训练中出现过;后者通常发生在形态丰富的语言中,例如土耳其语、德语、捷克语和拉脱维亚语。例如,模型可能会见过“training”这个词,但没有见过“trainings”。在这种情况下,它可以将“trainings”标记化为“training+s”。当我们将它们视为两个部分时,这两种情况是很常见的。
基于Transformer的模型有一些共同的特征——例如,它们都基于原始架构,只是在所使用的步骤上有所不同。在某些情况下,会进行一些微小的改动——例如,对多头注意力机制的改进。
接下来,我们将在以下部分讨论如何在Transformer中应用迁移学习(TL)。
在Transformer中使用迁移学习(TL)
迁移学习(TL)是人工智能领域的一个分支,旨在使模型可重用于不同的任务。例如,一个在任务A上训练的模型可以在任务B上重新使用(微调)。在NLP领域,这通过使用类似Transformer的架构实现,这种架构可以通过语言建模捕捉到语言本身的理解。这类模型被称为语言模型——它们为训练它们的语言提供了一个模型。迁移学习并不是一项新技术,它已经在诸如计算机视觉等各个领域中得到了应用。ResNet、Inception、Visual Geometry Group (VGG)和EfficientNet就是一些可以用作预训练模型的例子,这些模型能够被微调以应用于不同的计算机视觉任务。
使用像Word2vec、GloVe和Doc2vec这样的模型进行浅层迁移学习在NLP中也是可能的。之所以称为浅层,是因为在这种迁移学习背后没有模型被转移,转移的只是词/标记的预训练向量。你可以使用这些标记或文档嵌入模型,然后接着使用一个分类器,或者将它们与其他模型(如RNN)结合使用,而不是使用随机嵌入。
在NLP中使用基于Transformer模型的迁移学习也是可能的,因为这些模型可以在没有任何标注数据的情况下学习语言本身。语言建模是一项用于为各种问题训练可转移权重的任务。掩码语言建模(Masked Language Modeling)就是一种用于学习语言本身的方法。与Word2vec的基于窗口的中心词预测模型类似,掩码语言建模使用了类似的方法,但有一些关键区别。按照一定的概率,每个词都会被掩码并替换为一个特殊标记,如[MASK]。语言模型(在我们的例子中是基于Transformer的模型)必须预测被掩码的词。与Word2vec不同,掩码语言建模不是使用一个窗口,而是给出整个句子,模型的输出必须是填充了掩码词后的同一个句子。
最早使用Transformer架构进行语言建模的模型之一是BERT,它基于Transformer架构的编码器部分。BERT通过前述的方法完成了掩码语言建模的训练。BERT是一种可用于不同NLP任务的可转移语言模型,如标记分类、序列分类,甚至是问答。
每个这些任务在训练语言模型后,都是对BERT的微调任务。BERT因其在基础Transformer编码器模型上的关键特性而闻名,并通过修改这些特性,提出了不同版本的BERT——如小型(small)、微型(tiny)、基础(base)、大型(large)和超大型(extra-large)版本。上下文嵌入使模型能够根据给定的上下文正确理解每个词的含义——例如,“cold”一词在“cold-hearted killer”和“cold weather”两个句子中的含义是不同的。编码器部分的层数、输入维度、输出嵌入维度以及多头注意力机制的数量都是关键特性,如下图所示:
正如你在图1.14中看到的,预训练阶段还包括另一个目标,称为下一句预测(NSP)。我们知道,每个文档都是由句子按顺序组成的,训练模型理解语言的另一个重要部分是理解句子之间的关系——换句话说,它们是否相关。为实现这些任务,BERT引入了特殊的标记,如[CLS]和[SEP]。[CLS]标记最初是一个无意义的标记,作为所有任务的起始标记,包含关于句子的所有信息。在诸如下一句预测(NSP)这样的序列分类任务中,使用的是该标记输出(位置0的输出)的顶部的分类器。它在评估句子的意义或捕捉其语义方面也非常有用——例如,在使用Siamese BERT模型时,通过余弦相似度等度量来比较不同句子的两个[CLS]标记非常有帮助。另一方面,[SEP]用于区分两个句子,它仅用于分隔两个句子。在预训练之后,如果有人打算在诸如情感分析的序列分类任务上微调BERT,他们会在[CLS]的输出嵌入的顶部使用分类器。还值得注意的是,所有迁移学习模型在微调期间都可以被冻结或解冻;冻结意味着将模型内部的所有权重和偏差视为常数,并停止对它们的训练。在情感分析的例子中,如果模型被冻结,那么只会训练分类器,而不是整个模型。
在下一节中,你将学习多模态学习。你还将熟悉使用这一学习范式的不同Transformer架构。
多模态学习
多模态学习是人工智能中的一个通用主题,指的是解决方案中关联的数据不只存在于一种模态(仅图像、仅文本等)中,而是涉及一种以上的模态。例如,考虑一个同时涉及图像和文本作为输入或输出的问题。另一个例子可以是跨模态问题,其中输入和输出模态不同。
在深入探讨使用Transformers进行多模态学习之前,有必要描述一下它们如何用于图像。Transformers以序列的形式接收输入,但与文本不同,图像不是一维序列。这一领域的一种方法尝试将图像转换为小块。每个小块被线性投影为一个向量形式,并应用位置编码。
图1.15展示了Vision Transformer(ViT)的架构及其工作原理:
像BERT等架构一样,可以应用一个分类头来执行图像分类等任务。然而,这种方法也可以用于其他用例和应用场景。
单独使用Transformer处理图像或文本可以创建一个能够理解文本或图像的优秀模型。但如果我们希望拥有一个能够同时理解文本和图像,并在文本和图像之间建立联系的模型,那么就需要在训练中施加约束。对比语言-图像预训练(CLIP)是能够理解图像和文本的模型之一。它可以用于语义搜索,其中输入可以是文本/图像,输出是文本/图像。
下图展示了CLIP模型如何通过使用双编码器进行训练:
从CLIP架构中可以明显看出,它在文本和图像模态的零样本预测中非常有用。DALL-E和基于扩散的模型(如Stable Diffusion)也属于这一类别。
下一图展示了Stable Diffusion的处理流程:
![外![链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://i-blog.csdnimg.cn/direct/16e6d0ea6a664cd4a4d93a8c3c2934fa.png)
前面的图表也可以在 www.tensorflow.org/tutorials/g… 查看,许可证信息如下:creativecommons.org/licenses/by…
例如,Stable Diffusion使用文本编码器将文本转换为密集向量,然后扩散模型尝试创建相应图像的向量表示。解码器试图解码这种向量表示,最终生成与文本输入在语义上相似的图像。
多模态学习不仅帮助我们在图像-文本相关任务中使用不同的模态,还可以在许多不同的模态与文本结合使用,如语音、数值数据和图表。
总结
至此,我们已完成本章的内容。现在你应该理解了NLP方法和技术从词袋模型(BoW)到Transformer的演变过程。我们探讨了如何实现基于BoW、RNN和CNN的方法,并了解了Word2vec是什么,以及它如何通过浅层迁移学习改进传统的基于深度学习的方法。我们还研究了Transformer架构的基础,以BERT为例,学习了迁移学习及其在BERT中的应用。我们还描述了多模态学习背后的基本理念,并对ViT进行了简要介绍。同时也介绍了像CLIP和Stable Diffusion这样的模型。
此时,我们已经学习了继续下一个章节所需的基本信息。我们理解了基于Transformer的架构背后的主要思想,以及如何使用这种架构应用迁移学习。
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
学习路线
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓