注意力机制就是要通过训练得到一个加权,自注意力机制就是要通过权重矩阵来自发地找到词与词之间的关系。

Q就是词的查询向量,K是“被查”向量,V是内容向量。

简单来说一句话:Q是最适合查找目标的,K是最适合接收查找的,V就是内容,这三者不一定要一致,所以网络这么设置了三个向量,然后学习出最适合的Q, K, V,以此增强网络的能力。

因此肯定需要给每个input定义tensor,然后通过tensor间的乘法来得到input之间的关系。那这么说是不是给每个input定义1个tensor就够了呢?不够啊!如果每个input只有一个相应的q,那么q1和q2之间做乘法求取了a1和a2的关系之后,这个结果怎么存放怎么使用呢?而且a1和a2之间的关系是对偶的吗?如果a1找a2和a2找a1有区别怎么办?只定义一个这模型是不是有点太简单了。

一个不够就定义两个,于是有了q和k。q你可以理解为代表自己用的,用q去和别的输入找关系;k理解为给别人用的,专门对付来跟你找关系的输入。这样子,用自己的q去和别人的k(当然和自己的k也行)做乘法,就可以得到找出的关系:权重a了。

仅定义q和k两个够吗?可能也还是不够的。找出来的关系是要用的,不用等于白找。权重a是要对输入信息做加权,才能体现找到的关系的价值的。那跟输入直接加权行吗?这么做也不是不行,就是显得直接和生硬了点。所以又定义了个v。要知道,v和q、k一样,都是通过系数矩阵对输入a做乘法得到的。所以定义了个v大概等于又对a加了一层可以学习的参数,然后对经过参数调整后的a再去做加权、把通过注意力机制学到的关系给用上。所以,a和v的乘法进行加权操作,最终得到输出o。

综上,定义这3个tensor,一方面是为了学习输入之间的关系、找到和记录谁和谁的关系权重,一方面也是在合理的结构下引入了可学习的参数,使得网络具有更强的学习能力。

假设我们想查一篇文章,我们不会直接把文章的内容打上去,而是会在搜索框输入该文章的关键字,如果我们搜不到,我们往往会再换一个关键字,直到搜到为止,那么可以让我们搜到的关键字就是最适合查找目标文章的关键字。这个最适合查找目标文章的关键字就是Q。

那么搜索引擎拿到我们输入的关键字Q之后,就会把Q和库里面的文章对比,当然搜索引擎为了节省资源加快对比速度,提前把库里面的文章进行了处理提取了关键信息,关键信息有很多,那么那个关键信息能够使得搜索命中率高,那个就是最适合接收查找的关键信息,这个最适合接收查找的关键信息就是K

使用Q和K计算了相似度之后得到score,这就是相似度评分,之后有了相似度评分,就可以把内容V加权回去了。

由于计算Q、K、V的矩阵是可以学习的,因此网络可以自己学习出要怎么样安排Q、K、V。

底下这个图把他们之间的关系画得挺好了,来源于《搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了》侵删。

既然K和Q差不多(唯一区别是W_k和W_Q权值不同),直接拿K自己点乘就行,何必再创建一个Q?

  1. 先从点乘的物理意义说,两个向量的点乘表示两个向量的相似度。
  2. Q,K,V物理意义上是一样的,都表示同一个句子中不同token组成的矩阵。矩阵中的每一行,是表示一个token的word embedding向量。

简单的说,K和Q的点乘是为了计算一个句子中每个token相对于句子中其他token的相似度,这个相似度可以理解为attetnion score,关注度得分。

假设一个句子"Hello, how are you?"长度是6,embedding维度是300,那么Q,K,V都是(6, 300)的矩阵

比如说 "Hello, how are you?"这句话,当前token为”Hello"的时候,我们可以知道”Hello“对于” , “, "how", "are", "you", "?"这几个token对应的关注度是多少。有了这个attetnion score,可以知道处理到”Hello“的时候,模型在关注句子中的哪些token。

这个attention score是一个(6, 6)的矩阵。每一行代表每个token相对于其他token的关注度。

虽然有了attention score矩阵,但是这个矩阵是经过各种计算后得到的,已经很难表示原来的句子了。然而V还代表着原来的句子,所以我们拿这个attention score矩阵与V相乘,得到的是一个加权后结果。也就是说,原本V里的各个单词只用word embedding表示,相互之间没什么关系。但是经过与attention score相乘后,V中每个token的向量(即一个单词的word embedding向量),在300维的每个维度上(每一列)上,都会对其他token做出调整(关注度不同)。与V相乘这一步,相当于提纯,让每个单词关注该关注的部分。

好了,该解释为什么不把K和Q用同一个值了。

经过上面的解释,我们知道K和Q的点乘是为了得到一个attention score 矩阵,用来对V进行提纯。K和Q使用了不同的W_k, W_q来计算,可以理解为是在不同空间上的投影。正因为有了这种不同空间的投影,增加了表达能力,这样计算得到的attention score矩阵的泛化能力更高。这里解释下我理解的泛化能力,因为K和Q使用了不同的W_k, W_q来计算,得到的也是两个完全不同的矩阵,所以表达能力更强。

但是如果不用Q,直接拿K和K点乘的话,你会发现attention score 矩阵是一个对称矩阵。如果令Q=K,那么得到的模型大概率会得到一个类似单位矩阵的attention矩阵,这样self-attention就退化成一个point-wise线性映射。因为是同样一个矩阵,都投影到了同样一个空间,所以泛化能力很差。这样的矩阵导致对V进行提纯的时候,效果也不会好。

  • https://www.zhihu.com/question/319339652/answer/730848834
  • https://www.zhihu.com/question/325839123/answer/1903376265

[深度学习] 自然语言处理 ----- Attention机制中的Q,K,V介绍相关推荐

  1. 深度学习attention机制中的Q,K,V分别是从哪来的?

    提问:找了各种资料,也读了论文原文,都是详细介绍了怎么把Q,K,V通过什么样的运算得到输出结果,始终没有一个地方有解释Q,K,V是从哪来的?一个layer的输入不就是一个tensor吗,为什么会有Q, ...

  2. 《Attention Is All You Need》注意力机制公式中Q,K,V的理解

    一.概述 <Attention Is All You Need>是一篇关于注意力机制里程碑的文章,从2017年发表至今2020年7月已经获得了上万的引用.该文的两大亮点一是提出了一个几乎仅 ...

  3. Attention机制中 Q、K、V分别从哪里来?

    在深度学习中,尤其是自然语言处理领域,Attention 机制已经成为一种非常重要的方法.它的核心思想是根据输入序列中的每个元素与当前元素的相关性来分配不同的权重,从而实现对输入序列的动态聚焦.在 A ...

  4. 深度学习技术在脑机接口中的应用

    大家好! Rose给大家分享一下深度学习技术在脑机接口中的应用. 什么是脑机接口? 脑机接口(BCI)是一种系统,可将受试者(人类或动物)的大脑活动模式提取并转换为用于交互式应用程序的消息或命令.脑活 ...

  5. [深度学习] 自然语言处理---Transformer原理(一)

    <Attention Is All You Need>是Google在2017年提出的一篇将Attention思想发挥到极致的论文.该论文提出的Transformer模型,基于encode ...

  6. [深度学习] 自然语言处理 --- Bert开发实战 (Transformers)

    本文主要介绍如果使用huggingface的transformers 2.0 进行NLP的模型训练 除了transformers,其它兼容tf2.0的bert项目还有: 我的博客里有介绍使用方法  [ ...

  7. [深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍

    [深度学习] 自然语言处理 --- Self-Attention(一) 基本介绍_小墨鱼的专栏-CSDN博客https://zengwenqi.blog.csdn.net/article/detail ...

  8. ​深度学习基础 | Seq2seq+Attention

    作者 | Chilia 整理 | NewBeeNLP 首先,请阅读先修知识: 深度学习基础 | 从Language Model到RNN 深度学习基础 | RNN家族全面解析 1. Seq2seq 1. ...

  9. 【NAACL2021】Graph4NLP:图深度学习自然语言处理(附ppt)

    来源:专知本文约1500字,建议阅读5分钟 最新图深度学习在自然语言处理应用的概述报告,不可错过! 深度学习已经成为自然语言处理(NLP)研究的主导方法,特别是在大规模语料库中.在自然语言处理任务中, ...

  10. 机器学习/深度学习/自然语言处理学习路线

    原文地址:http://www.cnblogs.com/cyruszhu/p/5496913.html 未经允许,请勿用于商业用途!相关请求,请联系作者:yunruizhu@126.com转载请附上原 ...

最新文章

  1. 在网页中JS函数自动执行常用三种方法
  2. Linux LB 集群知识、如何用 LVS 方式实现 LB 集群?
  3. ubuntu server 10.04 LTS(64位)装不了花生壳的解决方法
  4. java poi excel无法添加水印替代方法
  5. 第二章 centos安装maven
  6. 【UVA202】Repeating Decimals(模拟除法)
  7. MongoDB学习(黑马教程)-2-数据库MongoDB的导入文档和查询文档的操作
  8. 将照片存入百度云人脸库
  9. 一行代码生成Love爱心
  10. linux设置汉语输入法,在Deepin系统下使用韩语(韩文)输入法的方法
  11. excelJs 单元格背景颜色填充
  12. HTML表格合并行和列
  13. 【ROM制作工具】合并分割system.img和userdata.img文件修改教程
  14. java mat类型_JVM MAT使用分析详解
  15. 【JSD-Day01】语言基础第一天
  16. Win7-Win10快捷键
  17. Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)
  18. python情感词典计算得分_用python进行金融市场文本数据的情感计算!
  19. R计算Z分数(Z-Scores)
  20. Windows 平台下AMD 显卡加速pytorch训练

热门文章

  1. 软件分享 AirPlayer
  2. android expandablelistview横向,ExpandableListView的使用多级列表
  3. c语言编程中%d怎么运用的,C语言格式符%d与%D的区别
  4. 谷歌这是要全面退出中国!
  5. Spring核心JAR包
  6. Echarts柱状图属性设置大全
  7. 数据库sql语句练习题
  8. GAN(生成对抗神经网络 )的一点思考
  9. 关于APS生产排产软件选择,有哪几个要素?
  10. weblogic安装与部署项目