深度学习——Transformer的理解整理

news/2024/5/13 4:53:33

一、答主1

机器翻译

transformer刚被提出的时候就是被用于处理机器翻译的。在transformer架构中的不同位置Q,K,V指代的变量是不一样的。
假设现在处理的是英文->德文的翻译任务。

  • 在encoder的输入端,这里执行的是self-attentionQ、K、V 都是指代英文的embedding
  • 在decoder的输入端,这里执行的是masked self-attentionQ、K、V 都是指代德文的embedding
  • 在encoder的输出端和decoder的某个layer的输出进行交互的时候,也就是执行cross-attention的时候,Q指代的是德文的embeddingK、V指代英文的embedding

车道线检测

在CLRNet中也用到了transformer的结构,这里的QKV就可以指代不同的东西了。Q指代了车道线的特征K、V指代的是图像的feature map,来计算车道线特征对图像全局特征的注意力情况。

目标检测

用DETR做检测,Q就指代了object query,它是模型权重的一部分,也就是可学习的参数。K、V同样指代了图像的feature map

从以上3个不同的任务可以更加直观的去理解Q、K、V根据不同任务,指代的物理量是不一样的,也可以更加深入的去理解它的计算过程,和其背后的注意力机制的思想。所以Q这个变量一般同具体的任务有关,而K、V两个变量是Q想要关注的物理量。transformer这种结构能够在不同领域都能使用,可见它的通用性。

二、答主2

问题搜答案

你有一个问题Q,然后去搜索引擎里面搜,搜索引擎里面有好多文章,每个文章V有一个能代表其正文内容的标题K,然后搜索引擎用你的问题Q和那些文章V的标题K进行一个匹配,看看相关度(QK —>attention值),然后你想用这些检索到的不同相关度的文章V来表示你的问题,就用这些相关度将检索的文章V做一个加权和,那么你就得到了一个新的Q’,这个Q’融合了相关性强的文章V更多信息,而融合了相关性弱的文章V较少的信息。这就是注意力机制,注意力度不同,重点关注(权值大)与你想要的东西相关性强的部分,稍微关注(权值小)相关性弱的部分。

三、答主3

查字典

假想你有一个map/dict或者其他名字,一个key对应一个value,在检索的时候,给定query,如果query in map,就是query等于其中一个key,就返回对应的value。这个方法太hard了,有就是有,没有就是没有。对于qkv都是向量的情况,这种方法不可行,只能让它变soft,那就是算一算query和key的关系,按照比例对value加和,这和max变成softmax有异曲同工之妙。

可能更类似于插值,比如你去爬山,半山腰想知道自己的海拔,周围有远有近有高有低好几个海拔参考点,你通过它们来估计自己的海拔,当然是越近越有参考作用,也就是注意力系数越大。要是估算错了怎么办?幸好你爬到山顶有真实海拔,估算错误就修正,顺便把之前你参考的那些值也修正了。爬山的人越多,修正的次数越多,那些参考值越准确。

四、答主4

  • 查询(Q):代表我们想要理解的词(例如,“machines”)的向量表示。
  • 键(K):代表句子中所有词(包括“Thinking”和“machines”)的向量表示,用于与Q进行比较。
  • 值(V):同样代表句子中所有词的向量表示,但是当计算出Q和K的相似度后,将用于加权求和,生成输出。

五、简易代码实现

  • https://github.com/karpathy/makemore

参考文章

  1. 知乎讨论——transformer中的Q,K,V到底是什么?
  2. 一系列文章:ChatGPT背后强大而神秘的力量:用最简单的语言讲解Transformer架构之概览
  3. 外国人专业文章讲解
  4. 图解 transformer——注意力计算原理
  5. Transformer 01:自注意力机制Q,K,V详解

http://www.mrgr.cn/p/54746767

相关文章

Java 提取HTML文件中的文本内容

从 HTML 文件中提取文本内容是数据抓取中的一个常见任务,你可以将提取的文本信息用于编制报告、进行数据分析或其他处理。本文分享如何使用免费 Java API 从HTML 文件中提取文本内容。 安装免费Java库: 要通过Java提取HTML文本,需要用到Free…

增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM,Python代码)

1.效果视频:增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM)_哔哩哔哩_bilibili) 2.三个模型和数据集的介绍 交通流量预测(python代码,压缩包中带有数据,CN…

plsql 新建sql窗口 初始化慢的问题

问题描述: 新建sql窗口当sql语句多的情况下初始化很慢。 解决方法: 采用导入表的方式。 具体方式 工具->导入表->sql插入。 使用命令窗口 导入文件,然后点击导入按钮。

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx,选择【File】->【New Project】,进入芯片选择界面,搜索到蓝桥杯官方的芯片型号,并点击收藏,下次直接点击收藏就…

debian gnome-desktop GUI(图形用户界面)系统

目录 🌞更新 🎨安装 🍎分配 🛋️重启 🔑通过VNC连接 debian gnome-desktop 🌞更新 sudo apt update sudo apt -y upgrade 🎨安装 sudo apt -y install task-gnome-desktop 这个过程比…

sheng的学习笔记-AI-支持向量机(SVM)

目录:sheng的学习笔记-AI目录-CSDN博客 目录 什么是向量机 SVM算法原理 SVM基本模型 SVM对偶问题 什么是对偶问题: 为什么使用对偶问题 拉格朗日定理 拉格朗日乘子法 对偶问题算法 非线性SVM算法原理 核函数 常用核函数 软间隔与正则化 软…

华为NPU开发流程点滴

华为NPU开发流程点滴 NPU/CPU集成操作流程图介绍了App使用HUAWEI HiAI DDK的集成流程。IR在线模型构建 IR在线模型构建通过IR单算子根据原始模型中的关系级联,配置权重数据,构建IR模型网络。 离线模型转换 离线模型转换需要将Caffe、TensorFlow、ONNX、MindSpore模型转换为HU…

Spring 注解开发详解

1. 注解驱动入门案例介绍 1.1 需求描述 1.需求:实现保存一条数据到数据库。 2.表结构:create table account(id int primary key auto_increment,name varchar(50),money double(7,2)); 3.要求:使用spring框架中的JdbcTemplate和DriverMana…

CISCN 2023 WEB

CISCN 2023 WEB unzip 前置知识unzip是linux系统下的一个解压缩命令:unzip指令解压,将压缩文件test.zip在指定目录/tmp(当前)下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件。软连接:类似于Windows的快捷方式,但是它可以直接操作软连接指向的对象,而Wi…

【Docker】Docker的网络与资源控制

Docker网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内…

【zabbix7】新版本尝鲜之connector

zabbix历史版本中,会使用python脚本,把zabbix的告警发送到kafka进行二次处理,或者使用filebeat把zabbix的Export的njson指标数据发送到kafka进行二次处理,然而在zabbix7中新增了新功能connector简化了操作并且可以根据tag进行区分…

巧用断点设置查找bug【debug】

默认设置的断点,当代码运行到断点处MCU就会被挂起,从而停在断点处。 但在某些情况下,如调试FCCU时,如果设置断点,MCU停下后将会导致 FCCU 配置WDG超时。或在调试类似电机控制类的应用时,不适当的断点会导 致…

Ubuntu终端常用指令

cat cat 读取文件的内容 1、ls 一、 1、ll 显示当前目录下文件的详细信息,包括读写权限,文件大小,文件生成日期等(若想按照更改的时间先后排序,则需加-t参数,按时间降序(最新修改的时间排在最前)执行: $ ll -t, 按时间升序执行: $ ll -t | tac): ll 2、查看当前所处路径(完整…

朴素贝叶斯算法分类

def loadDataSet():postingList[[my, dog, has, flea, problems, help, please], #切分的词条[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, posting, stupid, worthless, garbage],[mr, licks, ate, my, steak, …

webpack 打包优化 - splitChunks

打包时会遇到的问题: 打包文件过大,首屏加载时间过长,js阻塞页面渲染导致白屏改动业务代码后,对于第三方库也会一并重新打包到一个出口文件,浏览器无法利用缓存来减少请求和加载的时间 针对以上两个问题,…

03-修饰符-监听属性-发送Ajax请求-生命周期钩子

事件修饰符事件修饰符 作用.stop 只处理自己的事件,父控件冒泡的事件不处理(阻止事件冒泡),一般用在子元素类上.self 只处理自己的事件,子控件冒泡的事件不处理,一般用在父元素上.prevent 阻止a连接的跳转.once 事件只会触发一次(适用于抽奖页面)使用修饰符时,顺序很重…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时,有一个值会接受nil(因为redis中没有该数据)或者数值,当该值为nil时执行报错,因为会用到将该值与其他数字比较,故报错attempt to compare nil with number 当然…

数据结构 - 队列 [动画+代码注释超详解],萌新轻松上手!!!

一. 队列的概念 队列是一种特殊的线性表,用于存储元素,并且按照先进先出(First In First Out)的顺序进行管理,这意味着最先加入队列的元素将会是最先从队列中被移除的元素 队列的原型:只允许在一端进行插入数据的操作&#xff0c…

【项目实战】基于高并发服务器的搜索引擎

【项目实战】基于高并发服务器的搜索引擎 目录 【项目实战】基于高并发服务器的搜索引擎搜索引擎部分代码index.htmlindex.hpplog.hppparser.cc(用于对网页的html文件切分且存储索引关系)searcher.hpputil.hpphttp_server.cc(用于启动服务器和…

python作业 切片逆转

题目: (反转显示一个整数)编写下面的函数,反向显示一个整数。 列如:reserse(3456)。编写一个测试程序,提示用户输入一个整数,然后显示它的反向数。 第一步定义一个函数: def rev…