为什么现在的LLM以decoder-only为主
为什么现在的LLM都是Decoder only的架构?
回答一
回答二
- encoder-decoder
- 常用于处理需要对输入和输出建立精确的映射关系的任务(机器翻译、文本摘要等),更具有专业性
- 优势
- 输入的语义理解会更好
- 劣势
- 一般只能适用于某种特定的任务中,不易迁移到其他任务中(需要根据不同任务进行训练)
- 数据预处理:Encoder-Decoder模型通常对于输入和输出之间的精确对齐要求非常严格,这也就意味着需要复杂的数据预处理过程。而且对于不同类型的输入和输出数据,可能需要用到不同的预处理方法,比如机器翻译中的双语对齐;比如图像字幕识别任务中的图像预理和文本预处理等等。
- 输入数据难以获取:Encoder-Decoder架构通常高度依赖于输入和输出之间的关系,这就要求收集到的输入和输出数据具备精确的映射关系,增大了数据收集的难度,大大减少了符合要求的数据量。
- 训练时间更长:由于结构的复杂性,Encoder-Decoder模型可能需要很长的训练时间。尤其是处理长序列时,为了理解和编码整个序列的上下文,为了计算序列中每个元素与其他所有元素间的关系,为了储存更多的数据点和中间计算结果,仅在Encoder阶段,就需要消大量的时间和内存,增加训练难度。
- 模型应用受限:而最令人恼火的,还是费劲力气训练得到的模型,仅对特定类型的任务表现良好,比如谷歌翻译不能用于进行语音识别,每涉及到一种新的功能,便需要重新训练一个模型,耗时耗力,很不灵活。
- decoder-only
- 只能根据前面的文本来生成后面的内容,可以处理多种不同的文本生成任务,更灵活
- decoder-only的zero-shot效果是最好的;而且此框架有对应的scale-laws作为一种理论支撑
- 优势
- 灵活的输入格式:由于decoder-only模型本质上是根据给定的文本串生成输出,因此它们可以接受各种格式的输入。包括问题和回答、提示和续写、以及代码和其执行结果等。也就是说,无需特意对输入数据集进行”清洗”。
- 无需特定的任务架构:与encoder-decoder架构不同,decoder-only模型Q不需要为不同类型的任务构建特定的encoder部分。也就是说,同一个模型可以在没有或仅需要少量修改的情况下,处理多种任务。
- 简化的预训练和微调过程:在预训练和微调阶段,没有繁琐的encoder过程,decoder-only模型可以更加容易的进入训练过程。此外,由于训练过程主要关注如何基于给定的上下文生成文本,因此既不需要用户提供复杂的输入输出编码关系,也不需要专门处理这些复杂的映射。
- 易于扩展性:由于结构的简单和统一,decoder-only模型通常更容易扩展到更大的模型尺寸,有助于提升模型的性能和适应性。这也就是去年涌现出的众多M,参数数量能够不断攀上新高的主要原因之一
- 劣势
- 对于输入的理解不如encoder-decoder,因此更可能出现幻觉问题(因为没有从完整的原始输入中来获取信息,可靠性可能不如encoder-decoder)
- 处理长序列时面临长期依赖的问题,在长文本中维持上下文的一致性和相关性可能表现不佳
比较Causal decoder、Prefix decoder和encoder-decoder
- causal decoder
- decoder-only
- 采用单向注意力掩码,以确保每个输入标记只能关注过去的标记和它本身,输入和输出的token通过Decoder以相同的方式进行处理
- 代表:GPT
- prefix decoder
- decoder-only
- 是Encoder-Decoder模型变体,Encoder和Decoder则共享了同一个Transformer结构,在Transformer内部通过Attention Mask机制来实现
- 输入部分采用双向注意力(即前缀序列中任意两个token都相互可见),而输出部分采用单向注意力(即待生成的token可以看到Encoder侧所有token(包括上下文)和Decoder侧已经生成的token,但不能看未来尚未产生的token)
- 代表:UniLM、T5、GLM
- encoder-decoder
- 非decoder-only
- 包含两部分Encoder和Decoder,两部分参数独立
- Encoder部分采用双向注意力,对应的prompt的每个token都可以互相看到;而Decoder部分仍然采用单向注意力,对应的completion仍然保证前面的token看不到后面的token
- 代表:Flan-T5
LLM中的智能涌现
大语言模型的涌现能力:现象与解释
- 什么是智能涌现
- 表现出涌现能力:当模型规模大到一定程度时,效果才会急剧增长,在模型规模小于某个临界值之前,模型基本不具备任务解决能力。这就是典型的涌现能力的体现。这类任务呈现出一种共性:大多数是由多步骤构成的复杂任务。
- 智能涌现的表现
- In Context Learning(“Few-Shot Prompt”):给出几个例子,大模型不需要调整模型参数,就能够处理好任务
- 思维链:CoT本质上是一种特殊的few shot prompt,就是说对于某个复杂的比如推理问题,用户把一步一步的推导过程写出来,并提供给大语言模型(如下图蓝色文字内容所示),这样大语言模型就能做一些相对复杂的推理任务。任务:数学问题、符号推理问题
- 把模型做小会影响智能涌现吗
- 在训练模型的时候,可以考虑先增加训练数据,降低模型参数量,把模型做小,先把模型参数利用充分,在这个基础上,再继续增加数据,并推大模型规模。也即是说,目前看,我们先把模型做小,再把模型做大,看上去是可行的
- 模型训练过程中的顿悟现象(grokking)
- 顿悟现象:(对于一个训练数据较少的任务)训练可分为动态的3部分:
- 记忆期:对应的训练数据指标突然走高,代表模型记住了50%的训练数据的结果,而绿线对应的验证集指标接近0,说明模型完全没有泛化能力,就是说没有学会这个任务的规律。所以这个阶段模型只是在单纯地记忆训练数据
- 平台期:这个阶段是记忆期的延续,体现为验证集合效果仍然很差,说明模型仍然没有学会规律(在学会前需要经历这样一个过程)
- 泛化期:这个阶段验证集合效果突然变好,这说明突然之间,模型学会了任务里的规律,也就是我们说的,出现了顿悟现象,突然就学明白了
- 顿悟现象:(对于一个训练数据较少的任务)训练可分为动态的3部分:
- 涌现能力的可能原因
- 猜想一:任务的评价指标不够平滑。对于一些很严格的指标,模型需要学习较长一段时间(或扩大模型规模)后才会学会,从指标反映出来就是突然变好;但是如果把这个指标变得简单一些,那么模型的效果提升就会相对连续、平滑,而不是突然变好
- 猜想二:复杂任务 vs 子任务。展现出涌现现象的任务有一个共性,就是任务往往是由多个子任务构成的复杂任务。也就是说,最终任务过于复杂,如果仔细分析,可以看出它由多个子任务构成,这时候,子任务效果往往随着模型增大,符合 Scaling Law,而最终任务则体现为涌现现象。比如:假设某个任务 T 有 5 个子任务 Sub-T 构成,每个 sub-T 随着模型增长,指标从 40% 提升到 60%,但是最终任务的指标只从 1.1% 提升到了 7%,也就是说宏观上看到了涌现现象,但是子任务效果其实是平滑增长的。
- 猜想三:用 Grokking 来解释涌现。
- 第一个事实是 Grokking 现象是描述训练数据量较少的 ML 任务的,但是任务最小训练数据量必须达到一定的量,才会出现 Grokking 现象。这里有两点,一个是本身训练数据量少,另外是最小数据量要达到临界值
- 第二个事实是 LLM 模型规模越大,记忆数据的能力越强。比如:对于某个任务T,假设预训练数据里包含与任务T相关的训练数据量有100条,那么大模型可以记住其中的70条,而小模型可能只能记住30条
- 情况一(利用事实一):对于某个任务T,尽管我们看到的预训练数据总量是巨大的,但是与T相关的训练数据其实数量很少。当我们推大模型规模的时候,往往会伴随着增加预训练数据的数据量操作,这样,当模型规模达到某个点的时候,与任务T相关的数据量,突然就达到了最小要求临界点,于是这个任务产生了Grokking现象
- 情况二(利用事实一、二):假设在预训练数据中,某个任务T有 100 个训练数据,当模型规模小的时可能只记得 30 个,达不到Grokking现象的临界点,而当模型规模推大时,因为模型记忆能力增强,可能就能记住其中的50个,这意味着它可能超过了Grokking的临界点,于是会出现 Grokking 里面的泛化现象。如果从这个角度看,其实也可以从Grokking角度来解释为何只有大模型才会具备涌现现象
LLM复读机问题
LLM面面观之LLM复读机问题及解决方案
大模型(LLMs)算法工程师相关的面试题和参考答案
- 复读机问题是什么
- LLMs 复读机问题是指在某些情况下,大型语言模型在生成文本时会重复之前已经生成的内容,导致生成的文本缺乏多样性和创造性
- 为什么会出现
- LLMs 复读机问题可能由多种因素引起,包括模型训练数据中的重复模式、模型在处理长序列时的注意力机制失效、或者模型在生成文本时对过去信息的过度依赖等
- 对于训练
- 数据偏差:大型语言模型通常是通过预训练阶段使用大规模无标签数据进行训练的。如果训练数据中存在大量的重复文本或者某些特定的句子或短语出现频率较高,模型在生成文本时可能会倾向于复制这些常见的模式。
- 训练目标的限制:大型语言模型的训练通常是基于无监督学习的方法,通过预测下一个词或掩盖词来学习语言模型。这样的训练目标可能使得模型更倾向于生成与输入相似的文本,导致复读机问题的出现。
- 缺乏多样性的训练数据:虽然大型语言模型可以处理大规模的数据,但如果训练数据中缺乏多样性的语言表达和语境,模型可能无法学习到足够的多样性和创造性,导致复读机问题的出现。
- 对于贪心解码(即每次生成的token选择词表中概率最大的token)
- LLM 趋向于提高重复先前句子的概率。仅出现一条句子级的上下文重复,重复的概率在大多数情况下也会增加。产生这种现象的原因可能是LLM对上下文非常有信心,当先前的token共享同一个句子级的上下文时,模型会学到一条捷径,直接复制该token
- 自我强化效应(self-reinforcement effect):重复的概率几乎随着历史重复次数的增加而单调增加,最终,重复概率稳定在某个上限值附近。一旦生成的句子重复几次,模型将会受困于因自我强化效应引起的句子循环。
- 如何缓解
- 在训练时
- 构造一些重复的文本(负样例,伪样例),训练时加大对这类数据的惩罚(重复惩罚项通过设计损失函数来达成,其中是惩罚因子λ,论文中提到,对于开放式生成,推荐取值为0.5,对于总结摘要类任务,取值为0.9性能更好)
- 多样性训练数据:在训练阶段,使用多样性的语料库来训练模型,避免数据偏差和重复文本的问题。这可以包括从不同领域、不同来源和不同风格的文本中获取数据。
- 引入噪声:在生成文本时,引入一些随机性或噪声,例如通过采样不同的词或短语,或者引入随机的变换操作,以增加生成文本的多样性。这可以通过在生成过程中对模型的输出进行采样或添加随机性来实现。
- 在解码时
- 温度参数调整:温度参数是用来控制生成文本的多样性的一个参数。通过调整温度参数的值,可以控制生成文本的独创性和多样性。较高的温度值会增加随机性,从而减少复读机问题的出现。
- Beam搜索调整:在生成文本时,可以调整Beam搜索算法的参数。Beam搜索是一种常用的生成策略,它在生成过程中维护了一个候选序列的集合。通过调整Beam大小和搜索宽度,可以控制生成文本的多样性和创造性。
- 后处理
- 后处理和过滤:对生成的文本进行后处理和过滤,去除重复的句子或短语,以提高生成文本的质量和多样性。可以使用文本相似度计算方法或规则来检测和去除重复的文本。
- 人工干预和控制:对于关键任务或敏感场景,可以引入人工干预和控制机制,对生成的文本进行审查和筛选,确保生成结果的准确性和多样性。
- 在训练时