Transformer模型-Multi-Head Attention多头注意力的简明介绍

本文主要是介绍Transformer模型-Multi-Head Attention多头注意力的简明介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天介绍transformer模型的Multi-Head Attention多头注意力。

原论文计算scaled dot-product attention和multi-head attention

实际整合到一起的流程为:

通过之前文章,假定我们已经理解了attention;今天我们按顺序来梳理一下整合之后的顺序。重新梳理Attention Is All You Need(Transformer模型): Attention=距离,权重,概率;Multi-Head attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/136998593

当使用多头注意力时,通常d_key = d_value = (d_model / n_heads),其中n_heads是头的数量。研究人员表示,模型之所以能够“关注不同位置的不同表示子空间中的信息”,所以经常使用并行注意力层而不是全维度层。只有一个头时,平均化会阻止这种情况。

第一步:通过线性层W*传递输入Q、K和V

计算注意力的第一步是获取Q、K和V张量;它们分别是查询、键和值张量。它们是通过获取位置编码的嵌入(记作X)并同时将张量传递通过三个线性层(分别记作Wq、Wk和Wv)来计算的。这可以在上面的详细图像中看到。

  • Q = XWq
  • K = XWk
  • V = XWv
  • has a size of (batch_size, seq_length, d_model). An example would be a batch of 32 sequences of length 10 with an embedding of 512, which would have a shape of (32, 10, 512).
  • WqWk, and Wv have a size of (d_model, d_model). Following the example above, they would have a shape of (512, 512).

The linear layers for WqWk, and Wv can be created using nn.Linear(d_model, d_model)

**关于W*和线性层,可参考文章:

学习transformer模型-线性层(Linear Layer),全连接层(Fully Connected Layer)或密集层(Dense Layer)的简明介绍-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137212380学习transformer模型-权重矩阵Wq,Wk,Wv的简明介绍-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137160105

第二步:将Q、K和V分割为各自的头

创建了Q、K和V张量后,现在可以通过将d_model的视图更改为(n_heads, d_key)来将它们分割为各自的头。n_heads可以是一个任意数,但在处理较大的嵌入时,通常会选择8、10或12。请注意,d_key = (d_model / n_heads)。

  • Q has a shape of (batch_size, n_heads, Q_length, d_key)
  • K has a shape of (batch_size, n_heads, K_length, d_key)
  • V has a shape of (batch_size, n_heads, V_length, d_key)

第三步:对每个头计算attention

关于点积和矩阵乘法,请参看:

学习transformer模型-点积dot product,计算attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137093906学习transformer模型-矩阵乘法;与点积dot product的关系;计算attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137090019

第四步:把所有头的attention结果拼接到一起(concat)。

把所有头的attention结果拼接到一起(concat)。

拼接操作会逆转最初进行的分割。第一步是转置n_heads和Q_length。第二步是将n_heads和d_key重新拼接在一起以得到d_model。

完成这些步骤后,A将具有(batch_size,Q_length,d_model)的形状。

第五步,也是最后一步:通过线性层Wo输出。

是将A通过Wo传递,其形状为(d_model,d_model)。再次,权重张量在每个批次中的每个序列上广播。最终的输出保持了其形状:

(batch_size,Q_length,d_model)

请注意,这个输出可以与原始输入X进行加权和,从而得到自注意力机制的输出。

用jupyter计算attention(没有multi-head)。可以参看以下文章,

学习transformer模型-用jupyter演示逐步计算attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137151606

原文链接:

https://medium.com/@hunter-j-phillips/multi-head-attention-7924371d477a

这篇关于Transformer模型-Multi-Head Attention多头注意力的简明介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877971

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应