Self-attention学习笔记(Self Attention、multi-head self attention)

李宏毅机器学习Transformer

Self Attention学习笔记记录一下几个方面的内容

  • 1、Self Attention解决了什么问题
  • 2、Self Attention 的实现方法以及网络结构
    • Multi-head Self Attention
    • positional encoding
  • 3、Self Attention 方法的应用
  • 4、Self Attention 与CNN以及RNN对比

1、Self Attention解决了什么问题

机器翻译任务输入序列的长度与输出序列的长度可能相同也可能不相同
产品评价预测任务无论输入序列的长度为多少,输出的序列长度都为固定大小
如果序列中每个词的标签为该次对应词性的任务重输出的序列长度与输入的序列长度相同
在这里插入图片描述

(1)使用 Fully Connected网络来处理,

  • 如果每一个出入的向量对应一个Fully Connected网络,每一个向量之间不考虑其他向量之间的上线文关联信息;

(2)可以使用一个window来获取指定范围内向量的上下文信息。

  • 当输入的序列长度不固定时,会出现window长度无法确定的问题;
  • 如果要获取整合序列的信息,而整个序列很长,window覆盖整个序列长度,那么会出现Fully Connected网络中要处理的信息量很大,网络参数多,计算量大的问题。

要结合整个sequence 的信息需要,使用了Self-Attention的方法。
使Self-Attention,实现每一个输出的向量都整合了所有输入向量的信息。
在这里插入图片描述
self attention可以使用多次,在Fully Connected输出层还能再接self attention,因此Self Attention 的输入可以使原始输入 或者 隐藏层

2、Self Attention 的实现方法以及网络结构

self attention的实现通过计算每一个输入向量与其他所有输入向量的相关性α作为attention score,与当前向量点乘操作,得到输出向量。
Alt
计算两个向量相关性的方法为dot-product(点乘)
在这里插入图片描述
Self Attention 的公式如下
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q ⋅ K T d k ) ⋅ V Attention(Q,K,V) = softmax(\frac{Q·K^T}{\sqrt{d_k}} ) ·V Attention(Q,K,V)=softmax(dk QKT)V
其中 q表示Query,k表示Key。
需要计算每一个节点与其他节点的相关性(这些计算是可以同时进行的)。
以长度为4的序列( a1 ,a2 ,a3 ,a4)为例,
Q = W q I Q=W^qI Q=WqI

K = W k I K=W^kI K=WkI

V = W v I V=W^vI V=WvI

对每一个输入向量,分别乘以矩阵Wq、Wk、Wv,得到对应向量q、k、v。
对于第i个向量,计算与其他向量的相关性,则用qi 分别与其他向量的kj 做点乘。
在这里插入图片描述

( k 1 k 2 k 2 k 4 ) ⋅ q 1 = ( α 1 , 1 α 1 , 2 α 1 , 3 α 1 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^1=\begin{pmatrix} α_{1,1} \\ α_{1,2}\\α_{1,3}\\α_{1,4} \end{pmatrix} k1k2k2k4 q1= α1,1α1,2α1,3α1,4
( k 1 k 2 k 2 k 4 ) ⋅ q 2 = ( α 2 , 1 α 2 , 2 α 2 , 3 α 2 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^2=\begin{pmatrix} α_{2,1} \\ α_{2,2}\\α_{2,3}\\α_{2,4} \end{pmatrix} k1k2k2k4 q2= α2,1α2,2α2,3α2,4
( k 1 k 2 k 2 k 4 ) ⋅ q 3 = ( α 3 , 1 α 3 , 2 α 3 , 3 α 3 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^3=\begin{pmatrix} α_{3,1} \\ α_{3,2}\\α_{3,3}\\α_{3,4} \end{pmatrix} k1k2k2k4 q3= α3,1α3,2α3,3α3,4
( k 1 k 2 k 2 k 4 ) ⋅ q 4 = ( α 4 , 1 α 4 , 2 α 4 , 3 α 4 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·q^4=\begin{pmatrix} α_{4,1} \\ α_{4,2}\\α_{4,3}\\α_{4,4} \end{pmatrix} k1k2k2k4 q4= α4,1α4,2α4,3α4,4
( k 1 k 2 k 2 k 4 ) ⋅ ( q 1 , q 2 , q 3 , q 4 ) = ( α 1 , 1 , α 2 , 1 , α 3 , 1 , α 4 , 1 α 1 , 2 , α 2 , 2 , α 3 , 2 , α 4 , 2 α 1 , 3 , α 2 , 3 , α 3 , 3 , α 4 , 3 α 1 , 4 , α 2 , 4 , α 3 , 4 , α 4 , 4 ) \begin{pmatrix} k_1 \\ k_2 \\k_2\\k_4 \end{pmatrix}·\begin{pmatrix}q^1,q^2,q^3, q^4\end{pmatrix}=\begin{pmatrix} α_{1,1},α_{2,1},α_{3,1},α_{4,1} \\ α_{1,2},α_{2,2},α_{3,2},α_{4,2}\\α_{1,3},α_{2,3},α_{3,3},α_{4,3}\\α_{1,4},α_{2,4},α_{3,4},α_{4,4} \end{pmatrix} k1k2k2k4 (q1,q2,q3,q4)= α1,1,α2,1,α3,1,α4,1α1,2,α2,2,α3,2,α4,2α1,3,α2,3,α3,3,α4,3α1,4,α2,4,α3,4,α4,4
K T ⋅ Q = A K^T ·Q=A KTQ=A
将α值经过SoftMax,转化为0-1之间的值,且α值之和等于1。
在这里插入图片描述
以第一个向量为例,计算与每一个向量的相关系数α’
α 1 , i ′ = e x p ( α 1 , i ) / ∑ j e x p ( α 1 , j ) α'_{1,i}=exp(α_{1,i})/\sum_{j}exp(α_{1,j}) α1,i=exp(α1,i)/jexp(α1,j)

以上计算的向量结果侧重提取向量与其他向量的attention score,再与向量V点乘,V向量只包含输入向量的信息。
b i = ∑ j α 1 , i ′ ⋅ v i b_i=\sum_{j}α'_{1,i}·v^i bi=jα1,ivi
在这里插入图片描述
最终得到输出向量b。
根据自己理解画了一张self attention 的结构图
在这里插入图片描述
用向量机算来表示self attention的过程如图所示:
在这里插入图片描述
其中Wq 、Wk 、Wv 是可以训练的参数。
对于第一步由输入向量αi 分别与矩阵Wq 、Wk 、Wv做点乘,可以将输入向量的矩阵合并计算:

在这里插入图片描述
第二步将当前向量的query向量Q与其他所有向量的K点乘计算
在这里插入图片描述
可以将转置后的K向量合并后与合并后的Q做点乘运算
在这里插入图片描述
第三步得到α向量后经过softmax后的**α’**与合并后的向量V做点乘

在这里插入图片描述


Multi-head Self Attention

Multi-head Self Attention 多头注意力机制在原Self Attention上增加了不同的q(Query)。
将第一步得到的qi分别与不同的向量点乘操作,生成qi,1,qi,2

q i , 1 = W q , 1 ⋅ q i q^{i,1}=W^{q,1}·q^i qi,1=Wq,1qi

q i , 2 = W q , 2 ⋅ q i q^{i,2}=W^{q,2}·q^i qi,2=Wq,2qi

不同的q负责不同的相关性(问题中有几种不同的相关性,就使用几个head)。
那么生成了多个q,对应也要生成多个k和v;
在这里插入图片描述

计算时,分别取每个q值与对应的第二个下标值相同的k向量做点乘;
经过softmax后与对应下标值相同的v向量做点乘,得到输出向量结果。


positional encoding

在self attention中还需体现向量的位置信息。
在网络中输入向量加入了一个位置向量ei
在这里插入图片描述
向量ei 的值通过手动添加或者在网络中训练得到。

3、Self Attention 方法的应用

  • 语音处理
    对于输入的一段长度为L语音序列,做self attention计算α得到的attention metrix的维度是L×L。当序列过长时,考虑运算速度,使用Truncated Self-attention,只在一个设定的范围内使用Self-attention。
    在这里插入图片描述

  • Self attention应用在图像处理
    将一张图片看做是一系列向量,对于一个三通道的图片,将每一个像素点看做是一个三维的向量
    在这里插入图片描述

4、Self Attention 与CNN以及RNN对比

  • Self Attention与CNN
    CNN对于固定的kernel对应在特征图上是固定大小的receiptive field,而self attention 提取到的是整张图片的信息。self attention的receiptive field大小是通过学习得到的。
    CNN是Self Attention特例情况
  • Self Attention与RNN
    RNN网络只能够看到已经输入到网络中的信息,Self Attention能够使用到所有输入向量的信息。
    RNN计算当前时间点需要依赖于上一个时间点的计算结果,当前向量之前的所有向量的信息都需要存放在内存中。Self Attention当前向量中包含了每一个输入向量的信息。
    Self Attention可以实现并行处理。

对于K、Q、V向量的理解
是由原始输入向量分别与三个向量点乘后获得,这三个向量又是可以学习的参数。
在这里插入图片描述
参数Q和K共同作用,来决定两个向量的相关系数。


感谢:
小白都能看懂的超详细Attention机制详解

https://www.bilibili.com/video/BV1v3411r78R/?p=1&vd_source=91cfed371d5491e2973d221d250b54ae

https://www.bilibili.com/video/BV1Kq4y1H7FL/?spm_id_from=333.999.0.0&vd_source=91cfed371d5491e2973d221d250b54ae

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于grpc从零开始搭建一个准生产分布式应用(8) - 01 - 附:GRPC公共库源码

开始前必读&#xff1a;​​基于grpc从零开始搭建一个准生产分布式应用(0) - quickStart​​ common包中的源码&#xff0c;因后续要用所以一次性全建好了。 一、common工程完整结构 二、引入依赖包 <?xml version"1.0" encoding"UTF-8"?> <p…

【linux】cat的基本使用

cat是一个常用的命令&#xff0c;用来显示文本的内容&#xff0c;合并和创建文本文件 类似命令还有显示文件开头的内容&#xff1a; 【linux】head的用法 输出文件开头的内容-CSDN博客 显示文件末尾的内容&#xff1a; 【linux】tail的基本使用-CSDN博客 当我们想到了想要…

Zookeeper-Zookeeper选举源码

看源码方法&#xff1a; 1、先使用&#xff1a;先看官方文档快速掌握框架的基本使用 2、抓主线&#xff1a;找一个demo入手&#xff0c;顺藤摸瓜快速静态看一遍框架的主线源码&#xff0c;画出源码主流程图&#xff0c;切勿一开始就陷入源码的细枝末节&#xff0c;否则会把自…

Primavera Unifier 项目控制延伸:Phase Gate理论:3/3

继续上一篇阶段Gate的具体内容 https://campin.blog.csdn.net/article/details/127827681https://campin.blog.csdn.net/article/details/127827681 阶段 3 研发 前述阶段的计划和安排都要在研发阶段执行起来&#xff0c;同时&#xff0c;最重要的产品设计和开发部分也需要在…

系统学习Python——装饰器:函数装饰器-[对方法进行装饰:基础知识]

分类目录&#xff1a;《系统学习Python》总目录 我们在前面的文章中编写了第一个基于类的tracer函数装饰器的时候&#xff0c;我们简单地假设它也应该适用于任何方法一一一被装饰的方法应该同样地工作&#xff0c;并且自带的self实例参数应该直接包含在*args的前面。但这一假设…

计算机基础面试题 |04.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

python打开文件的方式比较

open(addr,w) 打开之后文件无论以前有什么&#xff0c;打开后都要清空 /// open(addr,r) 文件打开后&#xff0c;不删除以前内容

多人协同开发git flow,创建初始化项目版本

文章目录 多人协同开发git flow&#xff0c;创建初始化项目版本1.gitee创建组织模拟多人协同开发2.git tag 打标签3.git push origin --tags 多人协同开发git flow&#xff0c;创建初始化项目版本 1.gitee创建组织模拟多人协同开发 组织中新建仓库 推送代码到我们组织的仓库 2…

STM32与TB6612电机驱动器的基础入门教程

TB6612是一款常用的双路直流电机驱动芯片&#xff0c;适用于小型机器人以及其他需要控制电机方向和转速的应用。在STM32微控制器的配合下&#xff0c;可以实现对TB6612电机驱动器的控制&#xff0c;进而实现电机的控制。本文将带领读者一步步了解如何搭建基于STM32与TB6612的电…

我从来不理解JavaScript闭包,但我用了它好多年

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 你是否学习了很久JavaScript但还没有搞懂闭包呢&#xff1f;今天就来聊一下…

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

最近在写和同学一起做一个前后端分离的项目&#xff0c;今日开始对接口准备进行 登录注册 的时候发现前端在发起请求后&#xff0c;抓包发现后端返回了一个403的错误&#xff0c;解决了很久发现是【跨域问题】&#xff0c;第一次遇到&#xff0c;便作此记录✍ 异常描述 在后端…

Java---网络编程

文章目录 1. 网络编程概述2. InetAddress3. 端口和协议4. Java网络API5. URL6. URLConnection类 1. 网络编程概述 1. 计算机网络&#xff1a;是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软…

2024年Mac专用投屏工具AirServer 7 .27 for Mac中文版

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…

Matlab技巧[绘画逻辑分析仪产生的数据]

绘画逻辑分析仪产生的数据 逻分上抓到了ADC数字信号,一共是10Bit,12MHZ的波形: 这里用并口协议已经解析出数据: 导出csv表格数据(这个数据为补码,所以要做数据转换): 现在要把这个数据绘制成波形,用Python和表格直接绘制速度太慢了,转了一圈发现MATLAB很好用,操作方法如下:…

逗号表达式与赋值表达式

逗号表达式和赋值表达式是C语言中常用的表达式类型。它们可以用于各种目的&#xff0c;包括计算和评估表达式、初始化变量、为函数调用提供参数以及将值分配给变量。 逗号表达式 逗号表达式允许在单个语句中计算和评估多个表达式。逗号分隔每个表达式&#xff0c;并且表达式从…

Spring Cloud Gateway + Nacos 灰度发布

前言 本文将会使用 SpringCloud Gateway 网关组件配合 Nacos 实现灰度发布&#xff08;金丝雀发布&#xff09; 环境搭建 创建子模块服务提供者 provider&#xff0c;网关模块 gateway 父项目 pom.xml 配置 <?xml version"1.0" encoding"UTF-8"?…

阿里云服务器开放端口Oracle 1521方法教程

阿里云服务器ECS端口是在安全组设置的&#xff0c;Oracle数据库1521端口号开放是在安全组中添加规则来实现的&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器开放Oracle 1521端口方法教程&#xff1a; 阿里云服务器开放Oracle 1521端口 在阿里云服务器ECS…

微信小程序自定义步骤条效果

微信小程序自定义一个步骤条组件&#xff0c;自定义文字在下面&#xff0c;已完成和未完成和当前进度都不一样的样式&#xff0c;可点击上一步和下一步切换流程状态&#xff0c;效果如下。 这是视频效果&#xff1a; 前端实现步骤条效果 下面我们一步步实现编码&#xff0c;自定…

华为鸿蒙运行Hello World

前言&#xff1a; 从11月中旬开始通过B站帝心接触鸿蒙&#xff0c;至今一个半月左右不到&#xff0c;从小白到入坑&#xff0c;再到看官网案例&#xff0c;分析案例&#xff0c;了解技术点&#xff0c;还需要理清思路&#xff0c;再写博客&#xff0c;在决定写 &#xff1c;Har…

仓库管理系统

基于SSM框架的仓库管理系统