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

news2025/1/20 21:51:09

李宏毅机器学习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.coloradmin.cn/o/1344604.html

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

相关文章

STM32移植LVGL图形库

1、问题1:中文字符keil编译错误 解决方法:在KEIL中Options for Target Flash -> C/C -> Misc Controls添加“--localeenglish”。 问题2:LVGL中显示中文字符 使用 LVGL 官方的在线字体转换工具: Online font converter -…

Python面向对象编程 —— 类和异常处理

​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 1. 类 1.1 类的定义 1.2 类变量和实例变量 1.3 类的继承 2. 异常处理 2.1类型异常 2.…

【集合竞价】

文章目录 集合竞价时间集合竞价量柱的关系a、亮度顶部是未匹配的成交量b、量柱底部表示虚拟撮合的成交量 集合竞价常用的几种形态1、低开集合竞价2.平开集合竞价3、高开集合竞价4、看集合竞价的关键时间点:5、需要注意的几点 庄家使用集合竞价进行的操作1、利用集合…

【EI会议征稿通知】2024年通信技术与软件工程国际学术会议 (CTSE 2024)

2024年通信技术与软件工程国际学术会议 (CTSE 2024) 2024 International Conference on Communication Technology and Software Engineering (CTSE 2024) 2024年通信技术与软件工程国际学术会议 (CTSE 2024)将于2024年03月15-17日在中国长沙举行。会议专注于通信技术与软件工…

3D视觉-结构光测量-线结构光测量

概述 线结构光测量中,由激光器射出的激光光束透过柱面透镜扩束,再经过准直,产生一束片状光。这片光束像刀刃一样横切在待测物体表面,因此线结构光法又被成为光切法。线结构光测量常采用二维面阵 CCD 作为接受器件,因此…

【代码随想录】刷题笔记Day42

前言 这两天机器狗终于搞定了,一个控制ROS大佬,一个计院编程大佬,竟然真把创新点这个弄出来了,牛牛牛牛(菜鸡我只能负责在旁边喊加油)。下午翘了自辩课来刷题,这次应该是元旦前最后一刷了&…

自然语言处理3——玩转文本分类 - Python NLP高级应用

目录 写在开头1. 文本分类的背后原理和应用场景1.1 文本分类的原理1.2 文本分类的应用场景 2. 使用机器学习模型进行文本分类(朴素贝叶斯、支持向量机等)2.1 朴素贝叶斯2.1.1 基本原理2.1.2 数学公式2.1.3 一般步骤2.1.4 简单python代码实现 2.2 支持向量…

JSON 详解

文章目录 JSON 的由来JSON 的基本语法JSON 的序列化简单使用stringify 方法之 replacerstringify 方法之 replacer 参数传入回调函数stringify 方法之 spacestringify 方法之 toJSONparse 方法之 reviver 利用 stringify 和 parse 实现深拷贝 json 相信大家一定耳熟能详&#x…

2023-12-30 AIGC-LangChain介绍

摘要: 2023-12-30 AIGC-LangChain介绍 LangChain介绍 1. https://youtu.be/Ix9WIZpArm0?t353 2. https://www.freecodecamp.org/news/langchain-how-to-create-custom-knowledge-chatbots/ 3. https://www.pinecone.io/learn/langchain-conversational-memory/ 4. https://de…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例:Hello World! 新建一个express.js的文件,写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

迪杰斯特拉(Dijkstra)算法详解

【专栏】数据结构复习之路 这篇文章来自上述专栏中的一篇文章的节选: 【数据结构复习之路】图(严蔚敏版)两万余字&超详细讲解 想了解更多图论的知识,可以去看看本专栏 Dijkstra 算法讲解: 迪杰斯特拉算法(Di…

如何理解李克特量表?选项距离相等+题目权重相等!

在学术研究中,通过开展问卷调查获取数据时,调查问卷分为量表题和非量表题。量表题就是测试受访者的态度或者看法的题目,大多采用李克特量表。 李克特量表是一种评分加总式态度量表(attitude scale),由美国…

TCP/IP的五层网络模型

目录 封装(打包快递) 6.1应用层 6.2传输层 6.3网络层 6.4数据链路层 6.5物理层 分用(拆快递) 6.5物理层 6.4数据链路层 6.3网络层 6.2传输层 6.1应用层 封装(打包快递) 6.1应用层 此时做的数据…

【数字图像处理】比特平面分割,对比空间平滑滤波器的尺寸对滤波效果,对比均值滤波器和中值滤波器对图像的平滑效果

实验目的 对比均值滤波器和中值滤波器对图像的平滑效果;编程对比空间平滑滤波器的尺寸对滤波效果的影响;编程对比均值滤波器和中值滤波器对图像的平滑效果。 实验方法 比特平面分割 比特平面分层,代替突出灰度级范围,突出特定…

Unity坦克大战开发全流程——开始场景——设置界面

开始场景——设置界面 step1:设置面板的背景图 照着这个来设置就行了 step2:写代码 关联的按钮控件 监听事件函数 注意:要在start函数中再写一行HideMe函数,以便该面板能在一开始就能隐藏自己。 再在BeginPanel脚本中调用该函数即…

基于大语言模型LangChain框架:知识库问答系统实践

ChatGPT 所取得的巨大成功,使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括 API 集成、交互逻辑、数据存储等…

为什么 export 导出一个字面量会报错而使用 export default 不会报错

核心 其实总的来说就是 export 导出的是变量的句柄(或者说符号绑定、近似于 C 语言里面的指针,C里面的变量别名),而 export default 导出的是变量的值。 需要注意的是:模块里面的内容只能在模块内部修改,…

canvas绘制红绿灯路口

无图不欢&#xff0c;先上图 使用方法&#xff08;以vue3为例&#xff09; <template><canvas class"lane" ref"laneCanvas"></canvas> </template><script setup> import { ref, onMounted } from vue import Lane from …

IDEA中允许开启多个客户端

这个时候不要在客户端里创建socket对象时指定端口号了&#xff0c;否则会报错BindException

普通人如何月入过万?2024普通人创业适合干什么?

如果你的月收入不到1万块&#xff0c;也从来没有体验过一天就赚1万块是什么感觉的话&#xff0c;你还想创业&#xff1f;你如果想通过创业逆天改命&#xff0c;麻烦你一定要看完这篇文章。 普通人你要是想赚钱&#xff0c;一定要去赚那种能看得见的钱。 什么叫看得见的钱&…