Transformer代码计算过程全解

news/2024/7/19 8:46:10 标签: transformer, 深度学习, 人工智能

条件设置

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.niftyadmin.cn/n/4972522.html

相关文章

5G LAN标准及现状

欢迎关注微信公众号“我想我思”。 随着通信技术的发展,各行各业对网络的可靠性、确定性等提出了更高的需求。5G LAN作为3GPP R16标准定义的关键特性之一,具有组建灵活、直接互通等特性,在网络部署、网络确定性、uRLLC 等方面表现优异&#…

Springboot开发所遇问题(持续更新)

SpringBoot特征: 1. SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。 2,使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置…

前端面试相关

HTML5 新特征 ✅ HTML5 与es6 新特性cookie 与 sessionStorage 和 localStorage 的区别 ✅Cookie 和localStorage、SessionStorage 区别事件冒泡和事件捕获 ✅ 事件捕获和事件冒泡垂直居中 DIV ✅ 元素垂直水平居中的多种办法(块级 行内元素)两栏布局左边…

Springboot使用DataRest直接访问数据库

Spring-boot-data-rest 直接将数据库资源映射成为Rest资源 说明 Spring Data REST是基于Spring Data的repository之上,可以把 repository 自动输出为REST资源,目前支持Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j、Spring Data GemFire…

jedis参数配置

文章目录 pomproperties配置连接池配置 pom <!-- 引入spring-data-redis组件 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><!--spring boot 2.0之后默认let…

OLED透明屏:在广告领域中的应用,为品牌注入更强的视觉冲击

OLED透明屏作为一项引人注目的技术创新&#xff0c;其独特的透明度和高清晰度为各行各业带来了全新的展示和创意空间。 本文将详细介绍其透明度、高对比度、超薄柔性设计以及强大的颜色表现力&#xff0c;并探讨其在零售、汽车和建筑等领域的应用前景。 一、透明度&#xff1a…

Spring 学习源码的基础 核心原理与核心概念

文章目录 核心原理AnnotationConfigApplicationContextIoC 容器加载流程Spring 中如何创建一个对象Bean 的创建过程 (生命周期)单例 原型推断构造方法依赖注入AOP 动态代理判断是否需要 AOP 的大致流程CGLib 做 AOP 的大致流程事务事务代理对象执行方法的流程事务注解排至失效的…

基于Java+SpringBoot+Vue前后端分离党员教育和管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…