1、Transformer架构概览:从Seq2Seq到Transformer的演进,为什么需要MLP?

大家好,我是你们的老朋友。今天咱们聊聊Transformer架构的来龙去脉。

说实话,我刚接触深度学习那会儿,RNN还是绝对的主流。那时候做机器翻译,大家用的都是Seq2Seq模型。嗯,就是那个编码器-解码器结构。你想想看,输入一句话,编码器把它压成一个向量,解码器再把这个向量展开成目标语言。

听起来挺合理,对吧?但实际用起来,问题一大堆。

Seq2Seq的痛点:长距离依赖的噩梦

我印象特别深,2017年我在做一个中文到英文的翻译项目。句子短的时候,比如「今天天气不错」,效果还行。但一旦句子变长,比如一段产品说明书,翻译质量就直线下降。

为什么会这样?

说白了,RNN是串行处理的。每个时间步只能看到前一个状态的信息。句子越长,前面的信息就越容易被「稀释」掉。这就像传话游戏,第一个人说「苹果」,传到第十个人可能就变成「香蕉」了。

我遇到过最夸张的一次,一个30个词的句子,翻译结果跟原文完全对不上。后来一查,问题出在编码器最后的隐藏状态——它根本记不住句子开头的信息。

核心问题:RNN的隐藏状态是一个「信息瓶颈」。无论输入多长,最终都压缩成一个固定长度的向量。这个向量承载不了太多信息。

注意力机制的登场:让模型学会「看哪里」

2015年,Bahdanau等人提出了注意力机制。这个想法其实很朴素:解码的时候,别只看最后一个隐藏状态,而是回头看所有时间步的隐藏状态,然后挑重要的看。

我个人习惯把注意力机制理解成「加权求和」。每个输入位置都有一个权重,权重越大,说明这个位置对当前输出越重要。

举个例子,翻译「I love you」到中文时,生成「爱」这个字的时候,模型应该重点关注「love」这个词,而不是「I」或「you」。注意力机制就是干这个的。

但注意,这时的注意力还是和RNN绑定的。模型依然需要RNN来提取序列特征。说白了,注意力只是RNN的「辅助工具」,不是主角。

Transformer的诞生:扔掉RNN,全靠注意力

2017年,Google的Vaswani等人发表了那篇著名的论文《Attention Is All You Need》。

我第一次读到这篇论文时,第一反应是:这能行吗?把RNN全扔掉,只靠注意力机制?

事实证明,不仅行,而且效果炸裂。Transformer的核心思想就两个:

  • 自注意力机制(Self-Attention):每个词都能直接看到所有其他词,没有距离限制。
  • 位置编码(Positional Encoding):因为没有RNN的时序结构,需要手动告诉模型词的位置信息。

你想想看,自注意力让每个词都能「一眼看到」整个序列。这彻底解决了长距离依赖问题。30个词的句子?没问题。300个词?照样行。

我的经验:在实际项目中,Transformer处理长文本的能力确实比RNN强太多。我曾经用Transformer做文档摘要,输入长度达到512个token,效果依然稳定。换成LSTM的话,超过100个token就开始崩了。

为什么需要MLP?——Transformer中的「隐藏功臣」

好,现在问题来了。Transformer架构里,自注意力层之后,紧跟着的就是一个MLP(多层感知机)。很多人觉得MLP就是个「打酱油」的,注意力才是主角。

嗯,这里要注意。这种想法大错特错。

我刚开始研究Transformer时,也犯过这个错误。当时我尝试把MLP层去掉,或者换成更简单的线性变换。结果模型性能直接掉了10个点以上。

为什么MLP这么重要?

说白了,自注意力层做的是「信息混合」——它让不同位置的信息互相交流。但混合完之后,每个位置的信息还是停留在原来的特征空间里。MLP的作用就是做「特征变换」——把混合后的信息映射到更高维的空间,提取更丰富的特征。

你可以这样理解:

  • 自注意力:相当于开一个圆桌会议,每个人都能听到别人的发言。
  • MLP:相当于每个人听完发言后,回到自己的办公室,深入思考并做笔记。

两者缺一不可。

关键洞察:Transformer中的MLP通常包含两个全连接层,中间有一个非线性激活函数(如ReLU或GELU)。第一个全连接层把维度从d_model扩展到4倍(甚至更大),第二个全连接层再压缩回来。这种「先升维再降维」的设计,让模型有足够的容量去学习复杂的特征表示。

MLP在Transformer中的具体位置

咱们看看一个标准的Transformer编码器层:

输入 → 自注意力 → 残差连接 + 层归一化 → MLP → 残差连接 + 层归一化 → 输出

每个编码器层都包含一个自注意力子层和一个MLP子层。解码器层则多了一个交叉注意力子层。

我建议你记住这个结构:

组件 作用 输入/输出维度
自注意力 信息混合(位置间交互) d_model → d_model
MLP 特征变换(位置内处理) d_model → d_ff → d_model
残差连接 缓解梯度消失 不变
层归一化 稳定训练 不变

注意看,MLP的中间维度d_ff通常是d_model的4倍。比如BERT-base中,d_model=768,d_ff=3072。这个4倍的经验值,是经过大量实验验证的。

避坑指南:我曾经尝试把d_ff从4倍改成2倍,想着能省点参数。结果模型收敛速度明显变慢,最终效果也差了一截。后来我查了相关论文,发现MLP的容量对Transformer的表示能力至关重要。所以,除非你有充分的理由,否则别轻易动这个4倍的比例。

从Seq2Seq到Transformer:演进路线总结

咱们回顾一下这条演进路线:

  1. Seq2Seq + RNN:串行处理,长距离依赖困难,信息瓶颈严重。
  2. Seq2Seq + Attention:注意力辅助RNN,缓解了部分问题,但RNN依然是瓶颈。
  3. Transformer:完全抛弃RNN,自注意力负责信息混合,MLP负责特征变换。

我个人觉得,Transformer最伟大的地方,不是提出了注意力机制(这个之前就有),而是证明了「纯注意力+MLP」的结构可以完全替代RNN。这个发现改变了整个NLP领域,甚至影响了计算机视觉、语音等领域。

好了,这一章咱们先聊到这儿。下一章我会深入剖析MLP的内部结构,看看那个「先升维再降维」的设计到底藏着什么玄机。

记住,MLP不是Transformer里的配角。它是和自注意力平起平坐的核心组件。没有MLP,Transformer就是个「信息混合器」,做不了真正的特征提取。