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
相关推荐
老歌老听老掉牙3 分钟前
旋量理论:刚体运动的几何描述与机器人应用
python·算法·机器学习·机器人·旋量
无聊的小坏坏20 分钟前
用递归算法解锁「子集」问题 —— LeetCode 78题解析
算法·深度优先
m0_7385963238 分钟前
十大排序算法
算法·排序算法
jingfeng51440 分钟前
详解快排的四种方式
数据结构·算法·排序算法
MoRanzhi12031 小时前
245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推
python·算法·蓝桥杯·国赛·递推·2019
henyaoyuancc1 小时前
vla学习 富
人工智能·算法
Gyoku Mint2 小时前
机器学习×第五卷:线性回归入门——她不再模仿,而开始试着理解你
人工智能·python·算法·机器学习·pycharm·回归·线性回归
蒙奇D索大3 小时前
【数据结构】图论最短路径算法深度解析:从BFS基础到全算法综述
数据结构·算法·图论·广度优先·图搜索算法
trouvaille3 小时前
哈希数据结构的增强
算法·go
我不是小upper3 小时前
L1和L2核心区别 !!--part 2
人工智能·深度学习·算法·机器学习