transformer总结超详细代码篇

transformer 初版链接

attention 代码链接

attention 初版链接

引言:

  • 本文为 transformer 代码篇,主要包含具体实现过程以及过程中遇到的具体细节问题以及实现问题,仅供参考,相关原理介绍可以参考上面链接。
  • 代码部分是本人解读别人实现的代码,对一些作者认为不用注释但是新手又看不懂的个人理解,但是由于工程量确实很大也很复杂我只是想学习一下具体实现过程应付面试所以部分模块的优化代码以及最后的训练部分依然没有完全解析,以后对原理的进一步加深后再来完善
  • 参考代码中参数的名称一开始我是按照自己的理解改变来了名称后来才发现是论文中就这么定义名字的,所以注意我的解析代码中参数名字可能有些混乱,主要是 src 用 input 代替,tgr 用 target 代替,d_model用 embed_dim代替等,每一个模块本文主要介绍需要注意的难点,相关api 用法链接有附上,放心使用

主要参考链接:

参考代码

解析较多

参考代码 2

多头注意力实现部分

  • 从自注意力实现 --> 多头注意力实现,主要难理解的是各种维度的来回变化以及原理步骤的实现比较抽象,但是有个人的详细解析应该可以看懂

embeding 模块

  • 主要是 embeding 方法的封装,有测试用例可以看下我的代码(比较简单)

encoder 模块

  • 实现 encoder 侧 encoder block 结构连接以及block 内的计算(比较简单)

decoder 模块

  • decoder 中和 encoder 有很大一部分相似但是难点在于其中一个有掩码的多头实现和无掩码的多头的连接,相对复杂,但是比较抽象的掩码部分有测试例子

前馈神经网络模块

  • 根据公式实现即可,公式也比较简单

位置 embeding 模块

  • 这个位置编码的实现相对比较复杂,所以我通过注释相对比较详细的介绍了具体实现方法,注意要理解位置编码本身原理才更好理解代码实现,同样有测试例子

工具包模块

  • 包含 block 堆叠方法的封装, Add & Norm 模块的实现,训练和评分模块的封装,动态更新学习率的实现(未看懂但是公式见下图),优化器的封装, 标签平滑(未看懂,一种正则方法),为看懂部分有测试用例可以辅助理解

整体模块封装

  • 把上面所有的模块按照 transformer 的结构图封装

测试例子(没看懂比较抽象,但是进测试可以运行)

  • 注: jupyter 文件是我测试使用,个人理解的注释以及api 使用的参考链接在这里面,py 文件是参考代码,因为 jupyter 稳健调用只能调py 稳健所以放在同一级目录下

结尾

  • 这个代码的解析真的很费时间,但是确实对自己理解算法原理有很大帮助,实现的时候还是有很多优化的,这些优化还是算法独有的确实很深奥,仅供参考
  • 代码地址:github
相关推荐
leisoo80975 分钟前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_17682 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
郝学胜-神的一滴3 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆3 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng3 小时前
2024牛客暑期多校训练营1
算法
hetao17338373 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
技术小黑3 小时前
RNN算法实战系列06 | LSTM 实现糖尿病探索与预测
rnn·算法·lstm
疯狂打码的少年4 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs6664 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
CIO_Alliance4 小时前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型