纪念第一次手搓 Transformer

由于 Deep Learning for NLP 这门课的考试有很神秘的代码找错大题,不得不自己动手用 PyTorch 写一遍 encoder-decoder Transformer[1] 的代码来 加深记忆从头预习 。虽然写完后好像还是不能顺利做对找错题,但确实第一次在不照抄或复制的情况下写完了整套代码(不含训练)。是的,为了纪念这个开窍的时刻,我甚至开了个名叫 ReinventTheWheel 的仓库,以期将来能往里面多塞一些复现练习。

放眼如今 LLM 深不见底的技术栈,这是一个几乎原始的进步,但这确实是一年半以来离DL最近的一次!因为我甚至开始思考了残差连接和 LayerNorm 顺序对于梯度的具体影响,并且很顺利地得出了错误结论。有些东西在接触到的很长一段时间里都给人“永远都不可能学会”的感觉,直到你动手做出点什么。当然,只是复现一遍也许只能说是在流程和大致的直觉上理解了,却不等于任何数学上的把握,所以目前也只能说是熟悉了一个技术的面相,但现在的感觉确实变成了:也许有一天能学会?

可惜的是,这种想法在我的数学水平方面好像鲜有成功案例。考虑到数学比搭积木困难很多,这也算是情有可原,所以也许能把它变成一种外推 (extrapolation) 的信心。不过在那之前,我可能已经因为无法忍受上一句话的术语滥用而放弃这个想法了。


  1. 现在流行的当然是 decoder-only 架构,实现起来只会更简单,而我期待有一天回头读时,发现这一句话也很有年代感。