投机解码论文阅读:Falcon

server/2025/1/13 2:22:48/

题目:Falcon: Faster and Parallel Inference of Large Language Models through Enhanced Semi-Autoregressive Drafting and Custom-Designed Decoding Tree

地址:https://arxiv.org/pdf/2412.12639

一看它的架构图,可以发现它是基于EAGLE做的改进。falcon是猎鹰的意思,也可以看出来它是从eagle改进来的。

了解EAGLE,可以参考这篇文章:投机解码EAGLE精读_eagle: speculative sampling requires rethinking fe-CSDN博客

半自回归SAR:draft 同时生成多个 token,然而SAR draft 的一个重要局限是它无法完全捕捉相同 block 内 draft tokens 之间的相互依赖关系,可能导致生成的 token 接受率较低

简单来说,相当于是在EAGLE的基础上,把它和Medusa这种半自回归预测方式融合起来。

为了提高半自回归的预测准确性,Falcon提出了一种叫做耦合顺序扫视蒸馏(CSGD)的方法。

CSGD方法是怎么做的:

  • 如下图,在训练过程中,草稿模型预测得到对下面几个token以及其特征的预测之后,会根据正确的预测(也就是LLM自回归生成的token以及特征)对草稿模型输出进行替换

  • 具体替换的比例是根据训练所处的阶段和预测结果和正确结果之间的汉明距离决定的,当前训练轮次越小、汉明距离越大,则替换的比例越高

  • 在将预测结果进行 部分替换 之后,接下来的步骤是重新输入替换后的序列 到drafter中,并计算 训练损失,从而更新模型参数

CSGD方法的理论依据:

  • SAR方法同时预测多个token(例如 k=2时,同时预测 X 和 Y)。

  • 它的目标是同时最小化 H(X)+H(Y),即同时预测两个token的不确定性。

  • 同时预测两个token X 和 Y,其总熵为:H(X)+H(Y) = H(Y∣X) + 2I(X;Y) + H(X∣Y);I(X;Y)表示的是X与Y之间的互信息

  • 传统的半自回归方式,只关注H(Y∣X),而忽略I(X;Y) 和 H(X∣Y),导致模型无法有效学习token之间的依赖关系,从而影响生成质量。

除了这些改动,本文将EAGLE在embedding之后用于降维的MLP换成了一个LSTM,相当于是能够学习到草稿模型输入的时序关系,也就是掌握了一些tokens之间的依赖关系

在实验方面,选用的模型是vicuna-7B/vicuna-13B和llama2-chat-7B和llama2-chat-13B,这是为了和eagle进行对比;对比的方法有标准投机解码、PLD、lookahead、medusa和eagle。

除了加速比的对比实验,还有对草稿序列的接受率和接收长度的对比,被对比的方法是medusa和eagle。

性能试验的评测数据集是MT-bench、HumanEval和GSM8K:

  • MT-bench,用于评估语言模型多任务场景下的性能

    • 包含80个多轮对话,每个对话有两个问题,这些对话总共有八类,分别是:writing、roleplay、extraction、reasoning、math、coding、stem、humanities。

    • 评价指标有两种,一种是把一个模型的生成结果给gpt-4打分,给出一个1-10的得分;一种是比较两个模型的回答,由 GPT-4 判断哪个更好

    • 问答数据以及评估的代码:https://github.com/lm-sys/FastChat/tree/main/fastchat/llm_judge

    • 在线链接:https://huggingface.co/spaces/lmsys/mt-bench

  • HumanEval,用于评估代码生成模型的性能,评估指标是通过率(Pass@k),即生成的代码通过测试用例的比例

    • 链接:https://github.com/openai/human-eval

  • GSM8K,全称 Grade School Math 8K,包含 8,500 个小学水平的数学问题,目标是测试模型的数学推理能力

    • 链接:https://github.com/openai/grade-school-math

    • 根据每个题,模型得到一个solution,再得到一个answer,也就是一个数,作为结果


http://www.ppmy.cn/server/157904.html

相关文章

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令(重要)3.3cp指令(重要)输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令(重要)mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

网络安全技术百科全书:术语与概念解析

Burp Suite 是一款信息安全从业人员必备的集成型的渗透测试工具,它采用自动测试和半自动测试的方式,通过拦截HTTP/HTTPS的Web数据包,充当浏览器和相关应用程序的中间人,进行拦截、修改、重放数据包进行测试,是Web安全人…

Wireshark TCP 分析标志位说明汇总

在 Wireshark 网络数据包分析中,比较常见的一些 TCP 分析标志位的说明和案例汇总如下: TCP Previous segment not capturedTCP Window FullTCP ACKed unseen segmentTCP Port numbers reusedTCP ZeroWindowTCP ZeroWindowProbeTCP Window UpdateTCP Kee…

《零基础Go语言算法实战》【题目 1-20】Go 语言类型转换

《零基础Go语言算法实战》 【题目 1-20】Go 语言类型转换 Go 语言支持哪种形式的类型转换?如何将浮点数类型转换为整数类型?举例说明。 【解答】 Go 语言支持满足其严格类型要求的显式类型转换,可以对浮点数类型变量使用 int() 函 数强制…

rknn环境搭建之docker篇

目录 1. rknn简介2. 环境搭建2.1 下载 RKNN-Toolkit2 仓库2.2 下载 RKNN Model Zoo 仓库2.3 下载交叉编译器2.4 下载Docker镜像2.5 下载ndk2.5 加载docker镜像2.6 docker run 命令创建并运行 RKNN Toolkit2 容器2.7 安装cmake 3. 模型转换3.1 下载模型3.2 模型转换 4. 编译cdem…

省市区三级联动(后端)

前提:springboot、mybatis-plus、swagger 数据库: 文章顶部 实体类: City package com.itfly.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.Loca…

【npm依赖包介绍】借助rimraf依赖包,在用npm run build构建项目时,清空dist目录,避免新旧混合

文章目录 背景如何使用附上rimraf的介绍和说明主要作用使用场景安装使用示例异步删除同步删除 参考资料 背景 在npm run build时,一般都会清空项目中已有的dist目录再构建,避免新旧混合。 如何使用 可以简单使用rimraf这个npm依赖包。 目前rimraf的最…

2025 西电软工数据结构机考 Tip (By Felix)

2025/01/07 18:30-20:30 XDOJ 五道题 三道题即为满分 近两年没有考过图和字符串,链表和树为重点内容(必考 重点准备) 2024年五道题: 题目内容类型得分未知C语言未参加给出后序和中序遍历建树树未参加堆排序输出过程量排…