李宏毅老师-self-attention笔记
本文部分内容参考于以下博客:
自注意力机制
文章目录
- 自注意力输入和输出
- 自注意力机制函数
- 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]
综上所述:计算过程如下所示
- 计算Q,K,V三个矩阵。
Q=WqI,K=WkI,V=WvIQ=W^qI,K=W^kI,V=W^vIQ=WqI,K=WkI,V=WvI - 计算Q和V的相似度,经过softmax函数进行归一化得到注意力矩阵A′A'A′
A=KTQ,A′=softmax(A)A=K^TQ,A'=softmax(A)A=KTQ,A′=softmax(A) - 计算输出矩阵: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笔记相关推荐
- 【必收藏】台大李宏毅老师课程 | 资源汇总、笔记总结与索引
2020年7月20日至2020年8月18日,我刷完了台大李宏毅老师的深度学习/机器学习相关课程,我分为了 64 个大课时,记录了 64 篇笔记. 我对于李老师课程感到惊讶又欣喜: 惊讶在于,李老师能把 ...
- 李宏毅老师《机器学习》课程笔记-5 Transformer
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除一张来自 transformer论文,其余均来自课程 PPT.欢迎交流和多多指教,谢谢! L ...
- 李宏毅老师《机器学习》课程笔记-3卷积神经网络
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除了一幅我自己绘制的图和一幅来自 Stanford cs231n 教程的图,其余图片均来自课程 ...
- 李宏毅老师《机器学习》课程笔记-4.1 Self-attention
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中有一张图片来自于 The Illustrated Transformer ,其余图片均来自课程 P ...
- 李宏毅老师《机器学习》课程笔记-6 GAN
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! 6 Unsupervised Learning ...
- 李宏毅老师《机器学习》课程笔记-2.1模型训练技巧
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除了两幅是我自己绘制外,其余图片均来自课程 PPT.欢迎交流和多多指教,谢谢! 文章目录 Le ...
- 李宏毅老师《机器学习》课程笔记-2.2 为什么是“深度”学习?
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! Lecture2.2 why Deep Net ...
- 李宏毅老师《机器学习》课程笔记-4.2 Batch Normalization
注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! Lecture 4.2 training ti ...
- [李宏毅老师深度学习视频] 机器学习深度学习基本内容【手写笔记】
此笔记来源于李宏毅老师的机器学习视频,以下属于自己的理解以及老师上课的内容,由于公式过多,不便于直接打字,故用手写笔记替代. Github的链接(pdf):https://github.com/Bes ...
- 【强推】李宏毅老师2021深度学习课程学习笔记(持续更新中)
机器学习可以理解为是让机器自动寻找函数的一个过程. 根据函数功能的不同,可以将机器学习进行以下分类. Alpha Go做的事情也是一个分类问题:将当前棋盘上白子黑子的位置作为输入,输出是19*19个c ...
最新文章
- 从QQ聊天看51CTO版主专业精神和工作态度!
- spring security自定义指南
- Mirantis 收购 Docker EE | 云原生生态周报 Vol. 28
- Linux中添加、修改、删除用户和用户组
- java mqtt客户端_基于 t-io 实现一个 mqtt5 协议之 mica-mqtt
- 创维linux进入工厂模式,创维电视怎么进入工厂模式?
- Scala中的嵌套循环
- 使用Nodejs搭建server
- 日本研发圆滚滚的球形无人机,被LED屏团团包围
- git 添加远程服务器,远程搭建git服务器新手踩坑
- win2003群集cluster下SQL2005和sp3补丁安装配置3
- 贴片电阻的功率与封装对照表
- java speex_JAVA版-微信语音.speex转.wav(示例代码)
- 虚拟机安装黑苹果【虚拟机安装,黑苹果安装,黑苹果无法全屏问题】(这应该全网最全的资源了吧~)
- 营业执照编码验证规则(15位和18位)
- php怎么查看当前地址,php二分法在IP地址查询中的应用
- 蓄电池与超级电容混合储能并网matlab simulink仿真模型
- linux print$共享文件夹,利用python的看门狗在linux下监控afp共享文件夹
- 【Bio】基础生物学 - 基本氨基酸 amino acids
- Oracle ltrim() rtrim() 函数详细用法
热门文章
- IDEA热部署插件Jrebel安装以及使用步骤
- 当用户越来越“挑剔”,智能音箱如何押注未来?
- Java导出Excel公式非空判断_使用poi导成excel的一个类型判断函数
- 【树莓派4】ARM64 | 家庭网盘【Seafile】的部署 | raspberrypi 4
- 语音识别sdk for ios android,iOS 微信语音SDK 简单使用
- 高温迷你便携式户外12V电烙铁,ZVS推挽电磁加热
- 门槛越低,越容易引起共鸣
- 让生产力加倍的ChatGPT快捷指令
- 领取招财币,第二天,
- BIOS入门篇---详解BIOS