目录
骗你的,其实我在意透了
—— 25.4.4
一、投机采样
大模型预测推理过程:输入前文,输出下一个字的token概率,依次循环
找到一种方式加速我们的推理过程 —— 投机采样
投机采样(Speculative Sampling)是一种用于加速大语言模型推理的技术,它通过预测模型可能生成的下一个 token 来减少计算量,同时尽量保持生成文本的质量 。
1.双模型协作
① 草稿模型(Draft Model):参数量较小,用于快速生成候选token序列(如每次生成3-5个token)
② 目标模型(Target Model):大模型负责验证草稿模型的输出,并纠正错误
2.并行验证与概率校准
① 草稿模型生成的候选序列会被拼接输入目标模型,目标模型通过一次前向传播并行计算所有位置的概率分布
② 接受准则:若目标模型在位置 i 的概率 q_i ≥ 草稿模型的概率 p_i,则接受该token;否则拒绝,并基于目标模型的分布重新采样。这一过程保证了输出分布与目标模型自回归生成的结果一致(无损推理)。
二、投机采样改进:Medisa 美杜莎模型
目标模型自带多个预测头(Medusa Head),直接生成候选序列,代替draft model (草稿模型) 起到打草稿的目的
流程
Medusa模型自带多个头,当传入问题(y_1,y_2)时,使其不仅预测出下一个字的token,而且用自带的多个额外的头预测出后几个字的token,然后将问题与第一次生成的多个字的token进行拼接,送入这个模型,然后再通过第一次传回的 y_3 进行预测,看预测出的token是否为 y_4,y_5,y_6,从而验证额外的头的预测结果是否正确
改进
在生成多头的基础之上,把前一个头的输出,作为后一个头的输入的一部分(前一个头的输出当作下一个头的部分输入);
相对来说,因为模型是串行,要比medusha模型慢一些,但是效率也相对较快
三、Deepseek的投机采样
双模型架构:与常见的投机采样方法类似,Deepseek 采用主模型和引导模型的架构。主模型是具有强大语言处理能力的大型预训练模型,负责生成高质量的文本。引导模型则相对轻量级,设计目的是快速预测主模型可能生成的下一个词元(token)。引导模型经过优化,能够以较低的计算成本对主模型的输出进行近似预测。
分层预测与验证:在推理过程中,引导模型首先基于输入文本生成一系列可能的下一个 token 及其概率分布。这些预测并非随意生成,而是通过引导模型对语言模式的学习以及对主模型行为的近似模拟得出。然后,主模型对引导模型提供的预测 token 进行验证。主模型并非对词汇表中的所有 token 进行全面计算,而是集中精力评估引导模型给出的候选集。若引导模型的预测与主模型的验证结果匹配,就直接采用引导模型的预测作为生成结果,从而跳过主模型对其他大量 token 的计算,实现加速推理。若预测不匹配,主模型则以常规方式计算正确的下一个 token 。
流程
Ⅰ、输入文本预处理
文本分词:将输入文本送入分词器,把文本分割成一个个词元(token)。这是语言模型处理文本的基础步骤,不同的语言模型可能使用不同的分词方法,如字节对编码(Byte - Pair Encoding,BPE)等。通过分词,将连续的文本转化为模型能够理解和处理的离散单元序列。
构建输入表示:对分词后的结果进行处理,添加必要的位置编码、段编码等信息(如果模型需要),将其转换为适合模型输入的张量形式。这个张量包含了文本的词元信息以及位置等上下文信息,为模型后续的处理提供基础。
Ⅱ、引导模型预测
快速前向传播:轻量级的引导模型接收预处理后的输入张量,通过其神经网络结构进行快速的前向传播计算。引导模型经过专门设计和训练,旨在以较低的计算成本快速生成预测结果。
生成候选 token 及概率:引导模型输出一组可能的下一个 token 及其对应的概率分布。这些候选 token 是引导模型基于对输入文本的理解和对主模型生成模式的学习而预测出来的。引导模型通过其内部的参数和训练学到的语言知识,评估每个可能 token 成为下一个生成词元的可能性,并输出概率值。例如,引导模型可能预测下一个 token 有 80% 的概率是 “苹果”,10% 的概率是 “香蕉” 等。
Ⅲ、候选集筛选(可选)
根据概率排序与筛选:如果引导模型生成的候选 token 数量较多,可能会根据预测概率对候选集进行排序,然后筛选出概率较高的一部分 token 作为最终的候选集。例如,只选择概率最高的前 5 个 token,这样可以进一步减少主模型需要验证的 token 数量,提高整体效率。这一步骤并非绝对必要,具体是否执行以及筛选的标准可能根据模型的设计和应用场景而定。
Ⅳ、主模型验证
针对候选集计算:主模型接收输入文本以及引导模型生成的候选 token 集,对这些候选 token 进行验证。主模型会根据自身强大的语言理解和生成能力,对每个候选 token 在当前上下文下的合理性进行评估。与传统生成方式不同,此时主模型无需对整个词汇表中的所有 token 进行计算,大大减少了计算量。
确定最终 token:主模型通过计算,确定在候选集中哪个 token 是最符合当前文本上下文的下一个生成词元。如果引导模型的预测准确,主模型验证后选择的 token 与引导模型预测概率最高的 token 一致,就直接采用该 token 作为生成结果;若主模型验证后认为引导模型的预测均不准确,则按照常规方式,对整个词汇表进行计算,确定正确的下一个 token。
Ⅴ、生成输出与循环
输出当前 token:将确定的下一个 token 输出,作为文本生成的一部分。这个 token 可能会被添加到已生成的文本序列中,形成新的上下文。
循环进行下一轮预测:以新的文本序列作为输入,重复上述步骤,继续生成下一个 token,直到满足预设的生成结束条件,如达到指定的文本长度、生成特定的结束标志 token 等。通过这样的循环过程,逐步生成完整的文本。