链接:https://www.zhihu.com/question/444712435
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
简单来说,注意力机制在没有标注的数据集中,仅凭着模型本身去学习所应注意的区域,这种方法的准确性靠谱吗?
作者:知乎用户
https://www.zhihu.com/question/444712435/answer/1733403787
以下关于计算机视觉中的回溯性(Top-down)注意力先做一个非正式的快速叙述,涉及知识点十分多,现在来不及一一展开:
从注意力实现原理上讲,计算机视觉中通常用到的回溯性注意力(CAM、GradCAM等Top-down注意力解释方法)先通过分类器给出分类结论,后回溯对分类做出强贡献的区域,CAM等方法通过对特征图加权求和的方式将关键区域高亮出来,权值来自CNN全局池化后面接的分类器的权重(CAM),或者反向传播的梯度幅值(GradCAM)等,总的来说不同方法质量各异,但都能揭示模型下结论时关注的是哪些区域。
从注意力学习过程讲,个人解释这主要是一个多示例学习(MIL)求解弱监督学习的迭代过程。MIL为弱监督学习提出一种样本分包学习的流程,即多个样本组成一个包,其中正包包含至少一个正样本,负包不包含正样本,在弱监督学习中可以认为一张图就是一个包,包含目标的patch是真正的正样本。而求解MIL需要引入伪标签赋予的过程,即设计一个策略为正包中的部分强响应样本赋予伪的正标签(常见策略包括Top1、TopN、全部给正标签等),然后通过鸡生蛋蛋生鸡的方式迭代优化。各种伪标签策略在CNN训练中正好体现为Global Max Pooling (GMP)、Log-Sum-Exp (LSE)、Global Average Pooling (GAP)等常见末端池化模块。由于CAM可以在GAP之前计算(对了解细节的读者,可以尝试非常简单地证明:可以把FC层权重提到全局池化前面来,先计算CAM再计算全局平均池化,这和事后回溯计算CAM数学上等效),CNN分类器的训练相当于一种将CAM注意力当作patch score做MIL的过程,全局池化为CAM的学习提供了patch级的伪标签。
从注意力形成过程也能看得出来,伪标签从原理上就不是什么绝对靠谱的机制,完全有可能一开始给错了后面就一直错下去的。在实践中,回溯性注意力也确实存在可感知的问题,可以从正确性和质量两方面分别体现。
所谓注意力的正确性问题,含义是注意力强调的位置完全不符合人预期的现象。相关代表性论文是Guided Attention Inference Network(GAIN),GAIN文介绍了一个很易懂的例子:船-水问题。当模型学习“船”类别时,由于船、水两个语义在一些数据集中有高度统计相关性,有时模型会完全混淆船-水两个概念,体现为“船”类别的CAM完全落在背景中的水上。需要注意的是,船-水问题仅是该问题的一个极端例子,实际应用中由于任务的复杂性,模型的概念混淆与概念正确往往是掺杂的,难以作同等直观的理解以便通过修改数据分布(增加没有水的船、没有船的水等)来解决问题。因此GAIN文提出的解决方案是将CAM作为一个可学习的输出添加额外监督信息(像素级mask)作手术刀式修正,来确保分类器的分类与其判断依据正确性的一致性,这样自然会增加标注成本。
所谓注意力的质量问题,含义是在位置正确时形状、数量描述不佳的现象,比如CAM在处理大目标、多目标定位时输出往往不完整,只能高亮出部分目标的部分区域。该问题主要和用“分类”这个学习方式来学习定位任务导致的任务目标不一致有关。直观地讲就像光路永远最短一样,优化的贪心性也会驱使模型在解决分类任务之后就不再充分探索剩余信息,这导致分类模型看到目标最有区分力的区域就直接下分类结论了。不引入额外监督信息解决这个问题的代表性相关论文是Adversarial Erasing系列,用多模型级联学习来强化注意力完整性,其中每个模型将图上CAM高亮区域挖掉再喂给下一级模型,强迫他们挖掘剩余有区分力的信息,这样就能把目标区域更完整地挖掘出来。
针对注意力的正确性问题,拙作“Rectifying Supporting Regions With Mixed and Active Supervision for Rib Fracture Recognition”也为literature做了一些微小贡献:(1)利用简单易行的对抗样本方法将GAIN文所需的像素级额外监督标签松弛为包围盒级标签,在目标边界模糊或边界不存在、难以用像素级标签描述时(或单纯标注预算较低时)能发挥更好的作用;(2)结合注意力驱动的主动学习方法进一步缩减所需的包围盒标签数量。最终效果是利用20%精标注+80%粗标注,就能接近使用了100%精标注的强监督学习的定位精度。
作者:霍华德 https://www.zhihu.com/question/444712435/answer/1734304145
@心照璧 提到的回溯性注意力机制CAM主要是用在cv里。而最早提出注意力机制的是nlp领域。
最初nlp里attention就是设置一个向量,和文本token的向量算内积,再过一个softmax归一化,得到每个token的权重,然后再根据权重把序列向量聚合成一个向量,用于下游任务。
@心照璧 提到的MIL解释我非常喜欢。最简单的文本分类模型,就是用avg pooling,相当于认为文本里每个词都是正例。attention的提出就是为了选出这个序列里真正起作用的token做正例。下面是Hierarchical Attention Networks for Document Classification的例子,说明模型做出判断时关注到了那些词。
![](https://i-blog.csdnimg.cn/blog_migrate/ee6d0c78d1bc7c50d3dd1da759f9fee9.png)
注意力机制是如何学到模型所应注意的词呢?一个几何上的直觉解释是,在高维空间里,学习过程中模型不断拉进对任务有用的token向量和attention向量的距离。最终学习到的就是当前任务下,以attention向量为中心的一个巨大高维球形空间,token向量距离中心越近的就是越与任务相关的token。换句话说,attention机制学到了和任务相关的特征词。
作者:DengBoCong
https://www.zhihu.com/question/444712435/answer/1742043678
看到“注意力机制在没有标注的数据集”,马上想到无监督预训练的Language Model,然后瞬间灵光乍现,想起了去年的重磅炸弹GPT3(GPT3都快一年了,时间过的好快呀)。GPT3惊艳的地方不在于结构创新,而是规模惊人。GPT3是单向transformer(transformer decoder),结构里面就有我们在这里想要讨论的注意力机制,在这里不去讨论GPT3的细节,我们把目光放在Attention模型上,通过GPT3抛砖引玉,来讨论以下两个问题:
注意力机制是如何学习到模型所应注意的区域的?
注意力机制在没有标注的数据集中的学习的准确性如何?
GPT 3和之前的区别主要是密度的改变和稀疏的自注意力模型(Sparse Transformer),围绕Transformer中的Attention进行的相关研究工作非常多,从解决计算量和内存各方面的问题上去深入的理解自注意力机制(Attention Span),相信会对本问题有所帮助,可以参看文章:
DengBoCong:Transformer的9种变体概览:https://zhuanlan.zhihu.com/p/351742765
注意力机制是如何学习到模型所应注意的区域的?
我觉得聊到这个问题,应该需要去学习理解Attention这个机制的原理,对于Attention的作用就和它的名字一样直白,我们来看看几张直观的Attention研究的可视化图表,如下:
Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. 2014. Neural machine translation by jointly learning to align and translate. CoRR abs/1409.0473.
Yang, H., Costa-jussà, M. R., & Fonollosa, J. A. (2017). Character-level Intra Attention Network for Natural Language Inference. In Proceedings of the 2nd Workshop on Evaluating Vector Space Representations for NLP (pp. 46-50).
Attention通过计算动态权重,让模型可以适应多样化的数据,Attention可以认为是增加了模型的多样性。因为Attention可以根据数据来计算权重,所以每个样本相当于产生了一个定制化的模型。这个定制化的模型,可以将样本变化来适应最终固定权重的操作(比如Transformer的FFN)。所以从某种程度上说,Attention的重点在于设计什么样的方式计算相关性?对于不同的计算方法在下面做个总结:
基于内容的注意力机制(content-based attention):
其中, 为上一个时间步中解码器的输出(解码器隐状态,decoder hidden states),
是编码器此刻输入(编码器隐状态,encoder hidden state j),
、
和
是待训练参数张量。由于
是独立于解码步
的,因此可以独立提前计算。基于内容的注意力机制能够将不同的输出与相应的输入元素连接,而与其位置无关。
基于位置的注意力机制(location-based attention):
其中, 是之前的注意力权重,
是经卷积而得的位置特征,
,
、
、
和
是待训练参数。基于位置的注意力机制仅关心序列元素的位置和它们之间的距离。基于位置的注意力机制会忽略静音或减少它们,因为该注意力机制没有发现输入的内容。
混合注意力机制(hybrid attention):
顾名思义,混合注意力机制是上述两者注意力机制的结合。其中, 为之前的解码器隐状态,
是之前的注意力权重,
是第j个编码器隐状态。为其添加偏置值b,最终的score函数计算如下:
其中, 、
、
、
和
为待训练参数,
为上一个时间步中解码器隐状态,
是当前编码器隐状态,
是之前的注意力权重
经卷积而得的位置特征(location feature),
。混合注意力机制能够同时考虑内容和输入元素的位置。更详细的关于Attention总结,可以参考这篇文章:
DengBoCong:NLP中遇到的各类Attention结构汇总以及代码复现:https://zhuanlan.zhihu.com/p/338193410
注意力机制在没有标注的数据集中的学习的准确性如何?
其实到这里,我就以GPT3结构中Self-Attention进行举例理解和展开分析。首先我们都知道,自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。自注意力机制在文本中的应用,主要是通过计算单词间的互相影响,来解决长距离依赖问题,也就是说,序列token对其所在序列的一定范围内计算相关性得以权重。
GPT-3主要聚焦于更通用的NLP模型,因此GPT-3的主要目标是用更少的领域数据、且不经过精调步骤去解决问题,即解决:a)对领域内有标签数据的过分依赖;b)对于领域数据分布的过拟合;既然目标明确,那么我们简单来看看在句子内部的相关性学习效果怎么样,从GPT3的实验效果上来看:
虽然不能说GPT3如此强悍的能力不完全靠Self-Attention,但是肯定是和Self-Attention的这种结构上分不开的,至于如何通过严谨的理论去分析,目前我还没有找到相关的资料。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓