Transformer中的自注意力机制计算过程分析

目录

1 什么是自注意力机制

2 自注意力的计算过程


1 什么是自注意力机制

自注意力机制(Self-Attention)顾名思义就是关注单个序列内部元素之间的相关性,不仅可以用于 seq2seq 的机器翻译模型,还能用于情感分析、内容提取等场景。因此分析网络如何表达出“单个序列”与“内部元素”之间的相关性这一问题可以回答开头所述的大部分疑问。

2 自注意力的计算过程

如图1所示,假设网络某一个自注意力层的输入向量序列为 \left \{ a_{1},\cdots ,a_{n} \right \}a_{i}\left ( i=1,2,\cdots ,n \right )维度均为 d_{model},该层的输出向量序列为 \left \{ o_{1},\cdots ,o_{n} \right \}o_{i}\left ( i=1,2,\cdots ,n \right ) 的维度同样都为 d_{model}

首先将 \left \{ a_{1},\cdots ,a_{n} \right \} 分别乘以同一个矩阵\mathbf{\mathit{W}_{\mathit{K}}}\mathbf{\mathit{W}_{\mathit{Q}}}\mathbf{\mathit{W}_{\mathit{V}}} 得到 key 向量  \mathbf{\mathit{k}_{\mathit{n}}}、query 向量 \mathbf{\mathit{q}_{\mathit{n}}} 以及 value 向量 \mathbf{\mathit{v}_{\mathit{n}}},且维度均为 d_{model}

然后以 \mathbf{\mathit{a}}_{1} 输出到 \mathbf{\mathit{o}}_{1} 的过程为例。把 \mathbf{\mathit{q}}_{1} 依次与所有的key做点积后得到初步的注意力值  a_{1,i}\left ( i=1,2,\cdots ,n \right ),图1所示。

图1 自注意力计算过程1 

然后将 a_{1,i} 经过 softmax 函数归一化得到最终的注意力权重 a_{1,n}^{'} ,这个 a_{1,n}^{'} 可以看作我们给输入向量序列中的每个位置的向量打分,而这个分数决定了当我们在一个特定的位置处理一个向量时,在输入的句子的其他部分应该给予多少关注。

图2 注意力权重计算

将权重 a_{1,n}^{'} 与 \mathbf{\mathit{v}}_{i}\left ( i=1,2,\cdots ,n \right ) 加权相乘之后再相加得到 \mathbf{\mathit{a}_{\boldsymbol{\mathit{i}}}} 对应的自注意力输出向量 \mathbf{\mathit{o}_{\boldsymbol{\mathit{1}}}} ,如图3所示。

 图3 自注意力计算3

其他的计算方法与此相同,最终的计算结果如图4所示。其中 \mathbf{\mathit{a}_{\boldsymbol{\mathit{i}}}} 与相应的 \mathbf{\mathit{o}_{\boldsymbol{\mathit{i}}}} 的维度相同,都是 d_{model} 整个注意力机制中只有\mathbf{\mathit{W}_{\mathit{K}}}、 \mathbf{\mathit{W}_{\mathit{Q}}}以及 \mathbf{\mathit{W}_{\mathit{V}}} 三个矩阵是可学习的参数。

 图4 自注意力计算4

进一步地,既然每个输入向量 \mathbf{\mathit{a}_{\boldsymbol{\mathit{i}}}} 都是乘以相同的矩阵,那么可以将所有输入向量 \left \{ a_{1},\cdots ,a_{n} \right \}整合为一个矩阵 \mathbf{\mathit{A}}=\left [ \mathbf{\mathit{a}_{1}},\cdots ,\mathbf{\mathit{a}_{n}} \right ]_{d_{model}\times n},然后把三种输出向量 \mathbf{\mathit{k}_{\mathit{i}}}\mathbf{\mathit{q}_{\mathit{i}}} 以及 \mathbf{\mathit{v}_{\mathit{i}}} 也整合成矩阵的形式分别为 \mathbf{\mathit{K}}\mathbf{\mathit{Q}}\mathbf{\mathit{V}},比如 \mathbf{\mathit{K}} 可以写为下式所示的形式:

此时的输出矩阵就可以写成下式的结果:

这里的矩 softmax\left ( \mathbf{\mathit{QK}^{T}} \right ) 就是注意力矩阵,代表着当处理当前位置向量时,其他位置的向量对当前位置向量的影响程度。

Transformer中的输出矩阵还乘以了一个缩放系数 \frac{1}{\sqrt{d_{k}}}d_{k} 是  \mathbf{\mathit{k}_{\mathit{n}}} 的维度。所以最终的输出是下式所示的形式:

在这里使用矩阵运算的目的是可以提升计算效率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Doris实战——美联物业数仓

目录 一、背景 1.1 企业背景 1.2 面临的问题 二、早期架构 三、新数仓架构 3.1 技术选型 3.2 运行架构 3.2.1 数据模型 纵向分域 横向分层 数据同步策略 3.2.2 数据同步策略 增量策略 全量策略 四、应用实践 4.1 业务模型 4.2 具体应用 五、实践经验 5.1 数据…

Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

一、前言 在Spring Boot项目开发过程中,对于接口API发布URL访问路径,一般都是在类上标识RestController或者Controller注解,然后在方法上标识RequestMapping相关注解,比如:PostMapping、GetMapping注解,通…

Java项目:30 基于SpringBoot自习室座位预定系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能设计 管理员 1、用户管理 管理员可以新增、删除管理员 管理员可以删除学生 2、自习室管理 管理员可以新增自习室、设置自习室的座位…

关于福彩历史数据采集器和体彩历史数据采集器的下载安装说明

前段时间因为研究基于人工神经网络(深度学习,所谓的“AI”算法)对3D开奖数据进行预测,开发了两款浏览器插件----“福彩历史数据采集器”和“体彩历史数据采集器”。之所以开发这两款插件,是因为不管是基于什么样的方式…

机器学习:集成学习(Python)

一、Adaboost算法 1.1 Adaboost分类算法 adaboost_discrete_c.py import numpy as np import copy from ch4.decision_tree_C import DecisionTreeClassifierclass AdaBoostClassifier:"""adaboost分类算法:既可以做二分类、也可以做多分类&#…

缓存相关问题:雪崩、穿透、预热、更新、降级的深度解析

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 1. 缓存雪崩 1.1 问题描述 1.2 解决方案 1.2.1 加锁防止并发重建缓存 2. 缓存穿透 2.1 问题描述 2.2 解决方案 2.2.1 …

Ubuntu下安装Scala

前言 弄了一下终于成功装上了,这里对此进行一下总结 安装虚拟机 VMware虚拟机安装Ubuntu(超详细图文教程)_vmware安装ubuntu-CSDN博客https://blog.csdn.net/qq_43374681/article/details/129248167Download Ubuntu Desktop | Download | …

FinalShell连接Linux

远程连接linux 我们使用VMware可以得到Linux虚拟机,但是在/Mware中操作Linux的命令行页面不太方便,主要是: 内容的复制、粘贴跨越VMware不方便 文件的上传、下载跨越VMware不方便 不方便也就是和Linux系统的各类交互,跨越VMwar 到Linux操作系…

win11 更多网络适配器选项

win11更多网络适配器选项查找路径:控制面板→网络和共享中心→更改适配器设置

计算机二级Python刷题笔记------基本操作题23、33、35、37(考察字符串)

文章目录 第二十三题(字符串替换:replace(old,new))第三十三题(字符串遍历)第三十五题(字符串与列表)第三十七题(拼接字符串) 第二十三题(字符串替换&#xf…

Ubuntu进入python时报错:找不到命令 “python”,“python3” 命令来自 Debian 软件包 python3

一、错误描述 二、解决办法 进入”/usr/bin”目录下,查看/usr/bin目录中所有与python相关的文件和链接: cd /usr/bin ls -l | grep python 可以看到Python3指向的是Python3.10,而并无指向python3的软连接 只需要在python与python3之间手动…

2024.03.02蓝桥云课笔记

1.scanf与printf取消分隔符的限制方法 示例代码: int main() { char s[10];scanf("%d[^\n]",s);printf("%s",s);return 0; } 运行: 输入:Hello World 输出:Hello World 注:其中[]中是一个正则…

YTM32的同步串行通信外设SPI外设详解(Master Part)

YTM32的同步串行通信外设SPI外设详解(Master Part) 文章目录 YTM32的同步串行通信外设SPI外设详解(Master Part)IntroductionFeatures引脚信号时钟源其它不常用功能 Pricinple & Mechinism基于FIFO的命令和数据管理机制锁定配…

19. 学习人工智能如何从阅读论文中获取一手信息,并推荐一些技术论文

本文为 「茶桁的 AI 秘籍 - BI 篇 第 19 篇」 文章目录 Hi,你好。我是茶桁。 上节课给大家预告了,今天这节课咱们来看一篇论文。我们之前几节课中讲解的内容其实是在一些论文里面有使用到的。 我们先看一下论文的内容,讲讲 ALS。 就像我上节…

unsubscribe:Angular 项目中常见场景以及是否需要 unsubscribe

本文由庄汇晔同学编写~ 在 Angular 项目中,经常会使用到 observable subscribe,但是 subscribe 读取了数据之后,真的就是万事大吉了吗?这个问题的答案或许是,或许不是。有些 observable 需要 unsubscribe,…

【研发日记】Matlab/Simulink技能解锁(四)——在Simulink Debugger窗口调试

前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(三)——在Stateflow编辑窗口Debug》 Block断点 前文在Simulink编辑窗口…

嵌入式Linux中GPIO设置的一些基本指令和步骤

一、GPIO的介绍 嵌入式Linux中的GPIO(General Purpose Input/Output,通用输入/输出)是一种常用的接口,允许开发者直接控制硬件设备的某些引脚,进行诸如LED控制、传感器读取、设备状态监测等任务。 二、设置步骤和示例…

雷电将军部分技能AOE范围测试

简单说一下,以往的AOE范围数据大部分来自Dim提供的拆包文件或泄露的GM端控制台显示的距离数据,如《AOE范围学》中的数据,然而米哈游自1.6版本及以后未再公开泄露过GM端,因为一些原因Dim也没再更新拆包文件中角色技能参数相关的部分…

C2_W2_Assignment_吴恩达_中英_Pytorch

Neural Networks for Handwritten Digit Recognition, Multiclass In this exercise, you will use a neural network to recognize the hand-written digits 0-9. 在本次练习中,您将使用神经网络来识别0-9的手写数字。 Outline 1 - Packages 2 - ReLU Activatio…

服务器有几种http强制跳转https设置方法

目前为站点安装SSL证书开启https加密访问已经是件很简单的事了,主要是免费SSL证书的普及,为大家提供了很好的基础。 Apache环境下如何http强制跳转https访问。Nginx环境下一般是通过修改“你的域名.conf”文件来实现的。 而Apache环境下通过修改.htacces…
最新文章