当前位置: 首页 > news >正文

大模型基础:Foundamentals of LLM

Embedding:将高维数据嵌入低维空间
Grounding: 将抽象表示(如语言、符号、向量)与真实的知识或具体的实体联系起来

人工智能难题
如何让机器理解物理世界?
如何让它们拥有持续记忆?
如何实现推理和规划?

判别时AI和生成式AI的对比

维度判别式AI生成式AI
目标学习输入数据到标签/类别的映射关系,专注于“判别”数据的类别或属性(如判断图像是猫还是狗,预测文本情感)。本质是建模条件概率分布P(标签/输入)学习输入数据的潜在分布,专注于“生成”与原始数据相似的新样本(如生成逼真图像、文本、音频)。本质是建模数据本身的概率分布P(输入)条件生成分布P(输出/输入)(如文本到图像)。
神经网络架构以分类/回归为核心,常见架构包括:
- 卷积神经网络(CNN,用于图像分类)
- 循环神经网络(RNN,用于序列标注)
- 普通Transformer(如BERT,用于文本分类、命名实体识别)
- 支持向量机(SVM)、逻辑回归等传统模型也属于判别式方法。
以生成新数据为核心,常见架构包括:
- Transformer(语言模型,如GPT系列、LLaMA)
- 生成对抗网络(GAN,如DCGAN、StyleGAN)
- 扩散模型(如Stable Diffusion、DALL-E 2)
- 自编码器(Autoencoder)及变体(如VAE)
- 流模型(Flow-based Models)等。
训练范式通常采用“监督学习”:
- 依赖带标签数据(输入-标签对)
- 目标是最小化预测标签与真实标签的误差(如交叉熵损失、MSE损失)
- 训练过程聚焦于优化判别边界,无需完整建模数据分布。
以“无监督/自监督学习”为主,部分结合监督微调:
- 预训练阶段依赖大规模无标签数据,学习数据的潜在结构(如语言模型通过预测下一个token训练)
- 核心是最小化生成数据与真实数据的分布差异(如GAN的对抗损失、扩散模型的降噪损失)
- 大规模预训练+微调是主流范式(如先用无标签数据预训练,再用少量标注数据微调以适应特定生成任务)。
典型应用图像分类、情感分析、垃圾邮件检测、预测任务(如房价预测)、语音识别等。文本生成(如写文章、对话)、图像生成(如AI绘画)、视频生成、代码生成、数据增强(生成模拟训练数据)等。
核心能力擅长“判断”和“决策”,能对输入数据进行分类、回归或标注,但无法创造新数据。擅长“创造”和“生成”,能产出与原始数据分布一致的新样本,但判别能力较弱(需额外模块辅助)。

总结

判别式AI是“分类器”,专注于学习数据的类别边界;生成式AI是“创造者”,专注于学习数据的生成规律。两者在目标、架构和训练方式上有本质区别,但实际应用中常结合使用(如生成式AI用判别式模型辅助优化生成质量)。

自回归生成模型

自回归生成模型(Autoregressive Generative Model) 是生成式AI的核心技术之一,尤其驱动了当前主流的大语言模型(如GPT系列、Llama等)。它的核心思想是:通过序列中已知的部分,逐步预测下一个元素,最终生成完整内容(文字、音频、图像像素等)。其本质是一种“条件概率链式分解”。


核心原理:逐元素生成

  1. “自回归”的含义

    • “自”:指模型基于自身已生成的部分作为输入。
    • “回归”:指通过统计方法预测序列中的下一个元素(如文本中的下一个词、图像中的下一个像素)。
    • 核心公式
      P(完整序列)=P(x1)⋅P(x2∣x1)⋅P(x3∣x1,x2)⋯P(xn∣x1,x2,…,xn−1) P(\text{完整序列}) = P(x_1) \cdot P(x_2|x_1) \cdot P(x_3|x_1,x_2) \cdots P(x_n|x_1,x_2,\dots,x_{n-1}) P(完整序列)=P(x1)P(x2x1)P(x3x1,x2)P(xnx1,x2,,xn1)
      即:将生成整个序列的概率,分解为逐步预测每个元素的概率乘积。
  2. 工作流程(以文本生成为例)

    • 输入提示(Prompt):“天空是”
    • 模型预测下一个词分布:蓝色(概率0.7)、灰色(概率0.2)、透明的(概率0.1)
    • 根据采样策略(如选最高概率或随机采样)生成词:“蓝色”
    • 更新输入:“天空是蓝色” → 预测下一个词:“的”(概率0.9)
    • 继续生成直到结束符或达到长度限制。

关键技术特点

特点说明
顺序依赖性生成严格从左到右(或按固定顺序),后生成的内容依赖前文。
单向上下文传统模型(如GPT)生成时只能利用左侧上下文,无法看到右侧(非双向)。
可并行训练训练时可通过掩码(Mask)让模型同时学习预测所有位置(如Transformer架构)。
生成可控性通过调节温度(Temperature)、Top-k采样等参数控制生成结果的多样性与质量。

典型应用场景

  1. 文本生成

    • 大语言模型(LLM):GPT、Claude、Llama等均基于自回归架构。
    • 应用:聊天机器人、文章续写、代码补全(如GitHub Copilot)。
  2. 图像生成

    • 将图像像素按顺序排列成序列(如逐行扫描),生成每个像素的颜色值。
    • 示例:PixelCNN、早期版本的图像生成模型。
  3. 音频生成

    • 将音频波形或频谱图转化为序列,逐点生成(如WaveNet)。

⚙️ 底层架构:Transformer 的解码器

自回归模型的高效性源于 Transformer 解码器

  • 核心组件
    • 掩码自注意力层:确保生成时只关注已生成的左侧上下文。
    • 位置编码:标记序列中元素的顺序关系。
  • 训练目标:预测被掩盖(Mask)的词(语言建模任务)。

例如:GPT-3 的生成过程

输入: "人工智能是"  
输出分布: ["未来", 0.6], ["技术", 0.3], ["趋势", 0.1]  
采样 → "未来"  
新输入: "人工智能是未来" → 继续生成...  

✅ 优势与局限

优势局限性
生成内容连贯性强,符合语言逻辑生成速度慢(必须逐词生成,无法并行)
灵活支持长文本生成错误会累积(早期生成错误影响后续结果)
易于控制生成方向(通过Prompt引导)无法在生成中“回头修改”已生成部分

与扩散模型(Diffusion)的对比

自回归模型扩散模型(如Stable Diffusion)
生成顺序:严格序列化生成顺序:从噪声逐步去噪(非固定顺序)
擅长离散数据(文本、代码)擅长连续数据(图像、音频)
依赖语言概率建模依赖图像空间结构建模

一句话总结

自回归模型像一个“逐词接龙大师”:它根据已说出的内容,一步步预测下一个词,最终完成整个句子、段落甚至一本书。它是当前大语言模型的“心脏”,但也因逐词生成而速度受限。

KVCache

在大型语言模型(LLM)中,past_key_values 是一个与模型推理效率密切相关的核心概念,主要用于优化自回归生成过程中的计算性能。它本质上是对历史序列的注意力计算结果(keyvalue 张量)的缓存机制,下面从原理、作用和应用场景三个方面详细解释:

1. 背景:LLM的自回归生成与注意力机制

LLM(如GPT系列)的文本生成遵循自回归机制:模型每次生成一个token(如一个词或子词),然后将该token与历史生成的token拼接,作为下一轮输入,重复此过程直到生成结束。

而模型的核心是Transformer解码器,其核心组件是自注意力机制。在自注意力中,每个token会被转换为三个向量:

  • query(查询):当前token用于“查询”其他token的向量;
  • key(键):其他token用于被“查询”的向量;
  • value(值):其他token被“查询”后,用于加权求和的向量。

注意力分数的计算方式为:query 与所有 key 的点积(衡量相似度),再通过softmax归一化,最终对 value 进行加权求和,得到当前token的注意力输出。

2. 为什么需要 past_key_values

在自回归生成中,假设已生成序列为 [t1, t2, ..., tn],现在要生成第 n+1 个token t(n+1)。此时,模型需要计算 t(n+1) 与历史序列 [t1, ..., tn] 的注意力。

如果不做优化,每次生成新token时,模型会重新计算所有历史token的 keyvalue(因为输入是 [t1, ..., tn, t(n+1)])。但实际上,t1tnkeyvalue 在生成 tn 时已经计算过了,重复计算会导致:

  • 计算量随序列长度增长而平方级增加(注意力的时间复杂度为 O(n²)n 是序列长度);
  • 生成长文本时效率极低(例如生成1000个token,需重复计算约50万次冗余操作)。

past_key_values 的作用就是缓存历史序列的 keyvalue,避免重复计算,从而将每次生成的计算量从 O(n²) 降至 O(n)

3. past_key_values 的结构与工作流程

结构

past_key_values 通常是一个元组列表,其中每个元素对应 Transformer 解码器的一层。对于每一层,又包含两个张量:

  • past_key:该层中所有历史token的 key 向量,形状通常为 (batch_size, num_heads, seq_len_so_far, head_dim)
  • past_value:该层中所有历史token的 value 向量,形状与 past_key 相同。

其中:

  • batch_size:批量处理的样本数;
  • num_heads:注意力头的数量;
  • seq_len_so_far:当前已生成的序列长度;
  • head_dim:每个注意力头的维度。
工作流程

以生成第 n+1 个token为例,past_key_values 的使用步骤如下:

  1. 初始状态:生成第一个token t1 时,past_key_values 为空(无历史序列),模型需计算 t1keyvalue,并将其存入 past_key_values(此时 seq_len_so_far=1)。

  2. 生成第二个token t2

    • 输入为 t2(仅当前token,而非 [t1, t2]);
    • 模型计算 t2querykeyvalue
    • past_key_values 中取出 t1keyvalue,与 t2keyvalue 合并(此时总序列长度为2);
    • 计算 t2t1 的注意力(仅关注历史),并更新 past_key_values(存入 t2keyvalueseq_len_so_far=2)。
  3. 后续生成:重复步骤2,每次仅计算当前token的 querykeyvalue,与 past_key_values 中的历史 keyvalue 合并,计算注意力后更新缓存。

4. 应用场景与工具实现

past_key_values 是LLM高效推理的核心优化手段,几乎所有主流LLM推理框架(如Hugging Face Transformers、vLLM、TensorRT-LLM)都依赖这一机制。

以Hugging Face Transformers为例:

  • 调用 model.generate() 时,框架会自动管理 past_key_values,无需用户手动处理;
  • 若需手动控制生成过程(如自定义解码逻辑),可通过 model(**inputs, past_key_values=past) 传入缓存,并从返回结果中获取 past_key_values 用于下一轮:
    # 初始输入
    inputs = tokenizer("Hello,", return_tensors="pt")
    outputs = model(** inputs, use_cache=True)  # 启用缓存
    past_key_values = outputs.past_key_values  # 获取第一轮缓存# 生成下一个token
    next_token_logits = outputs.logits[:, -1, :]
    next_token = torch.argmax(next_token_logits, dim=-1).unsqueeze(0)
    outputs = model(next_token, past_key_values=past_key_values, use_cache=True)  # 传入缓存
    

总结

past_key_values 是LLM在自回归生成中对历史序列 keyvalue 的缓存机制,其核心作用是避免重复计算,将生成过程的时间复杂度从 O(n²) 降至 O(n),从而显著提升长文本生成的效率。理解这一概念有助于深入掌握LLM的推理原理和优化思路。

旋转编码

旋转位置编码(Rotary Position Embedding,简称RoPE)是一种用于Transformer架构的位置编码方式,由论文《RoPE: Rotary Position Embedding》提出,目前已被广泛应用于LLaMA、GPT-NeoX、PaLM等主流大语言模型中。其核心特点是通过旋转矩阵对注意力机制中的Query(查询)和Key(键)进行旋转变换,从而在注意力计算中自然引入相对位置信息,解决了传统位置编码在长序列建模和相对位置依赖上的局限性。

一、核心思想:用“旋转”建模相对位置

传统位置编码(如正弦余弦编码、可学习编码)通常通过“绝对位置向量”与Token嵌入相加的方式注入位置信息,这种方式存在两个问题:

  1. 注意力分数依赖于Token的绝对位置,而非更重要的相对位置(语言中“词与词的关系”更多由距离决定,而非绝对位置);
  2. 对长序列的泛化能力差(训练时未见过的长序列位置,编码效果会显著下降)。

RoPE的核心创新是:不直接给Token嵌入添加位置向量,而是通过旋转矩阵对Query和Key进行变换,使得注意力分数的计算仅依赖于两个Token之间的相对位置,而非绝对位置。

具体来说,对于位置为mn的两个Token,RoPE确保:当计算它们的注意力分数时(即Q_m · K_n),结果仅由相对位置k = m - n决定,与mn的绝对位置无关。

二、数学原理:旋转矩阵的构造与作用

RoPE的实现依赖于二维旋转矩阵的高维扩展,其核心是通过三角函数(正弦、余弦)定义旋转角度,进而构造旋转矩阵对向量进行旋转。

1. 二维空间的旋转(基础)

在二维空间中,一个向量(x, y)绕原点旋转θ角后得到新向量(x', y'),其变换公式为:

x' = x·cosθ - y·sinθ  
y' = x·sinθ + y·cosθ  

用矩阵表示即:
[x′y′]=[cos⁡θ−sin⁡θsin⁡θcos⁡θ][xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cosθ & -\sinθ \\ \sinθ & \cosθ \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}[xy]=[cosθsinθsinθcosθ][xy]
这个旋转矩阵的关键特性是:旋转后的向量与其他向量的内积,仅依赖于旋转角度的差值(即相对旋转)。这正是RoPE建模相对位置的数学基础。

2. 高维向量的旋转(扩展)

Transformer中的Query和Key是高维向量(维度为d,通常是偶数),RoPE通过将高维向量拆分为d/2个二维子空间,每个子空间独立应用旋转变换,从而实现高维扩展。

具体步骤如下:

  • 步骤1:为每个二维子空间定义旋转角度
    对于第i个二维子空间(i从0到d/2 - 1),位置为m的Token对应的旋转角度θ_i定义为:
    θi=10−2i/d(基频衰减,确保不同子空间旋转速率不同)θ_i = 10^{-2i/d} \quad \text{(基频衰减,确保不同子空间旋转速率不同)}θi=102i/d(基频衰减,确保不同子空间旋转速率不同)
    则位置m的旋转角度为m·θ_i,位置n的旋转角度为n·θ_i,两者的相对角度差为(m-n)·θ_i = k·θ_ik为相对位置)。

  • 步骤2:对Query和Key进行旋转
    对于高维向量Q(Query)和K(Key),将其按维度拆分为(Q_0, Q_1), (Q_2, Q_3), ..., (Q_{d-2}, Q_{d-1})d/2个二维向量对。
    位置为mQ的第i个二维对(Q_{2i}, Q_{2i+1})旋转后变为:
    [Q2i′Q2i+1′]=[cos⁡(mθi)−sin⁡(mθi)sin⁡(mθi)cos⁡(mθi)][Q2iQ2i+1]\begin{bmatrix} Q'_{2i} \\ Q'_{2i+1} \end{bmatrix} = \begin{bmatrix} \cos(mθ_i) & -\sin(mθ_i) \\ \sin(mθ_i) & \cos(mθ_i) \end{bmatrix} \begin{bmatrix} Q_{2i} \\ Q_{2i+1} \end{bmatrix}[Q2iQ2i+1]=[cos(mθi)sin(mθi)sin(mθi)cos(mθi)][Q2iQ2i+1]

    同理,位置为nK的第i个二维对旋转后变为:
    [K2i′K2i+1′]=[cos⁡(nθi)−sin⁡(nθi)sin⁡(nθi)cos⁡(nθi)][K2iK2i+1]\begin{bmatrix} K'_{2i} \\ K'_{2i+1} \end{bmatrix} = \begin{bmatrix} \cos(nθ_i) & -\sin(nθ_i) \\ \sin(nθ_i) & \cos(nθ_i) \end{bmatrix} \begin{bmatrix} K_{2i} \\ K_{2i+1} \end{bmatrix}[K2iK2i+1]=[cos(nθi)sin(nθi)sin(nθi)cos(nθi)][K2iK2i+1]

3. 注意力分数中的相对位置信息

旋转后的Query(Q'_m)和Key(K'_n)的内积(即注意力分数的核心)为:
Qm′⋅Kn′=∑i=0d/2−1[Q2iK2i+Q2i+1K2i+1]⋅cos⁡(kθi)+[Q2iK2i+1−Q2i+1K2i]⋅sin⁡(kθi)Q'_m \cdot K'_n = \sum_{i=0}^{d/2-1} \left[ Q_{2i}K_{2i} + Q_{2i+1}K_{2i+1} \right] \cdot \cos(kθ_i) + \left[ Q_{2i}K_{2i+1} - Q_{2i+1}K_{2i} \right] \cdot \sin(kθ_i)QmKn=i=0d/21[Q2iK2i+Q2i+1K2i+1]cos(kθi)+[Q2iK2i+1Q2i+1K2i]sin(kθi)

可以发现,这个结果仅由相对位置k = m - nθ_i决定,与mn的绝对位置无关。这意味着:RoPE成功将注意力分数与相对位置绑定,解决了传统编码对绝对位置依赖的问题。

三、RoPE的优势

相比传统位置编码,RoPE的核心优势体现在:

  1. 精准建模相对位置
    注意力分数直接依赖于Token间的相对距离k,更符合自然语言中“上下文关系由相对位置决定”的特性(如“我”和“你”的关系,与它们在句子中的绝对位置无关,仅与距离有关)。

  2. 优异的长度外推性
    传统位置编码(如正弦余弦)在序列长度超过训练时的最大长度时,编码会出现“未见过的位置”,性能下降明显。而RoPE的旋转角度随位置线性增长(mθ_i),即使对于训练时未见过的超长序列(如m远大于训练最大长度),其相对位置k的编码仍能保持一致性,因此在长文本任务上泛化更好。

  3. 计算高效
    旋转矩阵的计算仅依赖于三角函数,无需额外存储可学习参数(相比可学习位置编码),且可与Token嵌入的计算并行,几乎不增加额外耗时。

  4. 与注意力机制自然融合
    传统编码通过“加性”注入位置信息(位置向量+Token嵌入),而RoPE直接作用于Query和Key,与注意力机制的内积计算深度耦合,更高效地将位置信息融入模型决策。

四、应用场景

RoPE目前已成为大语言模型的主流位置编码方案,尤其在需要处理长序列的场景中表现突出,例如:

  • 长文档理解(如法律条文、学术论文);
  • 多轮对话(对话历史随轮次增长);
  • 代码生成(代码文件通常较长)。

典型模型如LLaMA、GPT-NeoX、PaLM等均采用RoPE,其优异的长序列建模能力是这些模型性能的重要保障。

总结

旋转位置编码(RoPE)通过旋转矩阵对Query和Key进行变换,将注意力分数与Token间的相对位置绑定,解决了传统位置编码依赖绝对位置、长序列泛化差的问题。其数学原理基于二维旋转的高维扩展,兼具高效性和优异的建模能力,已成为现代大语言模型位置编码的首选方案。

http://www.dtcms.com/a/339270.html

相关文章:

  • 关于物理世界、感知世界、认知世界与符号世界统一信息结构的跨领域探索
  • 最近常问的70道vue相关面试题
  • 豆包1.5 Vision Lite 对比 GPT-5-min,谁更适合你?实测AI模型选型利器 | AIBase
  • 【Langchain系列七】Langchain+FastAPI(字符串输出与OpenAI规范流式输出)+FastGPT
  • 《若依》项目结构分析
  • 温故而知新 再看设计模式
  • 2025.8.19总结
  • 防抖技术(一)——OIS光学防抖技术详解
  • 块存储 对象存储 文件存储的区别与联系
  • plantsimulation知识点25.8.19 工件不在RGV中心怎么办?
  • 技术详解及案例汇总|JY-V620半导体RFID读写器在晶圆盒追踪中的使用
  • Aiseesoft iPhone Unlocker:轻松解决iPhone锁屏问题
  • 量子计算和超级计算机将彻底改变技术
  • 重置iPhone会删除所有内容吗? 详细回答
  • 【Cocos】2D关节组件
  • canoe发送接收报文不通到底是接口问题还是配置问题如何处理
  • Codeforces 斐波那契立方体
  • 【Pycharm虚拟环境中安装Homebrew,会到系统中去吗】
  • k8sday11服务发现(2/2)
  • 机器学习(决策树2)
  • CMake进阶: CMake Modules---简化CMake配置的利器
  • C# NX二次开发:操作按钮控件Button和标签控件Label详解
  • 机器学习之决策树:从原理到实战(附泰坦尼克号预测任务)
  • STM32学习笔记15-SPI通信软件控制
  • Ansible 大项目管理实践笔记:并行任务、角色管理与负载均衡架构部署
  • Effective C++ 条款51:编写new和delete时需固守常规
  • Pandas 入门到实践:核心数据结构与基础操作全解析(Day1 学习笔记)
  • 电源、电流及功率实测
  • Shader开发(十五)创建四边形
  • 【工作笔记】VMware安装 - 安装程序检测到主机启用了Hyper-V或Device/Credential Guard……提示解决方法