Transformer 学习日志:从 Attention 到 Encoder-Decoder

这两天主要学习了 Transformer 技术的一些皮毛——主要是补充知识体系的漏洞,以及为后续找工作做准备。

我来谈谈这两天学习 Transformer 技术的感受吧。一开始学习注意力机制,生成 Query、计算相似度分数等等,让我感觉十分头大。

第一,我没法像学习 RAG 的时候那样让大模型生成一段代码,然后去修改特定值、切身感受不同功能的效果。说白了,这就像是学习一个纯理论的东西,看不见摸不着。第二,Transformer 技术和 RAG 技术给我的感觉是有关联,但我却没法灵活迁移的知识体系。

这两天我主要学习了:注意力机制、多头注意力、FFN、残差连接、Layer Norm、Encoder-Only / Decoder-Only / Encoder-Decoder 架构的区别。

学习过程中的有趣思考

1. ReLU 的作用

在 FFN(前馈网络)的运行过程中:先升维 → ReLU → 再降维。其中 ReLU 的意义在于可以将"线性函数"变为"非线性函数",相当于让每个"头"(多头注意力)有了自己的发散思维,而不是像一个机器人一样机械地输出。这样才让"升维"有了意义。

2. 梯度消失的钦差大臣比喻

残差连接的功能之一是解决梯度消失问题。我做了一个自我理解:

整体的结构就像是一个倒立的金字塔,底层是输入层(基础),顶层是输出层,中间有很多分层来自于 FFN 的堆叠。何为梯度消失(反向传播)呢?简单来说:资源从顶往下走(反向传播),每一层都有自己的"中间商"克扣差价,所以越到后面资源越少,到底层就没有资源发展了。就像古代的底层人民吃不起饭就会开始造反。

那怎么办呢?很简单,派一个钦差大臣护送物资到地方不就解决了吗!这就是残差连接能够实现的功能之一。

3. FFN 的"疯子"和残差连接的"兜底"

残差连接还能给 FFN 这个疯子兜底。没想到吧,在算法世界里还有不顾一切向前冲的疯子(FFN)和不断给疯子擦屁股的(残差连接)。

因为 FFN 会堆叠很多次,不断发散自己的小脑瓜子里古灵精怪的想法,这时候就很容易把不该删的东西删了。就像是你打开手机想要看个微信信息,结果顺手打开了抖音一样。这个时候残差连接就起到了信息备份的作用,判断 FFN 目前的信息和输入接不接近,如果接近那就让 FFN 停下来别乱搞了。正是这一特性才让模型训练不会变得畏手畏脚。