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
相关推荐
mit6.82412 分钟前
几何|阻碍链
算法
有一个好名字14 分钟前
力扣-小行星碰撞
算法·leetcode·职场和发展
MM_MS14 分钟前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
lamentropetion22 分钟前
E - Equal Tree Sums CF1656E
算法
代码游侠23 分钟前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
Xの哲學39 分钟前
Linux Platform驱动深度剖析: 从设计思想到实战解析
linux·服务器·网络·算法·边缘计算
逑之1 小时前
C语言笔记11:字符函数和字符串函数
c语言·笔记·算法
栈与堆1 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
不知名XL1 小时前
day20 回溯算法part02
算法
嵌入式进阶行者1 小时前
【算法】TLV格式解析实例:华为OD机考双机位A卷 - TLV解析 Ⅱ
数据结构·c++·算法