小红书 算法一面 七

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

  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_decoder[0,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 不是自注意力**(因为 $Q$ 和 $K,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协议+全系列蒸馏模型,推动推理大模型在全球开发者社区的普及

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值