注意力机制略解

news2024/10/7 10:22:31

引子

例如,现在需要拟合函数f(x),我们已知函数上的若干点(xi,yi)

现在我们想知道在自变量取x’的时候,函数值y’为多少

正常的思路比如拉格朗日插值,牛顿插值,直接去估计函数的表达式,然后带入点值去计算y’

但是根据数学直觉来说,函数如果是连续的,那么离查询点x’越近的点xi,会对y’造成的影响越大

如上图,(x4,y4)对需要查询的(x',y')带来的影响相比于(x7,y7)显然是更大的

如果说我们假设目前的函数模型是一个简单的求平均值模型即

f(x)=\frac{1}{n}\sum_{i=1}^{n}y_i

根据我们上文的发现,我们可以把它改写为加权平均值

f(x)=\sum_{i=1}^{n}\alpha _iy_i   ,满足 \sum_{i=1}^n \alpha _i =1

然后我们来使用神经网络训练这个加权的权重,输入两个变量(x,xi),输出为权重

f(x)=\sum_{i=1}^{n}g(x,x_i) y_i

当然还要满足\sum_{i=1}^n g(x,x_i) =1,这一点可以用喜闻乐见的softmax函数来实现

根据上述这种做法(似乎也被称为Nadaraya-Watson核回归),我们抽象出注意力机制的基本模型

注意力机制

查询Q、键K、值V

老生常谈的内容了

查询Q就相当于我们输入进入函数的那个x’

键K就是我们已知函数点的x坐标

值V就是我们已知函数点的y坐标

我们的输出就是一系列V的加权和

现在的重点就是如何设计g(x,x_i)这个函数,也就是注意力评分函数,能够让拟合效果尽量好

有两种主流的设计方法(当然还有很多其他的方法)

假设我们输入为q向量和k向量

加性注意力:

g(q,k)=w_v^T*tanh(W_q*q+W_k*k)

在pytorch中可以利用tensor加法的广播机制来做到矩阵化运算

缩放点积注意力:(要求q与k向量长度相同,均为d)

g(q,k)=q^T\cdot k/\sqrt{d}

这个形式直接可以写成矩阵乘法的形式,在套上一个softmax就算完了,所以比较受大众喜爱

为了能够更好地使用这种机制(为了把更多的死马当作活马医)

我们添加全连接层,例如网络中的某个阶段,特征为X

我们给它加三个分别的全连接层Qx,Kx,Vx,得到QKV矩阵,就能够用上述的注意力模型套了

然后美其名曰,自注意力机制(我实在没想通这样做到底有什么意义,或许是构造了二阶特征?)

事实证明,这个机制确实发挥了非常巨大的作用(你就说它行不行吧)

说到注意力那就必须得提起Transformer

Transformer里面使用的注意力机制更加优秀,虽然仍然使用的seq2seq架构

他利用了上文的context作为解码器输入的Q和K,解码器两层注意力,第一层是自注意力,第二层是自身作为V的输入,利用上文context作为Q、K的输入,融合到一起的注意力层(更有使用查询和键、值的实际意义)(但为什么是作为Q、K,而不是只作为Q呢?),另外他还设计了非常巧妙的位置编码,减少了位置信息的损失。

不过这里并不打算展开讲

推荐一个非常优质的、图文并茂的Transformer的讲解。

The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.

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

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

相关文章

Linux网络服务-DHCP

一、DHCP工作原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):用于自动获取IP地址 1.客户端会发送一个广播DHCP Discover报文去寻找DHCP服务器 2.客户端只会接收第一个回复的DHCP服务器的报文 3.服务器会发…

评估LLM

文章目录 一、LLM 基准测试LLM 排行榜 二、评估指标1、传统指标2、非传统指标2.1 基于嵌入的方法2.2 其他基于语言模型的指标2.3 LLM 辅助方法GPTScoreG-Eval 3、可能的陷阱 三、评估基于LLM的应用1、选择评估指标2、评估 评估方法3、构建您的评估集 四、工具1、OpenAI 评估2、…

海外三大AI图片生成器对比(Stable Diffusion、Midjourney、DALL·E 3)

Stable Diffusion DreamStudio 是Stable Diffusion 的官方网页,价格便宜,对图片的操作性强,但同时编辑页面不太直观,对使用者的要求较高。 与 DALLE 和 Midjourney 不同,Stable Diffusion 是开源的。这也意味着&…

微服务:Nacos注册中心

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Nacos注册中心 一、服务注册与发现1.启动Nacos…

【算法每日一练】

蛮有意思的的一道题,最后要判断能否成为一种1~n的全排列,我最这样做的: 整个数组先排序一下。假设遍历到了i,那就判断前面b和r的个数,但是有想到了后面可能还会对前面的结果产生影响,所以就抛弃了这个想法…

项目|保障房房产管理系统,政务房产解决方案

一、系统概况 保障房管理系统是是为了落实中央关于住房保障的相关政策,实现对低收入家庭住房状况的调查管理、保障计划及落实管理、保障申请及审核管理、保障户和保障房源档案管理等。 针对政府保障房产管理的一站式解决方案,专注于为解决复杂、繁琐的…

java-stream流案例

需求 代码 Vote类 // 1. 定义一个投票类 public class Vote {private String name;private ArrayList<String> voteList;public Vote(String name, ArrayList<String> voteList) {this.name name;this.voteList voteList;}public String getName() {return nam…

《Fundamentals of Power Electronics》——三端电池的旋转、负载差分连接

以下是关于三端电池的旋转的相关知识点&#xff1a; Buck电路、Boost电路和Buck-Boost电路均包含一个与单刀单掷开关相连的电感。如下图所示。 将上图中的电感和开关网络视为一个标有a,b,c三端的基础电池。该电池在电源和负载之间有三种不同的连接方式。a-A b-B c-C连接方式组…

数字信号的产生与检测——DSP学习笔记六

本专栏的博客的图片大部分来源于老师的PPT&#xff0c;本博客只是博主对于上课内容的知识结构的分析和梳理。 几种数字信号的产生 正弦波信号 多项式逼近(除了泰勒展开&#xff0c;还有一种方法是切比雪夫逼近法&#xff0c;感兴趣可以自己去了解一下&#xff09; 查找表 核心思…

可编程SG-8018系列晶体振荡器

近年来&#xff0c;由于越来越需要更小的电子设备&#xff0c;使其在更广泛的环境中具有更大的功率和功能包括极端0.工厂和工厂设备。爱普生晶振针对市场将开发了可编程晶体振荡器系列产品新的SG-8018系列产品,共四种型号分别为SG-8018CA、SG-8018CB、SG-8018CE、SG8018CG&…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

Java小白福音丨保姆级的JDK+Eclipse+其他常用软件安装教程!

是的我看见到处是阳光 JDK正在安装 新世界来得像梦一样 让我暖洋洋 你的Java学习还在继续吗 你的JDK安装了吗 这儿有一份开发软件安装新教程 你不想学学吗 明天一早&#xff0c; 我猜阳光会好 我要把自己打扫 把破旧的套路丢掉 哦这样多好 加油吧Java少年 前言 想学习Java&…

使用 SSH 密钥配置 Git 账号需要以下步骤

1、生成 SSH 密钥&#xff1a; 如果你还没有 SSH 密钥&#xff0c;可以使用以下命令在电脑终端中生成一个新的 SSH 密钥&#xff1a; ssh-keygen -t rsa -b 4096 -f /Users/XXXX/.ssh/id_rsa_my_personal -C "your_emailexample.com" ssh-keygen 是用于生成 SSH 密…

面试:Redis

目录 一、缓存穿透 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 二、缓存击穿 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 三、缓存雪崩 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 3、解决方案三&#xff1a; 4、解决方案四&#x…

Java对象在堆和栈上的存储(对象布局,待完善)

0、前言 这里提到的 Java 对象不仅仅包含引用类型&#xff08;Object&#xff09;&#xff0c;还包含基本数据类型&#xff08;boolean、int、long、float、double&#xff09;。文中部分图片来源于 B站 黑马程序员。 1、在栈上的数据存储 1.1、局部变量 局部变量包含以下情…

过滤器Filter --学习笔记

什么是Filter&#xff1f; Filter表示过滤器&#xff0c;是 JavaWeb三大组件(Servlet、Filter、Listener)之一过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;登录校验、统一编码处理、敏感字符…

NLP发展及其详解

一、RNN(循环神经网络) 在这里附上一个很好的笔记 零基础入门深度学习(5) - 循环神经网络 RNN(循环神经网络)的结构特点在于其循环单元的设计,这种设计允许网络在处理序列数据时保持对之前信息的记忆。下面详细解释RNN的结构: 循环单元:RNN的循环单元是网络的核心,它…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…

怎么设置 idea terminal 窗口的编码格式

1 修改Terminal 窗口为 Git bash 窗口 打开 settings 设置界面&#xff0c;选择 Tools 中的 Terminal (File -> settings -> Tools -> Terminal) 修改 Shell path 为你的 Git bash 安装路径&#xff0c;我的在 C:\my_software\java\Git\bin\bash.exe 2 解决中文显示…

【UE5】数字人基础

这里主要记录一下自己在实现数字人得过程中涉及导XSens惯性动捕&#xff0c;视频动捕&#xff0c;LiveLinkFace表捕&#xff0c;GRoom物理头发等。 一、导入骨骼网格体 骨骼网格体即模型要在模型雕刻阶段就要雕刻好表捕所需的表情体(blendshape)&#xff0c;后面表捕的效果直…