本文部分内容参考于以下博客:
自注意力机制

文章目录

  • 自注意力输入和输出
  • 自注意力机制函数
  • self_attention的计算过程
  • self_attention的矩阵表示方法:
  • 多头注意力机制
  • 位置编码

自注意力输入和输出

1.自注意力模型
输入的序列是变长的序列,输出的是一个标量

2.输入和输出都是序列,而且输入和输出的长度相等,输入的每一个元素对应输出的一个label。


3.输出序列的长度是不定的,这种情况其实也就是Seq2Seq模型,比如机器翻译。如下图所示:

4.输出序列的长度为1,此时相当于一个分类人物,比如像对正面/负面评论的分析

自注意力机制函数

由于需要建立输入向量序列的依赖关系,因此模型要考虑整个输入序列的信息,之后将输出向量输入到full-connected,做后续处理。

之前提到过,self_attention研究的是target或者source元素之间的相关性,假设此时的被查询的元素是a1a^1a1,我们计算a1和a1,a2,a3,a4a^1和a^1,a^2,a^3,a^4a1和a1,a2,a3,a4之间的相关性,这样做的好处是不需要把所有的信息都输入到神经网络中,只需要从X中选择和任务相关的信息即可。

计算相关度的函数有以下2种:

输入的两个向量,通过和权重矩阵Wq和Wk相乘得到q和k,q和kW^q和W^k相乘得到q和k,q和kWq和Wk相乘得到q和k,q和k进行内积(对应元素相乘并相加的方式)从而求相关性α\alphaα.
另外的方式:

输入的两个向量,通过和权重矩阵Wq和WkW^q和W^kWq和Wk相乘得到qqq和kkk,之后将qqq和kkk串联输入到一个激活函数(tanhtanhtanh)中,通过一个transform得到α\alphaα

self_attention的计算过程

一般来说,我们通过(key,value)的方式来表示输入信息,其中key用来计算注意力分布αn\alpha_nαn​,而value用来计算聚合信息,通常情况下:key值和value值是一样的。query代表的是被查询的向量。
如下图所示:a1为被查询向量,计算a1与[a2,a3,a4]a1与[a2,a3,a4]a1与[a2,a3,a4]的关联性α(实践时一般也会计算与a1自己的相关性)。以Dot-product为例,我们分别将[a1,a2],[a1,a3],[a1,a4][a1,a2],[a1,a3],[a1,a4][a1,a2],[a1,a3],[a1,a4]作为Dot-product的输入,求得对应的相关性[α11,α12,α13,α14][\alpha11,α12,α13,α14][α11,α12,α13,α14]


2.计算出来a1跟每一个向量的关联性之后,将得到的关联性输入的softmax中,这个softmax和分类使用的softmax时一样的,得到对应数量的α′。

3.将a1,a2,a3,a4乘以权重矩阵WvW^vWv得到对应的value值,之后对应的viv^ivi和之前计算出来的α1,i′\alpha'_{1,i}α1,i′​对应相乘再相加,即可得到注意力分数。

self_attention的矩阵表示方法:

这里输入的向量依旧是[a1,a2,a3,a4],对应的输入向量[a1,a2,a3,a4]拼接到一起组成I数组,对应的[q1=Wqa1,q2=Wqa2,q3=Wqa3,q4=Wqa4][q1=W^qa^1,q2=W^qa^2,q3=W^qa^3,q4=W^qa^4][q1=Wqa1,q2=Wqa2,q3=Wqa3,q4=Wqa4]拼接在一起,得到Q矩阵。同理K和V矩阵也是同样获得的。

2.得到Q,K,V矩阵之后,下一步由Q和K计算相关性,以计算q1为例子,使用q1和[k1,k2,k3,k4]分别相乘得到了[α11,α12,α13,α14\alpha_{11},\alpha_{12},\alpha_{13},\alpha_{14}α11​,α12​,α13​,α14​],为了使用矩阵的乘法运算,对[k1,k2,k3,k4]进行转置,再和q1相乘。转置之后:KTK^TKT的矩阵是4∗14*14∗1的,q1q^1q1是1∗11*11∗1可以直接相乘。


3.将第一步得到的K矩阵进行转置,得到KTK^TKT。K和Q相乘,得到相关矩阵A,A再经过softmax函数,得到归一化的矩阵A′A'A′
如下图所示:KTK^TKT是一个4∗14*14∗1的矩阵,而Q矩阵是一个1∗41*41∗4的矩阵,可以进行矩阵的运算。

我们将矩阵V依次乘以矩阵A′中的每一列得到输出[b1,b2,b3,b4]

综上所述:计算过程如下所示

  1. 计算Q,K,V三个矩阵。
    Q=WqI,K=WkI,V=WvIQ=W^qI,K=W^kI,V=W^vIQ=WqI,K=WkI,V=WvI
  2. 计算Q和V的相似度,经过softmax函数进行归一化得到注意力矩阵A′A'A′
    A=KTQ,A′=softmax(A)A=K^TQ,A'=softmax(A)A=KTQ,A′=softmax(A)
  3. 计算输出矩阵:O=VA′O=VA'O=VA′
    注意,一般情况下,V的取值等于K等于输入向量,故而V∗A′计算的V*A'计算的V∗A′计算的是输入信息的加权平均值。

多头注意力机制

多头注意力(Multi-Head Attention)是利用多个查询Q=[q1,q2,...,qm]Q=[q1,q2,...,qm]Q=[q1,q2,...,qm]来并行地从输入信息中选取多组信息.每个注意力关注输入信息的不同部分。

在Self-Attention中,我们是使用q去寻找与之相关的k,但是这个相关性并不一定有一种。那多种相关性体现到计算方式上就是有多个矩阵q,不同的q负责代表不同的相关性。
这里展现的是两个head的,首先利用a和WqW^qWq相乘得到了qiq^iqi,之后qiq^iqi再乘以两个权重矩阵得到qi,1和qi,2。


在后续的计算中,我们将属于相同相关性的矩阵进行运算。

1.qi1只和ki1,kj1qi1只和ki1,kj1qi1只和ki1,kj1进行相似度运算得到αi1和αj1\alpha{i1}和\alpha{j1}αi1和αj1,而不需要和ki2和kj2ki2和kj2ki2和kj2进行相似度的计算。
2.得到的结果再和vi,1和vj,1v^{i,1}和v^{j,1}vi,1和vj,1进行相乘再相加,从而可以得到bi,1b^{i,1}bi,1。相同的方法可以得到bi,2b^{i,2}bi,2
3.将bi,1和bi,2b^{i,1}和b^{i,2}bi,1和bi,2拼接起来,乘以一个权重矩阵WOW^OWO,得到最终的输出bib^ibi

位置编码

我们可以发现对于每一个input是出现在sequence的最前面,还是最后面这样的位置信息,Self-Attention是无法获取到的。这样子可能会出现一些问题,比如在做词性标记(POS tagging)的时候,像动词一般不会出现在句首的位置这样的位置信息还是非常重要的。
我们可以使用positional encoding的技术,将位置信息加入到Self-Attention中。

如上图所示,我们可以为每个位置设定一个专属的positional vector,用ei表示,上标i代表位置。我们先将ei和ai相加,然后再进行后续的计算就可以了。ei向量既可以人工设置,也可以通过某些function或model来生成。

李宏毅老师-self-attention笔记相关推荐

  1. 【必收藏】台大李宏毅老师课程 | 资源汇总、笔记总结与索引

    2020年7月20日至2020年8月18日,我刷完了台大李宏毅老师的深度学习/机器学习相关课程,我分为了 64 个大课时,记录了 64 篇笔记. 我对于李老师课程感到惊讶又欣喜: 惊讶在于,李老师能把 ...

  2. 李宏毅老师《机器学习》课程笔记-5 Transformer

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除一张来自 transformer论文,其余均来自课程 PPT.欢迎交流和多多指教,谢谢! L ...

  3. 李宏毅老师《机器学习》课程笔记-3卷积神经网络

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除了一幅我自己绘制的图和一幅来自 Stanford cs231n 教程的图,其余图片均来自课程 ...

  4. 李宏毅老师《机器学习》课程笔记-4.1 Self-attention

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中有一张图片来自于 The Illustrated Transformer ,其余图片均来自课程 P ...

  5. 李宏毅老师《机器学习》课程笔记-6 GAN

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! 6 Unsupervised Learning ...

  6. 李宏毅老师《机器学习》课程笔记-2.1模型训练技巧

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除了两幅是我自己绘制外,其余图片均来自课程 PPT.欢迎交流和多多指教,谢谢! 文章目录 Le ...

  7. 李宏毅老师《机器学习》课程笔记-2.2 为什么是“深度”学习?

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! Lecture2.2 why Deep Net ...

  8. 李宏毅老师《机器学习》课程笔记-4.2 Batch Normalization

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! Lecture 4.2 training ti ...

  9. [李宏毅老师深度学习视频] 机器学习深度学习基本内容【手写笔记】

    此笔记来源于李宏毅老师的机器学习视频,以下属于自己的理解以及老师上课的内容,由于公式过多,不便于直接打字,故用手写笔记替代. Github的链接(pdf):https://github.com/Bes ...

  10. 【强推】李宏毅老师2021深度学习课程学习笔记(持续更新中)

    机器学习可以理解为是让机器自动寻找函数的一个过程. 根据函数功能的不同,可以将机器学习进行以下分类. Alpha Go做的事情也是一个分类问题:将当前棋盘上白子黑子的位置作为输入,输出是19*19个c ...

最新文章

  1. 从QQ聊天看51CTO版主专业精神和工作态度!
  2. spring security自定义指南
  3. Mirantis 收购 Docker EE | 云原生生态周报 Vol. 28
  4. Linux中添加、修改、删除用户和用户组
  5. java mqtt客户端_基于 t-io 实现一个 mqtt5 协议之 mica-mqtt
  6. 创维linux进入工厂模式,创维电视怎么进入工厂模式?
  7. Scala中的嵌套循环
  8. 使用Nodejs搭建server
  9. 日本研发圆滚滚的球形无人机,被LED屏团团包围
  10. git 添加远程服务器,远程搭建git服务器新手踩坑
  11. win2003群集cluster下SQL2005和sp3补丁安装配置3
  12. 贴片电阻的功率与封装对照表
  13. java speex_JAVA版-微信语音.speex转.wav(示例代码)
  14. 虚拟机安装黑苹果【虚拟机安装,黑苹果安装,黑苹果无法全屏问题】(这应该全网最全的资源了吧~)
  15. 营业执照编码验证规则(15位和18位)
  16. php怎么查看当前地址,php二分法在IP地址查询中的应用
  17. 蓄电池与超级电容混合储能并网matlab simulink仿真模型
  18. linux print$共享文件夹,利用python的看门狗在linux下监控afp共享文件夹
  19. 【Bio】基础生物学 - 基本氨基酸 amino acids
  20. Oracle ltrim() rtrim() 函数详细用法

热门文章

  1. IDEA热部署插件Jrebel安装以及使用步骤
  2. 当用户越来越“挑剔”,智能音箱如何押注未来?
  3. Java导出Excel公式非空判断_使用poi导成excel的一个类型判断函数
  4. 【树莓派4】ARM64 | 家庭网盘【Seafile】的部署 | raspberrypi 4
  5. 语音识别sdk for ios android,iOS 微信语音SDK 简单使用
  6. 高温迷你便携式户外12V电烙铁,ZVS推挽电磁加热
  7. 门槛越低,越容易引起共鸣
  8. 让生产力加倍的ChatGPT快捷指令
  9. 领取招财币,第二天,
  10. BIOS入门篇---详解BIOS