试图带你一文搞懂transformer注意力机制(Self-Attention)的本质

这篇文章主要想搞懂以下几个问题:

1、什么是自注意力(Self-Attention)

2、Q,K,V是什么

好了废话不多说,直接进入正题

Q,K,V分别代表query,key和value,这很容易让人联想到python的字典数据结构,假设我们有一个字典,存放着一个班级的身高(key)和体重(value)关系

{'160':50,'166':57,'173':65,'177':67,...}

这里取前三组,并以表格的形式展现:

        假设接到一个查询(query)身高为162,该查询并未在字典中,想要通过已有的字典数据预测改身高下的体重信息,直观推断,该体重可能会在50-57之间。但是想要定量的计算体重的预测值,我们可以通过加权平均的方式进行求解。

162和160之间的距离为2,162与166之间的距离为4,160与166之间的距离为6,那么162->160取4/6的权重,162->166取2/6的权重。

那么映射到体重上,对体重进行加权,就可以估计出162对应的体重约为50*(4/6)+57*(2/6)=52.33,接近50也符合预期。

因为162在[160,166]之间,所以这里很容易的为他们分配更多的权重,更加的注意他们,越近分配的权重越大,分别为他们分配了2/3和1/3的注意力权重。

但是在字典中,可能其他的键值对(key,value)对该query也存在影响,但是我们没有用上,那么要怎么用上字典中的所有数据,让估计的值更准确呢?

假设用一个函数\alpha(q,k_{i})来表示qk所对应的注意力权重,那么体重的预测值f(q)可以用以下方式得出:

f(q)=\alpha(q,k_{1}) v_{1} + \alpha(q,k_{2}) v_{2} + \alpha(q,k_{3}) v_{3} = \sum_{i=1}^{3}\alpha(q,k_{i}) v_{i}

其中\alpha是能够表征相关性的函数,以高斯核为例,那么

\alpha(q,k_{i})=softmax(-\frac{1}{2}(q-k_{i})^{2})=\frac{e^{-\frac{1}{2}(q-k_{i})^{2}}}{\sum_{j=1}^{3}e^{-\frac{1}{2}(q-k_{j})^{2}}}

其中-\frac{1}{2}(q-k_{i})^{2}为注意力分数,softmax(-\frac{1}{2}(q-k_{i})^{2})为注意力权重。

将对应的数值带入到公式中可得(其中的数字不是张量,所以用了x)

f(162)=\alpha(162,160) \times 50 + \alpha(162,166) \times 57 + \alpha(162,173) \times 65 = \sum_{i=1}^{3}\alpha(162,k_{i})\times v_{i} 

这样我们就可以利用上字典中其他的元素,通过身高来估计体重,这也就是注意力机制。

以上表示的是输入数据为一维的情况,当query,key,value为多维的情况也是类似的。

在介绍多维情况前先介绍注意力分数\alpha(q,k_{i})的计算方式有以下几种:

        目前大多的模型都是缩放点积模型,Transformer模型使用缩放点积注意力机制而不使用加性模型,这是因为缩放点积注意力在实际应用中表现更好。它具有更好的计算效率,适用于长序列,而且有更好的梯度传播性质,使得训练更加稳定。此设计是为了提高模型的性能和效率。这里以点积模型为例。

 对于q_{1}k_{1}

\alpha(q_{1},k_{1})=softmax(q_{1}\cdot k_{1}^{T})

其余的 q_{2}k_{2}以及q_{3}k_{3}以相同的方式处理。

\alpha(q_{2},k_{2})=softmax(q_{2}\cdot k_{2}^{T})

\alpha(q_{3},k_{3})=softmax(q_{3}\cdot k_{3}^{T})

那么就能得到: 

f(q)=\alpha(q_{1},k_{1}^{T}) v_{1} + \alpha(q_{2},k_{2}^{T}) v_{2} + \alpha(q_{2},k_{3}^{T}) v_{3} = \sum_{i=1}^{3}\alpha(q_{i},k_{i}^{T}) v_{i} 

将其转换为矩阵形式:

 即:

f(Q) = softmax(Q\cdot K^{T})\cdot V

还会除以一个特征维度\sqrt{d_{k}}将得分进行缩放,让梯度更稳定,乘法可能会产生梯度爆炸问题。

也就是:

f(Q) = softmax(Q\cdot K^{T}/\sqrt{d_{k}})\cdot V

这就是常见的缩放点积模型。经过softmax后,大值被放大,小值被抑制,这让模型能更加关注权重更大的地方。

如果其中的QKV都是同一个矩阵,那么他就是自注意模型了

X表示其中的一个矩阵

那么f(X) = softmax(X\cdot X^{T}/\sqrt{d_{k}})\cdot X

直接这么做其实没有多大意义的,实际的transformer中会将QKV使用linear做线性变换(可学习参数W),映射到不同的线性空间,并且会将其分成多个head,每个head能学到不同的东西,来增加特征的多样性,从而为模型提供更多的表达能力。

那么就能得到

f(X) = softmax(XW_{q}\cdot X^{T}W_{k}^{T}/\sqrt{d_{k}})\cdot XW_{v}

也就是自注意模型的公式

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

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

相关文章

Ghidra101再入门(上?)-Ghidra架构介绍

Ghidra101再入门(上?)-Ghidra架构介绍 最近有群友问我,说:“用了很多年的IDA,最近想看看Ghidra,这应该怎么进行入门?“这可难到我了。。 我发现,市面上虽然介绍Ghidra怎么用的文章和书籍很多&…

C++ 使用Windows的API CreateDirectory 创建多层级文件夹

简介 使用Windows的API创建多层级文件夹 效果 代码 #include <windows.h> #include <direct.h> #include <iostream> #include <string> #include <sstream> #include <vector> //创建多层级文件夹 bool CreateDir(const std:…

【算法-动态规划】0-1 背包问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

如何把电脑上的游戏串流助手设置为开机自启动?

注意&#xff1a;想要直接将 游戏串流助手 扔进“启动”文件夹里面&#xff0c;是没有用的&#xff0c;重启电脑根本打不开游戏串流助手&#xff01; 步骤一&#xff1a;每次双击 游戏串流助手之后&#xff0c;都会弹出这个用户账户控制&#xff0c;我们第一步就是要把这个禁用…

.net也能写内存挂

最近在研究.net的内存挂。 写了很久的c,发现c#写出来的东西实在太香。 折腾c#外挂已经有很长时间了。都是用socket和c配合。 这个模式其实蛮成功的&#xff0c;用rpc调用的方式加上c#的天生await 非常好写逻辑 类似这样 最近想换个口味。注入托管dll到非托管进程 这样做只…

【C语言】文件的操作与文件函数的使用(详细讲解)

前言&#xff1a;我们在学习C语言的时候会发现在编写一个程序的时候&#xff0c;数据是存在内存当中的&#xff0c;而当我们退出这个程序的时候会发现这个数据不复存在了&#xff0c;因此我们可以通过文件把数据记录下来&#xff0c;使用文件我们可以将数据直接存放在电脑的硬盘…

计算机毕业设计选什么题目好?springboot网上选课系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

python - excel 设置样式

文章目录 前言python - excel 设置样式1. 准备2. 示例2.1. 给单元格设置样式"等线"、大小为24磅、斜体、红色颜色和粗体2.2. 给第二行设置样式"宋体"、大小为16磅、斜体、红色颜色和粗体2.3. 给第三行数据设置垂直居中和水平居中2.4. 给第四行设置行高为30…

日志管理工具Zap笔记

文章目录 Uber-go Zap日志库为什么选择 Zap配置 Zap Logger1. Logger2. SugaredLogger 定制logger1. 将日志写入文件而不是终端2. 将JSON Encoder更改为普通的Log Encoder3. 更改时间编码并添加调用者详细信息4. AddCallerSkip5. 将err日志单独输出到文件 使用Lumberjack进行日…

【安全】 Java 过滤器 解决存储型xss攻击问题

文章目录 XSS简介什么是XSS?分类反射型存储型 XSS(cross site script)跨站脚本攻击攻击场景解决方案 XSS简介 跨站脚本( cross site script )为了避免与样式css(Cascading Style Sheets层叠样式表)混淆&#xff0c;所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全…

MacOS安装conda

下载conda 地址https://repo.anaconda.com/miniconda/ 选择合适的安装文件下载 运行安装 执行命令安装 bash Miniconda3-latest-MacOSX-arm64.sh 设置环境变量 echo export PATH"/Users/your_user_name/miniconda3/bin:$PATH" >> ~/.zshrc source ~/.zsh…

nextjs构建服务端渲染,同时使用Material UI进行项目配置

一、创建一个next项目 使用create-next-app来启动一个新的Next.js应用&#xff0c;它会自动为你设置好一切 运行命令: npx create-next-applatest 执行结果如下&#xff1a; 启动项目&#xff1a; pnpm dev 执行结果&#xff1a; 启动成功&#xff01; 二、安装Mater…

C语言中常用的字符串处理函数(strlen、strcpy、strcat、strcmp)

文章目录 写在前面1. strlen1.1 函数介绍1.2 模拟实现 2. strcpy2.1 函数介绍2.2 模拟实现 3. strcat3.1 函数介绍3.2 模拟实现 4. strcmp4.1 函数介绍4.2 模拟实现 写在前面 本篇文章介绍了C语言中常用的字符串处理函数&#xff0c;包括strlen、strcpy、strcat和strcmp。文章…

【vue3+ts】项目初始化

1、winr呼出cmd&#xff0c;输入构建命令 //用vite构建 npm init vitelatest//用cli脚手架构建 npm init vurlatest2、设置vscode插件 搜索volar&#xff0c;安装前面两个 如果安装了vue2的插件vetur&#xff0c;要禁用掉&#xff0c;否则插件会冲突

使用react-router-dom在新标签页打开链接,而不是本页跳转

一般单页面应用&#xff0c;当你使用useNavigate时候的时候&#xff0c;用useNavigate来跳转&#xff0c;只能是在当前页面刷新跳转的&#xff0c;要想单独在一个tab页打开新页面&#xff0c;大概用三种方式。 第一种 使用link标签&#xff0c;配合target实现 <Link to&q…

2023年中国石油催化裂化剂行业供需、竞争格局及市场规模分析[图]

催化裂化是石油炼制过程之一&#xff0c;是在热和催化剂的作用下使重质油发生裂化反应&#xff0c;转变为裂化气、汽油和柴油等的过程。中国原油加工量在这一阶段逐年提升&#xff0c;2022年国内原油加工量67589.7万吨。 2016-2022年中国原油加工量情况 资料来源&#xff1a;国…

linux,write:xxx has messages disabled 与 Ubuntu多用户同时登录的问题 ubuntu 20.04

write&#xff1a;xxx has messages disabled 问题 被这问题折磨了好久&#xff0c;搜都搜不到&#xff0c;还是灵机一动想到的。 很多 帖子说&#xff0c;要使用 mesg y用了还是没有用&#xff0c;后面我登录了很多用户&#xff0c;发现只有root用户可以给别的用户使用write…

el-data-picker限制日期可选范围

<el-date-pickerclass"date"v-model"date"type"date"change"dateChange"value-format"yyyy-MM-dd"format"yyyy-MM-dd"placeholder"选择日期":picker-options"datePickerOptions"></…

【重拾C语言】八、表单数据组织——结构体(类型、类型别名、直接/间接访问;典例:复数、成绩单)

目录 前言 八、结构体 8.1 结构体类型 8.2 结构体类型名 8.2.1 typedef关键字 8.2.1 结构体类型别名 8.3 结构体变量 8.3.1 使用结构体类型引用 8.3.2 使用结构体类型定义 8.3.3 使用typedef定义的结构体类型别名 8.4 访问结构体变量 8.4.1 直接成员选择表达式 8.…

JOSEF约瑟 矿用一般型选择性漏电继电器 LXY2-660 Φ45 JKY1-660

系列型号&#xff1a; JY82A检漏继电器 JY82B检漏继电器 JY82-380/660检漏继电器 JY82-IV检漏继电器 JY82-2P检漏继电器 JY82-2/3检漏继电器 JJKY检漏继电器 JD型检漏继电器 JY82-IV;JY82J JY82-II;JY82-III JY82-1P;JY82-2PA;JY82-2PB JJB-380;JJB-380/660 JD-12…