Transformer 可解释性论文整理(超级详细)

Transformer 可解释性论文整理

前段时间想进一步的了解transformer的工作原理,于是找到了几篇可解释性的文章进行阅读,发现了许多比较有趣的现象和结论,对每篇文章都有自己的深度思考和理解,在此记录,欢迎交流。

1. Visualizing and Understanding Patch Interactions in Vision Transformer

TNNLS 2023

论文链接:https://arxiv.dosf.top/pdf/2203.05922.pdf

解决了什么问题?

一种新的可解释的可视化方法来分析和解释Transformer patch之间的关键注意相互作用。

动机:

动机就是想分析transformer的各个patch之间到底是如何交互的,通过统计分析得到了一些结论,同时进行了结构和方法的设计,提出了一种精确地patch筛选的方法。具体来说,是通过忽略交互区域边界外的patch来限制每个patch的交互范围。相当于限制了每个patch的建模范围,是很大的一点创新。
在这里插入图片描述

方法:

1.首先对patch-wise attention进行可视化、数值分析等方法量化patch之间的交互;
2.基于patch之间的交互关系计算出多层注意力矩阵方差 u(k x n x n)与对应的head方差U,U为某patch对应的注意力区域;
3.根据注意力区域,对重要程度进行从高往低的排序,计算当前patch的responsive field。
4.将当前patch的responsive field作为patch交互区域,通过分析得到的Window区域作为监督信号设计了一个Window-free Transformer(WinfT)模型。
在这里插入图片描述

数据集:

Imagenet 和细粒度的 CUB dataset

结论/启发:

得到的一些比较有意思的结论:
结论1:各个block的patch之间的注意力是如何变化的:即使是语义上不相关的patch之间(outer-object)也存在持续的比较低的相关性。语义上相关的patch(inner-object)之间一直保持比较高的相关性,但是不同的block之间变化的比较明显,方差比较大。
结论2:flexible and dynamic receptive field of ViT:对于一个patch而言,每一层的注意力矩阵都是不一样的,也就是说与当前的patch最相关的patch是在不断地变化的,因此是灵活的而且动态的感受野。
结论3:当前patch的交互区域大部分在其周边区域。所以说位置还是很重要的,但是transformer仍然具有cnn所不具有的全局交互的能力。
结论4:实验结果证明了每个patch的感受野都是相互独立的而且是数据依赖的(不同的数据感受野不一样,得到的自适应的感受野是根据数据集的特点得到的)。同时发现原始的ViT的全局注意力并不能带来性能的提升,我的理解是原始的 ViT 中包含了很多冗余的计算,导致性能的下降。实验结果证明了之前的方法 swim transformer 和 DynamicViT 都是将原始的 ViT的attention交互区域变小,从而提升了 ViT 的模型性能。
结论5:作者认为背景的patch越少越好。
结论6:有趣的是,在拟合合适的注意窗口后,32 × 32 patch大小的 ViT模型与16 × 16 patch大小的设置可以达到相似的性能(84.33% vs. 84.62%)。更大的补丁尺寸和更少的补丁数量可以大大降低自关注操作的计算复杂度。也就是说,使用大的patch依然可以达到很好的的分类结果。并不是patch划分的越小准确率越能高出来很多。(我认为这种发现局限于分类任务)

更多细节:

Adaptive Window Design 和Responsive Field 和 Indiscriminative Patch都是建立在原始的 ViT 的基础上的,只有对原始的ViT的量化的分析才能将本文的方法得以应用。

而且本文的方法是数据依赖的,也就是说如果是新的数据,需要重新对各个patch之间的交互进行统计分析,才能应用本文的方法。所以训练过程事比较繁琐的。

但是本文存在的最大优势就是推理阶段不需要这些统计的操作,可以直接进行复杂度和计算量较低的Window free Transformer的推理。

2. Self-Attention Attribution: Interpreting Information Interactions Inside Transformer

AAAI2021

论文链接:https://so3.cljtscd.com/scholar?hl=en&as_sdt=0%2C5&q=Self-Attention+Attribution%3A+Interpreting+Information+Interactions+Inside+Transformer&btnG=

解决了什么问题?

提出自注意力归因来解释Transformer中的信息交互。

动机:

动机就是想找到更加准确的方式解释Transformer信息交互
在这里插入图片描述

方法:

相比于过去的研究,本文提出了一种自注意力机制的归因算法,可对transformer内部的信息交互进行可解释性的说明。通过该方法,模型可识别较重要的注意力head,将其他不重要的head进行有效裁剪。还可通过构建归因树(attribution tree)将不同层之间的信息交互进行直观的可视化表示。最后,文章还以bert作为扩展的实例应用,通过对归因结果分析构建的Adversarial trigger对Bert发动攻击,使得bert的预测能力显著下降。

数据集:

自然语言处理的

结论/启发:

在这里插入图片描述

结论:**较大的注意力分数并不意味着对最终预测的贡献更大。**不过大体的趋势是这样的,看原文图2.
启发:很重要的一点启发:归因是对head的剪枝,具体来说取某个head的attention score矩阵中分数最大的值,然后在比较。E表示期望,x表示样本(验证集样本),就是说,从验证集中随机取一些数据,跑一遍,我们就可以得到在每条数据中每个head的归因最大分数,将每个head的这个分数求期望,然后排序。这样不就是对head的一个筛选吗?能不能用到小样本跨域上,作为通道维度的筛选?

3. Transformer Interpretability Beyond Attention Visualization。

CVPR2021

论文链接:https://openaccess.thecvf.com/content/CVPR2021/papers/Chefer_Transformer_Interpretability_Beyond_Attention_Visualization_CVPR_2021_paper.pdf

解决了什么问题?

挑战:
●vit依赖跳跃连接和自注意力计算,这两者会涉及多个激活图的相加或相乘
●transformer使用了relu以外的非线性计算, 会导致负特征值而造成数值不稳定的问题。如LRU方法通过这些层传播时相关性总量会发生变化。

动机:

目前学界对vit的可解释性研究较少,且大多是类别无关的(利用注意力图或启发式传播注意力)。本文中作者就使用一种基于深度泰勒分解方法来计算attention中的相关性图,再把相关性分数经过各个attention层回传,以获得最终的像素热图。该方法保持了跨层的相关性不变,且是类别相关的(即可以可视化出模型对不同类别的”关注点")

方法:

贡献:
●引入- -种相关性传播机制,可以对positive和negative因素进行归因传播
●提出非参数层的归一化方法,以保证做矩阵加法和乘法时的相关性不变
●整合注意力和相关性分数,并结合多个注意力块(均值)来作为最终结果,传播到输入层
在这里插入图片描述

可视化效果:本文的方法得到更好的可视化结果。

在这里插入图片描述

4. LEVERAGING REDUNDANCY IN ATTENTION WITH REUSE TRANSFORMERS

2021年10月arXiv 一直没能发表出来

论文链接:https://arxiv.dosf.top/pdf/2110.06821.pdf

动机:

本文分析了在Transformer的不同层计算的注意力分数的相似性,并发现它们实质上是冗余的。基于此观察,提出了一种新方法,通过跨层重用注意力分数来减少 Transformer在训练和推理期间的计算和内存使用量

方法:

基于成对product-based的注意力允许 Transformer 以依赖于输入的方式在tokens之间交换信息,并且是它们在语言和视觉方面的各种应用程序中取得成功的关键。 然而,典型的 Transformer 模型会在多个层的多个头中针对同一序列重复计算此类成对注意力分数。
我们系统地分析了这些分数在头部和层之间的经验相似性,并发现它们相当冗余,尤其是显示出高度相似性的相邻层。受这些发现的启发,我们提出了一种新颖的架构,可以在多个后续层中重用在一层中计算的注意力分数。
在这里插入图片描述

结论/启发:

启发:后面的层使用前面的层的attention score

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程并发篇----第二十六篇

系列文章目录 文章目录 系列文章目录前言一、什么是 Executors 框架?二、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?三、什么是 Callable 和 Future?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

Halcon 边缘提取

文章目录 算子Halcon edges_image 示例Halcon frei_amp 示例Halcon kirsch_amp示例Halcon sobel_amp示例Halcon sobel_amp 算子示例Halcon sobel_dir 算子示例Halcon close_edges关闭图像间隙示例Halcon close_edges_length关闭图像间隙示例 算子 edges_image 对于图像进行边缘…

[CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择

CUDA kernel 的 grid_size 和 block_size 选择 核函数执行配置 Execution Configuration cuda_kernel<<< Dg, Db, Ns, S >>>(...)Dg: grid 的维度和大小 (grid_size). 类型 dim3. : Dg.x * Dg.y * Dg.z 为启动的线程块(block)数.Db: 每个线程块的维度和大…

(超详细)8-YOLOV5改进-添加EMA意力机制

1、在yolov5/models下面新建一个EMA.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import torch from torch import nnclass EMA(nn.Module):def __init__(self, channels, factor8):super(EMA, self).__init__()self.groups factorassert channels // sel…

MapReduce基础知识

MapReduce 1、介绍MapReduce ​ MapReduce的思想核心是“分而治之”&#xff0c;适用于大量复杂的任务处理场景&#xff08;大规模数据处理场景&#xff09;。 ​ Map负责“分”&#xff0c;即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小…

React16源码: React中的PortalComponent创建, 调和, 更新的源码实现

PortalComponent 1 &#xff09;概述 React Portal之所以叫Portal&#xff0c;因为做的就是和“传送门”一样的事情render到一个组件里面去&#xff0c;实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 &#xff09;源码 定位到 packages/react-…

Docker(一)简介和基本概念:什么是 Docker?用它会带来什么样的好处?

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 一、简介 本章将带领你进入 Docker 的世界。 什么是 Docker&#xff1f; 用它会带来什么样的好处&#xff1f; 好吧&#xff0c;让我们带…

python插件架构介绍

一、插件架构 在 Python 中&#xff0c;插件架构通常指的是一种软件架构模式&#xff0c;它允许开发者在不改变主应用程序代码的情况下&#xff0c;向应用程序添加新的功能或修改现有功能。这种架构使得应用程序可以通过加载外部模块或组件来扩展其功能&#xff0c;这些外部模…

【ROS2】实现自定义服务接口

1 定义服务接口 在之前创建的ROS接口功能包的基础上。 int32 num1 int32 num2 --- int32 num3 2 在CmakerLists.txt中增加如下语句&#xff0c;实现对服务接口的生成 # 为接口文件生成源代码 rosidl_generate_interfaces(${PROJECT_NAME}"msg/Student.msg""…

IP劫持的危害分析及应对策略

在当今数字化时代&#xff0c;网络安全问题备受关注&#xff0c;其中IP劫持是一种常见而危险的威胁。本文将深入探讨IP劫持的危害&#xff0c;并提供一些有效的应对策略。 第一部分&#xff1a;IP劫持的定义 IP劫持是指黑客通过各种手段获取并篡改目标IP地址的控制权&#xf…

vue3+vite:封装Svg组件

前言 在项目开发过程中&#xff0c;以svg图片引入时&#xff0c;会遇到当hover态时图片颜色修改的场景&#xff0c;我们可能需要去引入另一张不同颜色的svg图片&#xff0c;或者用css方式修改&#xff0c;为了方便这种情况&#xff0c;需要封装svg组件来自定义宽高和颜色&…

react 页签(自行封装)

思路&#xff1a;封装一个页签组件&#xff0c;包裹页面组件&#xff0c;页面渲染之后把数据缓存到全局状态实现页面缓存。 浏览本博客之前先看一下我的博客实现的功能是否满足需求&#xff0c;实现功能&#xff1a; - 页面缓存 - 关闭当前页 - 鼠标右键>关闭当前 - 鼠标右…

Endnote文章编号从10开始

前部分章节已经写好&#xff0c;后续添加&#xff0c;endnote参考文献需要从特定序号如10开始 知乎回答 在word中点击Endnote&#xff0c;instant Formatting is on右下角有一个小箭头&#xff0c; 点开箭头后点击layout, 下边有一个Start with bibliography 里面输入要开始的…

Python中类的继承实现

""派生类继承了基类的一切"&#xff0c;这里创建基类曲线&#xff0c;派生类有椭圆。派生类调用基类的方法&#xff0c;只需方法名前加上基类基类名作为前缀&#xff0c;再将派生类的self和其他参数传入。 当派生类与基类有同名的方法时&#xff0c;调用的是派…

按键+数码管

key.c #include "key.h" //把led.h文件包含进来 #include "system.h" //把timer0.h文件包含进来 #include "smg.h"extern uint num; char key_value; //有按键按下 char key_shourtflag;//没有按键按下uint KeyScan () //按键扫描函数 {…

Linux中关于head命令详解

head的作用 head用于查看文件的开头部分的内容。 head的参数 -q隐藏文件名-v 显示文件名-c<数目>显示的字节数-n<数目>显示的行数 head的案例 # 查看yum.log前五行内容 head -5 yum.log

vue2打包

首先&#xff0c;请确保您已经安装了Vue CLI。 打开终端或命令提示符&#xff0c;进入您的Vue项目的根目录。 运行以下命令来安装所需的依赖项&#xff1a; npm install安装完成后&#xff0c;运行以下命令来打包您的Vue项目&#xff1a; npm run build这将在您的项目根目录…

Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 使用HAL库配置外部中断 前面我们已经熟悉了有关内核部分的寄存器配置&#xff0c;接下来我们结合stm32f407的GPIO外设&#xf…

站长为什么都说WordPress太复杂不会用要放弃?

网络上经常看到有站长说要放弃WordPress&#xff0c;理由各有不同&#xff0c;比如有些说WordPress太复杂不会用&#xff1b;有些说WordPress是国外建站系统&#xff0c;在国内用来搭建访问速度太慢&#xff1b;也有些说WordPress是针对谷歌优化的&#xff0c;不适合国内的搜索…

UE 可靠UDP实现原理

发送 我们的消息发送都是通过 UChannel 来处理的&#xff0c;通过调用 UChannel::SendBunch 统一处理。 发送的 Bunch 是以 FOutBunch 的形式存在的。当 bReliable 为 True 的时候&#xff0c;表示 Bunch 是可靠的。 发送逻辑直接从UChannel::SendBunch处开始分析 1、大小限…