# AiLab **Repository Path**: sancode/ai-lab ## Basic Information - **Project Name**: AiLab - **Description**: AiLab 个人自定义训练的模型 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-30 - **Last Updated**: 2025-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 环境准备 ```sh uv venv --python 3.10 uv sync ``` 生成模型 ```shell python utils/modular_model_converter.py ``` # 从0到1训练一个大模型 ## 因果归因注意利 ## 注意力权重 1. 通过 torch.matmul(query, key_states.transpose(2, 3)) * scaling 计算原始注意力分数(query 与 key 的相似度),其中scaling是缩放因子(通常为1/sqrt(d_k),用于避免分数过大导致 softmax 梯度消失)。 2. 若存在attention_mask(如掩码填充 token 或因果掩码),则将掩码值加到原始分数上(通常掩码值为负无穷,确保被掩码位置在 softmax 后权重为 0)。 3. 对处理后的分数应用softmax(dim=-1),得到归一化的注意力权重(每行和为 1), 4. 通过 dropout 进一步正则化。 ## attn_output(注意力输出) 1. 通过torch.matmul(attn_weights, value_states)计算 2. 最后通过 transpose(1, 2).contiguous() 调整维度顺序,确保输出格式与输入 query 的维度兼容(通常为[batch_size, seq_len, hidden_dim])。 意义与用途: 意义:融合了输入序列中所有位置的信息(通过注意力权重加权),是注意力机制对输入的 “上下文感知” 表示。每个位置的输出不仅包含自身信息,还包含了对其他相关位置的信息聚合。 总结 attn_weights是注意力机制的 “分配方案”,决定了输入序列中不同位置的信息如何被关注。 attn_output是基于该 “分配方案” 对 value 信息的聚合结果,是注意力机制的最终输出,体现了上下文融合后的特征。 ## 参数计算 要计算这个Transformer模型的参数量,我们需要计算模型各部分的参数并求和。根据给出的配置,我们可以按以下步骤计算: ### 参数计算 1. 嵌入层(Embedding)