首页 > 其他分享 >TransFormer--注意力机制:多头注意力

TransFormer--注意力机制:多头注意力

时间:2024-11-12 19:47:28浏览次数:3  
标签:TransFormer -- well 矩阵 Z1 计算 注意力 Z2

TransFormer--注意力机制:多头注意力

多头注意力是指我们可以使用多个注意力头,而不是只用一个。也就是说,我们可以应用在上一篇中学习的计算注意力矩阵Z的
方法,来求得多个注意力矩阵。

我们通过一个例子来理解多头注意力层的作用。以All is well这句话为例,假设我们需要计算well的自注意力值。在计算相似度分数后,我
们得到下图所示的结果。

在这里插入图片描述

从上图中可以看出,well的自注意力值是分数加权的值向量之和,并且它实际上是由All主导的。也就是说,将All的值向量乘以0.6,而well的值向量只乘以了0.4。这意味着 z w e l l z_{well} zwell​将包含60%的All的值向量,而well的值向量只有40%。

这只有在词义含糊不清的情况下才有用。以下句为例:

A dog ate the food because it was hungry

(一只狗吃了食物,因为它很饿)

假设我们需要计算it的自注意力值。在计算相似度分数后,我们得到下图所示的结果。

在这里插入图片描述

从上图中可以看出,it的自注意力值正是dog的值向量。在这里,单词it的自注意力值被dog所控制。这是正确的,因为it的含义模糊,它指的既可能是dog,也可能是food。

如果某个词实际上由其他词的值向量控制,而这个词的含义又是模糊的,那么这种控制关系是有用的;否则,这种控制关系反而会造成误
解。为了确保结果准确,我们不能依赖单一的注意力矩阵,而应该计算多个注意力矩阵,并将其结果串联起来。使用多头注意力的逻辑是
这样的:使用多个注意力矩阵,而非单一的注意力矩阵,可以提高注意力矩阵的准确性。

假设要计算两个注意力矩阵 Z 1 Z_1 Z1​和 Z 2 Z_2 Z2​。首先,计算注意力矩阵 Z 1 Z_1 Z1​。

$ W_1^Q W_1^K W_1^V$

我们已经知道,为了计算注意力矩阵,需要创建三个新的矩阵,分别为查询矩阵、键矩阵和值矩阵。为了创建查询矩阵 Q 1 Q_1 Q1​、键矩阵 K 1 K_1 K1​和值矩阵 V 1 V_1 V1​,我们引入三个新的权重矩阵,称为 W 1 Q 、 W 1 K 、 W 1 V W_1^Q、W_1^K、W_1^V W1Q​、W1K​、W1V​。用矩阵X分别乘以矩阵 W 1 Q 、 W 1 K 、 W 1 V W_1^Q、W_1^K、W_1^V W1Q​、W1K​、W1V​,就可以依次创建出查询矩阵、键矩阵和值矩阵。

基于以上内容,注意力矩阵 Z 1 Z_1 Z1​可按以下公式计算得出。

Z 1 = S o f t M a x ( Q 1 ∗ K 1 T d k ) ∗ V 1 Z_1 = SoftMax(\frac{Q_1 * K_1^T}{\sqrt{d_k}}) * V_1 Z1​=SoftMax(dk​ ​Q1​∗K1T​​)∗V1​

接下来计算第二个注意力矩阵 Z 2 Z_2 Z2​。

为了计算注意力矩阵 Z 2 Z_2 Z2​,我们创建了另一组矩阵:查询矩阵 Q 2 Q_2 Q2​、键矩阵 K 2 K_2 K2​和值矩阵 V 2 V_2 V2​,并引入了三个新的权重矩阵,即 W 2 Q 、 W 2 K 、 W 2 V W_2^Q、W_2^K、W_2^V W2Q​、W2K​、W2V​。用矩阵X分别乘以矩阵 W 2 Q 、 W 2 K 、 W 2 V W_2^Q、W_2^K、W_2^V W2Q​、W2K​、W2V​,就可以依次得出对应的查询矩阵、键矩阵和值矩阵。

注意力矩阵Z2可按以下公式计算得出。

Z 2 = S o f t M a x ( Q 2 ∗ K 2 T d k ) ∗ V 2 Z_2 = SoftMax(\frac{Q_2 * K_2^T}{\sqrt{d_k}}) * V_2 Z2​=SoftMax(dk​ ​Q2​∗K2T​​)∗V2​

同理,可以计算出h个注意力矩阵。假设我们有8个注意力矩阵,即 Z 1 Z_1 Z1​到 Z 9 Z_9 Z9​,那么可以直接将所有的注意力头(注意力矩阵)串联起来,并将结果乘以一个新的权重矩阵 W 0 W_0 W0​,从而得出最终的注意力矩阵,公式如下所示。

M u l t i − h e a d a t t e n t i o n = C o n c a t e n a t e ( Z 1 , Z 2 , Z 3 , Z 4 , Z 5 , Z 6 , Z 7 , Z 8 ) W 0 Multi - head attention = Concatenate(Z_1,Z_2,Z_3,Z_4,Z_5,Z_6,Z_7,Z_8)W_0 Multi−headattention=Concatenate(Z1​,Z2​,Z3​,Z4​,Z5​,Z6​,Z7​,Z8​)W0​

以上就是多头注意力的工作原理啦!

标签:TransFormer,--,well,矩阵,Z1,计算,注意力,Z2
From: https://blog.csdn.net/weixin_44144773/article/details/143722559

相关文章

  • 【数据分享】2000-2023年我国1km分辨率的逐日O3栅格数据
    空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2023年全国范围逐日的PM2.5栅格数据、2013-2023年全国范围逐日SO2栅格数据、2000-2023年全国范围逐日PM10栅格数据(均可查看之前的文章获悉详情)!本次我们给大家带来的是2000-2023年全国范围的逐日的O3栅......
  • 解决google reCaptcha 认证问题
    参考https://xiaoxinblog.xyz/posts/65d46cc7.htmlF12openconsole键盘输入允许粘贴!(function(){"usestrict";document.querySelectorAll("script").forEach(function(e){if(e.src.indexOf("googleapis.com")>=0||......
  • 【数据分享】2024年我国各城市公交站点与线路数据
    公交线路与站点数据是我们做城市研究时经常会用到的基础数据。那么去哪里获取该数据呢?今天,我们就给大家分享一份2024年11月采集的全国所有城市的公交站点与线路数据,数据格式为shp矢量格式,数据坐标为wgs1984地理坐标。数据来源于开源公交信息查询网站。大家可以在公众号回复关......
  • QQ小程序已发布,但无法被搜索的解决方案
    ​前言我的QQ小程序在2024年8月就已经审核通过,上架后却一直无法被搜索到。打开后,再在QQ上下拉查看“最近使用”,发现他出现一下又马上消失。上线是按正常流程走的,开发、备案、审核,也没有任何违规,后台也没收到说被封或异常的信息。排查难道是我名字(实用工具箱)问题,当我要去后......
  • 惊!2024年我还在学linux基础(全)
    文章目录前言一、linux基础命令二、linux目录介绍三、命令演示1.find命令2.linux命令红队常用3.命令详情总结前言本次学习的是在b站up主泷羽sec课程有感而发,如涉及侵权马上删除文章。笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫......
  • 用函数实现模块化程序设计三
    函数的嵌套调用C语言的函数定义是互相平行的、独立的,也就是说,在定义函数时,一个函数内不能再定义另一个函数,也就是不能嵌套定义,但是可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数如上执行过程:执行main函数遇到函数调用的语句,调用函数a,流程转到a函数......
  • Scratch自制积木(自定义函数)求最小公倍数
    在Scratch编程环境中,自制积木是一种用户定义的代码块,它可以将复杂的脚本简化为更易于理解和管理的部分。通过自制积木,用户可以将一系列指令封装成一个单独的积木块,从而方便地在不同的项目中重用这些指令。Scratch自制积木功能是一个强大且灵活的工具,它可以帮助用户更好地组织......
  • 找到PMF第五关 - 获取你的前五个付费参考客户
    找到PMF(Product-MarketFit产品市场契合度)是创业和产品开发中至关重要的一步,它决定了你的产品能否在市场中取得成功。PostHog的CEOJamesHawkins对此有详细介绍:https://posthog.com/founders/product-market-fit-game他把过程分成五个级别/关卡:找到一个重要的问题来......
  • DVWA靶场练习一Brute Force
    1、安装Phpstudy环境搭建下载链接https://wwig.lanzoue.com/iIN142esjiob密码:4zuzDVWA靶场文件下载链接:https://wwig.lanzoue.com/iMr9u2esjire密码:49ag文件下载好后开始搭建1.1小皮面板打开小皮点击一键启动WNMP启动数据库和nginx1.2文件修改点击管理找到最下......
  • 使用 BCPL 语言编写简单的文字识别程序
    BCPL(BasicCombinedProgrammingLanguage)是一种较早期的编程语言,以其简洁性和基础特性著称。以下文章将使用BCPL编写一个简单的文字识别程序,通过分析字形和字符之间的相似性来实现基本的文字识别功能。代码实现bcplGET"libhdr"LETWIDTH=5LETHEIGHT=7//定义字......