LLM:decoder-only 思考

news2025/12/14 19:43:38

文章目录

  • 前言
  • 一、KV-cache
    • 1、为什么使用KV-cache
    • 2、KV-cache的运作原理
  • 二、Decoder-only VS Encoder-Decoder
    • 1、Decoder-only
    • 2、Encoder-Decoder
  • 三、Causal LM VS PrefixLM
  • 总结


前言

decoder-only模型是目前大模型的主流架构,由于OpenAI勇于挖坑踩坑,大家跟随它的脚步使其目前主流大模型均为decoder-only架构。但目前也没有明确实验表明decoder-only模型一定要优于encoder-decoder架构或其它架构。本文主要decoder-only涉及到一些技术点。


一、KV-cache

其实我觉得decoder-only目前一个很大的优势就是其已经逐渐成熟的部署生态,其中的重点之一KV-cache。

KV-Cache 指在 Transformer 解码器中缓存住过去生成 token 的 Key(K)和值(Value,V),以避免每次都重复计算前面 token 的 attention。

1、为什么使用KV-cache

在 decoder-only 架构中,当生成第 t 个 token 时,需要用 1~t-1 的 token 计算 attention。

如果不缓存,就要重复计算每个前面位置的 K/V (我们知道Q, K, V均经过各自的线性层获得,如果每次都计算将导致巨大的计算量)

而有了 KV-Cache:
每一步只计算当前 query 的 attention,然后从缓存中提取之前的 K/V。
时间复杂度从 O(T²) ➜ 降为 O(T)(每步 O(1))。

Query_t    -->   Attention(Q_t, K_1~t-1, V_1~t-1)
                                  ↑
                               来自缓存的 K/V

2、KV-cache的运作原理

基本代码如下:

outputs = model(input_ids, use_cache=True)
past_key_values = outputs.past_key_values  # 缓存的Key 和 Value

next_outputs = model(next_input_ids, past_key_values=past_key_values)

具体一点,假设prompt为 'The cat is' ,

第一次输入:"The cat is" → 模型生成 sleeping(next token id 是 sleeping 对应的 token)

第二次输入:next_input_ids = [sleeping_token_id],配合上一次的 past_key_values

第三次输入:模型又生成了 on,然后 next_input_ids = [on_token_id]

以此类推...

基于此,简单的伪代码如下:

input_ids = tokenizer("The cat is", return_tensors="pt").input_ids
outputs = model(input_ids, use_cache=True)
past_key_values = outputs.past_key_values

generated_ids = input_ids

for _ in range(max_gen_len):
    next_token_id = outputs.logits[:, -1, :].argmax(dim=-1)
    generated_ids = torch.cat([generated_ids, next_token_id.unsqueeze(-1)], dim=-1)

    outputs = model(input_ids=next_token_id.unsqueeze(0), past_key_values=outputs.past_key_values)

这里再提一点:因为Q要和之前所有的K和V计算attention,

attn_scores = Q_t × [K_1, ..., K_{t-1}]# shape: [1, t-1]
attn_weights = softmax(attn_scores)
output_t = attn_weights × [V_1, ..., V_{t-1}]  # shape: [1, d_model]

output_t = α₁ · V₁ + α₂ · V₂ + ... + α_{t-1} · V_{t-1}

二、Decoder-only VS Encoder-Decoder

首先要了解的一点,这两种架构都是针对语言端来说的,对于多模态是一定会有编码器来编码视觉等信息的。

基本架构如下:

             ┌────────────┐
Input Text → │  Encoder   │ ─┐
             └────────────┘  │
                             ▼
                       ┌────────────┐
     Target Tokens →   │  Decoder   │ → Output tokens
                       └────────────┘

首先最明显的结构上的差异,多了个encoder。

此外Decoder-only是只有单向注意力(causal attention),天然具备隐式的位置编码能力,即使没有外部的位置编码,也能表达出 token 顺序。

Encoder-Decoder中是存在交叉注意力的,可以完整看到encoder的输出,比较适合并行处理

1、Decoder-only

适合任务:语言建模、对话、长文生成、代码补全等

[Prompt + Target] → 单个 Decoder → 逐 token 输出

注意力结构:
每个 token 只能看到自己左边的内容(自回归)

优点:
结构简单,统一处理输入输出
非常适合 autoregressive 生成(逐字输出)

2、Encoder-Decoder

适合翻译任务

Input:     I love you
           ↓
Encoder:   编码为隐藏状态
           ↓
Decoder:   预测输出:我 爱 你

个人觉得其实encoder-decoder的训练会比decoder-only更容易下,因为多了一个encoder的语义理解过程。不过也许正因decoder-only的训练困难,才能使其能力上限更高。

三、Causal LM VS PrefixLM

前面已经提到了Decoder-only主要使用 Causal LM(从左至右,单向推理),其实还有一种训练范式为Prefix LMCausal LM 和 Prefix LM在推理时是保持一致的,但是在训练时候的策略不同

PrefixLM 做的 attention 限制是:

对于 prompt 的 token(你是谁?):

它们可以看到彼此(全注意力);

对于 target 的 token(皮卡丘):

它们只能看到 prompt + 自己左边的 token(自回归 attention);

不能 peek 后面的词。

可以看成是:“编码器-解码器合体”的一种 attention 掩码策略

Attention Mask格式如下:

Causal LM(如 GPT)

Token sequence: [ A B C D E ]
Mask matrix:
A → A  
B → A B  
C → A B C  
D → A B C D  
E → A B C D E  

Prefix LM

Prefix = [A B]
Target = [C D E]

Token sequence: [ A B | C D E ]

Mask matrix:
A → A B        ✅ full attention for prefix  
B → A B  

C → A B C      ✅ target attends to prefix + left  
D → A B C D  
E → A B C D E  

可以看到PrefixLM
显式建模「任务输入 + 输出」的结构;
在训练时就区分 prompt 和 response;
比纯 Causal LM 更有效地学习「用 prompt 解任务」的能力。


总结

其实我觉得encoder-decoder, prefix这些方法仍然有很大的探索空间,只不过对于大模型来说这些实验的成本是巨大且不可控的,decoder-only的生态逐渐成熟,这些方法的探索也就逐渐变少了,不过依然未来可期

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字创新智慧园区建设及运维方案

该文档是 “数字创新智慧园区” 建设及运维方案,指出传统产业园区存在管理粗放等问题,“数字创新园区” 通过大数据、AI、物联网、云计算等数字化技术,旨在提升园区产业服务、运营管理水平,增强竞争力,实现绿色节能、高效管理等目标。建设内容包括智能设施、核心支撑平台、…

【科研绘图系列】R语言绘制森林图(forest plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息介绍 本文介绍使用R语言绘制森林图(forest plot)的方法。首先加载必要的R包(grid、forestploter、openxlsx、stringr),导入并预处…

SpringAI+DeepSeek大模型应用开发实战

内容来自黑马程序员 这里写目录标题 认识AI和大模型大模型应用开发模型部署方案对比模型部署-云服务模型部署-本地部署调用大模型什么是大模型应用传统应用和大模型应用大模型应用 大模型应用开发技术架构 SpringAI对话机器人快速入门会话日志会话记忆 认识AI和大模型 AI的发…

如何以 9 种方式将照片从 iPhone 传输到笔记本电脑

您的 iPhone 可能充满了以照片和视频形式捕捉的珍贵回忆。无论您是想备份它们、在更大的屏幕上编辑它们,还是只是释放设备上的空间,您都需要将照片从 iPhone 传输到笔记本电脑。幸运的是,有 9 种方便的方法可供使用,同时满足 Wind…

根据jvm源码剖析类加载机制

根据jvm源码剖析类加载机制 java Test.class之后的大致流程 java Test.class ----> 对于windows操作系统 ----> java.exe调用jvm.dll文件创建JVM, ----> 在创建JVM中先由C的代码创建Boostarp(引导)类加载器, ----&g…

DDS通信中间件——DDS-TSN规范

DDS通信中间件——DDS-TSN规范 做了十年DDS通信中间件产品的程序员和大家分享一下对DDS这套规范的个人理解。预期本系列文章将包括以下内容陆续更新: DDS规范概述DCPS规范解读 & QoS策略XTypes规范解读RTPS规范解读DDS安全规范解读DDS-RPC规范解读&#xff08…

JWT安全:弱签名测试.【实现越权绕过.】

JWT安全:假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上,它们可以包含任何类型的数据,但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…

Baklib知识中台加速企业服务智能化实践

知识中台架构体系构建 Baklib 通过构建多层级架构体系实现知识中台的底层支撑,其核心包含数据采集层、知识加工层、服务输出层及智能应用层。在数据采集端,系统支持对接CRM、ERP等业务系统,结合NLP技术实现非结构化数据的自动抽取&#xff1…

VMware Tools 手动编译安装版

OWASPBWA安装VMware tools 安装时,显示如下提示 官方安装手册参考:https://knowledge.broadcom.com/external/article?legacyId1014294 按照提示,下载linux.iso文件,并连接到虚拟机的CDROM里,状态勾选已连接&#x…

android平台驱动开发(六)--Makefile和Kconfig简介

Makefile: 1.编译进内核,还是以模块方式加载 模块方式编译成ko,通常是自己添加脚本方式insmod ,android 平台通常默认有modprobe加载,不需要额外添加insmod脚本 lsmod |grep test 可以查看是否安装成功 rmmod test-m.ko 可以删除ko 2.多…

【手写系列】手写线程池

PS&#xff1a;本文的线程池为演示 Demo&#xff0c;皆在理解线程池的工作原理&#xff0c;并没有解决线程安全问题。 最简单一版的线程池 public class MyThreadPool {// 存放线程&#xff0c;复用已创建的线程List<Thread> threadList new ArrayList<>();publ…

Live Helper Chat 安装部署

Live Helper Chat(LHC)是一款开源的实时客服聊天系统,适用于网站和应用,帮助企业与访问者即时沟通。它功能丰富、灵活、可自托管,常被用于在线客户支持、销售咨询以及技术支持场景。 🧰 系统要求 安装要求 您提供的链接指向 Live Helper Chat 的官方安装指南页面,详细…

ARXML解析与可视化工具

随着汽车电子行业的快速发展,AUTOSAR标准在车辆软件架构中发挥着越来越重要的作用。然而,传统的ARXML文件处理工具往往存在高昂的许可费用、封闭的数据格式和复杂的使用门槛等问题。本文介绍一种基于TXT格式输出的ARXML解析方案,为开发团队提供了一个高效的替代解决方案。 …

PnP(Perspective-n-Point)算法 | 用于求解已知n个3D点及其对应2D投影点的相机位姿

什么是PnP算法&#xff1f; PnP 全称是 Perspective-n-Point&#xff0c;中文叫“n点透视问题”。它的目标是&#xff1a; 已知一些空间中已知3D点的位置&#xff08;世界坐标&#xff09;和它们对应的2D图像像素坐标&#xff0c;求解摄像机的姿态&#xff08;位置和平移&…

在日常管理服务器中如何防止SQL注入与XSS攻击?

在日常管理服务器时&#xff0c;防止SQL注入&#xff08;Structured Query Language Injection&#xff09;和XSS&#xff08;Cross-Site Scripting&#xff09;攻击是至关重要的&#xff0c;这些攻击可能会导致数据泄露、系统崩溃和信息泄露。以下是一份技术文章&#xff0c;介…

Wkhtmltopdf使用

Wkhtmltopdf使用 1.windows本地使用2.golangwindows环境使用3.golangdocker容器中使用 1.windows本地使用 官网地址 https://wkhtmltopdf.org/&#xff0c;直接去里面下载自己想要的版本&#xff0c;这里以windows版本为例2.golangwindows环境使用 1.安装扩展go get -u githu…

ArcGIS Pro 创建渔网格网过大,只有几个格网的解决方案

之前用ArcGIS Pro创建渔网的时候&#xff0c;发现创建出来格网过大&#xff0c;只有几个格网。 后来查阅资料&#xff0c;发现是坐标不对&#xff0c;导致设置格网大小时单位为度&#xff0c;而不是米&#xff0c;因此需要进行坐标系转换&#xff0c;网上有很多资料讲了ArcGIS …

重学计算机网络之以太网

一&#xff1a;历史发展进程 DIX EtherNet V2 战胜IEEE802.3成为主流版本。总线型交换机拓扑机构代替集线器星型拓扑机构 1990年IEEE制定出星形以太网10BASE-T的标准**802.3i**。“10”代表10 Mbit/s 的数据率&#xff0c;BASE表示连接线上的信号是基带信号&#xff0c;T代表…

《深度解构现代云原生微服务架构的七大支柱》

☁️《深度解构现代云原生微服务架构的七大支柱》 一线架构师实战总结&#xff0c;系统性拆解现代微服务架构中最核心的 7 大支柱模块&#xff0c;涵盖通信协议、容器编排、服务网格、弹性伸缩、安全治理、可观测性、CI/CD 等。文内附架构图、实操路径与真实案例&#xff0c;适…

使用SCSS实现随机大小的方块在页面滚动

目录 一、scss中的插值语法 二、方块在界面上滚动的动画 一、scss中的插值语法 插值语法 #{}‌ 是一种动态注入变量或表达式到选择器、属性名、属性值等位置的机制 .类名:nth-child(n) 表示需同时满足为父元素的第n个元素且类名为给定条件 效果图&#xff1a; <div class…