又造新概念?|思维链压缩是什么?

img

一句话概括,模型变身高智商金鱼,7秒记忆高效推理一边思考边扔垃圾,内存省了,智商还在线。

一. 识别核心概念

1. 论文主要贡献点分析

  • 动态压缩推理过程
    论文提出了一种方法,允许大型语言模型在推理中边生成边压缩,不再一直保留所有历史内容
  • 专用Attention机制与标记
    他们设计了专门的"压缩"标记和注意力mask,让模型学会在合适的时机把长推理内容压缩到少量标记中
  • Dependency度量
    论文还提出了"Dependency"这一度量,用来衡量模型在推理时对过往内容的依赖程度。它相当于把生成的所有依赖累加起来,数字越低,说明压缩越强
  • 在保证准确率的同时减少内存和计算负担
    通过动态压缩,模型在长文本推理时会显著节省KV Cache的存储空间,并减少Attention计算,基本不牺牲准确率

2. 理解难点识别

  • 压缩机制本身
    动态如何实现"压缩"和"继续推理"是关键。这里包含:

    • 什么时候决定压缩
    • 如何把先前生成的长推理内容"提炼"成少量压缩标记
    • 被压缩的内容如何还保持足够信息供后面推理
  • 专用注意力mask的设计
    他们设定了特定的注意力mask,让压缩标记只关注必要的上下文,而后续生成只能依赖被压缩后的小片段

  • Dependency度量的计算
    这个度量直接衡量模型对长上下文的依赖程度,需要理解它背后的概念:它不是简单的最大序列长度,而是用"生成步步都依赖了多少历史信息"来衡量

3. 概念依赖关系

下面列出论文中几个核心概念,以及它们之间的关系:

  • 动态压缩(核心)
    整个方法的中心思想。所有的关注点都围绕它展开
  • 压缩标记(或"gist"标记)
    这是实现动态压缩的具体载体。模型将大段推理内容压缩到这些标记里
  • 专用注意力mask
    决定压缩标记、后续推理内容与先前文本的可见性关系。是执行压缩和保证后续推理可行的关键
  • Dependency度量
    评价加速效果时的重要指标,和动态压缩方法互相呼应,用来比较不同压缩策略的有效性

要想理解整篇论文的思路,先要搞清楚动态压缩是如何实现,然后再看专用mask的设计,最后用Dependency来比较各种方案好坏。最需要深入解释的概念就是"动态压缩机制"本身,包括它的触发时机、实现方式,以及如何让模型学会在压缩后继续推理。

结论
最需要深入解释的核心概念是"动态压缩",特别是它是怎么做的、用什么标记或机制来实现,以及为什么这种方法能在减少上下文长度的同时保持推理准确性。接下来,我们会在第二阶段围绕这个概念展开更细致的解读。

二. 建立直观理解

1. 设计生活化比喻

  • 日常场景
    想象你在整理一个大型会议的纪要。会前你有一堆资料(相当于模型的历史内容)。开会时不断有人发言,也会出现各种临时议题(相当于模型的推理步骤)。
    如果你把所有对话一字不漏地写下来,文档会变得极其庞大,后续查找或继续记录都很耗时。
    于是,你在写纪要的过程中,会时不时停下来,把刚才的讨论"浓缩"成一个短摘要。然后你把原来冗长的对话记录删掉,只保留那段简短摘要来代表那段历史内容。
  • 为什么这样做
    整理纪要时,保留所有原文太占空间,处理变慢
    但只要有了能代表前面内容的简要记录,你就能继续基于摘要来记录下后面的内容。
    这就像模型在推理时,边生成边压缩,以便后续计算不被无穷增长的上下文拖慢

2. 建立比喻与实际技术的对应关系

  • “开会中的一次讨论”“模型生成的一段推理内容”
    每次有人发言、讨论一段问题,模型对应地生成一串推理文字
  • “简短摘要标记”“压缩标记(gist tokens)”
    你把这段讨论浓缩成一小段短句
    模型把长推理内容压缩到少数特殊标记里
  • “根据摘要继续写纪要”“模型根据压缩标记进行后续推理”
    你后面再写的会议内容,主要参考前面留下的摘要
    模型后续的生成,主要依赖那些被压缩后的标记
  • “偶尔进行浓缩”“动态决定什么时候压缩”
    在会中,你不会每句都总结,只在合适时机进行
    模型也会在特定步数或特定逻辑段后触发压缩

3. 深入技术细节

以下用更技术化的描述,结合一些论文中常见的公式结构,但先列出"原始形式",再用自然语言替换它们的符号。

3.1 原始数学形式

假设有一段推理内容
模型在产生完 后,会生成压缩标记 ,并丢掉 的原文,后面的推理只看 。

通常会有一个类似:

下一步内容问题压缩标记们

或在论文中,他们还给出了一些注意力mask,表示" 只能访问问题和 ,但不访问别的",而"后续推理只访问问题和 "。

3.2 符号替换版本(自然语言方式)

  • “下一步内容的概率 = 模型在知道’题目’和’之前的压缩标记们’的前提下,生成当前内容的概率”
  • 注意力mask则是:“压缩标记那部分,只能看见当前讨论的原文和过去的简要摘要;后面正常生成时,只能看见问题和所有之前的压缩标记,而不能再看见那串被丢掉的详细原文”

3.3 技术实现中的关键步骤

  • 触发时机
    模型按照预先定义好的策略(比如每隔多少个token,或者每出现一个逻辑段落)自动产出压缩标记
  • 压缩标记的生成
    模型在"自动回顾"刚生成的大段文本时,用少量特殊token来表达它的主要信息
  • 丢弃原文
    生成好压缩标记后,那段长文本就被丢弃,不再加入后续上下文
  • 后续推理依赖压缩标记
    后面生成时,只依赖问题本身和已经产生的这些精简标记

4. 将技术细节与比喻相互映射

  • 在会议纪要中何时写摘要
    对应 “触发压缩时机”
  • 写摘要时,你要先看看上一段讨论
    对应 “压缩标记的生成”
  • 把上一段讨论原文删去
    对应 “丢弃原文”
  • 今后写纪要时,多数情况下只查阅摘要
    对应 “后续推理只看压缩标记”

比喻的局限性

  • 在会议纪要里,你可能随时找回原文档的录音或记录,但在模型里,被丢弃的长文本真就扔掉了
  • 现实情况中,你可能还会合并新讨论和旧摘要再出新版本,但论文的机制是一次压缩就丢掉原内容

5. 总结

  • 动态压缩就像给长对话做纪要
  • 压缩标记是纪要中的简短总结
  • 后续推理相当于基于这些纪要继续讨论
  • 整个过程用特定的注意力设计来完成,让模型只关注那些简短记录而非整篇长文

这样的对应关系,让我们用"会议纪要"来直观理解复杂的模型压缩原理。对那些核心数学公式,最主要的概念是:“如何根据’过去要点(压缩标记)‘来产出’现在的内容’”,并把无关的冗长历史文本丢掉。

三. 详细技术解析

1. 整体流程说明

大体上,LightThinker模型的"动态压缩"方案可以分为以下几个阶段:

  1. 输入处理

    • 模型先接收到问题或文本作为初始输入(Prompt)
    • 模型准备开始"逐步推理"
  2. 逐段或逐步生成

    • 模型自回归地生成内容(如推理步骤或中间思考)
    • 这一阶段可能有多次循环:每次都产生一小段推理
  3. 触发压缩

    • 当满足某些条件(如已生成若干token或出现一个思考段落结束)
    • 模型会自动执行"压缩操作",把刚才那段推理压缩到极少量的标记里
  4. 丢弃原推理文本

    • 生成好压缩标记后,模型不再保留那段详细文本
    • 后续推理只靠这些压缩标记加上最初的问题信息
  5. 继续生成或直到结果产出

    • 模型重复第2~4步:在新的推理片段结束时,再次触发压缩
    • 最终会给出一个完整的答案(或输出文本)

这样做的核心益处在于:

  • 每次循环都不会累积过多历史;
  • 因为历史内容在不断被压缩和丢弃,KV Cache等内部结构不会一直变大;
  • 推理长文本时,这种"边生成边压缩"的方式能显著减小内存和计算负担。

2. 举例:一个简单推理任务

我们用一个极简的例子来说明:

场景
“你让模型算一个三步连乘的结果,并解释中间过程。”

输入

Prompt: 计算 2×3×4 的结果,需要展示推理过程

模型处理

  • 步骤1:初始化

    • 模型把"2×3×4"作为问题放在上下文中
  • 步骤2:模型开始生成推理

    • 生成了第一个想法:“2×3=6”
    • 生成第二个想法:“然后6×4=24”
      (假设这里有多行推理文本)
  • 步骤3:触发压缩

    • 根据规则(例如:当生成的token数量到达一定阈值)
    • 模型插入特殊标记,比如"…" 表示压缩内容
    • 模型内部把"2×3=6"和"6×4=24"总结为一个短小的要点,如"已得出最终值24"
    • 丢弃原始"2×3=6, 6×4=24"那些详细文本
  • 步骤4:继续推理

    • 模型只保留短标记"已得出最终值24",再加上问题本身
    • 如果还需要再扩展解释,就基于这个简短压缩信息继续
  • 步骤5:产出答案

    • 最终给出答案"24"以及简短的解释

3. 详细流程伪代码

下面是一个简化的伪代码示例。它不代表真实实现的所有细节,但能让我们看出流程走向。

function LightThinkerInference(prompt, compression_trigger):
    # prompt: 问题或初始上下文
    # compression_trigger: 压缩触发规则,比如"每隔N个token""每行结束"
    
    context = prompt
    output = []

    while not generation_finished(output):
        # 1. 生成新推理片段
        new_segment = model_generate(context)
           # 假设此处产生一段推理文本

        # 2. 将新推理片段先追加到输出
        output.append(new_segment)

        # 3. 判断是否需要压缩
        if compression_trigger(output):
            # 3a. 用模型或简化规则,对new_segment做压缩摘要
            compressed_tokens = model_compress(new_segment, context)
               # 这里产生一个很短的tokens

            # 3b. 在context里追加这些"压缩标记"
            context = update_context_with_compressed(context, compressed_tokens)

            # 3c. 丢弃new_segment的原文
            # 不再放进context
            # 这样会减少KV Cache长度
        else:
            # 如果不触发压缩,则直接把new_segment并入context
            context += new_segment

    # 最后把所有输出拼合起来,或者只留最终答案
    answer = finalize(output)
    return answer

流程说明:

  • model_generate(context):根据当前上下文生成新的推理文本
  • model_compress(new_segment, context):用专门的压缩模块,把新段落压缩为少量标记
  • update_context_with_compressed:把压缩标记放进上下文,用以替代大段的new_segment
  • finalize(output):把输出整理成最终答案或完整推理

4. 小结

  • 先分批次生成推理片段
  • 每生成一批,就看需不需要压缩
  • 压缩后,删掉那批的详细文本,只保留精简标记
  • 重复到结束

这是文章里核心的逻辑思路。使用时,具体触发压缩的规则或算法可能更复杂,比如:

  • 检测分段符
  • 利用特殊监督数据来学什么时候"该压缩"
  • 在压缩标记里编码哪些关键信息

但大框架就是:先生成一段,再压缩,再继续。这让模型在长文本推理时不会累积无法管理的大量上下文,从而减少内存占用并加快推理。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值