本篇博客是现阶段transformer框架学习的最后一篇,内容主要包括学习资源汇总和最新一次的训练结果,希望可以帮助到大家。不做商业用途,绝不允许任何侵权行为。
一、 资源汇总
1. 学习工具
文献阅读:知云文献翻译V8.4、谷歌翻译
编程环境:anaconda、VS code、Python 3.10.14、Pytorch 2.4.0
GPU环境:NVIDIA GeForce RTX 3050 Laptop GPU、cuda 12.4、cuDNN 90100
AI工具:ChatGPT-4o-mini
2. 学习资料及产出
整个学习周期从7月15日持续到7月31日,分为三个阶段:
论文学习(7.15-7.20)
论文地址:Attention is all you need
博客记录:《Attention Is All You Need》论文学习-CSDN博客
源码学习(7.21-7.23)
项目地址:GitHub - tensorflow/tensor2tensor
博客记录:《tensor2tensor》源码解读-CSDN博客
上手实践(7.24-7.31)
项目地址:GitHub-Transformer
博客记录:Transformer应用——机器翻译(English & Chinese)-CSDN博客
二、 最新结果
在上一篇博客中,我使用较小的数据集跑通了输入处理、模型训练、输出处理、模型评估整个过程,由于数据集过于小(训练集960,验证集320,测试集320),即使跑了10个epoch,结果也不是很理想。我也考虑了租赁服务器,但是还需要配一次环境,所以直接pass。于是乎我新建了一个middle数据集:
- train.txt:原训练集前32万条数据
- val.txt:原验证集前3200条数据
- test.txt:原验证集剩余数据(36123条)
训练一个epoch,每个批次32条数据,1000个批次时进行一次验证,检查是否可以早停。
损失函数图像
图像纵坐标选择不当,一开始loss接近10,训练最后loss在0.002左右浮动,相差了5000倍,可惜没有将loss保存下来,不然还可以调整一下坐标轴,这属于是吸取教训了。
前50个批次的loss和训练时间花销
8950-9000批次的loss和训练时间花销
至于为什么不是9950-10000的,问就是忘记截图了......
训练花费时间43345.94s,整整12个小时,从中午十二点跑到晚上12点,GPU都快冒烟了!
接着看看评估,比起上次训练的小模型,这次结果就好太多了,几乎没有错别字了,分数嘎嘎高
这是测试集36123条数据的测试结果,因为原本的数据集是去重的,这次划分的训练集、验证集、测试集也没有重复的部分,我认为模型的拟合程度还是非常好的。
三、总结
半个月多一点的时间,有这么多收获我是非常开心以及满意的,不仅学到了知识,还收获了许多粉丝,以及大家的点赞,感谢支持。我本人马上就要大四了,不是很想考研,一直梦想保研上岸,暂且先短暂体验一下科研生活吧,也认清一下自己的层次。
本次实践还有非常多的地方可以改进:
- 之前提到的generate函数、src_mask、tgt_mask等等
- 对生成序列的处理其实可以优化一下,我验证时是将翻译句子与原句进行对其,保证长度一致,于是就省去了填充部分内容的处理(英翻中结果会出现很多“椹”字,可能这个字的编码很特殊,想起了之前的锟斤拷、烫烫烫、屯屯屯等C语言的梗)
- 训练样本数目可以进一步扩大,以及模型超参数可以进行调整
这些内容就交给感兴趣的大佬吧。虽然Transformer这个框架是2017年提出来的,已经过去7年了,AI领域的发展也是神速,但是这个框架似乎还有一段时间的热度,因此我认为这样一次学习是非常有意义的。再次感谢大家支持!