前言
记录一下自己的学习历程,也怕自己忘掉了某些知识点
Prefix LM 和 Causal LM区别是什么?
Prefix LM
Prefix LM(前缀语⾔模型)其实是Encoder-Decoder模型的变体。①在标准的Encoder-Decoder模型中,Encoder和Decoder各自使用不同的结构 ②在Prefix LM中Encoder和Decoder则共享一个Transformer结构,而Transformer内部通过Attention Mask机制实现Encoder与Decoder。
与标准的Encoder-Decoder类似,Prefix LM在Encoder部分采用Auto Encoding(自编码)模式,即前缀序列中任意两个Token都相互可见,而Decoder部分采用Auto Regressive(自回归)模式,即待生成的token可以看到Encoder侧所有token和Decoder侧已经生成的token,但不能看到未来尚未产生的token。
应用场景
适合于需要基于已有文本继续生成文本的任务,例如文本补全、续写故事等
优势
能够利用完整的上下文信息来生成文本,有助于生成更加准确和连贯的内容
代表模型
T5、UniLM等,这些模型通过共享编码器(Encoder)和解码器(Decoder)的参数,实现对前缀的理解和文本生成
Causal LM
Causal LM是因果语言模型,目前流行地大多数模型就是这种结构,因为GPT系列的模型内部结构就是它,还有开源的LLaMa也是。
Causal LM只涉及到Encoder-Decoder中的Decoder部分,采用Auto Regressive模式,直白地说,就是根据历史的token来预测下一个token,也是在Attention Mask这里做的手脚
应用场景
广泛用于需要生成新文本的任务,例如文本摘要、聊天机器人、语言生成等
优势
由于其自回归的特性,Causal LM在生成文本时可以逐步构建上下文,适用于长文本生成和需要逐步推理的场景
代表模型
GPT系列模型,这些模型通过逐步生成文本的方式,实现了对语言的深入理解和生成
技术细节对比
训练过程:Prefix LM在训练时可能会使用到整个序列的信息来预测下一个词,而Causal LM在训练时只能使用到当前词之前的所有词。
解码方式:Prefix LM可以采用非自回归解码,即并行生成所有词;Causal LM则采用自回归解码,即一个词接一个词地生成。
上下文利用:Prefix LM在生成时可以利用到更全面的上下文信息,而Causal LM则只能利用到已经生成的文本作为上下文。
网上答案:
为什么现在的大模型大多是decoder-only的架构?
1、训练效率
相比于Encoder-Decoder结构,Decoder-only模型通常需要更少的参数来达到相似的性能。这是因为Encoder-Decoder结构需要同时学习编码输入和生成输出的能力,而Decoder-only模型只需要专注于生成输出
2、性能表现
尽管Decoder-only模型在理解性任务上可能不如Encoder-Decoder结构,但它们在生成性任务上的表现往往更胜一筹。随着模型规模的增大,Decoder-only模型在理解和生成任务上的差距逐渐缩小,甚至在某些情况下能够超越Encoder-Decoder模型。
3、理论
理论上是因为Encoder-Decoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了。
Multi-query Attention与Grouped-query Attention区别是什么?
回答
Multi-query Attention和Grouped-query Attention是两种改进和扩展传统自注意力机制的变体。 传统的MHA(Multi-head Attention)是将输入划分为多个Head,并为每个Head独立计算注意力。在MHA中的,Q、K、V会根据每个head做不同的转换(可以独立学习输入中的不同特性)。这在Head数量较多时候可能会存在计算密集的问题。
Grouped-query Attention:这种机制将查询分成多个组,每个组内的查询与相应的键值对进行交互。这样可以减少计算复杂度,提高效率,同时仍能保持良好的性能。
Multi-query Attention:MQA 让所有的Head之间共享同样的一份 K 和 V 矩阵(意味K和V的计算唯一),只让 Q 保留了原始多头的性质(每个Head存在不同的转换),从而大大减少 K 和 V 矩阵的参数量以及KV Cache的显存占用,以此来达到提升推理速度,但是会带来精度上的损失
LLM中token指的是什么?
省流总结:文本被转换为token。token被赋予token ID。这些token ID 可用于创建embedding,embedding之后输入LLM
关于LLM:揭秘token与embedding的机制
搞懂LLM中的Token,看这一篇就够了
关于LLM:揭秘token与embedding的机制
稀疏向量与稠密向量
在RAG应用中,经常能听到稀疏向量与稠密向量,在这里简单介绍一下。
在机器学习和数据处理中,向量是基本的数据结构之一。根据向量中非零元素的数量和分布,可以将向量分为稀疏向量(Sparse Vector)和稠密向量(Dense Vector)。
稀疏向量: 稀疏向量是指大部分元素都是零,只有少数几个元素是非零的向量。这种向量在表示上通常会省略掉零元素,只记录非零元素的位置和值,以节省存储空间和提高计算效率。例如,一个长度为1000的向量,如果只有10个元素是非零的,那么这个向量就可以被视为稀疏向量。
举个例子:向量(1.0,0.0,1.0,3.0)
密集格式:表示为[1.0,0.0,1.0,3.0],
稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0])
第一个4表示向量的长度(元素个数),[0,2,3]是索引数组(即位置);[1.0,1.0,3.0]是values数组(索引对应位置的值),表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0,
稠密向量: 稠密向量则相反,它包含的元素大部分是非零的,或者非零元素的比例并不低。稠密向量的存储通常会保存所有元素的值,无论它们是否为零
两者的区别:
-
非零元素的分布:
- 稀疏向量:非零元素很少,大部分元素都是零。
- 稠密向量:非零元素较多,或者非零元素的比例不低。
-
存储方式:
- 稀疏向量:通常只存储非零元素的位置和值,可以节省大量存储空间。
- 稠密向量:需要存储所有元素的值,即使大部分是零。
-
计算效率:
- 稀疏向量:在执行向量运算时,可以只对非零元素进行操作,通常计算效率更高。
- 稠密向量:需要考虑所有元素,计算可能会更耗时。
-
应用场景:
- 稀疏向量:在特征维度非常高,但每个样本的有效特征很少的情况下非常适用,如文本处理中的词袋模型。
- 稠密向量:在特征维度不高,且大部分特征对结果都有影响的情况下使用,如图像处理中的像素数据。
稀疏向量表示通常适用于以下几种情况:
-
高维数据:当数据的维度非常高时,如果每个样本中只有少数几个特征是非零的,使用稀疏向量可以节省大量的存储空间和计算资源。
-
特征稀疏:在数据集中,如果大多数特征对于大多数样本都是零值,例如文本数据中的词袋模型,每个文档只包含词汇表中的少数几个词。
-
减少计算复杂度:稀疏向量可以在计算过程中跳过零值,从而减少计算量,提高算法的效率。
以下是一些具体的应用场景,其中稀疏向量表示特别有用:
-
文本处理:在自然语言处理中,文本数据通常转换成词频或TF-IDF向量,这些向量通常是稀疏的,因为一个文档只包含词汇表中的少数几个词。
-
推荐系统:用户对商品的评分矩阵通常是稀疏的,因为用户只对少数商品进行了评分。
-
基因数据分析:在基因表达数据中,通常只有少数基因在特定细胞类型中活跃,因此数据是稀疏的。
-
图像处理:在处理图像数据时,如果图像被转换成某种基于像素的特征表示,且图像中有很多空白或单一颜色区域,则可以使用稀疏向量。
-
稀疏编码:在稀疏编码算法中,目的是找到一组稀疏的基向量来表示数据,这样可以更好地捕捉数据的结构。
-
压缩感知:在压缩感知领域,信号的稀疏表示用于从远低于奈奎斯特率的采样率中恢复信号。
-
图数据:在处理图数据时,如果图是稀疏的(即边的数量远小于可能的最大边数),那么邻接矩阵或特征矩阵可能是稀疏的。
二者的优势:
- 稠密向量:捕获文本的整体语义信息
- 稀疏向量:保留关键词的重要性和频率信息
解释下:
稠密向量和稀疏向量在捕获文本信息时的差异,主要源于它们的数据表示方式和适用的算法特性。
稠密向量: 稠密向量通常是固定长度的,并且每个维度都对应一个实际的数值,无论这个数值是否为零。稠密向量常用于深度学习模型,如词嵌入(Word Embeddings)技术,例如Word2Vec或GloVe。以下解释为什么稠密向量能捕获文本的整体语义信息:
-
上下文关系:稠密向量通过学习单词在大量文本中的上下文关系,将单词映射到高维空间中的向量。这些向量捕获了单词的语义和语法属性,即使是非常相似的词也能够在向量空间中体现出差异。
-
分布式表示:稠密向量采用分布式表示,意味着单词的意义是由其向量中的所有维度共同决定的,而不是由单个维度或几个维度决定。这种表示方式可以捕捉到单词的复杂语义信息。
-
连续性:稠密向量在向量空间中的位置是连续的,这意味着相似的词在向量空间中是接近的,这使得稠密向量可以用于捕捉文本中的细微语义差异。
稀疏向量: 稀疏向量则主要记录非零元素的索引和值,而零元素通常不存储。稀疏向量常用于基于计数的模型,如TF-IDF。以下是为什么稀疏向量主要保留关键词的重要性和频率信息:
-
关键词重要性:在稀疏向量表示中,非零元素通常对应于文本中的关键词。这些非零元素的值(如词频或TF-IDF权重)反映了关键词在文本中的重要性。
-
频率信息:稀疏向量中的非零值可以直接表示单词在文本中出现的频率。这对于某些算法(如基于频率的文本分类器)来说是非常重要的信息。
-
可解释性:稀疏向量的每个非零元素都可以直接对应到原始文本中的一个特征(如单词),这使得稀疏向量在模型解释性方面具有优势。
LLM输入句子长度理论上可以无限延长嘛?
理论上来说,LLMs(⼤型语⾔模型)可以处理任意⻓度的输⼊句⼦,但实际上存在⼀些限制和挑战。下⾯是⼀些相关的考虑因素:
如果想要在某个模型基础上做全参数微调,究竟需要多少显存?
SFT(监督微调,Supervised Fine-Tuning)
SFT指的是在一个预训练的模型(如大型语言模型)基础上,利用针对性的数据集实施额外的训练过程,旨在使模型更精准地契合特定任务需求或深入某一专业领域。
当前SFT的几种方式如下:
1、全参数微调(Full Parameter Fine Tuning):全参数微调涉及对模型的所有权重进行调整,以使其完全适应特定领域或任务。这种方法适用于拥有大量与任务高度相关的高质量训练数据的情况,通过更新所有参数来最大程度地优化模型对新任务的理解和表现
2、部分参数微调(Sparse Fine Tuning / Selective Fine Tuning):部分参数微调策略仅选择性地更新模型中的某些权重,尤其是在需要保留大部分预训练知识的情况下。
3、LoRA(Low-Rank Adaptation):通过向模型权重矩阵添加低秩矩阵来进行微调,既允许模型学习新的任务特定模式,又能够保留大部分预训练知识,从而降低过拟合风险并提高训练效率
4、P-tuning v2:这是一种基于prompt tuning的方法,仅微调模型中与[prompt] 相关的部分参数(例如,额外添加的可学习prompt嵌入),而不是直接修改模型主体的权重
5、QLoRA:可能是指Quantized Low-Rank Adaptation或其他类似技术,它可能结合了低秩调整与量化技术,以实现高效且资源友好的微调
特点:
1、SFT能够利用预训练模型的参数和结构,避免从头开始训练模型,从而加速模型的训练过程,并且能够提高模型在目标任务上的表现。
2、缺点:需要大量的标注数据用于目标任务的微调,如果标注数据不足,可能会导致微调后的模型表现不佳。其次,由于预训练模型的参数和结构对微调后的模型性能有很大的影响,因此选择合适的预训练模型也很重要
为什么SFT之后感觉LLM傻了?
SFT 指令微调数据 如何构建?
构建Supervised Fine-Tuning(SFT)的微调数据需要以下步骤: