大语言模型岗经典面试题
1.lora的原理
LoRA的基本原理是冻结预训练模型的参数,然后在transformer的每一层中加入一个可训练的旁路矩阵(低秩可分离矩阵),接着将旁路输出与初始路径输出相加输入到网络当中,并只训练这些新增的旁路矩阵参数。其中低秩可分离矩阵由两个矩阵组成,第一个矩阵负责降维,第二个矩阵负责升维,中间层维度为r,从而来模拟本征秩,这两个低秩矩阵能够大幅度减小参数量
2.QloRA的原理及其创新技术
QLoRA是一种基于LoRA的微调方法,其中适配器位于每个网络层,通过引入4位NormalFloat、双量化和分页优化器等方法,QloRA对LoRA方法进行了更好地调优,降低内存使用同时保持性能。
内存节省创新
- 使用4位正态浮点:信息理论上最优的量化数据类型,适用于正态分布的数据
- 双重量化:将量化常数进行量化的方法,平均每个参数节省约0.37位
- paged Optimizers:使用NVIDIA统一内存来避免在处理长序列的小批次时出现梯度变量的内存峰值(防止梯度检查点期间的内存峰值导致的内存溢出错误)
3.LayerNorm计算公式

4.RMSNorm计算公式

5.LayerNorm和BatchNorm
什么是批量归一化(BN)
- 核心原理:BN在每一层的训练过程中,对输入的激活值在小批量内进行归一化
- 计算步骤
- 计算均值和方差:对于给定的批量输入,计算每个神经元的均值和方差
- 归一化:使用计算得到的均值和方差,对输入进行标准化处理,使其均值为0,方差为1
- 缩放和平移:引入可学习的参数y和x,对标准化后的数据进行缩放和平移,以增加模型表达能力
- 应用:主要用于卷积神经网络中,通过对mini-batch的每个维度进行标准化,减少内部协变量偏移,提高训练的稳定性
什么是层归一化(LN)
- 核心原理:LN不在批量维度上进行归一化,而是在特征维度上进行归一化
- 计算步骤
- 计算均值和方差:对于给定输入的每一层,计算每个样本特征维度的均值和方差
- 归一化:使用计算得到的均值和方差,对输入进行标准化处理,使其均值为0,方差为1
- 缩放和平移:引入可学习的参数y和x,对标准化后的数据进行缩放和平移
- 主要应用于RNN和Transformer等序列模型中,它对整个层进行标准化,独立于mini-batch,确保在不同时间步和序列长度下具有一致的归一化效果
6.为什么Transformer是LayerNorm?
transformer的输入是序列数据,不同批次可能会有不同的长度和特征分布,使用LayerNorm可以更好地处理这些变化,同时适应不同时间步的归一化需求
7.RMSNorm比LayerNorm好在哪里
简单来说,虽然两者的时间复杂度一致,但是RMSNorm比LayerNorm确实减少了减去均值以及bias的计算,这在目前大模型预训练的计算量下能够体现出训练速度上的优势,并且RMSNorm在模型效果上的表现并不弱于LayerNorm(LN取得成功的原因可能是缩放不变性,而不是平移不变性),所以选择RMSNorm就很自然了,要注意RMSNorm也是LayerNorm的一种
8.encoder-only,encoder-decoder,decoder-only的区别
encoder-only架构:
- 定义与特点:这类模型仅包含编码器部分,主要用于从输入数据提取特征或表示。例如,在BERT (Bidirectional Encoder Representations from Transformers) 中,它是一个双向Transformer编码器,被训练来理解文本上下文信息,并输出一个固定长度的向量表示,该表示包含了原始输入序列的丰富语义信息。
- 用途:主要用于预训练模型,如BERT、RoBERTa等,常用于各种下游任务的特征提取,比如分类、问答、命名实体识别等,但不直接用于生成新的序列。
decoder-only架构
- 定义与特点:解码器仅架构专注于从某种内部状态或先前生成的内容生成新的序列,通常用于自回归式预测任务,其中每个时刻的输出都依赖于前面生成的所有内容。
- 优点:强大的序列生成能力,能够按顺序逐个生成连续的元素(如单词、字符),适用于诸如文本生成、自动摘要、对话系统等生成性任务。典型的Decoder-Only模型包括GPT系列(如GPT-3)
encoder-decoder架构
- 定义与特点:这种架构由两个主要部分组成:编码器和解码器。编码器负责将输入序列转换为压缩的中间表示,解码器则基于这个中间表示生成目标输出序列。这种结构非常适合翻译、摘要生成、图像描述等任务,需要理解和重构输入信息后生成新序列的任务。
- 工作原理:编码器对源序列进行处理并生成上下文向量,解码器根据此上下文向量逐步生成目标序列。例如,经典的Seq2Seq(Sequence-to-Sequence)模型和Transformer中的机器翻译模型就采用了这样的结构。
总结:
- Encoder-Only用于理解输入并生成其抽象表示,不涉及序列生成。
- Decoder-Only专门用于根据之前的信息自动生成新序列,不接收外部输入。
- Encoder-Decoder结合了两者的功能,首先对输入进行编码,然后基于编码结果解码生成新序列。
9.为什么现在的LLM都是decoder-only架构
- 双向注意力可能存在低秩的问题,可能会削弱模型的表达能力,而encoder-decoder之所以会在某些场景下表现更好,可能是因为多了一倍的参数,同等参数量,同等推理成本下,decoder-only架构会比其他两种框架具有更有的效果
- decoder-only在没有微调数据的情况下,zero-shot表现最好,而encoder-decoder需要一定量的标注数据做微调才能激发最佳性能
10.介绍一下transformer
transformer主要由encoder-decoder组成,encoder将输入序列转换为隐藏表示,decoder则将隐藏表示转换为输出序列
encoder(多个)主要由多头注意力机制以及前馈神经网络组成,注意力机制负责处理输入序列中不同位置间的依赖关系,而前馈神经网络则是将每个位置的表示单独处理,然后在每一个注意力机制以及前馈神经网络之后连接一个残差网络和归一化提高稳定性
decoder与encoder类似,区别在于第一个注意力机制添加了mask的操作防止看到后续的信息,而第二个注意力机制则是关注encoder的输出,帮助解码器聚焦输入序列的部分,除此之外与encoder相同
11.注意力机制有哪些
- 自注意力机制(Self-Attention): 给定一个输入序列,自注意力机制通过对序列中每个元素计算权重,然后将这些权重加权求和得到输出。这个权重表示了模型对输入中不同位置的关注程度。具体来说,对于每个位置,通过计算与其他位置的相似度得到一个权重,最后将这些权重应用于输入序列上。这使得模型能够同时关注序列中的多个位置。
- 多头注意力机制(Multi-Head Attention)
- 思路:为了提高模型的表达能力,Transformer引入了多头注意力机制,允许模型学习多组不同的注意力权重。每个注意力头都产生一个输出,最后通过线性变换和拼接得到最终的多头注意力输出。
- 缺点:MQA(multi query attention)会导致quality degradation,我们不希望仅仅是推理快,而且还希望quality可以对标MHA;
- 多查询注意力机制(Multi-Query Attention)
- 思路:让所有头之间共享同一份key,value矩阵,每个头正常的只保留了一份Query参数,从而大大减少key和value矩阵的参数量
- 缺点:MQA虽然可以提升推理的速度,但是会带来精度上的损失
- 分组查询注意力机制(Group Query Attention)
- 动机:改进多查询注意力(MQA)的性能,以加速解码器的推理速度。现有的MQA方法可能导致质量下降,并且为了更快的推理速度需要训练单独的模型,并不理想。
- 方法:通过预训练模型进行上训练(uptraining),将现有的多头注意力(MHA)模型转换为使用MQA的模型,并引入分组查询注意力(GQA),多查询注意力和多头注意力的一种泛化方法。GQA使用中间数量的键值头(大于一个,小于查询头的数量),实现了性能和速度的平衡。
- 优势:论文的主要优势是通过上训练(uptraining)现有模型,以较小的计算成本将多头注意力模型转换为多查询模型,从而实现快速的多查询和高质量的推理。同时,引入的分组查询注意力方法在接近多头注意力的质量的同时,速度几乎与多查询注意力相当。
12.为什么在进行softmax之前需要对attention进行scaled(除以d_k的平方根)
随着d_k的值变大,点积的大小会增大,如果没有及时对点积的大小进行缩放,那么万一点积的数量级很大,softmax的梯度就会趋向于0,也就会出现梯度消失问题
13.在BERT中,token分3种情况做mask,分别作用是什么
15%token做mask;其中80%用[MASK]替换,10%用random token替换,10%不变。其实这个就是典型的Denosing Autoencoder(降噪自编码器)的思路,那些被Mask掉的单词就是在输入侧加入的所谓噪音
这么做的主要原因是:
- 在后续finetune任务中语句中并不会出现 [MASK] 标记;
- 预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇( 10% 概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。
14.BERT训练时使用的学习率warm-up策略是怎样的?为什么要这么做?
warm-up在训练最初使用较小的学习率来启动,并很快切换到大学习率而后进行常见的decay
这是因为,刚开始模型对数据的“分布”理解为零,或者是说“均匀分布”(当然这取决于你的初始化);在第一轮训练的时候,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。当训练了一段时间(比如两轮、三轮)后,模型已经对每个数据点看过几遍了,或者说对当前的batch而言有了一些正确的先验,较大的学习率就不那么容易会使模型学偏,所以可以适当调大学习率。这个过程就可以看做是warmup。那么为什么之后还要decay呢?当模型训到一定阶段后(比如十个epoch),模型的分布就已经比较固定了,或者说能学到的新东西就比较少了。如果还沿用较大的学习率,就会破坏这种稳定性,用我们通常的话说,就是已经接近loss的local optimal了,为了靠近这个point,我们就要慢慢来。
15.BERT预训练任务
BERT 模型的核心思想是通过大规模的无监督预训练来学习通用的语言表示,然后在特定任务上进行微调。相比传统的基于词的语言模型,BERT 引入了双向 Transformer 编码器,使得模型能够同时利用上下文信息,从而更好地理解词语在不同上下文中的含义。
BERT 模型的预训练阶段包含两个任务:Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。在 MLM 任务中,模型会随机遮盖输入序列的一部分单词,然后预测这些被遮盖的单词。这样的训练方式使得模型能够学习到单词之间的上下文关系。在 NSP 任务中,模型会输入两个句子,并预测这两个句子是否是连续的。这个任务有助于模型理解句子之间的关联性。
16.BERT预训练过程中的损失函数是什么?

17.为什么BERT比ELMo效果好?ELMo和BERT的区别是什么?
因为LSTM抽取特征的能力远弱于transformer,即使是拼接双向特征,其融合能力也偏弱,BERT的训练数据以及模型参数均多于ELMo
ELMo给下游提供的是每个单词的embedding,所以这一类预训练的方法被称为“Feature-based Pre-training"。而BERT模型是“基于Fine-tuning的模式”,这种做法的下游任务需将模型改造成BERT模型,才能利用BERT模型预训练好的参数
18.RNN与GNN之间有哪些区别?他们各自适用于哪些场景?
- 数据类型
- RNN设计用于处理序列数据,即数据点按时间顺序排列,如时间序列分析、语音识别和自然语言处理
- GNN专门用于处理图结构数据,图由节点和边组成,代表实体及其关系,如社交网络、交通网络和分子结构
- 结构和工作原理
- RNN的核心是循环单元,他能够在序列的每个时间步上保持信息的状态,但是长序列会导致梯度消失或梯度爆炸问题
- GNN通过节点和边的特征以及图结构本身的信息,利用特殊的邻居节点更新机制来学习图中的特征表示,更好地捕捉结点间的依赖关系
- 长期依赖关系
- RNN在处理长序列时存在长期依赖问题,虽然有LSTM等变体来缓解这一问题,但本质上是序列模型
- GNN通过图结构天然的能够捕捉节点间的依赖关系,因此在处理具有明确关系的数据时更为有效
- 使用场景
- RNN适用于处理时间序列数据、文本序列等,如股票价格预测、语音识别、机器翻译等
- GNN适用于处理结构化数据,如社交网络分析、推荐系统、生物信息学等,其中实体和关系是数据的核心组成部分
总体来说,RNN适合处理时间和顺序上的数据,而GNN适合处理具有明确结构关系的数据
19.CNN(卷积神经网络)的介绍
CNN是一种具有局部连接、权重共享等特性的深层前馈神经网络
特征
- 局部连接:在卷积层中的每一个神经元都只和前一层中某个局部窗口内的神经元相连,构成一个局部连接网络
- 权重共享:一个卷积核只捕捉输入数据中的一种特定的局部特征(因此,如果要提取多种特征就需要使用多个不同的卷积核)
- 空间或时间上的次采样
结构
- 输入层
- 卷积层(包括激活函数)
- 池化层
- 全连接层
- 输出层
20.为什么transformer比RNN强
RNN存在循环结构,每个时间步的计算都要以来上一个时间步的隐藏状态,导致计算复杂度较高,而且容易出现梯度消失或梯度爆炸的问题,导致训练效率低下。transformer采用自注意力机制进行特征提取,可以并行计算,提高训练效率
21.GPT和BERT在文本表征方面有哪些结构和工作原理上的差异
BERT是encoder架构,属于自监督训练方式,然后两大预训练任务主要用于下游任务抽取特征,GPT是decoder,自回归训练方式,主要是预测下一个词的分布,依赖大语料库
22.介绍一下flash-attention
- 核心思想:传统减少HBM的访问,将QKV切分为小块后放入SRAM(随机存取存储器)中
- 核心思想:
- tiling(平铺):分块计算,在计算时通过分块将Q、K、V分块后,按块加载到内存中
- recomputation(重新计算):传统Attention在计算中需要用到Q、K、V去计算S,P两个矩阵,flash-attention引入softmax中的统计量,结合output O和在SRAM中的Q,K,V进行计算
23.介绍一下flash-attention-2
FlashAttention-2版本进一步优化了Flash-Attention算法,使用了更好的并行化和工作分区方法,使得计算速度提高了两倍。Flash-Attention还支持更高的头维数和多查询注意力等新特性,进一步提升了性能和灵活性
flash-attention存在的不足
- 虽然Flash Attention已经比标准的注意力快2-4倍,但前向传播仅达到设备理论最大FLOPs/s的30-50%,而反向传播更具挑战性,仅达到A100GPU最大吞吐量的25-35%
- 优化的矩阵乘法可以达到理论最大设备吞吐量的80%-90%,通过分析,观察到Flash-Attention在GPU上不同线程块和线程束之间的工作划分仍然不够优化,导致低占用率或不必要的共享内存读写
改进点
- 调整算法以减少非矩阵乘法操作的浮点运算次数
- 在序列长度维度上同时并行化前向传播和反向传播,除了批次和头数维度,这样可以提高GPU资源的利用率,特别是在序列较长的情况下
- 即使在注意力计算的一个块的内部,也将工作分配给不同的线程块以减少通信和共享内存的读写
24.FP32(单精度浮点数)与FP16(半精度浮点数)的区别,混合精度的原理
FP32与FP16的区别:
- 存储大小
- FP32:每个数值占用32位(4个字节),包括1位符号位、8位指数位和23位尾数(小数部分)
- FP16:每个数值仅占用16位(2个字节),结构包含1位符号位、5位指数位和10位尾数
- 数值范围与精度
- FP32能表示大约从10^{-38}到10^{+38}范围内的数值,具有相对较高的精度,适合于对精度要求高的计算任务
- 相比之下,FP16的数值范围较小,大约在6.10^{-5}到65504之间,并且由于尾数位较少,其精度较低,容易出现下溢或上溢问题。混合精度训练原理:混合精度训练是一种结合了FP32和FP16的优点以加速深度学习模型训练过程的技术。在深度学习中,尤其是使用GPU进行大规模并行计算时,内存带宽和显存容量往往是性能瓶颈
- 优势利用
- 利用FP16进行矩阵乘法等操作可以显著减少内存消耗和数据传输量,从而提高计算速度和设备利用率
- FP32则用于累积中间结果,避免因为FP16精度不足导致的梯度消失或爆炸问题
- 混合策略
- 在混合精度训练中,通常会在网络层的前向传播和反向传播过程中将权重和激活函数保持在FP16格式,但在累加梯度时会将他们扩大一定的倍数(损失放缩技术),然后再更新权重之前再缩小回去,这样既能利用FP16的优势,又能维持足够的精度进行有效的参数更新
25.介绍一下beam search原理,与直接sample的区别
Beam Search原理:Beam Search是一种用于序列生成任务中的启发式搜索算法,特别是在NLP领域中,例如机器学习、文本生成等任务。在这些任务中,模型需要预测一系列输出,而输出序列的可能性随着序列的增长呈指数级增加
具体流程如下:
- 初始化:设定一个宽度参数beam width,表示每一步保留的最优候选解的数量
- 递归过程:从起始状态开始,模型会预测第一个词语的所有可能选项,并根据他们的概率保留前beam width个概率最高的选项作为候选路径
- 扩展路径:对每个保留下来的候选路径,模型接着预测第二个词语,将当前词语添加到之前路径上,并计算新的完整路径的概率,再次保留概率最高的beam width条路径
- 迭代求解:重复步骤3,指导达到终止条件(如遇到结束符号或者达到预设的最大长度)
与直接采用(sample)的区别
- Beam Search
- 是一种确定性策略,总是选择概率最高的若干选项继续进行下一轮生成
- 能够保证生成结果具有较高的概率质量,但可能会牺牲一定的多样性,因为不是所有低概率的序列都被考虑
- 可能导致过拟合于训练数据中出现频率较高的模式,产生”僵化“或”机械“的输出
- 直接采样(Random Sampling或Top-k Sampling)
- 是一种随机策略,每次生成新词时,可以按照词汇表中每个词的概率分布进行随机抽取
- 采用方法能够生成更多样化的输出,更有可能探索到新颖和未见得序列组合,有助于解决Beam Search可能导致的过于保守的问题
- 直接采用的不确定性较大,生成的结果不一定是全局最优解,而且对于较差的概率分布可能生成结果质量较低的情况
总结
Beam Search旨在寻找最大概率路径,以确保生成结果的合理性和准确性,而直接采样则通过引入随机性来增强输出的多样性和创造性,两者在实际应用中应该根据需求权衡精度和多样性来选择
26.如何理解过拟合欠拟合
- 欠拟合是指模型不能在训练集上获得足够低的误差。换句话说就是模型复杂度低,模型在训练集上就表现很差,没办法学习到数据背后的规律
- 过拟合是指训练误差和测试误差之间的差距太大,换句话说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差,对训练集死记硬背,没有理解数据背后的规律,泛化能力差
27.如何解决过拟合和欠拟合
- 过拟合(Overfitting)
- 增加数据量:通过增加训练数据来减少模型对特定数据的过度拟合
- 简化模型:减少模型的复杂度,可以通过减少特征数量、降低多项式次数等方式
- 正则化:引入正则化项,如L1或L2正则化,以惩罚模型复杂度
- 欠拟合
- 增加特征:添加更多有意义的特征,提高模型的表达能力
- 增加模型复杂度:选择更复杂的模型,如增加层数、节点数等
- 减小正则化:减小正则化的程度,以允许模型更好地适应数据
28.L1正则化和L2正则化的区别
正则化是指修改学习算法,使其降低泛化误差而非训练误差
- L1正则化
- 增加的正则化项为权重向量的绝对值之和
- 促使模型参数变得稀疏,即某些权重变为零,从而实现特征选择的效果
- L2正则化
- 增加的正则化项为权重向量的平方和
- 通过减少权重的同时保持他们都非零,对权重进行平滑调整
- 区别
- L1正则化倾向于产生稀疏权重,对于特征选择更有利
- L2正则化则倾向于在所有特征上产生较小但非零的权重
29.介绍一下RAG
简单来说,就是给LLM提供外部数据库,对于用户问题,通过一些信息检索的技术,从外部数据库中检索出和用户问题相关的信息,然后让LLM结合这些相关信息来生成结果
30.RAG解决了哪些问题
- 长尾知识:对于一些相对通用的和大众的知识,LLM通常能生成比较准确的结果,而对于一些长尾知识,LLM生成的回复通常并不可靠
- 私有数据:LLM利用的大部分都是公开的数据,不包含私有数据,因此对于一些私有领域知识是欠缺的
- 数据新鲜度:LLM通过从预训练数据中学到的这部分信息很容易过时
- 来源验证和可解释性:通常情况下,LLM生成的输出不会给出其来源,而通过给LLM提供外部知识源,让其基于检索出的相关信息进行生成,就在生成的结果和信息来源之间建立了关联,因此生成的结果可以追溯参考来源,可解释性和可控性就大大增强。
31.P-tuning与P-tuning v2技术原理
P-tuning
技术原理
- 将prompt转换为可以学习的embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理
- 相比于Prefix Tuning,P-tuning加入的可微的virtual token,但仅限于输入层,没有在每一层都加。同时virtual token的位置也不一定是前缀,插入的位置是可选的。出发点实际是把传统人工设计模板中的真实token替换成可微的virtual token
存在的问题
- 缺乏模型参数规模和任务通用性
- 缺乏规模通用性:p-tuning论文中表明当模型规模超过100亿参数时,提示优化可以与全参微调相媲美,但是对于较小的模型,提示优化与全参微调的表现有很大差异
- 缺乏任务普遍性:尽管在一些NLU基准测试中表现出优势,但是提示调优对硬序列标记任务(即序列标注)的有效性尚未得到验证
- 缺乏深度提示优化
- 在p-tuning中,连续提示只被插入到transformer第一层的输入embedding序列中,在接下来的transformer层中,插入连续提示的位置的embedding是由之前的transformer层计算出来的,可以导致两个问题
- 由于序列长度的限制,可调参数的数量是有限的
- 输入embedding对模型预测只有相对间接的影响
P-tuning V2
技术原理
- 在每一层都加入了prompt tokens作为输入,而不仅仅加在输入层,这带来了两个方面的好处
- 更多可学习的参数,同时也足够参数搞笑
- 加入到更深层结构中的prompt能给模型预测带来更直接的影响
- 移除重参数化的编码器
- 以前的方法利用重参数化功能来提高训练速度和鲁棒性,在p-tuning v2中,作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现
- 针对不同任务采用不同的提示长度
- 提示长度在提示优化方法的超参数搜索中起着核心作用,不同文本生成任务可能有不同的最佳提示长度
- 引入多任务学习
- 在多任务的prompt上进行预训练,然后再适配下游任务
- 回归传统的分类标签范式,而不是映射器
- 标签词映射器一直是提示优化的核心组成部分,将one-shot类标签变成有意义的词,以利用预训练语言模型头。p-tuning v2回归传统的CLS标签分类范式,采用随机初始化的分类头应用于tokens之上,以增强通用性,可以适配到序列标注任务
32.大模型微调方式p-tuning v2
P-tuning V2在P-tuning V1的基础上进行了改进
- 在每一层都加上了Prompts token作为输入,而不仅仅加在输入层,这与Prefix Tuning的做法相同,这样得到了更多可学习的参数,且更深层结构中的prompt能给模型预测带来更直接的影响
- 去掉了重参数化的编码器,在P-tuning V2中,作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现
- 针对不同任务采用不同的提示长度,提示长度在提示优化方法的超参数搜索中起着核心作用,在实验中,发现不同的理解任务通常用不同的提示长度来实现其最佳性能,这与prefix-tuning中的发现一致,不同的文本生成任务可能有不同的最佳提示长度
- 可选的多任务学习。先在多任务的prompt上进行预训练,然后再适配下游任务,一方面,连续提示的随机惯性给优化带来了困难,这可以通过更多的训练数据或与任务相关的无监督预训练来缓解,另一方面,连续提示是跨任务和数据集的特定任务知识的完美载体
33.文本embedding方法
文本嵌入(Text Embedding)是一种将自然语言文本数据转换为连续向量空间中稠密向量的技术,在这个向量空间中,语义相似的词或文本片段会拥有相近的向量表示,这种技术是现代NLP中的基石,使得计算机可以理解和处理文本数据,并将其应用到诸如分类、聚类、检索、翻译、问答等多种下游任务中
以下是一些常见的文本嵌入方法:
- Word2Vec
- 包括CBOW和Skip-gram两种模型,由谷歌在2013年提出,通过神经网络学习词语与其上下文之间的关系,生成固定长度的词向量
- GloVe
- GloVe,由斯坦福大学提出,该方法基于全局词频统计信息构建词共现矩阵,通过优化目标函数直接学习每个词的向量表示,使得词向量的点积近似于它们在语料库中的共现频率
- FastText
- 由facebook AI Research开发,FastText在Word2Vec的基础上增加了对字符级n-grams的考虑,尤其适合处理形态丰富的低资源语言以及未登录词的表示问题
- Doc2Vec
- 可以扩展到句子和段落级别,除了学习单词向量外,还学习一个额外的“文档向量”,能够捕获较长文本整体的语义特征
- Transformer-based Embedding
- 随着transformer架构的出现,如BRET、GPT及其后续版本,预训练模型进一步提升了文本嵌入的质量,这些模型在大量无标签文本上进行自监督训练,得到的词嵌入包含了丰富的上下文信息
- ELMO
- ELMO利用双向LSTM的语言模型上下文敏感的计算词向量,词的表示取决于其在句子中的具体上下文
- Sentence-BERT(SBERT)
- 对BERT等transformer模型进行微调,使其可以直接生成句子级别的嵌入,特别适用于句子对齐、相似度计算等任务
34.llama怎么扩大上下文窗口
引入了位置插值(Position Interpolation,PI)来对某些现有的预训练LLM的上下文窗口进行扩展,结果表明,LLaMA上下文窗口从2k到32k,只需要小于1000步的微调
35.什么是大模型外推性?
外推性是指模型在训练时和预测时的输入长度不一致,导致模型的泛化能力下降的问题
36.长度外推问题的解决办法有哪些?
- 进制表示
- 将整数n以一个三维向量[a,b,c]来输入,a,b,c分别是百位、十位、个位,这样既缩小了数字的跨度,又没有缩小相邻数字的差距,代价是增加了输入的维度
- 直接外推
- 简单来说,假如原来位置编码用三维向量表示,那外推就是直接增加一维,可以提前预留多几维,训练阶段设为0,推理阶段直接改为其他数字,但是这种方法效果不见得好,因为模型对没训练过的情况不一定具有适应能力,也就是说,由于某些维度的训练数据不充分,所以直接进行外推通常会导致模型性能严重下降
- 简单来说,假如原来位置编码用三维向量表示,那外推就是直接增加一维,可以提前预留多几维,训练阶段设为0,推理阶段直接改为其他数字,但是这种方法效果不见得好,因为模型对没训练过的情况不一定具有适应能力,也就是说,由于某些维度的训练数据不充分,所以直接进行外推通常会导致模型性能严重下降
- 线性插值就是将2000以内压缩到1000以内,比如通过除以2,1749就变成了874.5,然后转为三维向量[8,7,4.5]输入到原来的模型中。从绝对数值来看,新的[7,4,9]实际上对应的是1498,是原本对应的2倍,映射方式不一致;从相对数值来看,原本相邻数字的差距为1,现在是0.5,最后一个维度更加“拥挤”。所以,做了内插修改后,通常都需要微调训练,以便模型重新适应拥挤的映射关系。不过,内插方案也不尽完美,当处理范围进一步增大时,相邻差异则更小,并且这个相邻差异变小集中在个位数,剩下的百位、十位,还是保留了相邻差异为1。换句话说,内插方法使得不同维度的分布情况不一样,每个维度变得不对等起来,模型进一步学习难度也更大。
- 进制转换
- 有没有不用新增维度,又能保持相邻差距的方案呢?进制转换!三个数字的10进制编码可以表示0~999,如果是16进制呢?它最大可以表示163−1=4095>1999。所以,只需要转到16进制,如1749变为[6,13,5],那么三维向量就可以覆盖目标范围,代价是每个维度的数字从0~9变为0~15。
- 有没有不用新增维度,又能保持相邻差距的方案呢?进制转换!三个数字的10进制编码可以表示0~999,如果是16进制呢?它最大可以表示163−1=4095>1999。所以,只需要转到16进制,如1749变为[6,13,5],那么三维向量就可以覆盖目标范围,代价是每个维度的数字从0~9变为0~15。
更多推荐

所有评论(0)