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

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

相关文章

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

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

2022年30m全国逐年土地覆被数据

1.研究背景 2023年8月,武汉大学杨杰和黄昕教授团队向公众更新发布了CLCD 2022年全国土地覆数据(V1.0.2)。而CLCD 2021年全国土地覆数据(V1.0.1)也是在去年8月向公众更新发布。 中国在过去几十年中经济和人口迅速发展,土地覆盖随之发生巨大变化,因此迫切需要对其进行连续…

支付宝的支付

对于前端的入门学习的人员来说,支付宝提供的沙箱环境,可以让你体验支付的整个流程。 一、沙箱环境 沙箱(又叫沙盘)环境是用于开发者测试的模拟环境,中间发生任何行为都是虚拟的,如支付。 二、技术选型 支…

容器镜像生成记

概述 容器docker/k8s发布已有一段时间,不少小伙伴开始上手实践。下面以一个简单的应用为例。来说明如何生成镜像并推送至镜像仓库。 准备工作 镜像仓库注册 以最常见的aliyun镜像仓库为例: 支付宝登录aliyun官网,搜索容器镜像服务&#x…

Moonbeam生态跨链互操作项目汇总

立秋已过,今年的夏天已经接近尾声,即将迎来凉爽的秋天。Moonbeam生态一同以往持续成长,在8月也举办了不少活动、完成集成合作以及协议更新。让我们一同快速了解Moonbeam生态项目近期发生的大小事件吧! Moonwell Moonwell是一个建…

数据结构(Java实现)LinkedList与链表(下)

** ** 结论 让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。 LinkedList的模拟实现 单个节点的实现 尾插 运行结果如下: 也…

ACL2023 Prompt 相关文章速通 Part 1

Accepted Papers link: ACL2023 main conference accepted papers 文章目录 Accepted PapersPrompter: Zero-shot Adaptive Prefixes for Dialogue State Tracking Domain AdaptationQuery Refinement Prompts for Closed-Book Long-Form QAPrompting Language Models for Lin…

Java——单例设计模式

什么是设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱、“套路”。 经典的设计模式共有23种。…

stm32之8.中断

(Exceptions)异常是导致程序流更改的事件,发生这种情况,处理器将挂起当前执行的任务,并执行程序的一部分,称之为异常处理函数。在完成异常处理程序的执行之后,处理器将恢复正常的程序执行&#…

如何做好微信号标签管理?

微信除了生活外,也越来越多企业用微信来联系维护客户和发展自己的私域流量池,微信好友越加越多。 为了提高微信的管理效率,针对不同的微信好友群体进行群发,但每次都要手动打标签很费时间,那么有没有什么工具可以批量打…

使用rook搭建Ceph集群

宿主机: MacBook Pro(Apple M2 Max) VMware Fusion Player 版本 13.0.2 VM软硬件: ubuntu 22.04.2 4核 CPU,5G 内存,40G硬盘 *每台机器分配硬件资源很重要,可以适当超过宿主机的资源量&am…

使用Aircrack-ng进行无线网络破解

Aircrack-ng是一款流行的无线网络渗透测试工具,主要用于密码破解和网络分析。但是,请注意,仅在有合法授权的情况下使用这些工具。 以下是一个使用Aircrack-ng进行无线网络破解的示例,以及一些步骤和注意事项: 步骤&a…