当前位置: 首页 > news >正文

attention 的mask 的简单实现

  • Causal Mask(上三角):挡住未来位置,自回归生成必须遵守时序;
  • Padding Mask:挡住PAD 占位符,过滤无效填充位;
  • 合并规则:
     final_mask = causal_mask | pad_mask 
    只要其中一个掩码标记为 True(需要遮挡),该位置就统一填充 -1e9
  • import torch# 1. 模拟批次输入,0=PAD
    input_ids = torch.tensor([[1,2,3,0,0], [4,5,0,0,0]])
    batch, seq_len = input_ids.shape# ----------------------
    # 第一步:生成 Padding Mask
    # ----------------------
    pad_mask = (input_ids == 0)          # [B, L]
    # 扩维到 [B, L, L],适配注意力分数矩阵 [B, L, L]
    pad_mask = pad_mask.unsqueeze(1).repeat(1, seq_len, 1)  # [2,5,5]# ----------------------
    # 第二步:生成 Causal 前瞻掩码(上三角)
    # ----------------------
    # [L, L] 上三角,diagonal=1 表示主对角线右侧全部遮挡
    causal_mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1).bool()  # [5,5]# ----------------------
    # 第三步:合并掩码 逻辑或
    # ----------------------
    # 利用广播:[B,L,L] | [L,L] → [B,L,L]
    full_mask = pad_mask | causal_mask# ----------------------
    # 第四步:作用到注意力分数
    # ----------------------
    attn_score = torch.randn(batch, seq_len, seq_len)  # 模拟注意力分数 [B,L,L]
    attn_score = attn_score.masked_fill(full_mask, -1e9)
    attn_weight = torch.softmax(attn_score, dim=-1)print(attn_weight)
    

      

    三、逐位置解释遮挡逻辑

     
    以序列单条样本 [1,2,3,0,0](后两位是 PAD)为例:
     
    1. 未来位置(j > i):被 causal_mask 挡住;
    2. PAD 位置(原序列为 0):被 pad_mask 挡住;
    3. 既是未来又是 PAD:依然遮挡(或逻辑天然覆盖);
    4. 只有前文有效 token:正常计算注意力。
     

     

    四、分模块使用总结

     
    1. Transformer Encoder / BERT 类双向模型
       
      只需要 Padding Mask,不用 Causal Mask,因为允许双向互看。
       
    2. Transformer Decoder / GPT/LLaMA 类自回归模型
       
      必须两个掩码混合使用,流程固定:
       
      生成 Causal Mask → 生成 Padding Mask → 逻辑或合并 → 作用于注意力分数。
       
     

     

    五、补充:适配多头注意力的小改动

     
    如果是多头注意力(形状 [B, heads, L, L]),只需提前把两个掩码都扩出 head 维度再合并:

  

n_heads = 8
# Padding Mask 扩维 [B, heads, L, L]
pad_mask = pad_mask.unsqueeze(1).repeat(1, n_heads, 1, 1)
# Causal Mask 扩维 [1, heads, L, L] 广播使用
causal_mask = causal_mask.unsqueeze(0).unsqueeze(0)
# 合并
full_mask = pad_mask | causal_mask

  

http://www.jsqmd.com/news/928829/

相关文章:

  • 从Input.GetAxis到手感调优:详解Unity中移动与旋转的平滑处理与参数配置
  • ChatGPT核心原理、高阶应用与提示词实战指南
  • 2026四川绵阳江油手机店哪家好?二手手机、手机分期去哪家? - 博客万
  • 如何平衡CSP-J备赛与校内学习
  • 变更管理在软考中级系统集成项目管理工程师考试中占多少分 - 众智商学院官方
  • 【Gemini推送通知优化实战指南】:20年专家亲授5大性能瓶颈与98%送达率提升方案
  • 3步解锁经典游戏潜能:WarcraftHelper魔兽争霸III终极优化方案
  • 全国自闭症全托机构实力排行:合规与服务质量测评 - 奔跑123
  • 从ChatGPT-5到AGI:技术演进、行业重塑与个人应对指南
  • 2026沃尔玛购物卡回收避坑|别再低价贱卖!4大平台实测,差距太大了 - 资讯快报
  • 长沙二手手表回收攻略,实地走访多家门店,教你选对靠谱渠道 - 合扬奢侈品交易中心
  • MySQL 事务管理全解:从 ACID 特性、隔离级别到 MVCC 底层原理
  • MEMS 加速度计耳机敲击算法
  • 热点警示:毕业论文抽查力度加大,这8款AI毕业论文工具成毕业生“刚需” - 逢君学术-AI论文写作
  • 比特币的浩克体质:能源消耗、安全机制与AI量子计算博弈
  • 国内专业自闭症全托机构质量实测排行 核心维度对比 - 奔跑123
  • Web应用技术第二次作业
  • GetQzonehistory专业实践:掌握高效QQ空间说说备份与数据归档技巧
  • 抖音视频如何保存到相册:全场景操作方法与保存失败原因解决方案 - 科技热点发布
  • 2026年6月沈阳手表回收推荐:添价收综合服务稳定性更强 - 薛定谔的梨花猫
  • Docker和Kubernetes(K8s)的区别和联系
  • 智能客服系统进入工单管理,企业服务开始重视风险分层
  • Java变量:从“盒子”比喻到代码实战
  • 留学生无实习经验求职指南:结构性困境与系统化破局
  • 1 ROS和ROS2是什么?--读后感
  • 2026年黑龙江/哈尔滨本地门窗最新推荐榜单:厨房隔断、低碳环保、防寒保暖、防风抗压、恒温节能、极窄推拉门窗源头生产基地与工装配套之选 - 品牌企业推荐师(官方)
  • 2026 年郸城知名装修公司口碑榜,本地业主实测靠谱推荐! - 博客万
  • 2026年天津装修公司哪家口碑最好?深度测评:如何匹配最佳家装方案 - 资讯快报
  • 终极Gofile下载指南:3分钟掌握高效文件获取技巧
  • 视频硬字幕提取难题终结者:87种语言本地OCR全攻略