码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 你给我解释解释,什么TMD叫TMD attention(持续更新ing...)


    诸神缄默不语-个人CSDN博文目录

    开宗明义:attention就是一个加权机制,但是权重需要经过训练得到。感觉有些情况就是代替了concat然后过模型的场景,优势是更小、参数更少。
    本文介绍一些我自己整理的常见attention类型。

    本文不关注别的博文里已经写烂了的attention机制的重要性和直觉解释(又不是写论文还要写introduction)。
    multi-head attention也不在本文赘述。

    文章目录

    • 1. attention基础概念讲解
    • 2. attention结果计算方法
      • 2.1 KQV版
        • 2.1.1 Dot-Product Attention
          • 加权求和:Q是训练出来的context vector
          • 加权求和:权重是神经网络直接算出来的
          • 加权求和:QKV都是输入
          • 加权求和,local attention
          • 加权求和:Q是给定张量,K和V是输入
        • 2.1.2 Scaled Dot-Product Attention
        • 2.1.3 加性attention
      • 2.2 计算样本对之间的attention
      • 2.3 协同注意力
    • 3. Soft/Hard Attention
    • 4. Global/Local Attention
    • 其他本文撰写过程中使用到的参考资料

    1. attention基础概念讲解

    待补。

    2. attention结果计算方法

    2.1 KQV版

    K-key:输入,想从中找到权重高低的部分的那个东西
    Q-query:拿来计算key各部权重的对象
    KQ是拿来计算权重的,权重需要归一化(softmax)

    V-value:是那个被用来乘权重的对象(也就是输入)

    在这里插入图片描述

    2.1.1 Dot-Product Attention

    在这里插入图片描述

    加权求和:Q是训练出来的context vector

    K是通过输入通过MLP后得到,Q是通过训练得到的context vector,V是输入。相当于对输入进行一个加权求和

    1. HAN1:两层attention+GRU
      在这里插入图片描述

      在这里插入图片描述
      (图中h是单词表征, u i t u_it ui​t是单词表征经一层MLP后得到的隐表征, u w u_w uw​是context vector, α \alpha α是注意力权重,s是句子表征)
      在这里插入图片描述
      (这是第二层attention,差不多)

    2. LeSICiN2里面聚合法条表征:
      在这里插入图片描述

      (论文中给出一项优化方法,是将context vector改为用其他嵌入经线性转换后得到的结果。但是没给出ablation study)

    加权求和:权重是神经网络直接算出来的

    GNMT:
    在这里插入图片描述

    ConvS2S

    加权求和:QKV都是输入
    1. Transformer(实际用的是scaled版本,见2.1.2部分)
    2. RNN+翻译
      Q是decoder的上一步输出(第一步就是输入),KV是当前输入
    加权求和,local attention

    定义见第4节

    图场景:
    (QKV都是输入,但仅在样本之间存在的关系/边上概率化attention)

    1. GAT3:用每个节点的所有邻居节点(有自环,所以包括该节点本身)信息attentively聚合
      在这里插入图片描述
      a就是那个MLP(对每个节点对表征(向量对),得到标量)
      在这里插入图片描述
      将上两式合并:
      在这里插入图片描述
      加权求和:
      在这里插入图片描述
      (GAT的多头注意力机制,前几层是concat,最后一层是average:)
      在这里插入图片描述
      在这里插入图片描述
    2. MAGNN4:延续GAT思想。
      也是聚合两次,一次是将目标节点的metapath instances表征聚合为metapath表征:
      在这里插入图片描述
      (图中黄色是目标节点表征, a P \mathbf{a}_P aP​是metapath-specific的权重 (attention vector) )

      再将各个metapath表征聚合起来:
      在这里插入图片描述
      在这里插入图片描述
      (这个应该算是context vector系了,图中 q A \mathbf{q}_A qA​是节点类型的attention vector)
    加权求和:Q是给定张量,K和V是输入
    1. code-wise attention
      示例来自NeurJudge代码,query是用来从输入中提取相关信息的辅助矩阵(罪名表征,广播到输入的mini-batch上,维度是[batch_size,query_num,hidden_dim]),context是输入(维度是[batch_size,sent_len,hidden_dim])

      α是attention,query是G,输入是D
      在这里插入图片描述

      NeurJudge里这个输出([batch_size,1,hidden_dim])直接就用来预测了(原代码里分别用了2个query,得到两个attention输出,concat起来做预测)
    class Code_Wise_Attention(nn.Module):
        def __init__(self):
            super(Code_Wise_Attention, self).__init__()
        def forward(self,query,context):
            S = torch.bmm(context, query.transpose(1, 2))
            attention = torch.nn.functional.softmax(torch.max(S, 2)[0], dim=-1)
            context_vec = torch.bmm(attention.unsqueeze(1), context)
            return context_vec
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这个attention机制,在NeurJudge原文中给出了两篇参考文献,还没看:Bidirectional attention flow for machine comprehension和Multi-Interactive Attention Network for Fine-grained Feature Learning in CTR Prediction

    1. 还是来自NeurJudge,参考文献是Sentence Similarity Learning by Lexical Decomposition and Composition,逻辑也来源自这篇,是想要样本表征(d)通过罪名表征(c)分割为两个部分,分别与c平行与正交。这一部分计算attention就是为了将c投影到d上:公式5是为了计算c和d之间token的点积相似度,公式6是用softmax来从c中选择与d最相似的token(softmax相当于是软版的max)
      在这里插入图片描述
      在代码里考虑了mask的情况,用了2个mask(一个在softmax之前,一个在×V之前)。两个输入矩阵和返回值的维度都是[batch_size,sent_len,hidden_dim]
    class Mask_Attention(nn.Module):
        def __init__(self):
            super(Mask_Attention, self).__init__()
        def forward(self, query, context):
            attention = torch.bmm(context, query.transpose(1, 2))
            mask = attention.new(attention.size()).zero_()
            mask[:,:,:] = -np.inf
            attention_mask = torch.where(attention==0, mask, attention)
            attention_mask = torch.nn.functional.softmax(attention_mask, dim=-1)
            mask_zero = attention.new(attention.size()).zero_()
            final_attention = torch.where(attention_mask!=attention_mask, mask_zero, attention_mask)
            context_vec = torch.bmm(final_attention, query)
            return context_vec
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.1.2 Scaled Dot-Product Attention

    解决了dot-product attention随维度增长而剧增、导致softmax取值集中、梯度变小的问题(其实我没看懂这是为啥)

    1. Transformer5
      在这里插入图片描述
      在这里插入图片描述
      self-attention: KQV都由输入通过线性转换运算得到。这种做法可以用来计算出一组对象内部之间的关系。在LEMM6中这方面可能会体现得更全面:在这里插入图片描述
      decoder中则是KV通过encoder得到,Q通过decoder上一层输出得到。

      使用self-attention的工作:GL-GIN: Fast and Accurate Non-Autoregressive Model for Joint Multiple Intent Detection and Slot Filling

    2.1.3 加性attention

    在这里插入图片描述

    2.2 计算样本对之间的attention

    1. DVQA7:这篇论文既没有给公式,也没有给代码,只能看图了。但是看图感觉还挺清晰的。
      图中attention distribution map得到样本对之间的attention(每一个方块里面是一个计算attention的模型)
      DAN:在triplet loss部分直接使用attention之间的距离,classification loss部分则用类似加权求和的方式利用注attention
      在这里插入图片描述
      DCN:将attention转化为上下文结合进了原样本表征中,直接实现分类任务
      在这里插入图片描述
    2. CTM8:与DVQA做法和在DAN中的用处都类似,直接给出了公式:
      在这里插入图片描述

    2.3 协同注意力

    融合法律文本结构信息的刑事案件判决预测(下载自知网)

    大致来说是输入两个矩阵(以下文本中是“法律文本”和“案情描述”),分别得到两个矩阵与对方交互后得到的结果,于是实现了各矩阵获得对方矩阵信息的效果

    在这里插入图片描述

    3. Soft/Hard Attention

    soft attention:传统attention,可被嵌入到模型中去进行训练并传播梯度

    hard attention:不计算所有输出,依据概率对encoder的输出采样,在反向传播时需采用蒙特卡洛进行梯度估计

    4. Global/Local Attention

    global attention:传统attention,对所有encoder输出进行计算

    local attention:介于soft和hard之间,会预测一个位置并选取一个窗口进行计算

    其他本文撰写过程中使用到的参考资料

    1. Transformer 模型详解
    2. 深度学习attention机制中的Q,K,V分别是从哪来的? - 知乎:只看了几个回答,感觉挺多讲得不错,待继续看
    3. NLP中的Attention原理和源码解析 - 知乎
    4. 还没看
      1. 目前主流的attention方法都有哪些? - 知乎
      2. 神经网络机器翻译Neural Machine Translation(2): Attention Mechanism_基于神经网络的机器翻译英文_clear-的博客-CSDN博客

    1. Hierarchical Attention Networks for Document Classification ↩︎

    2. LeSICiN: A Heterogeneous Graph-based Approach for Automatic Legal Statute Identification from Indian Legal Documents
      可参考我写的博文:Re6:读论文 LeSICiN: A Heterogeneous Graph-based Approach for Automatic Legal Statute Identification fro ↩︎

    3. Graph Attention Networks ↩︎

    4. MAGNN: Metapath Aggregated Graph Neural Network for Heterogeneous Graph Embedding ↩︎

    5. Attention Is All You Need ↩︎

    6. An Element-aware Multi-representation Model for Law Article Prediction ↩︎

    7. Differential Attention for Visual Question Answering ↩︎

    8. Augmenting Legal Judgment Prediction with Contrastive Case Relations ↩︎

  • 相关阅读:
    二十五、MySQL事务的四大特性和常见的并发事务问题
    从 Delta 2.0 开始聊聊我们需要怎样的数据湖
    力扣面试经典150题详细解析
    桶装水订水送水小程序开发搭建;
    自动化测试何时切入?为何选择selenium做UI自动化?
    采集SEO方法-添加链接段落
    MySQL——数据的删除以及MySQL中的约束
    智慧养殖物联网远程管控系统平台
    【zookeeper】zookeeper监控指标查看
    2022年9月及10月
  • 原文地址:https://blog.csdn.net/PolarisRisingWar/article/details/127996758
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号