2022.12.25 学习周报

news2024/12/30 2:49:06

文章目录

  • 摘要
  • 文献阅读
    • 1.题目
    • 2.摘要
    • 3.问题和方案
    • 4.介绍
    • 5.Attention Transfer
      • 5.1 Activation-based Attention Transfer
      • 5.2 Gradient-based Attention Transfer
    • 6.实验
    • 7.结论
  • 深度学习
    • Attention机制的本质
    • Encoder to Decoder
    • 抛开encoder-decoder
    • Attention函数工作机制
    • Attention机制的优缺点
  • 总结


摘要

This week, I read a paper on attention mechanism, the main content of the paper can be summarized as two points. Firstly, correctly define CNN’s attention, and then use this type of information to force the student network to imitate the powerful teacher network, thereby greatly improving the performance of the student network. Secondly, by improving various datasets and CNN network architecture, several novel methods to transfer attention are proposed. Finally, I simply learn the attention mechanism and try to understand the essence of the attention mechanism.

本周,我阅读了一篇关于注意力机制相关的论文,论文的主要内容可以概括为两点。一是正确定义CNN的注意力,然后使用这种类型信息去迫使学生网络模仿强大的教师网络,从而极大改进学生网络性能。二是通过改进各种数据集和CNN网络架构,提出几种新颖的转移注意力的方法。最后,我简单地学习了注意力机制,并试图去理解注意力机制的本质。


文献阅读

1.题目

文献链接:PAYING MORE ATTENTION TO ATTENTION: IMPROVING THE PERFORMANCE OF CONVOLUTIONAL NEURAL NETWORKS VIA ATTENTION TRANSFER

2.摘要

Attention plays a critical role in human visual experience. Furthermore, it has recently been demonstrated that attention can also play an important role in the context of applying artificial neural networks to a variety of tasks from fields such as computer vision and NLP. In this work we show that, by properly defining attention for convolutional neural networks, we can actually use this type of information in order to significantly improve the performance of a student CNN network by forcing it to mimic the attention maps of a powerful teacher network. To that end, we propose several novel methods of transferring attention, showing consistent improvement across a variety of datasets and convolutional neural network architectures. Code and models for our experiments are available at https://github.com/szagoruyko/attention-transfer.

3.问题和方案

解决问题:为了提升学生网络的性能

解决方案:提出了transferring attention, 目标是训练出的学生模型不仅预测精度更高,而且还需要让他们的特征图与教师网络的特征图相似。

4.介绍

有关注意力的一个假设:
1)非注意力视觉过程可以用于感知整体场景,聚合高层信息,可以用于控制注意过程,引导到场景的某个部分。
2)不同的视觉系统的观察角度可能不相同,如何利用注意力信息来提升性能是一个值得研究的问题。
3)更具体来说,如何使用教师网络来提升其他学生网络的性能。

注意力选择方面:AT选择使用空间注意力图,空间注意力图具有更高的可解释性。同时网络不同阶段的特征图拥有者捕获底层、中层、高层的表征信息。具体来说可以划分为:activation-based 和 gradient-based

论文工作贡献:
1)论文提出将attention作为将知识从一个网络转移到另一个网络的特殊机制
2)论文提出同时使用activation-based和gradient-based的空间注意力图
3)论文中的方法在多个数据集和深度网络结构(残差或非残差)得到了显著的性能提升。
4)论文表明了activation-based注意力转移比full-activationtransfer更好,并且能与知识蒸馏(KD)结合。

5.Attention Transfer

5.1 Activation-based Attention Transfer

如下图所示,通过映射函数F将3D向量A∈R映射成扁平的2D向量(即空间注意力图),其中C为通道数。
在这里插入图片描述
考虑基于激活的空间注意力图:
在这里插入图片描述
为了定义一个空间注意力映射函数,论文做出的隐含假设是隐藏神经元激活的绝对值可以用作关于神经元的具体输入。因此,通过考虑张量A元素的绝对值,我们可以通过计算这些值在通道维度上的统计数据来构建空间注意力图。
在这里插入图片描述
注意力图关注于网络中不同层的不同部分。在第一层中,低级梯度点的神经元激活水平较高,在中间,对于最具辨别力的区域较高,而在顶层,它反映了完整对象的图层。
在这里插入图片描述
在注意力转移中,给定教师网络的空间注意力图,目标是训练一个学生网络,该网络不仅可以做出正确的预测,而且具有类似于老师的注意力图。例如,在ResNet架构的情况下,可以考虑以下教师和学生的两种情况:
相同深度:可能在每个残差块之后都有注意力转移层
不同深度:对每组残差块的输出激活进行注意力转移
在这里插入图片描述
残差网络架构的不同深度情况的示意图:
在这里插入图片描述
在不失一般性的情况下,论文假设转移损失放置在具有相同空间分辨率的学生和教师注意力图之间,但如果需要,可以对注意力图进行插值以匹配它们的形状。令S, T和Ws, WT 分别表示学生、教师及其权重,设L(W, x)表示标准交叉熵损失。然后可以定义以下总损失:
在这里插入图片描述
总结:这种方法能够对网络性能带来一定的提升

5.2 Gradient-based Attention Transfer

论文将教师和学生输入的损失梯度定义为:
在这里插入图片描述
论文希望学生梯度注意力类似于教师注意力,因此可以最小化它们之间的距离:
在这里插入图片描述
由于给出了WT和x,得到所需WS的偏导:
在这里插入图片描述
论文建议在梯度注意力图上实施水平翻转不变性。为此,论文传播水平翻转的图像以及原始图像、反向投影和翻转梯度注意力图。然后,在获得的注意力和输出上添加l2损失,并进行第二次反向传播:
在这里插入图片描述其中:flip(x)表示翻转操作

总结:这种方法效果不大

6.实验

将Wide-ResNet系列作为教师网络和学生网络,在CIFAR10数据集上的实验表明:注意力转移和知识蒸馏的应用,降低了分类错误率,提升了学生网络的性能。
在这里插入图片描述

三种注意力图生成方式比较:
选择WRN-16-2为教师网络,WRN-16-1为学生网络,验证三种注意力图生成方式在CIFAR-10上识别错误率。结果表明,三者相对不进行注意力转移的方法,都降低了错误率, 其中, F^2_{sum}的错误率最低。
在这里插入图片描述

基于梯度的注意力转移实验:
在CIFAR-10数据集上,基于梯度生成注意力图,有效降低了识别错误率。
在这里插入图片描述

7.结论

关键点:
1)知识蒸馏中知识的表现形式有哪些
2)注意力机制中,判定某个区域重要与否的标准有哪些
3)如何根据自身任务特点,设置注意力图生成方式

创新点:
1)将注意力机制引入知识蒸馏中,提升CNN模型性能
2)设计了两类注意力转移方法
3)提供了多类注意力图生成方式

深度学习

Attention机制的本质

attention机制的本质是从人类的视觉注意力机制中学习其中的精髓。当人类视觉在感知事物时,一般不会对一个事物从头到尾的全部进行观察,而往往是根据每个人的需求取注意事物上特殊的部分。而且当我们发现一个事物某一部分经常出现自己想观察的信息时,我们会学习在将来再出现类似场景时,把注意力放到该部分上。

Attention机制:其实就是注意力分配一系列权重参数

Encoder to Decoder

以机器翻译为例子,当给出一句“我爱你” (sorce)中文,要把它翻译成英文’I love you’ (target)时,利用现在深度学习最为流行的model–encoder to decoder,‘我爱你’被编码(这里指语义编码)成C,然后在经过非线性函数,通过decoder得到目标Target中的每一个单词。

上述的过程是一个分心模型,这是因为sorce中每一个元素对语义编码C的作用是相同的,也就是每一个元素的重要程度都是一样的。可实际上,“我”这个元素对target中的’I’的结果是影响最大的,其他元素的影响是非常小的。但在上述模型中,这个重要程度没有被体现出来,所以这是一个分心的模型。而与其对应的注意力模型就是要从序列中学习到每一个元素的重要程度,然后按重要程度将元素合并。这就表明了序列元素在编码的时,所对应的语义编码C是不一样的。

attention机制运行的图如下:
在这里插入图片描述

抛开encoder-decoder

这里要提出一个函数叫做attention函数,它是用来得到attention value。

比较主流的attention框架如下:
在这里插入图片描述
上图可以描述attention value的本质:它是一个查询(query)到一系列键值(key-value)对的映射。

attention函数的工作实质如下图:
在这里插入图片描述

Attention函数工作机制

attention函数通过三步得到attention value:
1)Q与K进行相似度计算得到权值
2)对上部权值归一化
3)用归一化的权值与V加权求和

在自然语言任务中,往往K和V是相同的。这时计算出的attention value是一个向量,此向量包含了元素的上下文关系,即包含全局联系和局部联系。全局联系是因为在求相似度的时候,序列中元素与其他所有元素的相似度计算,然后加权得到了编码向量。局部联系是计算出的attention value是属于当前输入的,这也是attention的强大优势之一,它可以灵活地捕捉长期和local依赖,而且是一步到位的。

Attention机制的优缺点

优点:
1)一步到位的全局联系捕捉
2)并行计算减少模型训练时间
3)模型复杂度小,参数少
缺点:
attention机制不能捕捉语序顺序,即元素的顺序,这在NLP中是比较糟糕的,因为自然语言的语序是包含了太多的信息。


总结

Attention机制是一种能让模型对重要信息重点关注并充分学习吸收的技术,通俗的讲,就是把注意力集中到重要的点上,而忽略其他不重要的因素,其中重要程度的判断取决于应用场景。根据应用场景的不同,Attention分为空间注意力和时间注意力,前者用于图像处理,后者用于自然语言处理。下周,我会继续深入地学习Attention机制。

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

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

相关文章

20221225 海豚调度2.0.5连接星环库使用记录

阳阳的一周,算是挺过来了,现在只剩感冒了,迷迷糊糊的干了一周,混口饭吃不容易呀!简单记录一下遇到的问题吧! 连接hive(星环)数据库失败 方案一 : 海豚调度2.0.5使用的hive包是2.0版本,星环库包…

云原生之部署wordpress博客及设置圣诞主题风格

2022年圣诞节到来啦,很高兴这次我们又能一起度过~ CSDN诚邀各位技术er分享关于圣诞节的各种技术创意,展现你与众不同的精彩!参与本次投稿即可获得【话题达人】勋章【圣诞快乐】定制勋章(1年1次,错过要等下一年喔&#…

Python的条条框框

Python的条条框框 了解编程语言的分类 从运行角度的分类 从运行角度来看,编程语言的类型可以分为两种:编译型和解释型。 Python属于解释型语言。 解释型语言: 代码可以直接运行。当然,这也是依赖于附加程序(解释器&…

【VUE3】保姆级基础讲解(三)非父子组件通讯,$refs,动态组件,keep-alive,Composition API

目录 非父子组件通讯 全局事件总线mitt库 组件的生命周期 $refs 动态组件 keep-alive 异步打包 v-model绑定组件 Composition API 定义响应式数据 readonly toRefs与toRef computed $ref 生命周期钩子 provide和inject watch侦听 watchEffect script setup语法…

C++必须掌握的知识点

面向对象的三大特性 封装 继承 父类中所有的非静态成员都会被子类继承下去,只是父类的私有成员被编译器屏蔽了,访问不到。可以利用开发人员工具查看对象模型继承中,先构造父类,再构造子类,析构的顺序和构造的顺序完…

QT系列第8节 自定义对话框

在实际业务开发中经常要有各种各样的对话框来处理用户信息,本节就结合例子来说明如何自定义对话框。 目录 1.创建对话框 2.创建非模态对话框 3.创建模态对话框 4.综合案例 1.创建对话框 (1)项目鼠标右键菜单 - 添加新文件 (…

Hexo + Butterfly 自定义页脚

原文链接 :Hexo Butterfly 自定义页脚 推荐阅读 基于 Hexo 从零开始搭建个人博客(一): 环境准备基于 Hexo 从零开始搭建个人博客(二): 项目初识基于 Hexo 从零开始搭建个人博客(三): 主题安装…

CSDN每日一练最长递增的区间长度 C语言

题目名称:最长递增的区间长度 时间限制:1000ms 内存限制:256M 题目描述 给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3 (注意:测试用例仅做参考,…

Spring web开发之Request 获取三种方式

在开发 Java Web 项目中,我们经常使用 HttpServletRequest 获取请求参数、请求头等信息。在Spring项目,我们通常会使用 Spring 提供的注解获取参数,如 RequestParam、RequestHeader。 不过在某些场景下,我们可能需要从 HttpServl…

初识Docker:(4)Docker基本操作

初识Docker:(4)Docker基本操作1 镜像操作1.1 镜像名称1.2 镜像操作命令1.3 案例:docker拉取nginx镜像利用docker save将nginx镜像导出磁盘,然后再通过load加载回来1.4 镜像操作总结2 容器操作2.1 案例创建运行一个ngin…

【阅读笔记】《持续交付2.0》中理解分支、发布策略

文章目录1. 前言1.1 分支、发布 管理上解耦2. 主干 (Trunk) 和分支 (Branch)2.1 Trunk 开发 Trunk 发布2.1.1 Trunk 开发 Trunk 发布需要解决:重构的需求2.1.2 Trunk 开发 Trunk 发布需要解决:未开发完成的功能被带入发布版本2.2 Trunk 开发 Branch 发布…

leetcode:6272. 好分区的数目【思维转换(正难则反) + dp定义 + 背包问题 + 选or不选】

目录题目截图题目分析ac code总结题目截图 题目分析 先特判&#xff0c;如果sum(nums) < 2 * k显然不可能成功&#xff01;返回0出现Mod大概率就是dp1000的话提示我们用平方复杂度的dp这种取子序列的问题&#xff0c;本质就是选or不选的问题如果我们只考虑一维dp,dp[i]肯定…

Linux--信号

目录1. 信号概念2. 信号产生前2.1 信号产生的各种方式3. 信号产生中信号保存的方式3.1 阻塞信号3.2 信号屏蔽字4. 信号产生后信号处理的方式4.1 信号集操作函数4.2 sigprocmask函数4.3 sigpending函数4.4 sigaction函数5. 信号是什么时候被处理的1. 信号概念 信号是进程之间事…

golang访问KingbaseES V8R6

概述 本文介绍go语言连接KingbaseES V8R6数据库的步骤 测试环境 操作系统&#xff1a;CentOS 7.2.1511 数据库版本&#xff1a;KINGBASE (KingbaseES) V008R006C007B0012 go版本&#xff1a;go version go1.19.4 linux/amd64 KingbaseES go驱动获取 go连接kingbase数据库需…

MySQL为什么使用B+树为索引结构

目录 1、什么是索引 2、索引的类型 3、为什么要用索引 4、索引的使用场景 5、索引为什么要用B树&#xff0c;为什么不能用二叉树、红黑树、B树&#xff1f; 介绍一款可以帮助理解数据结构的网站&#xff08;很好用&#xff09;&#xff1a;Data Structure Visualization …

hadoop生产调优之Hadoop-Yarn 生产经验(参数调优)

一、常用的调优参数 1&#xff09;调优参数列表 &#xff08;1&#xff09;Resourcemanager 相关 yarn.resourcemanager.scheduler.client.thread-count ResourceManager 处理调度器请求的线程数量 yarn.resourcemanager.scheduler.class 配置调度器&#xff08;2&#xff0…

js中ArrayBuffer和node中Buffer的关系和区别

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。 它是一个字节数组&#xff0c;通常在其他语言中称为“byte array”。你不能直接操作 ArrayBuffer 中的内容&#xff1b;而是要通过类型化数组对象或 DataView 对象来操作&#xff0c;它们会将缓冲区中的数据…

C++、python、VS code插件安装与SSH使用

下载按照VS coda 官网&#xff1a;https://code.visualstudio.com 1.安装相关插件 1.中文插件&#xff08;可选&#xff09; MS-CEINTL.vscode-language-pack-zh-hans 2.C插件&#xff08;必选&#xff09; ms-vscode.cpptools 3.ssh 远程&#xff08;必选&#xff09; ms-vs…

数据结构——快排的三种实现方式

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题什么是快排&#xff1f;如何实现递归单次的排序要如何实现hore 的办法![在这里插入图片描述](https://img-blog.csdnimg.cn/40b2ac63f2424bd1828a45f8509ff116.gif#pic_center)坑位法双指针法总结什么是快排&#xff1f;…

线程池(一)

个人博客地址&#xff1a; http://xiaohe-blog.top/index.php/archives/14/ 文章目录1. 为什么要使用线程池2. Executor3. ThreadPoolExecutor3.1 七个参数3.2 任务队列3.3 拒绝策略4. 创建线程池5. Executors5.1 CachedThreadPool5.2 FixedThreadPool5.3 SingleThreadExecutor…