lijn14
创建工程
c1a46f7
Raw
History Blame
2.73 kB
"""
Transformer Decoder 模块 — Person B 负责实现
包含:
- TransformerDecoderLayer: 单层解码器
- TransformerDecoder: 多层解码器堆叠
架构 (Pre-LayerNorm):
x → LN → Masked Self-Attention → Residual
→ LN → Cross-Attention → Residual
→ LN → FFN → Residual
"""
from __future__ import annotations
import torch
import torch.nn as nn
from typing import Optional
class TransformerDecoderLayer(nn.Module):
"""
单层 Transformer Decoder。
TODO [Person B]: 实现以下组件:
1. Masked Self-Attention (因果掩码,防止看到未来)
2. Cross-Attention (decoder 查询 encoder 输出)
3. Feed-Forward Network
4. 三个 LayerNorm
5. Residual connections + Dropout
"""
def __init__(
self,
d_model: int = 512,
nhead: int = 8,
dim_feedforward: int = 2048,
dropout: float = 0.1,
activation: str = "gelu",
use_flash_attention: bool = True,
use_rotary_embedding: bool = True,
pre_norm: bool = True,
):
super().__init__()
raise NotImplementedError("TODO: Person B 实现 TransformerDecoderLayer.__init__")
def forward(
self,
tgt: torch.Tensor, # [B, T, D]
memory: torch.Tensor, # [B, S, D] (encoder output)
tgt_mask: Optional[torch.Tensor] = None, # [T, T] causal mask
memory_key_padding_mask: Optional[torch.BoolTensor] = None, # [B, S]
tgt_key_padding_mask: Optional[torch.BoolTensor] = None, # [B, T]
) -> torch.Tensor:
"""
TODO [Person B]: Pre-LayerNorm 前向传播:
1. Masked Self-Attention with causal mask
2. Cross-Attention with encoder output
3. FFN
每步都有 residual connection 和 dropout
"""
raise NotImplementedError("TODO: Person B 实现 TransformerDecoderLayer.forward")
class TransformerDecoder(nn.Module):
"""
多层 Transformer Decoder。
TODO [Person B]:
1. 堆叠 N 个 TransformerDecoderLayer
2. 最终加一个 LayerNorm
"""
def __init__(self, decoder_layer: TransformerDecoderLayer, num_layers: int):
super().__init__()
raise NotImplementedError("TODO: Person B 实现 TransformerDecoder.__init__")
def forward(
self,
tgt: torch.Tensor,
memory: torch.Tensor,
tgt_mask: Optional[torch.Tensor] = None,
memory_key_padding_mask: Optional[torch.BoolTensor] = None,
tgt_key_padding_mask: Optional[torch.BoolTensor] = None,
) -> torch.Tensor:
raise NotImplementedError("TODO: Person B 实现 TransformerDecoder.forward")