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.hqwc.cn/news/504817.html

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

相关文章

Python列表生成式你学会了吗

1.最基本的列表生成方式 生成 1-10 之间的整数的一个列表 list1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list2 list(range(1, 11)) print(list2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2.通过程序的方式生成[4, 9, 16, 25,…

【软考】设计模式之访问者模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. java示例5.1 喂动物5.1.1 抽象访问者5.1.2 具体访问者5.1.3 抽象元素5.1.4 具体元素5.1.5 对象结构5.1.6 客户端类5.1.7 结果示例 5.2 超市销售系统5.2.1 业务场景5.2.2 业务需求类图5.2.3 抽象访问者5.2.4 具体访问者5.2.5 抽象元素…

3.1日学习打卡----初学FastDFS(一)

3.1日学习打卡 目录: 3.1日学习打卡一. 为什么要使用分布式文件系统二. FastDFS简介核心概念上传机制下载机制FastDFS环境搭建_LinuxFastDFS指令 一. 为什么要使用分布式文件系统 单机时代 初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项…

深度学习的onnx模型插入新节点构建新模型

import numpy as np import onnx import onnxruntime import onnxruntime.backend as backendmodel onnx.load(test.onnx) node model.graph.node graph model.graph# 1.2搜索目标节点 # for i in range(len(node)): # if node[i].op_type Conv: # node_rise …

JAVA面向对象高级部分—多态

面向对象高级部分—多态 认识多态 对象多态,对象既可以指向老师对象,也可以指向学生对象。 注意事项: 成员变量不谈多态,编译看左边,运行看左边 成员变量编译的是父类People,所以编译的是左边的People&a…

STM32------分析GPIO寄存器

一、初始LED原理图 共阴极led LED发光二极管,需要有电流通过才能点亮,当有电压差就会产生电流 二极管两端的电压差超过2.7v就会有电流通过 电阻的作用 由于公式IV/R 不加电阻容易造成瞬间电流无穷大 发光二极管工作电流为10-20MA 3.3v / 1kΩ 3.…

【风格迁移】URST:解决超高分辨率图像的风格迁移问题

URST:解决超高分辨率图像的风格迁移问题 提出背景URST框架的整体架构 提出背景 论文:https://arxiv.org/pdf/2103.11784.pdf 代码:https://github.com/czczup/URST?v1 有一张高分辨率的风景照片,分辨率为1000010000像素&#…

枚举类、泛型、API

枚举类 枚举类可以实现单例设计模式。 枚举的常见应用场景:用来表示一组信息,然后作为参数进行传输。 泛型 API

Benchmark学习笔记

小记一篇Benchmark的学习笔记 1.什么是benchmark 在维基百科中,是这样子讲的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…

Onlyfans怎么绑定虚拟卡订阅,视频图文教学!!!

前言 onlyfans软件是一个创立于2016年的订阅式社交媒体平台,创作者可以在自己的账号发布原创的照片或视频,并需要注意的是,网络上可能存在非法或不道德的应用将其设置成付费模式,若用户想查看则需要每月交费订阅。 图文视频教学&a…

steam++加速问题:出现显示443端口被 vmware-hostd(9860)占用的错误。

目录 前言: 正文: 前言: 使用Steam对GitHub进行加速处理时,建议使用2.8.6版本。 下载地址如下:Release 2.8.6 BeyondDimension/SteamTools GitHub 下载时注意自己的系统位数 正文: 使用GitHub时会使…

RocketMQ学习笔记一

课程来源:002-MQ简介_哔哩哔哩_bilibili (尚硅谷老雷,时长19h) 第1章 RocketMQ概述 1. MQ是什么? 2. MQ用途有哪些? 限流削峰;异步解耦;数据收集。 3. 常见MQ产品有哪些&对比…