文章目录

  • 注意
  • 引言
  • self-attention 自注意力机制
  • 多头自注意力机制
  • 图像中的自注意力机制

注意

本篇文章参考李宏毅老师的讲课视频,截图均来自老师的PPT,本文是学习笔记。原视频大家可以自行搜索观看

引言

自注意力机制最初是NLP领域的

首先我们了解一下三种任务分类:

输出一个句子,可以看作一个序列。

1、输入和输出长度一致,每个vector对应一个label

假定现在做一个词性分析的任务,就是输入英文句子,给出每个单词的词性

2、整个序列对应一个label

假定现在做一个语义判断的任务,输出英文句子,给出这个句子的好坏判断。好or不好

3、输出长度不确定,由机器决定输出label的长度,这种任务叫做seq2seq

我们常见的翻译任务就是seq2seq。输出句子,输出翻译好的句子的长度是不定的。

我们以第一种为例:

假定现在做词性分析,输入一句话I saw a saw,这句话的意思是我看到了一把锯子。

那么我们用最简单的全连接网络来做这个任务

这种做法的缺点是,机器不能判断出来后一个saw做名词,表示锯子的意思

因为对于机器来说两个saw完全一样,不会输出不同的结果。

那么我们就想,如何让神经网络结合上下文的信息呢

我们可以将一个词汇的前后几个词汇串起来,称为一个window,一起输出到网络中训练

那么,按照这种方法,如果我们想考虑整个句子的信息,就需要把这个windows的大小设置为整个句子的大小。

他的问题在于:训练中每个句子都是不一样长度的,如果你想用一个windows把所有的句子都能框起来,那就需要以训练数据中最长的那个句子长度作为windows的长度来算,这样一来,计算量太大了。

所以,就引入了我们的自注意力机制

self-attention 自注意力机制

自注意力可以处理整个序列,如图

我们将一句话中每个单词,编码为一个词向量(方便网络处理),比如第一个单词“I”被编码后的向量为a1

a1经过自注意力机制输出的b1,b1是考虑了整个输入序列才得到的输出

自注意力机制还可以堆叠,经过自注意力得到的输出还可以再做一遍自注意力

那么b1是怎么来的呢

首先,我们假设输入序列是a1,a2,a3,a4

第一步是,计算a1和其他向量的相关度(关联度)

计算相关性有很多方法,常见的做法是点积。

如图,输入两个向量,分别乘上两个矩阵Wq,WKW^q,W^KWq,WK,得到q和k,再做一个点乘,就得到了相关度α\alphaα

我们一般把这个q叫做query,k是key
那我们计算出a1的q,再计算出a2的k,我们就可以计算出a1和a2的关联性,我们把这个称作注意力分数

把a1和其他的所有输入的关联性全部算出来,同时,我们实际算的时候,还会计算a1和自己的关联性,如图,就是计算结果

计算完了之后,经过一个softmax(这里用ReLU也行,都可以)

经过softmax后我们就得到了a1′,a2′,a3′,a4′a_1',a_2',a_3',a_4'a1′​,a2′​,a3′​,a4′​

接下来,我们把原始的输入序列a1,a2,a3,a4分别乘以一个WvW^vWv,得到对应的v1,v2,v3,v4

这个WvW^vWv叫做value
我们把v1,v2,v3,v4分别与a1′,a2′,a3′,a4′a_1',a_2',a_3',a_4'a1′​,a2′​,a3′​,a4′​相乘

再把这个结果累加就得到了我们的输出b1

他这个原理其实就是,a1′,a2′,a3′,a4′a_1',a_2',a_3',a_4'a1′​,a2′​,a3′​,a4′​其实代表了a1与所有向量的相关度,如果和某一个向量的相关度比较高,那么与v相乘之后得到的值也会比较大,最后累加之后,累加得到的这个值,也会更加偏向于那个相关性更高的向量信息。

b2,b3,b4与b1的计算方式一样。最终得到自注意力的输出。

那么整个过程我们了解了,就会发现,对于每一个a1a^1a1,我们都要产生对应的q1,k1,v1q^1,k^1,v^1q1,k1,v1

那么用矩阵运算就是如图所示

把a1,a2,a3,a4组合成一个矩阵,乘以Q,K,VQ,K,VQ,K,V就行了

那么相关度的计算,或者说注意力分数的计算如图所示,用QQQ乘以KTK^TKT最后全部经过一个softmax,就得到了A′A'A′,有时候我们把A′A'A′也叫做Attention Matrix。这就是注意力分数

那么再把A′A'A′乘上V,就得到了自注意力的输出结果

在整个自注意力机制中,需要学习的参数就是Wq,Wk,WvW^q,W^k,W^vWq,Wk,Wv这三个。
汇总图:

多头自注意力机制

Multi-head self-attention

学习了自注意力机制之后,我们知道,我们用a1的q来计算他和其他元素的相关性,但是呢,相关性这个东西,其实有多种不同的,比如a1和a2在词性上相关,a1和a3在词性上不相关,但是在单词组成上相关(长得像),所以我们可以用多个q,来衡量相关性,目的是为了衡量不同角度的相关性。

如果我们认为一个任务,存在两种不同的相关性,那我们就使用两个q,同理,对应的我们也需要两个k,两个v,如图所示,这就是双头自注意力

然后我们做softmax的时候,首先只用其中一个head,来做

再用另一个head来做,所以就得到两个b

那么你多头注意力就会得到多个b,将这些并起来,然后乘以一个矩阵,就得到了输出

那么说到这里,自注意力机制就完了。但是他有一个问题,我们使用自注意力机制计算了不同单词之间的相关性,但是整个过程忽略了位置信息。经过softmax之后,没有各个向量之间的位置信息。但是位置信息对于我们来说是重要的,比如如果这个单词出现在句子首位那他可能大概率不是动词,所以位置有的时候是重要的。

如何把位置信息加进去呢,做法是把每一个位置,对应一个向量eie^iei

把位置信息加上去就好了,这个eie^iei是我们自己设置的。

图像中的自注意力机制

那么刚才说的都是NLP领域的,每个句子我们编码成一个向量,那么图像里面怎么用自注意力机制呢

一张5x10的RGB图像就是5x10x3的矩阵,那么如果我们把每个像素在各个通道上的值拿出来,组成一个向量,这样这张图片就有5x10个向量了,把这些向量当作输入,进行自注意力就行了。

那么自注意力机制和CNN的区别在哪呢

我们用自注意力机制的时候,图像中的某个像素,会和其他所有像素做相关性计算,也就是说,对于一个像素,我们考虑了整张图像。

而CNN呢,由于卷积的特性,他只考虑感受野内的信息,所以没有self-attention考虑的多,我们可以认为CNN就是简化版的self-attention

这篇论文证明了CNN就是self-attention的特例,self-attention只要经过精心的设计,就可以做到与CNN一样的效果。

self-attention应用在图像上面,最著名的论文是An lmage is Worth 16x16 Words: Transformers for ImageRecognition at Scale
https://arxiv.org/pdf/2010.11929,pdf

谷歌的文章,他就是把一张图片,分成16x16的小块,每个小块看作一个向量,输入到self-attention上面。

这张图我们可以看出,训练资料少的时候,CNN的效果会好于自注意力,训练数据越来越大的时候,自注意力的效果会好于CNN。这个我们可以从一个角度解释:自注意力看的更多,所以训练数据少的时候,他容易过拟合,他需要更多的训练数据,而CNN 看的范围少,所以训练数据少的时候,效果更好

【学习笔记】自注意力机制self-attention相关推荐

  1. 【动手深度学习-笔记】注意力机制(一)注意力机制框架

    生物学中的注意力提示 非自主性提示: 在没有主观意识的干预下,眼睛会不自觉地注意到环境中比较突出和显眼的物体. 比如我们自然会注意到一堆黑球中的一个白球,马路上最酷的跑车等. 自主性提示: 在主观意识 ...

  2. 【动手深度学习-笔记】注意力机制(四)自注意力、交叉注意力和位置编码

    文章目录 自注意力(Self-Attention) 例子 Self-Attention vs Convolution Self-Attention vs RNN 交叉注意力(Cross Attenti ...

  3. NLP学习笔记(五) 注意力机制

    大家好,我是半虹,这篇文章来讲注意力机制 (Attention Mechanism) 在序列到序列模型中的应用 在上一篇文章中,我们介绍了序列到序列模型,其工作流程可以概括为以下两个步骤 首先,用编码 ...

  4. Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结

    目录 前言 1. 注意力机制 1.1非自主提示和自主提示 1.2 查询,键和值 1.3 注意力机制的公式 1.3.1 平均汇聚 1.3.2 非参数的注意力汇聚(Nadaraya-Watson核回归) ...

  5. 深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  6. 深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  7. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  8. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attenion小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的 ...

  9. 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记  前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...

  10. 【NLP】全面详解 | 深度学习中的注意力机制(一)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 目前深度学习中热点之一就是注意力机制(Attention Mechanisms).Attention源于人类视觉系统,当 ...

最新文章

  1. Quartz 实现分布式任务调度
  2. java创建oracle序列_java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
  3. MySQL-高可用架构探索
  4. Linux 系统中的定时任务及延时任务
  5. 原理详解与标准解法——蓝桥杯_2016年省赛B组 第七题 剪邮票(暴力+迷宫变形)
  6. new和delete
  7. Procrustes Analysis(普氏分析)
  8. Phoenix Contact 多款工业产品被曝多个高危漏洞
  9. FISCO BCOS同步模块的优化策略
  10. 批量生成PDF417码
  11. (十:2020.08.28)CVPR 2018 追踪之论文纲要(译)
  12. 每个国家对应的values语言Locale和国家代码对照表
  13. 网络游戏广告植入案例
  14. 【7gyy】支招:自检性能搞定网速慢电脑卡的问题
  15. 弹性云主机利用云镜像克隆新开、迁移数据[云镜像]
  16. 企企通SRM项目再获肯定,助力迈金科技一站式数字化采购平台成功上线
  17. HMACSHA512
  18. 苹果计算机 win10,苹果怎么装win10苹果装win10详细教程【图文】
  19. 解决 vue-paypal-checkout 导致 PayPal 按钮未正常显示
  20. ZKAttest: Ring and Group Signatures for existing ECDSA keys 学习笔记

热门文章

  1. 【Matlab】复化梯形公式求积分、求二重积分
  2. idea的热键占用问题解决方法
  3. Sql Server where case 满足条件执行 不满足 不做任何条件查询
  4. win10添加美式键盘_在win10中使用多种键盘布局,你知道如何操作吗
  5. 马云语录:今天很残酷,明天更残酷!后天很美好!但大多数人都死在明天晚上,看不到后天的太阳!
  6. 服务器查看硬盘状态在哪里看,hpacucli查看HP服务器硬盘状态
  7. Claustrophobic Cows
  8. 网络推广还有前景吗,网络推广有前途吗
  9. HVT/SVT/LVT详解
  10. 模具怪不得总比别人的坏的快,模具三级保养你到位了吗?