1 GPT和Bert的区别?
1.模型结构和训练方式
BERT通过掩码语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)任务进行训练:
-
掩码语言模型(MLM):在输入序列中,BERT随机掩盖一些词语,并要求模型预测这些被掩盖的词语。这使得BERT能够学习在给定上下文中预测缺失词语的能力。
-
下一句预测(NSP):在某些自然语言处理任务中,理解句子之间的关系很重要。为了让模型学习句子级别的关系,BERT使用NSP任务,该任务要求模型判断两个句子是否是连续的,即一个句子是否是另一个句子的下一句。
GPT基于解码器,其输入序列首先通过一个嵌入层转换成向量表示,然后输入到Transformer解码器中。每个解码器层由多个注意力头和前馈神经网络组成,用于逐步生成下一个词语的概率分布。
BERT使用双向语言模型的训练策略。在输入序列中,BERT随机掩盖一些词语,并让模型预测这些被掩盖的词语。这种方式使BERT能够从上下文中学习词语的语义和语境信息。
GPT使用自回归语言模型的训练方式。它通过让模型预测当前位置的词语来学习生成文本的能力。在预训练过程中,GPT逐步生成下一个词语,并优化参数以最大化下一个词语的概率。
2.上下文理解能力
这两种基于Transformer架构的预训练模型在上下文理解能力和应用领域上有所不同。
由于BERT采用双向模型,通过预测被掩盖的词语和判断句子之间的关系,它可以从上下文中获取更丰富的信息,并具有较强的上下文理解能力。因此,BERT在词语级别的任务中表现优异,如命名实体识别和问答等。
GPT是一个单向模型,只能依赖已生成的上文来预测下一个词语。通过自回归语言模型训练,GPT逐步生成下一个词语,以学习生成连贯的文本。由于单向模型的限制,GPT在生成式任务中表现出色,如对话生成和文本生成。GPT能够生成具有上下文连贯性和逻辑性的文本,因为它在生成每个词语时都能考虑之前已生成的上文。
3.下游任务适用性
由于BERT具有强大的上下文理解能力和双向模型的特点,它在各种下游任务中表现优秀,如文本分类、命名实体识别和语义关系判断等。
GPT主要用于生成式任务,如对话生成、文本生成和机器翻译等。它能够
生成自然流畅的文本,但在一些需要输入-输出对齐的任务中效果较弱。由于其单向特性,GPT在生成任务中表现突出,但在需要复杂上下文理解的任务上相对不如BERT。
2 NLP哪些场景不适用大模型?
1)数据稀缺的场景
大型模型通常需要海量的训练数据以实现优异的性能。然而,在某些领域或任务中,获取足够的数据可能非常困难,这使得训练大型模型变得不切实际。
2)资源受限的环境
大型模型通常需要大量的计算资源和存储空间。因此,在资源受限的环境中,例如嵌入式系统或移动设备上,使用大型模型可能不可行。
3)实时性要求高的场景
在需要快速响应的场景中,如实时对话系统或自动翻译工具,大型模型由于计算复杂度高,可能无法满足实时性的要求。
3 ChatGPT的优缺点?
优点:
-
自然语言交互:ChatGPT能够实现与用户的自然语言对话,使交流变得直观且方便。你可以通过对话形式提问、请求帮助或寻求建议。
-
广泛应用:ChatGPT适用于多种场景,包括自助客服、编程支持、写作辅助、语言翻译等。它能够根据不同的用例提供准确的回答和解决方案。
-
大量数据的学习:ChatGPT通过大量互联网文本进行训练,从多个领域的数据中学习知识和语言模式。这使它能为多种主题和话题提供有用的信息和答案。
缺点:
-
可信性无法保证:ChatGPT的回复有时可能看似合理但实则不准确,模型目前还无法提供可信性验证的合理证据。
-
成本高昂:训练和部署ChatGPT基础大模型的成本很高,每次调用也可能费用不菲,并且可能存在延迟问题,这对工程能力提出了较高要求。
-
特定专业领域表现欠佳:由于大规模语言模型的训练数据是通用数据,缺乏专业领域的数据支持,因此在处理特定领域的专业术语翻译时表现不佳。
4 为什么现在的大模型大多是decoder-only的架构?
Decoder-only架构是一种仅包含解码器部分而不包含编码器部分的模型结构。不同于编码器-解码器架构,这种结构直接将输入序列传递给解码器进行处理。省略编码器部分使得Decoder-only架构能够显著减少模型的参数量和计算资源需求。
优点:
-
减少计算资源需求:由于省略了编码器部分,Decoder-only架构显著减少了模型的参数量和计算资源需求。在训练和推理过程中,这种架构可以更快地收敛,提高效率。
-
LLM的主要架构选择:大型语言模型(LLM)通常采用Decoder-only架构,除了其在训练效率和工程实现上的优势外,还有理论上的原因。编码器的双向注意力机制可能存在低秩问题(容易退化为低秩状态),这会削弱模型的表达能力,而casusal attention是下三角矩阵满秩,建模能力更强,同时causal attention有隐式位置编码的功能 。对于生成任务而言,引入双向注意力并无实质性好处。而编码器-解码器架构在某些场景下表现更好,可能仅是因为其参数量增加了一倍。
-
Prompt直接作用于decoder参数,指令和微调效果更强
-
同时causal attention有隐式位置编码的功能,双向attention部分token兑换不改变表示,对时序的区分能力较弱。
补充知识点:
矩阵的低秩问题指的是矩阵的秩(rank)相对较低,导致矩阵的表示空间的维度远小于矩阵本身的维度,从而无法完整地捕捉矩阵的所有信息。
在深度学习领域,特别是在自然语言处理(NLP)中,矩阵的低秩问题通常出现在注意力机制中,尤其是在使用自注意力机制(self-attention)的Transformer模型中。
在自注意力机制中,给定一个输入序列,模型计算每个位置之间的相互关联性,产生一个注意力矩阵(attention matrix),用于指导信息的传递和整合。然而,由于输入序列的长度可能会很大,导致注意力矩阵的维度也很大,这就会带来两个问题:
-
计算复杂度高:注意力矩阵的计算复杂度与序列长度的平方成正比,因此当序列长度很大时,计算量会非常庞大。
-
参数数量庞大:由于注意力矩阵的维度较大,其中的参数数量也会很多,这会增加模型的参数量,增加训练和推理的时间和空间成本。
为了解决这些问题,研究人员提出了一些方法,其中包括使用低秩近似技术。低秩近似技术通过在注意力矩阵的计算过程中引入一些约束或近似操作,使得最终的注意力矩阵具有较低的秩,从而降低了计算和存储的复杂度,同时保持了模型的性能。
5 LLaMA的主要结构?
前置层归一化(Pre-normalization)并使用RMSNorm归一化函数(Normalizing Function)、激活函数更换为SwiGLU,并使用了旋转位置嵌入(RoP),整体Transformer架构与GPT-2类似。
-
前置层归一化(Pre-normalization)并使用RMSNorm归一化函数(Normalizing Function):
-
作用:前置层归一化通过在每一层的输入进行归一化来稳定和加速训练过程。使用RMSNorm作为归一化函数,可以有效减少训练过程中梯度爆炸或消失的问题,从而提升模型的收敛速度和稳定性。
-
-
激活函数更换为SwiGLU:
-
作用:将激活函数替换为SwiGLU(Swish-Gated Linear Units)可以增强模型的非线性表示能力。SwiGLU在实验中表现出优于传统激活函数(如ReLU)的性能,尤其在复杂任务中可以提高模型的准确性和效率。
-
-
使用旋转位置嵌入(RoPE):
-
作用:旋转位置嵌入(RoPE)是用于捕捉输入序列中位置信息的一种方法。与传统的位置编码不同,RoPE通过旋转向量的方式编码位置信息,使模型更好地理解序列中的相对位置关系,提升了模型在处理长序列时的表现。
-
RoPE(Rotary Position Embedding,旋转位置编码)是一种用于编码序列位置信息的方法,特别适用于Transformer架构的模型。RoPE的核心原理是通过旋转操作将位置信息嵌入到向量空间中。
具体来说,RoPE使用了复数单位向量的旋转操作来表示序列中每个位置的位置编码。其基本原理如下:
-
单位向量表示位置:首先,每个位置被映射到一个单位复数向量。这些单位向量具有相同的模长(即长度为1),但在复数平面上具有不同的方向。
-
旋转操作:然后,通过旋转操作将这些单位向量在复数平面上进行旋转。旋转的角度取决于位置的索引和维度。通常情况下,使用复数单位向量的正弦和余弦函数来确定旋转角度。
-
嵌入到模型中:得到旋转后的单位向量后,这些向量就被嵌入到模型的输入中,与其他输入特征一起被送入模型进行处理。
RoPE的优势在于它能够有效地捕捉序列中位置的相对关系,而不受序列长度的影响。由于旋转操作是在单位向量上进行的,因此不需要额外的参数或计算成本,能够很好地融入到Transformer模型中。
总的来说,RoPE通过旋转操作将位置信息嵌入到向量空间中,从而使得模型能够更好地理解序列中的位置关系,提高模型在长序列任务中的性能。
6 RMSNorm和LayerNorm的区别?
对于layerNorm和RMSNorm,layerNorm包含缩放和平移两部分,RMSNorm去除了平移部分,只保留了缩放部分。有研究认为layerNorm取得成功的关键是缩放部分的缩放不变性,而不是平移部分的平移不变性。
RMSNorm相比一般的layerNorm,减少了计算均值和平移系数的部分,训练速度更快,效果基本相当,甚至有所提升。
7 BPE、wordpiece、sentencepiece的区别?
目前的机器学习模型都是基于数学模型,这意味着输入必须是数字形式。然而,在真实场景中,我们处理的输入通常包含许多非数字形式(有时即使原始输入是数字形式,也需要进行转换)。最典型的例子就是自然语言处理(NLP)中的文本输入。为了让文本能够被模型处理,我们需要将其转换成数字形式,这个转换过程就是通过映射关系(mapping)实现的。具体来说,我们将文本映射成对应的数字,即token,而这个映射过程的工具就是tokenizer。它可以将文本编码成数字(encode),也可以将数字解码回文本(decode)。
1. 词级别(Word Level)
在词级别上,一个词对应一个ID。比如“武汉市/长江/大桥/欢迎/你”和“武汉/市长/江大桥/欢迎/你”,我们应该选择哪个方案呢?
2. 字符级别(Char Level)
考虑到分词的复杂性,我们可以选择不分词,而是按“字”(char)来作为最小单元进行映射。这样词表就小多了:对于英文,仅需要26个字母;对于中文,根据2013年中华人民共和国教育部发布的《通用规范汉字表》定义,国家规定的通用规范汉字共有8105个,相对来说并不算多。然而,将文本切分得过细会导致序列长度增加,显著增加建模难度(需要通过字来学习词的语义),并且通常会影响模型效果。
3. 子词级别(Subword Level)
子词级别(subword level)介于字符和单词之间。例如,'Transformers'可能会被分成'Transform'和'ers'两个部分。这个方案在词汇量和语义独立性之间取得了平衡,是一种相对较优的方案。
在子词级别的tokenizer方法中,主要有以下几种:BPE、Bytes BPE、WordPiece、Unigram、SentencePiece。下面简要总结各个方法:
BPE(Byte Pair Encoding)
BPE 通过统计词频来确定是否合并相邻的子词对(pair subwords)。具体步骤如下:
-
初始化时,将所有单词拆分为字符。
-
统计所有相邻字符对的频率,找到出现频率最高的一对。
-
合并这对字符,更新词表。
-
重复步骤2和3,直到达到预定的词汇表大小。
这种方法通过逐步合并高频字符对,逐渐形成常用的子词,从而减少词汇表的大小。
Bytes BPE
Bytes BPE 是BPE的变种,适用于处理任意语言的文本,包括非拉丁字符和特殊符号。它直接在字节级别进行操作,不依赖于特定的字符集,因此对多语言和非标准文本有更好的兼容性。
WordPiece
WordPiece 方法最初由Google在训练其BERT模型时提出。它与BPE类似,通过统计子词对的频率进行合并,但其目标是最大化词汇表的语言覆盖率和分词质量。考虑的是合并后能否最大程度提高训练数据的整体似然值(通常基于 n-gram 模型得分)。这意味着 WordPiece 更侧重于选择能够优化语言模型性能的子词组合。BPE选择频数最高的相邻子词合并,而WordPiece选择使得语言模型概率最大的相邻子词加入词表。
具体步骤包括:
-
将单词拆分为字符。
-
统计词频,合并频率最高的子词对。
-
不断重复,直到达到预定的词汇表大小。
WordPiece 相较于BPE,更注重子词合并后的语义完整性和词汇覆盖率。
Unigram
Unigram 是一种基于概率模型的分词方法。它和 BPE 以及 WordPiece 从表面上看一个大的不同是,前两者都是初始化一个小词表,然后一个个增加到限定的词汇量,而 Unigram Language Model 却是先初始一个大词表,接着通过语言模型评估不断减少词表,直到限定词汇量。
其核心思想是:
-
初始化一个包含大量子词的词汇表。
-
根据子词的概率,计算给定文本的最优分词方案。
-
移除低概率的子词,不断精简词汇表。
-
迭代上述过程,直到达到预定的词汇表大小。
Unigram 方法通过概率模型,能够更灵活地处理词汇分布和词频变化,适用于多语言文本。
SentencePiece
SentencePiece 是一个独立于语言和字符集的分词方法,适用于多语言处理。SentencePiece它是谷歌推出的子词开源工具包,它是把一个句子看作一个整体,再拆成片段,而没有保留天然的词语的概念。一般地,它把空格也当作一种特殊字符来处理,再用BPE或者Unigram算法来构造词汇表。SentencePiece除了集成了BPE、ULM子词算法之外,SentencePiece还能