小红书 算法一面 七

  1. encoder中的self-attention和decoder中的self-attention有什么区别

Transformer 编码器(Encoder)的**多头自注意力(Multi-Head Self-Attention)**与解码器(Decoder)的**掩码多头自注意力(Masked Multi-Head Self-Attention)**,核心差异源于两者的任务目标不同:**Encoder 负责"理解输入序列的全局语义",需双向关注所有 token;Decoder 负责"生成连贯的输出序列",需单向关注已生成的 token,防止泄露未来信息**。

两者的本质区别集中在**注意力掩码机制**,并由此衍生出注意力范围、输入特性、作用目标等一系列差异。

一、核心定义回顾

先明确 Transformer 中两类自注意力的定位:

  1. **Encoder 自注意力**:是 Encoder 块的第一个子层,输入为 **Encoder 自身的词嵌入+位置编码**,作用是捕捉输入序列的全局依赖关系。

  2. **Decoder 自注意力**:是 Decoder 块的第一个子层,输入为 **Decoder 自身的词嵌入+位置编码**,作用是捕捉已生成输出序列的上下文依赖关系;Decoder 块还有第二个注意力层(Encoder-Decoder Attention),这是跨注意力而非自注意力,需注意区分。

二、关键区别对比

| 对比维度 | **Encoder 多头自注意力** | **Decoder 掩码多头自注意力** |

|----------|--------------------------|-------------------------------|

| **注意力范围** | **双向(Bidirectional)**:任意 token 可以关注序列中**所有位置**的 token | **单向(Unidirectional/Causal)**:第 t 个 token 只能关注**第 1~t 个** token,无法关注 t+1 及以后的 token |

| **掩码类型** | 无掩码(或仅 padding mask):仅屏蔽 padding 填充的无效 token | **因果掩码(Causal Mask)+ padding mask**:<br>1. 因果掩码:强制 token 只能看前文,防止"未来信息泄露"<br>2. padding mask:屏蔽输出序列的 padding token |

| **输入特性** | 输入序列是**固定长度的完整序列**,训练和推理时均为并行输入 | 训练时输入是完整的目标序列(并行计算),推理时是**逐token增量生成**(从 bos 到 eos) |

| **核心作用** | 建模输入序列的**全局语义关联**,例如在翻译任务中,理解"我爱中国"中"我""爱""中国"的依存关系 | 建模输出序列的**上下文连贯性**,例如在翻译任务中,生成" I love China"时,生成"love"需依赖前文的"I",生成"China"需依赖"I love" |

| **适用任务** | 自然语言理解(NLU):如文本分类、命名实体识别、语义理解 | 自然语言生成(NLG):如机器翻译、文本摘要、对话生成 |

| **注意力分数计算** | Attention(Q,K,V) = \\text{softmax}\\left(\\frac{QK\^T}{\\sqrt{d_k}} + M_{\\text{pad}}\\right)V<br>M_{\\text{pad}} 仅屏蔽 padding 位置 | Attention(Q,K,V) = \\text{softmax}\\left(\\frac{QK\^T}{\\sqrt{d_k}} + M_{\\text{causal}} + M_{\\text{pad}}\\right)V<br>M_{\\text{causal}} 是下三角掩码,上三角元素设为 -\\infty |

三、核心差异的根源:因果掩码机制

两类自注意力的本质区别是**是否引入因果掩码**,我们通过具体原理和实现来理解:

3.1 因果掩码的作用原理

在 Decoder 中,生成任务要求"**根据前文生成下一个 token**",如果允许 token 关注未来的 token,模型就会"作弊"(比如生成第 3 个 token 时已经看到了第 5 个 token),导致推理时无法正常生成序列。

因果掩码是一个 **下三角矩阵**(对角线及下方为 0,上方为 -\\infty),假设序列长度为 4,掩码矩阵 M_{\\text{causal}} 如下:

M_{\\text{causal}} = \\begin{bmatrix} 0 \& -\\infty \& -\\infty \& -\\infty \\\\ 0 \& 0 \& -\\infty \& -\\infty \\\\ 0 \& 0 \& 0 \& -\\infty \\\\ 0 \& 0 \& 0 \& 0 \\end{bmatrix}

将该掩码加到注意力分数矩阵 QK\^T/\\sqrt{d_k} 上后,上三角区域的分数会变成 -\\infty,经过 `softmax` 后权重为 **0**,从而强制 token 只能关注前文。

3.2 实现层面的差异(PyTorch 示例)

我们通过代码片段直观展示两者的掩码差异:

```python

import torch

import torch.nn.functional as F

模拟 Q, K, V:batch_size, n_heads, seq_len, d_k

batch_size, n_heads, seq_len, d_k = 2, 8, 4, 64

q = k = v = torch.randn(batch_size, n_heads, seq_len, d_k)

-------------------------- Encoder 自注意力:仅 padding mask --------------------------

假设 padding_mask:batch_size, 1, 1, seq_len,1 表示有效 token,0 表示 padding

padding_mask = torch.tensor(\[\[\[1,1,0,0]], \[\[1,1,1,0]]]) # batch 1 的 seq 3-4 是 padding,batch 2 的 seq4 是 padding

padding_mask = (1 - padding_mask) * -10000.0 # padding 位置设为 -1e4

计算注意力分数:无因果掩码

attn_scores_encoder = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))

attn_scores_encoder += padding_mask # 仅加 padding mask

attn_weights_encoder = F.softmax(attn_scores_encoder, dim=-1)

-------------------------- Decoder 自注意力:因果掩码 + padding mask --------------------------

1. 生成因果掩码:1, 1, seq_len, seq_len

causal_mask = torch.tril(torch.ones(1, 1, seq_len, seq_len))

causal_mask = (1 - causal_mask) * -10000.0 # 上三角设为 -1e4

2. 叠加因果掩码和 padding mask

attn_scores_decoder = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))

attn_scores_decoder += causal_mask + padding_mask # 加两种掩码

attn_weights_decoder = F.softmax(attn_scores_decoder, dim=-1)

print("Encoder 注意力权重形状:", attn_weights_encoder.shape) # 2,8,4,4

print("Decoder 注意力权重上三角是否为 0:", (attn_weights_decoder0,0,:,:.triu(diagonal=1) == 0).all()) # True

```

四、补充:Decoder 的 Encoder-Decoder Attention

需要特别注意:Decoder 块包含**两个注意力层**,容易混淆:

  1. **掩码自注意力**:输入是 Decoder 自身的序列(目标序列),作用是建模目标序列的内部依赖。

  2. **Encoder-Decoder Attention**:输入的 Q 来自 Decoder 掩码自注意力的输出,K, V 来自 Encoder 的输出,作用是**关联源序列和目标序列**(比如翻译任务中,让目标词对齐源词)。

**Encoder-Decoder Attention 不是自注意力**(因为 QK,V 来自不同的序列),而我们讨论的核心是两类**自注意力**的区别。

五、总结

Encoder 自注意力和 Decoder 自注意力的核心区别,是**是否引入因果掩码**导致的**注意力范围差异**:

  • Encoder 自注意力是**双向的**,为了"理解全局",适配自然语言理解任务;

  • Decoder 自注意力是**单向的**,为了"生成连贯序列",适配自然语言生成任务。

这种设计完全服务于 Transformer 的"编码-解码"架构目标:Encoder 将输入序列编码为语义向量,Decoder 基于该向量和已生成序列,逐token生成目标序列。

  1. DeepSeek R1有看过吗? 介绍一下 最新64页补丁

DeepSeek R1:推理大模型的革命性突破与技术解析

DeepSeek R1 是幻方量化旗下深度求索(DeepSeek)于 **2025年1月20日** 发布的**专注推理能力**的大型语言模型,性能对标 OpenAI o1 系列,在数学、代码、自然语言推理等任务上表现突出。其核心创新在于**纯强化学习训练路径**与**MoE架构优化**,并以 MIT 协议完全开源,成为开源社区中推理能力最强的模型之一。

一、核心定位与发布背景

DeepSeek R1 诞生于大模型"推理能力竞赛"的关键时期,目标是解决传统大模型在**复杂逻辑推理、数学证明、代码生成**等任务上的短板。其发布具有三个里程碑意义:

  1. 首次验证**纯强化学习(无监督微调SFT)** 可训练出顶级推理能力模型

  2. 以 MoE 架构实现**671B总参数、37B活跃参数**的高效推理,平衡性能与算力成本

  3. 采用**MIT开源协议**,提供从1.5B到70B的全系列蒸馏模型,降低推理门槛

二、核心技术架构与创新

2.1 模型架构:MoE+MLA的高效组合

DeepSeek R1 基于 DeepSeek-V3 基座,采用创新混合架构:

| 架构参数 | 核心细节 |

|----------|----------|

| **总参数** | 671B(MoE架构),活跃参数37B/Token |

| **层数** | 61层Transformer,前3层为**Multi-Head Latent Attention (MLA)** 层,其余为标准注意力层 |

| **专家数量** | 128个专家,每Token激活2个专家,激活率约1.56% |

| **上下文窗口** | 128K tokens,支持超长文本推理与分析 |

| **归一化** | 采用 RMSNorm 替代 LayerNorm,提升训练效率与稳定性 |

**MLA层创新**:前3层引入潜在注意力机制,将输入映射到低维潜在空间进行注意力计算,大幅降低计算复杂度,同时保留全局语义信息。

2.2 训练范式:纯强化学习的推理锻造

DeepSeek R1 采用**四阶段训练流程**,核心是**无SFT的强化学习路径**:

  1. **冷启动(Cold Start)**:用少量高质量CoT(思维链)数据预训练,使模型学会标准答案格式,解决R1-Zero的可读性问题

  2. **RL锻造(GRPO算法)**:使用**GRPO(Generalized Relative Policy Optimization)** 替代PPO,在多种推理路径中自主选择最优策略,强化反思与验证能力

  3. **数据反哺**:模型自生成高质量推理数据,减少对人工标注的依赖,形成"推理-数据-推理"的闭环

  4. **人机融合**:引入人类偏好奖励模型,优化输出的自然性与可读性,解决R1-Zero的重复、语言混合问题

**关键突破**:R1-Zero(无冷启动)验证了纯RL可实现强大推理能力,在AIME 2024竞赛中pass1指标从15.6%提升至71.0%。

2.3 推理机制:反思+验证的深度思考模式

DeepSeek R1 的核心优势是**模拟人类推理过程**,而非直接输出答案:

  • **多路径探索**:对同一问题生成多种推理路径,通过价值函数选择最优解

  • **自我验证**:对推理结果进行交叉检查,发现矛盾时回溯修正

  • **超长思维链**:支持数万字的思维链长度,在数学证明、复杂代码生成中展现严谨逻辑

  • **幻觉抑制**:通过强化学习减少无根据断言,改写、摘要等场景幻觉率降低45%-50%

三、两大核心模型版本对比

DeepSeek R1 系列包含两个核心版本,定位与特性差异显著:

| 版本 | 训练特点 | 优势 | 不足 | 适用场景 |

|------|----------|------|------|----------|

| **R1-Zero** | 纯RL训练,无SFT,无冷启动 | 推理能力强,反思验证突出 | 重复输出、可读性差、语言混合 | 研究场景,探索纯RL极限 |

| **R1** | 冷启动+RL训练 | 平衡推理能力与可读性,幻觉率低 | 训练成本略高 | 生产环境,实际应用部署 |

四、性能表现:对标OpenAI o1的推理能力

DeepSeek R1 在多类推理任务中表现优异,部分指标超越GPT-4o、Claude 3.5:

4.1 数学推理能力

  • 在AIME(美国数学邀请赛)中,pass1指标达71.0%,接近人类金牌水平

  • MATH数据集上得分89.2%,GSM8K得分98.7%,远超传统大模型

  • 复杂数学证明中,思维链长度可达23K tokens,逻辑严谨性显著提升

4.2 代码生成能力

  • HumanEval测试集得分92.3%,MBPP得分94.1%,支持多语言代码生成与复杂项目开发

  • 可自主发现代码错误并修复,实现"编写-测试-调试"的全流程自动化

4.3 自然语言推理

  • 在BBH、MMLU等推理基准上表现优异,特别是在需要多步骤推理的任务中

  • 幻觉率在改写、摘要等场景减少45%-50%,输出可靠性大幅提升

五、开源生态与应用场景

5.1 开源资源与部署选项

DeepSeek R1 提供完整的开源生态,降低使用门槛:

  1. **开源模型**:R1-Zero、R1及6个蒸馏版本(1.5B、2B、7B、8B、14B、70B),均采用MIT协议

  2. **推理工具**:支持Ollama、Hugging Face等主流框架,可快速部署本地推理

  3. **API服务**:提供低成本API,输入4元/百万tokens,输出16元/百万tokens,缓存命中低至1元/百万tokens

5.2 典型应用场景

  1. **数学科研**:自动定理证明、复杂公式推导、数学竞赛辅助

  2. **软件工程**:代码生成、自动调试、架构设计、技术文档撰写

  3. **金融分析**:量化策略开发、风险评估、财务报表深度解读

  4. **法律领域**:合同审查、法律条文分析、判例推理

  5. **教育领域**:智能辅导、个性化习题生成、解题思路分析

六、总结

DeepSeek R1 的核心价值在于:

  1. **推理范式革新**:证明纯强化学习可训练出顶级推理能力,为大模型训练开辟新路径

  2. **性能与效率平衡**:MoE架构使671B模型以37B活跃参数实现高效推理,大幅降低算力成本

  3. **开源普惠**:MIT协议+全系列蒸馏模型,推动推理大模型在全球开发者社区的普及

相关推荐
京东云开发者2 小时前
让AI真正参与工作!JoyDesk已上线京东云
llm·agent
阿图灵2 小时前
Seq2Seq Transformer 中英翻译实战:从 GRU 到 Transformer,BLEU 0.225 → 0.307
pytorch·深度学习·gru·transformer·机器翻译·seq2seq
番茄不是西红柿kk3 小时前
什么是Token?
人工智能·ai·chatgpt·agent·token·codex·deepseek
杀生丸学AI4 小时前
【世界模型】Lyra 2.0:可探索的生成式3D世界(NVIDIA)
人工智能·深度学习·3d·数据挖掘·transformer·世界模型·高斯泼溅
殷紫川4 小时前
DeepSeek Harness :当"一切皆插件"成为 Agent 的新底座
openai·ai编程·deepseek
程序猿DD5 小时前
OctaFuse Gateway 2.6.0:完善 Vertex AI 鉴权、图片计费与日常调试
llm·agent
AC赳赳老秦6 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw
用户458562068237 小时前
DeepSeek-Harness部署踩坑
llm
敢敢是只喵i8 小时前
15 万+ Star 的 DeepSeek Harness,让它接入真实业务系统直接接管后台
架构·开源·deepseek