Transformer代码计算过程全解

news2024/10/5 14:34:02

条件设置

batch_size=1
src_len = 8     # 源句子的最大长度   根据这个进行padding的填充
tgt_len = 7     # 目标输入句子的最大长度   根据这个进行padding的填充
d_model=512     # embedding的维度
d_ff=2048       # 全连接层的维度
h_head=8        # Multi-Head Attention 的个数
d_k=d_q= 64     # dimension of K(=Q)(Q和K的维度需要相同,为了方便也可以让K=Q=V)
d_v=128         # dimension of V 

Encoder

经过处理后数据作为Encoder的输入:[batch_size,src_len]   #即 [1,8]

1.1输入层

经过word embedding:[batch_size, src_len, d_model]

经过positional encoding:[batch_size,src_len, d_model]

两者相加为:[batch_size,src_len, d_model]

数据经过dropout:[batch_size,src_len, d_model]

1.2 计算multi-head attention
在这里插入图片描述

W_Q = [d_model, d_q * n_heads]  
W_K = [d_model, d_k * n_heads]
W_V = [d_model, d_v * n_heads]
X=[batch_size, src_len, d_model]
Q=X*W_Q=[batch_size, src_len,d_q * n_heads] 
K=X*W_K=[batch_size, src_len,d_k * n_heads] 
V=X*W_V=[batch_size, src_len,d_v * n_heads] 

1.2.1 进行分割

Q=[batch_size,n_heads,src_len,d_q]

K=[batch_size,n_heads,src_len,d_k]

V=[batch_size,n_heads,src_len,d_v]

1.2.2 计算dot-product attention

K改变形状为 K=[batch_size,n_heads,d_k,src_len]
outputs=Q*K=[batch_size,n_heads,src_len,d_q]*[batch_size,n_heads,d_k,src_len]=[batch_size,n_heads,src_len,src_len]
outputs /= d_k**0.5

1.2.3进行softmax
先进行mask,将padding部分变为-inf

outputs=softmax(outputs)=[batch_size,n_heads,src_len,src_len]

1.2.4 最终结果相乘

outputs=outputs*V=[batch_size,n_heads,src_len,src_len]*[batch_size,n_heads,src_len,d_v]=[batch_size,n_heads,src_len,d_v]

1.2.5 全连接、残差链接和层归一化

先进行reshape,得到outputs=[batch_size,src_len,n_heads*d_v]
fc=[n_heads*d_v,d_model]
outputs=outputs*fc=[batch_size,src_len,n_heads*d_v]*[n_heads*d_v,d_model]=[batch_size,src_len,d_model]

1.3 全连接、残差链接和层归一化


outputs=[batch_size,src_len,d_model]

Decoder

2.1 Masked multi-head attention
在这里插入图片描述
这部分除了多了一步mask,其他步骤是相同的就不加赘述了
2.2 multi-head attention

Q=[batch_size,n_heads,tgt_len,d_q]
K=[batch_size,n_heads,src_len,d_k]
V=[batch_size,n_heads,src_len,d_v]

K改变形状为 K=[batch_size,n_heads,d_k,src_len]
outputs=Q*K=[batch_size,n_heads,tgt_len,d_q]*[batch_size,n_heads,d_k,src_len]=[batch_size,n_heads,tgt_len,src_len]
outputs /= d_k**0.5
outputs=softmax(outputs)=[batch_size,n_heads,tgt_len,src_len]

outputs=outputs*V=[batch_size,n_heads,tgt_len,src_len]*[batch_size,n_heads,src_len,d_v]=[batch_size,n_heads,src_len,d_v]

2.3
剩下的都是相同的这里就不赘述了

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

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

相关文章

【C++】—— C++11之可变参数模板

前言: 在C语言中,我们谈论了有关可变参数的相关知识。在C11中引入了一个新特性---即可变参数模板。本期,我们将要介绍的就是有关可变参数模板的相关知识!!! 目录 序言 (一)可变参…

深度学习10:Attention 机制

目录 Attention 的本质是什么 Attention 的3大优点 Attention 的原理 Attention 的 N 种类型 Attention 的本质是什么 Attention(注意力)机制如果浅层的理解,跟他的名字非常匹配。他的核心逻辑就是「从关注全部到关注重点」。 Attention…

ServiceManager接收APP的跨进程Binder通信流程分析

现在一起来分析Server端接收(来自APP端)Binder数据的整个过程,还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么?它其实是一个独立的进程,由init解析i…

windows11不允许安装winpcap4.1.3

问题:下载安装包后在安装时显示与电脑系统不兼容,不能安装。 原因:winpcap是一个用于Windows操作系统的网络抓包库,有一些安全漏洞,存在被黑客攻击的风险。Windows11为了加强系统安全而禁用了这个库,因此不…

java.8 - java -overrideoverload 重写和重载

重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不…

【GAMES202】Real-Time Environment Mapping1—实时环境光照1

一、Distance field soft shadows Inigo Quilez :: computer graphics, mathematics, shaders, fractals, demoscene and more (iquilezles.org) 在开始我们的实时环境光照之前,我们再说一种现在的实现实时软阴影的方式,也就是Distance field soft shado…

SpringBoot实现文件上传和下载笔记分享(提供Gitee源码)

前言:这边汇总了一下目前SpringBoot项目当中常见文件上传和下载的功能,一共三种常见的下载方式和一种上传方式,特此做一个笔记分享。 目录 一、pom依赖 二、yml配置文件 三、文件下载 3.1、使用Spring框架提供的下载方式 3.2、通过IOUti…

分布式 - 服务器Nginx:一小时入门系列之 return 指令

文章目录 1. return 指令语法2. return code URL 示例3. return code text 示例4. return URL 示例 1. return 指令语法 return指令用于立即停止当前请求的处理,并返回指定的HTTP状态码和响应头信息,它可以用于在Nginx中生成自定义错误页面,…

分布式事务-seata框架

文章目录 分布式事务0.学习目标1.分布式事务问题1.1.本地事务1.2.分布式事务1.3.演示分布式事务问题 2.理论基础2.1.CAP定理2.1.1.一致性2.1.2.可用性2.1.3.分区容错2.1.4.矛盾 2.2.BASE理论2.3.解决分布式事务的思路 3.初识Seata3.1.Seata的架构3.2.部署TC服务3.3.微服务集成S…

CAPL - Panel和TestModule结合实现测试项可选

目录 一、定义脚本编号和脚本组编号 1、测试组定义 2、测试脚本编号定义

【C++】初步认识模板

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、泛型编程二、函数模板2.1 函…

Java10(异常处理)

0.复习面向对象 1.异常的体系结构 异常:在Java语言中,将程序执行中发生的不正常情况.(开发中的语法错误和逻辑错误不是异常) 异常事件分两类(它们上一级为java.lang.Throwable): Error Java虚拟机无法解决的严重问…

算法通过村第三关-数组黄金笔记|数组难解

文章目录 前言数组中出现超过一半的数字数组中只出现一次的数字颜色的分类问题(荷兰国旗问题)基于冒泡排序的双指针(快慢指针)基于快排的双指针(对撞指针) 总结 前言 提示:苦不来自外在环境中的人、事、物,…

最新人工智能源码搭建部署教程/ChatGPT程序源码/AI系统/H5端+微信公众号版本源码

一、AI系统 如何搭建部署人工智能源码、AI创作系统、ChatGPT系统呢?小编这里写一个详细图文教程吧! SparkAi使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统! 1.1 程序核心功能 程序已支持ChatGPT3.5/GPT-4提问、AI绘画、…

Vue3.0极速入门- 目录和文件说明

目录结构 以下文件均为npm create helloworld自动生成的文件目录结构 目录截图 目录说明 目录/文件说明node_modulesnpm 加载的项目依赖模块src这里是我们要开发的目录,基本上要做的事情都在这个目录里assets放置一些图片,如logo等。componentsvue组件…

加快edge网页的下载速度

1、 edge://flags/#enable-parallel-downloading、 2、 点击enabled

Leetcode每日一题:1448. 统计二叉树中好节点的数目(2023.8.25 C++)

目录 1448. 统计二叉树中好节点的数目 题目描述: 实现代码与解析: dfs 原理思路: 1448. 统计二叉树中好节点的数目 题目描述: 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为&…

谈谈子网划分的定义、作用、划分方式以及案例

个人主页:insist--个人主页​​​​​​ 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、子网划分的定义 二、子网掩码的作用 1、…

[管理与领导-51]:IT基层管理者 - 8项核心技能 - 6 - 流程

前言: 管理者存在的价值就是制定目标,即目标管理、通过团队(他人)拿到结果。 要想通过他人拿到结果: (1)目标:制定符合SMART原则的符合业务需求的目标,团队跳一跳就可以…

【mysql是怎样运行的】-EXPLAIN详解

文章目录 1.基本语法2. EXPLAIN各列作用1. table2. id3. select_type4. partitions5. type 1.基本语法 EXPLAIN SELECT select_options #或者 DESCRIBE SELECT select_optionsEXPLAIN 语句输出的各个列的作用如下: 列名描述id在一个大的查询语句中每个SELECT关键…