| """ |
| Transformer Encoder 模块 — Person B 负责实现 |
| |
| 包含: |
| - TransformerEncoderLayer: 单层编码器 |
| - TransformerEncoder: 多层编码器堆叠 |
| |
| 架构 (Pre-LayerNorm): |
| x → LayerNorm → MultiHeadAttention → Residual → LayerNorm → FFN → Residual |
| """ |
|
|
| from __future__ import annotations |
|
|
| import torch |
| import torch.nn as nn |
| from typing import Optional |
|
|
|
|
| class TransformerEncoderLayer(nn.Module): |
| """ |
| 单层 Transformer Encoder。 |
| |
| TODO [Person B]: 实现以下组件: |
| 1. Self-Attention: MultiHeadAttention (支持 Flash Attention) |
| 2. Feed-Forward Network: Linear → Activation → Dropout → Linear |
| 3. 两个 LayerNorm |
| 4. Residual connections |
| 5. Dropout |
| |
| 注意: 使用 Pre-LayerNorm 架构 (先 norm 再 attention/ffn) |
| """ |
|
|
| 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 实现 TransformerEncoderLayer.__init__") |
|
|
| def forward( |
| self, |
| src: torch.Tensor, |
| src_key_padding_mask: Optional[torch.BoolTensor] = None, |
| ) -> torch.Tensor: |
| """ |
| TODO [Person B]: Pre-LayerNorm 前向传播: |
| 1. residual = src |
| 2. src = layer_norm_1(src) |
| 3. src = self_attention(src, src, src, key_padding_mask=src_key_padding_mask) |
| 4. src = residual + dropout(src) |
| 5. residual = src |
| 6. src = layer_norm_2(src) |
| 7. src = ffn(src) |
| 8. src = residual + dropout(src) |
| """ |
| raise NotImplementedError("TODO: Person B 实现 TransformerEncoderLayer.forward") |
|
|
|
|
| class TransformerEncoder(nn.Module): |
| """ |
| 多层 Transformer Encoder。 |
| |
| TODO [Person B]: |
| 1. 堆叠 N 个 TransformerEncoderLayer |
| 2. 最终加一个 LayerNorm (Pre-Norm 架构需要) |
| """ |
|
|
| def __init__(self, encoder_layer: TransformerEncoderLayer, num_layers: int): |
| super().__init__() |
| raise NotImplementedError("TODO: Person B 实现 TransformerEncoder.__init__") |
|
|
| def forward( |
| self, |
| src: torch.Tensor, |
| src_key_padding_mask: Optional[torch.BoolTensor] = None, |
| ) -> torch.Tensor: |
| raise NotImplementedError("TODO: Person B 实现 TransformerEncoder.forward") |
|
|