简要描述下列概念在大语言模型中的作用
- Transformer 架构
- Attention 机制
- 预训练与微调
- 过拟合和欠拟合
Transformer 架构
Transformer是一种基于自注意力机制的深度学习模型,它在论文“Attention Is All You Need”中首次提出。与此前流行的循环神经网络(RNN)和长短期记忆网络(LSTM)相比,具有并行处理能力强和能够捕捉长距离依赖的优势。
Transformer在NLP领域的大多数任务中,如语言模型、机器翻译、文本摘要等,都取得了明显的性能提升。核心组件包括:
- 自注意力(Self-Attention)机制:使模型能够在序列的不同位置之间建立直接的依赖关系,无论它们在序列中的距离有多远,从而更好地捕捉远距离依赖。
- 多头注意力(Multi-Head Attention):并行地学习序列中不同位置的信息,使模型可以从多个子空间中同时提取不同的特征,增强模型的学习能力。
- 位置编码(Positional Encoding):由于Transformer模型缺乏循环结构,无法自然地利用序列顺序信息,位置编码通过添加到输入中来为每个元素提供位置信号。
- 编码器-解码器(Encoder-Decoder)架构:编码器负责处理输入序列,解码器用于生成输出序列。在编码器和解码器中都有多个相同的层叠结构,每个层中都有自注意力和全连接网络。
Transformer在大语言模型中的作用
Transformer架构通过其创新性的设计,在大型语言模型中提供了高效的并行计算、强大的上下文捕捉能力以及灵活的架构选择,在大型语言模型中,Transformer架构已经成为一个范式,其主要作用有:
- 提升并行化能力:由于Transformer不依赖于序列中的先前状态,模型在训练时能够高效地利用硬件架构,尤其是GPU,来进行大规模并行计算,这大幅度提高了训练效率。
- 强化长距离依赖捕捉能力:自注意力机制能够直接捕获序列中任意两点之间的关系,对于理解和生成长文本尤为重要,使得大语言模型能够更好地理解复杂的上下文和语义信息。
- 提供灵活的架构选择:Transformer的编码器和解码器模块可以根据任务需要灵活组合。例如,BERT模型只使用了编码器部分来理解文本,而GPT系列模型则使用解码器以自回归方式生成文本。
- 改善上下文表达能力:利用多头注意力机制,模型能够综合理解和表达不同层面的上下文信息,从而捕捉语言中的多样性和复杂性。
Attention 机制
- Attention 机制是一种用于提高序列模型性能的技术,它使模型能够动态地聚焦于序列中不同部分的信息。其核心原理是根据输入序列的每个元素与当前目标的相关性(即attention score)来加权输入序列的表示。这些权重决定了在生成输出时应该给予每个输入元素多少注意力。
- 该机制通常涉及三个关键组成部分:查询向量(Query, Q)、键向量(Key, K)和值向量(Value, V)。通过计算Q与各个K之间的相似度来生成权重(即attention scores),然后这些权重用于加权V,以输出加权的和,这反映了输入的不同部分的一种综合表示。在多头注意力(multi-head attention)的情况下,这个过程会多次同时进行,每次使用不同的Q,K,V权重,能够允许模型在不同的表示子空间中捕捉到输入的不同方面的信息。
- 具体地,Q,K,V是通过对同一个输入向量进行不同的线性变换(即乘以训练中学习的权重矩阵)得到的,这允许模型采用每个输入的不同表示形式来执行不同的任务。
Attention 机制在大语言模型中的作用
- 大语言模型中,Attention 机制能够使得模型高效处理长距离上下文信息,这意味着每个单词或词元可以与前文中的任意单词直接相互作用,无论它们在序列中的距离有多远。由于这种能力,Attention 机制在捕捉文本的上下文关系、语法结构和意义层次方面表现非常出色。
- Attention 机制有效地增强了模型的表示能力,能够学习更细致、复杂的语言规则和模式。它也是实现并行化处理的关键,因为不同的attention权重可以独立计算,大大提高了训练效率。
- 训练期间,Attention 机制能够让信息在网络不同层之间流动,这使得模型能够逐渐在更高层次上抽象和理解语言。在预测时,模型能够考虑到与当前预测最相关的上下文,从而生成更准确、连贯的文本。
预训练
1. 简要描述预训练
- 预训练(pre-training)是大语言模型如GPT (Generative Pre-trained Transformer)等的发展过程中的一项关键技术。它涉及在巨大的文本语料库上训练一个语言模型,而不需要特定的任务标签。预训练的目标是让模型学习到语言的通用表征,包括词汇、语法、句法结构和部分语义知识。预训练通常使用非监督或自监督的学习任务,如掩码语言模型(在BERT中)或是下一个单词预测(在GPT中),通过这些任务模型捕捉到语言的统计规律。
- 预训练的模型通常包含数以亿计的参数,它们能够从文本中提取复杂的特征并建立长距离依赖关系。对于Transformer架构而言,预训练同样包含学习自注意力(self-attention)机制的权重,这使得模型能够在处理每个词时考虑到句子中的所有其他词。
2. 预训练在大语言模型中的作用
预训练在大语言模型中的作用是多方面的:
- 基础语言理解:预训练帮助模型学会理解语言的基本结构和语义,构建起一种对自然语言普遍特性的表征(Representation)。这种表征能够捕捉词汇、语法、句法和语义等多方面的信息,使模型能够对不同的语言输入进行有效的理解和处理。通过这种普遍性的表征,模型能够在后续的下游任务中更好地适应和迁移学习到的知识。
- 知识融合:在从广泛的语料中学习时,模型可以吸收丰富的常识、事实知识和领域信息,这为后续特定任务提供了有力支撑。
- 迁移学习:通过预训练获得的语言表征可以迁移到不同的下游任务,通过微调(fine-tuning)使得模型在小规模标记数据上表现优异。
- 效率和经济性:预训练一次,多次利用的模式减少了对大量标记数据的需求,相比从零开始训练模型更加高效且成本效益更高。
- 模型泛化:预训练使得模型在看到新任务或新数据时能够更好地泛化,因为它已经在预训练阶段学习到了语言的广泛模式和结构。
微调
1. 简要描述微调(Fine-Tuning)
微调(Fine-Tuning)是对大型预训练语言模型训练过程的第二阶段,目的是调整和优化模型的参数以适应特定的下游任务和数据分布,以提高模型的表现。在这个过程中,模型已经在海量数据集上进行了预训练,通过这个预训练,模型已经学会了语言的基本结构和模式;也就是说,模型已经具备广泛的语言理解和生成的能力。继预训练之后,微调会针对具体任务对模型进行专门的调整,典型的微调任务包括文本分类、情感分析、问题回答等。
微调在广泛的预训练阶段之后,此时模型已经掌握了语言的基本语法、句法和一般知识。微调通常涉及以下几个步骤:
- 选择一个或多个具体的下游任务,如文本分类、命名实体识别、情感分析等。
- 准备相关任务的标注数据集,这个数据集一般相较于预训练数据集较小,但更为专业或专门化。
- 使用这个专门的数据集来继续训练模型,调整模型参数。训练的过程中会使用如交叉熵损失函数等具体的优化目标。
大模型的微调分成两种:
- 针对全量的参数--全量微调FFT(Full Fine Tuning)。
- 只针对部分的参数进行训练PEFT(Parameter-Efficient Fine Tuning)。
【业界常用的PEFT方案:Prompt Tuning、Prefix Tuning、LoRA、QLoRA】
2. 微调(Fine-Tuning)在大语言模型中的作用
微调在大语言模型中的核心作用是为了使通用预训练模型适应特定的应用或任务。在预训练阶段,模型学习了大量的语言知识和通用能力,但通常缺少对任务特定场景的优化。具体来说,微调的主要作用包括:
- 模型个性化:通过微调,模型可以学习到特定领域的词汇、术语及其语义,例如,医疗、法律或金融等领域的专业术语。
- 性能提升:在特定任务上继续训练能提高模型的精确度和召回率,减少不相关的一般性知识对预测的干扰。
- 快速适应新任务:通过微调大型模型能够迅速适应新环境或任务,这比重头训练一个新模型要经济和高效。
- 使用少量数据就能取得较好的效果:由于通用基础已经在预训练过程中建立,微调使模型能在相对较少的标注数据上就实现较高的性能。
过拟合和欠拟合
1. 过拟合(Overfitting)
- 模型在训练数据上表现出色,但在新的、未见过的数据上性能差。
- 原因通常是模型复杂度过高,学习到了训练数据中的噪声和特定特征。
2. 欠拟合(Underfitting)
- 模型在训练数据上表现不佳,通常也会在测试数据上表现不佳。
- 原因是模型过于简单,不能捕捉数据中的基本结构。
3. 作用于大语言模型
- 过拟合会降低模型在实际应用中的泛化能力。
- 欠拟合则表明模型没有足够的能力理解数据。
- 适当的模型复杂度、数据正则化和其他技术(如早停)是保证模型性能的关键。
解释BERT模型中的MLM和NSP的工作原理
BERT(Bidirectional Encoder Representations from Transformers)模型的结构、预训练任务以及微调(Fine-tuning)阶段:
输入表示,BERT模型的输入表示是通过以下三种类型的嵌入组合而成的:
- Token Embeddings:词向量嵌入,表示输入序列中的每个单词或标记。
- Segment Embeddings:区分对话或文本中的不同片段(例如,两个句子的起始和结束位置)。
- Position Embeddings:表示单词在序列中的位置信息。
预训练任务,BERT的预训练包括两个主要任务:
Masked Language Model (MLM):
- 输入序列的处理:
- 随机选择15%的token。
- 80%的选中token被替换成
[MASK]
标记(即[CLS]
)。- 10%的选中token被替换成随机token。
- 剩余10%的选中token保持不变。
- 构建预测目标,即原始选中的token。
- Transformer的自注意力机制:
- 利用周围未掩盖的token来理解上下文。
- 整合来自双向上下文的信息。
- 预测及优化:
- 输出选中token的概率分布。
- 与预测目标(即token的真实值)进行比较。
- 使用交叉熵损失函数优化模型参数。
Next Sentence Prediction (NSP):
- 输入序列的构建:
- 拼接两个句子A和B。
- 有50%的概率B是A的下一句,另外50%则随机选择。
- 构建分类目标,即句子是否连续(IsNext)或非连续(NotNext)。
- Transformer的自注意力机制:
- 理解两个句子之间的关联。
- 学习表示句子关系的嵌入。
- 预测及优化:
- 输出句子关系的分类结果。
- 与分类目标进行比较。
- 使用交叉熵损失函数优化模型参数。
Fine-tuning阶段(下游任务适配)
- 调整模型输出与任务对应:
- 根据具体任务调整BERT模型的输出层。
- 继续优化模型参数:
- 微调模型参数以适应具体任务,例如文本分类、命名实体识别等。
通过上述结构化的预训练和微调过程,BERT模型能够在多种自然语言处理任务中取得显著的效果。
Masked Language Model (MLM)
1. 输入序列的处理
- 随机选择输入序列中的15%的token进行遮蔽。
- 这些选中的token会有80%的概率被[MASK]替换,10%的概率被随机token替换,另外10%的概率保持不变。
- 构建预测目标:选择这些token的原始形态。
2. Transformer的自注意力机制
- 利用周围未被掩盖的token来理解每个[MASK]位置的上下文信息。
- 通过自注意力机制,模型可以综合左右两侧的上下文信息来预测[MASK]位置的token。
3. 预测及优化
- 模型输出每个[MASK]位置的token概率分布。
- 将预测结果与真实token值(标签)进行比较。
- 使用交叉熵损失函数进行优化。
Next Sentence Prediction (NSP)
1. 输入序列的构建
- 输入由两个句子A和B构成,它们被拼接在一起,模型需要预测B是否自然地跟随A。
- 在预训练的数据准备阶段,B有50%的概率是A的实际下一句,另外50%的概率是从语料库中随机挑选的句子。
- 设置分类目标:如果B是A的下一句,则标记为IsNext,否则标记为NotNext。
2. Transformer的自注意力机制
- 通过自注意力机制,BERT可以整合两个句子的信息,以衡量其相互间的逻辑和连贯性。
- 模型学习并理解句子关系,得到两个句子间关系的表示。
3. 预测及优化
- 模型输出一个二分类结果,预测句子B是否是句子A的下一句。
- 将预测结果与真实分类标签进行比较。
- 使用交叉熵损失函数对模型参数进行优化。
通过这两种预训练任务,BERT不仅能够理解单词和句子的内部结构,还能理解它们之间的关系。这些能力在完成Fine-tuning阶段时,使得BERT在各种NLP下游任务,如问答、情感分析、文本摘要等方面,都有出色的表现。
描述 GPT 和 BERT 模型架构的主要区别及其优缺点
GPT和BERT是自然语言处理领域的两个重要的预训练语言模型,它们有着不同的架构和优缺点。以下是对两者的详细比较:
GPT
1. 架构
- 采用基于Transformer的解码器架构。
- 使用无监督学习的方式进行预训练。
- 从左到右依次生成文本。
2. 优点
- 生成能力:由于其单向性的架构,GPT特别擅长文本生成任务。
- 细粒度上下文理解:在生成文本时,GPT能够连贯地从前到后保持上下文信息。
- 直接Fine-tuning:GPT可以直接在下游任务上进行Fine-tuning。
3. 缺点
- 缺乏双向上下文:由于其单向的架构,GPT不能像BERT那样在预训练阶段捕获双向上下文信息。
- 生成时可能偏离主题,因为模型只能利用之前的上下文。
BERT
1. 架构
- 采用基于Transformer的编码器架构。
- 对输入文本中的随机单词进行遮蔽,然后预测这些单词。
- 使用Masked Language Model和Next Sentence Prediction的预训练任务。
2. 优点
- 双向上下文理解:BERT通过其Masked Language Model (MLM) 从整个句子两端同时获取上下文,能够更好地理解每个单词的意义。
- 适用性强:由于其深层次的双向理解,BERT在诸多NLP任务(如问答系统、情感分析等)上表现出色。
3. 缺点
- 有限的文本生成能力:BERT不像GPT那样适用于文本生成任务,因为它是为在已存在的上下文中填空(即预测Masked tokens)设计的。
- 预训练计算成本较高:由于其双向特性和对输入的重复注意力计算,BERT在预训练阶段通常需要更多计算资源。
让大模型处理更长的文本
在处理更长文本的问题上,由于Transformer架构本身的限制,长序列数据处理是稍微有挑战性的。这主要是因为Transformer模型的自注意力机制拥有O(n^2)的时间和空间复杂性,这里的n是序列的长度。为了应对这一挑战,在实践中,我们可以采用以下策略来优化处理长文本的能力:
策略
1. 优化自注意力机制
- Longformer:采用全局注意力到关键token和滑动窗口实现局部注意力。
- BigBird:类似于Longformer,通过稀疏注意力机制和随机全局注意力点增强处理长序列的能力。
- Reformer:使用Locality-Sensitive Hashing(LSH)来减少计算需求,便于处理长序列。
2. 修改模型架构
- Transformer-XL:通过相对位置编码和记忆机制允许模型利用之前的隐藏状态信息,有效地处理长文本。
- Adaptive Attention Span:缩小注意力窗口的大小来减少参数的数量,适用于文本中各个部分。
3. 采用分块策略
- 对输入序列进行分块处理,并在模型中嵌入一种机制来维持区块间的联系(如使用额外的代表性token和结合状态信息)。
4. 压缩表示
- 预处理步骤中使用文本压缩,如通过抽取和提炼来减少文本长度。
- 模型内无损压缩技巧,例如通过使用卷积或递归下采样来简化输入序列。
5. 层次化注意力
- 实施多层次的自注意力机制,首先在局部区块内进行注意力计算,然后在更高层次上处理区块间的关系。
实现细节
在实现上述策略时,以下的细节需要考虑:
- 计算和存储资源:评估模型的可扩展性需要的资源,优化内存管理同时保证效率和效果。
- 分块策略:确保分块过程不会损失重要的上下文信息,设计有效的跨区块上下文融合机制。
- 模型泛化能力:在优化长文本处理的同时,保持模型在短文本处理的性能。
- 训练与推理速度:采用的优化策略不应严重影响整体训练和推理的速度。
- 兼容性和迁移学习:确保新的长序列处理方法能够和现有模型架构以及先进的预训练方法相兼容。
结合这些策略和细节,在设计和实现大型模型处理长文本的能力时,我们可以有效地平衡性能和效率,以达到实际应用需求。
Zeroshot和Fewshot具体做法的区别
在面对Zero-shot(零样本学习)和Few-shot(小样本学习)学习问题时,两者的主要差异在于训练阶段可用的数据类型和数量。以下是两种方法的具体做法区别的详细分析:
Zero-shot Learning
在Zero-shot学习中,模型在没有看见任何类别特定样本的情况下对新类别进行推理。Zero-shot学习的关键之处在于将知识从已知类别泛化到未知类别。
1. 知识转移的关键
- 语义知识表达:使用属性、类别描述或者词嵌入来建立类别与特征之间的联系。
- 类别标签空间:将看见和未看见的类别映射到共享标签空间,如Word2Vec嵌入空间。
2. 模型设计
- 构建推断机制:设计模型能够基于现有知识结构化地推断未知类别。
- 充分利用训练数据:即便不直接从目标类别中学习,也要最大化从其他附加信息中学习。
Few-shot Learning
与零样本学习相对,Few-shot学习提供了少量的目标类别样本来指导学习过程。
1. 训练方法
- 数据增强:为了避免过拟合,采用诸如旋转、剪切、噪声添加等技巧增加样本多样性。
- Meta-learning:通过设计任务学习模型学习学习过程,即“学会学习”。
2. 模型设计
- 匹配网络:使用记忆增强组件和注意力机制来找到小样本和查询样本间的关系。
- 基于模型的适应性:利用如神经过程(Neural Processes)等模型快速适应新类别
零样本与小样本的做法对比
1. 数据使用
- Zero-shot:不使用任何目标类别样本。需利用类别描述或其他辅助信息。
- Few-shot:使用少量目标类别样本进行微调或元学习。
2. 训练策略
- Zero-shot:侧重于推广和抽象层次的泛化能力。
- Few-shot:集中在如何从极少的数据中快速学习。
3. 泛化能力
- Zero-shot:需在知识桥接未见类别上有强大的泛化能力。
- Few-shot:侧重于从少量信息中迅速概括并泛化。
4. 评估方法
- Zero-shot:在完全未见过的类别上评估。
- Few-shot:使用n-way k-shot设置进行评估,其中n是类别数,k是每类样本数。
为什么transformer要用Layer Norm为什么不用BN
当讨论Transformers模型相对于批量归一化(Batch Normalization, BN)而选择层归一化(Layer Normalization, LN)的原因时,可以从几个核心角度来分析和说明这一设计决策。
1. 计算特性
批量归一化(BN)
- 依赖于批次大小:BN依赖于一个批次中的所有数据,计算每个特征的均值和方差。
- 迷你批次效应:小批量大小可能会导致估计的准确性下降,这在小批量情况下尤为显著。
- 序列长度变化影响:在NLP任务中,序列长度通常是可变的,这会增加BN在处理不同序列长度时的复杂性。
层归一化(LN)
- 独立于批次大小:LN对每个样本独立计算统计值,因此其性能不会因批次大小而变化。
- 计算稳定性:由于它独立于其他样本,LN提供了更稳定的行为,尤其是对于小批量的情况。
2. 归一化方向
批量归一化(BN)
- 跨样本:BN对同一特征的所有样本进行归一化,可能导致批次间的差异被平滑掉,对模型学习个体样本特性是不利的。
层归一化(LN)
- 跨特征:LN在单个样本内部对所有特征进行归一化,保持了批次间样本的独立性。
3. 适应性
批量归一化(BN)
- 对RNN不友好:RNN及其变体(常用于处理序列数据)在不同时间步处理不同的数据,BN因其跨批次特性并不适用。
层归一化(LN)
- 适合序列模型:对于Transformers和RNN这类序列模型,LN在保持序列内部依赖性的同时提供了较好的归一化效果。
4. 实例一致
批量归一化(BN)
- - 对实例差异不敏感:BN对所有输入样本执行相同的归一化操作,不管它们的内部特征如何。
层归一化(LN)
- -维护实例差异性:LN通过在每个样本的所有特征上执行归一化,保持了实例之间的差异性。
结构总结
计算特性
- BN:依赖批次大小
- LN:独立于批次大小
归一化方向
- BN:纵向归一化(横跨样本)
- LN:横向归一化(内部特征)
适应性
- BN:适合固定长度输入和大批量处理
- LN:适合序列模型和变长输入
实例一致性
- BN:可能会减弱样本间差异
- LN:保持样本间差异
Transformer为什么要用三个不一样的QKV?
- 注意力层:使用多头注意力(Multi-HeadAttention)机制整合上下文语义,它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构,从而更好地解决文本的长程依赖。
- 位置感知前馈层(Position-wiseFFN):通过全连接层对输入文本序列中的每个单词表示进行更复杂的变换。
- 残差连接:Add部分。它是一条分别作用在上述两个子层当中的直连通路,被用于连接它们的输入与输出。从而使得信息流动更加高效,有利于模型的优化。
- 层归一化:对应图中的Norm部分。作用于上述两个子层的输出表示序列中,对表示序列进行层归一化操作,同样起到稳定优化的作用。
Multi-Head Attention
Multi-Head Attention,是由多个Self-Attention组成的,以捕获单词之间多种维度上的相关系数 attention score。左图是Self-Attention,右图是Multi-Head Attention,如下所示:
自注意力(Self-Attention)机制自然成了Transformer模型核心组件之一。该机制通过计算序列中各个元素之间的关系来捕捉序列的内部结构。在自注意力中,将输入序列线性变换生成三个矩阵:查询(Query, Q)、键(Key, K)和值(Value, V)是为了实现这一机制并优化其性能。
【self-Attention 接收的是输入(单词的表示向量组成的矩阵) 或者上一个 Encoder block 的输出。在计算的时候需要用到矩阵Q(查询),K(键值),V(值)】
***为什么Transformer需要进行Multi-head Attention,即多头注意力机制?
假如翻译一个句子,比如“The animal didn’t cross the street because it was too tired”,我们会想知道“it”指的是哪个词,这时模型的“多头”注意机制会起到作用。
它给出了注意力层的多个“表示子空间”(representation subspaces)。
可以类比CNN中同时使用多个滤波器的作用,直观上讲,多头的注意力有助于网络捕捉到更丰富的特征/信息。
Transformer的多头注意力借鉴了CNN中同一卷积层内使用多个卷积核的思想,原文中使用了 8 个 scaled dot-product attention (缩放的点积注意力),在同一 multi-head attention 层中,输入均为 KQV ,同时进行注意力的计算,彼此之前参数不共享,最终将结果拼接起来,这样可以允许模型在不同的表示子空间里学习到相关的信息,在此之前的 A Structured Self-attentive Sentence Embedding 也有着类似的思想。
简而言之,就是希望每个注意力头,只关注最终输出序列中一个子空间,互相独立。其核心思想在于,抽取到更加丰富的特征信息。不过,Multi-Head 的多个头并不一定就如我们所期望的那样去关注不同方面的信息。在 EMNLP 2018 的 Multi-Head Attention with Disagreement Regularization一文中采用正则化手段来保证每个头关注不同的子空间。
Self-Attention
Transformer模型中的注意力机制利用三个不同的负载矩阵:查询(Query, Q)、键(Key, K)和值(Value, V)是为了以灵活、高效的方式捕捉序列内部的依赖关系。这种设计背后的原理可以从以下几个方面来深入理解:
分解为不同Q, K, V的目的(简要回答版):
1). 提升表达能力:通过使用不同的参数矩阵将输入变换为Q, K, V,模型能够学习到更加丰富和多样的表示,每个表示捕捉输入数据的不同方面。这些不同的表示可以被解释为不同的抽象概念,比如“寻找什么”(Q)、“在什么上寻找”(K)、和“当找到之后要怎么处理”(V)。
2). 泛化能力:对Q, K, V的不同处理方式允许注意力机制学习在不同上下文中复用相似的模式(例如,无论语境如何,“问题”和“答案”的概念可能是类似的)。这样的设计引入了一种泛化,允许模型更好地适应新的、未见过的数据。
分解为不同Q, K, V的目的(详细回答版):
1). 提高泛化能力
更灵活的权重分配:在计算注意力权重时,Q 和 K 的线性变换产物进行点积操作,决定了每个元素给到其他元素的关注程度。不同的Q和K表示允许模型动态调整注意力权重,从而更好地适应数据中的模式和变化。
适应序列本质特征:注意力得分(即softmax(QKᵀ/√d_k))反映了输入序列各部分之间的相对相关性。通过调整Q、K的学习过程,Transformer可以更好地捕捉长距离依赖和复杂的序列关系,这对于处理自然语言等顺序相关性强的数据非常重要。
泛化关系模式:通过独立的参数矩阵进行线性变换,可以让模型学习到从数据中抽象和泛化出更加复杂的关系模式,而不仅仅是简单的匹配和复制。
2). 增强模型的表达能力:
定制化的信息抽取:V代表了要提取的信息,通过关联Q和K计算得出的权重,可以从V中提取更为丰富且相关的上下文信息。这样一来,模型不是简单地对原始输入进行编码,而是能够根据不同的情况提取不同的信息,这对于提高模型对输入数据的理解至关重要。
提供角色分离:在自注意力机制中,Q、K、V承担不同的角色。Q代表需要检索信息的部分,K代表被检索的部分,V则代表实际回传的信息内容。这种分离使得模型可以分开处理检索和传递信息的角色,增加模型的灵活性和表达能力。
增加复杂性:使用不同的变换矩阵,可以使得Q、K、V在高维空间有着不同的表示,强化了模型捕捉多样化关系的能力,例如,长距离依赖、语义关系等。
具体机制
具体来说,注意力机制通过对每个输入单元的Q与所有输入单元的K进行比较,并应用softmax函数来确定每个单元的V将如何被加权。计算注意力权重时使用的softmax函数,确保了即使在不同序列长度和复杂性的情况下,注意力分数也会被规范化(normalized),这样模型的泛化能力就会被提升。
Self-attention的公式为
其中,根号d_k是缩放因子(通常是K的维度开平方根),用于调整点积的大小,预防过大的点积导致softmax函数进入梯度很小的区域,影响训练效率。
总结一下:通过将输入序列分别映射到Q, K, V三种表示,Transformer不仅增强了模型的表达能力,还在注意力权重计算中引入泛化的可能性,使模型能够有效处理各种序列数据,并且对于自然语言的多样性和复杂性有着更强的适应性。这也是Transformer模型在自然语言处理任务中取得如此卓越表现的关键因素之一。
为了便于更好的理解Transformer的自注意力机制,现以图文的形式简要介绍一下计算自注意力的步骤:
计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。
第一步是计算查询矩阵、键矩阵和值矩阵。为此,我们将将输入句子的词嵌入装进矩阵X中,将其乘以我们训练的权重矩阵(WQ,WK,WV)。
x矩阵中的每一行对应于输入句子中的一个单词。
计算自注意力的第二步是计算得分。
第三步和第四步是将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1。
这个softmax分数决定了每个单词对编码当下位置(“Thinking”)的贡献。显然,已经在这个位置上的单词将获得最高的softmax分数,但有时关注另一个与当前单词相关的单词也会有帮助。
第五步是将每个值向量乘以softmax分数(这是为了准备之后将它们求和)。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)。
第六步是对加权值向量求和(译注:自注意力的另一种解释就是在编码某个单词时,就是将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并通过softmax得到),然后即得到自注意力层在该位置的输出。
这样自自注意力的计算就完成了。得到的向量就可以传给前馈神经网络。
我们可以将步骤2到步骤6合并为一个公式来计算自注意力层的输出。