news 2026/6/8 20:45:08

从图像分类到推荐系统:聊聊MLP这个‘特例’在Transformer和CTR模型里为啥又火了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从图像分类到推荐系统:聊聊MLP这个‘特例’在Transformer和CTR模型里为啥又火了

从图像分类到推荐系统:MLP在Transformer和CTR模型中的复兴之谜

当深度学习领域被卷积神经网络(CNN)和循环神经网络(RNN)主导多年后,一个看似"过时"的架构——多层感知机(MLP)正在以令人惊讶的方式回归前沿舞台。这种回归并非简单的复古,而是MLP在Transformer架构和推荐系统等新兴场景中展现出独特的价值。本文将深入探讨MLP这一"特例"如何在非空间数据处理领域重新焕发活力。

1. MLP的涅槃重生:从基础组件到核心模块

MLP作为深度学习中最基础的架构之一,曾因其全连接特性在图像处理领域被CNN取代。传统观点认为,MLP在处理图像时会丢失空间信息,参数效率低下。然而,在自然语言处理和推荐系统等非空间数据领域,MLP却展现出意想不到的优势。

MLP的核心优势在于

  • 全局信息处理能力:不受局部感受野限制,可同时考虑所有输入特征
  • 强大的特征变换能力:通过多层非线性变换实现复杂特征交互
  • 并行计算效率:相比RNN等序列模型,MLP可充分利用现代硬件加速

在Transformer架构中,MLP以"前馈网络"(FFN)的形式成为核心组件之一。一个典型的Transformer FFN层可表示为:

class FeedForwardNetwork(nn.Module): def __init__(self, d_model, d_ff): super().__init__() self.linear1 = nn.Linear(d_model, d_ff) self.linear2 = nn.Linear(d_ff, d_model) self.activation = nn.GELU() def forward(self, x): return self.linear2(self.activation(self.linear1(x)))

这种简单的两层MLP结构,配合残差连接,在语言模型中展现出惊人的表达能力。研究表明,FFN层在Transformer中承担了大部分的实际"知识"存储和转换工作。

2. Transformer中的MLP:不只是简单的特征变换

在Transformer架构中,MLP模块(通常称为FFN或前馈网络)位于自注意力层之后,承担着关键的信息处理角色。与直觉相反,这些看似简单的全连接层在模型性能中起着决定性作用。

Transformer中MLP的独特设计

  • 扩展-收缩结构:先扩展到更高维度(通常4倍于输入维度),再收缩回原维度
  • 位置级处理:每个位置独立通过相同的MLP,保持位置独立性
  • 非线性变换:使用GELU等现代激活函数增强表达能力

提示:在大型语言模型中,FFN层的参数往往占模型总参数的2/3以上,远多于注意力层的参数。

近期研究揭示了Transformer中MLP层的几个有趣现象:

发现说明意义
稀疏激活只有少量神经元对特定输入激活类似专家混合(MoE)的行为
模式存储特定神经元对应特定语言模式承担事实知识存储功能
跨层进化低层处理语法,高层处理语义形成层次化表征

这些发现表明,Transformer中的MLP远非简单的特征变换器,而是承担了模型大部分"思考"工作的核心组件。

3. 推荐系统中的MLP革命:从特征交互到深度CTR模型

在推荐系统领域,MLP同样经历了一场复兴。传统的协同过滤方法逐渐被基于深度学习的点击率(CTR)预测模型取代,而MLP在这些模型中扮演着关键角色。

推荐系统中MLP的典型应用场景

  • 特征嵌入组合:将稀疏特征嵌入转换为稠密表示
  • 高阶特征交互:自动学习特征间的复杂非线性关系
  • 最终预测层:综合所有信息产生点击概率预测

以经典的DeepFM模型为例,其MLP部分结构如下:

class DeepFM(nn.Module): def __init__(self, field_size, feature_sizes, embedding_size=4): super().__init__() # FM部分省略... # DNN部分 self.mlp = nn.Sequential( nn.Linear(field_size*embedding_size, 256), nn.BatchNorm1d(256), nn.ReLU(), nn.Linear(256, 128), nn.BatchNorm1d(128), nn.ReLU(), nn.Linear(128, 1) ) def forward(self, x): # FM部分计算省略... dnn_output = self.mlp(embeddings.flatten(1)) return torch.sigmoid(fm_output + dnn_output)

现代推荐模型如DCN、xDeepFM等进一步创新了MLP的应用方式,通过交叉网络、压缩激励等机制增强MLP的特征交互能力。

4. MLP与CNN的辩证关系:何时选择MLP?

虽然MLP在特定领域重新受到重视,但理解其与CNN的根本区别仍然至关重要。选择架构时需要考虑以下几个关键因素:

数据特性对比

特性MLP优势场景CNN优势场景
空间局部性
平移不变性不需要重要
特征交互全局局部
参数效率
计算效率中等

MLP更适合的场景

  • 特征间没有明显空间关系(如用户行为序列)
  • 需要建模全局特征交互
  • 输入维度相对固定且不高
  • 计算效率是关键考量

CNN更适合的场景

  • 输入具有强空间结构(如图像、视频)
  • 需要利用平移不变性
  • 参数效率是关键考量
  • 需要层次化特征提取

在实际应用中,两种架构常常结合使用。例如,Vision Transformer中先用CNN提取局部特征,再用Transformer中的MLP处理全局关系;多模态模型中可能用CNN处理图像,MLP处理文本。

5. MLP的创新变体:超越传统全连接

随着MLP在新时代的应用,研究者们提出了多种创新变体,进一步释放了MLP的潜力。这些改进使MLP能够更好地适应现代深度学习的需求。

前沿MLP变体一览

  1. MLP-Mixer
    • 完全基于MLP的视觉架构
    • 通过转置操作交替处理空间和通道信息
    • 在图像分类任务上达到接近CNN的性能
class MLPMixerBlock(nn.Module): def __init__(self, dim, seq_len, mlp_ratio=4): super().__init__() self.norm1 = nn.LayerNorm(dim) self.mlp1 = nn.Sequential( nn.Linear(seq_len, seq_len*mlp_ratio), nn.GELU(), nn.Linear(seq_len*mlp_ratio, seq_len) ) self.norm2 = nn.LayerNorm(dim) self.mlp2 = nn.Sequential( nn.Linear(dim, dim*mlp_ratio), nn.GELU(), nn.Linear(dim*mlp_ratio, dim) ) def forward(self, x): x = x + self.mlp1(self.norm1(x).transpose(1,2)).transpose(1,2) x = x + self.mlp2(self.norm2(x)) return x
  1. gMLP

    • 引入空间门控机制的MLP
    • 通过门控控制信息流动
    • 在语言建模任务上表现优异
  2. ResMLP

    • 结合残差连接的纯MLP架构
    • 使用线性层代替自注意力
    • 训练效率显著高于Transformer

这些创新表明,MLP架构仍然有巨大的探索空间,特别是在如何有效处理长距离依赖和提升参数效率方面。

6. 实践指南:有效应用MLP组件的关键技巧

在实际项目中成功应用MLP组件需要考虑多个工程细节。以下是从业者在构建基于MLP的模型时积累的实用经验:

MLP调优技巧

  • 维度选择

    • 中间层维度通常是输入维度的2-4倍
    • 太窄会导致表达能力不足,太宽会增加过拟合风险
    • 可参考公式:hidden_size = max(4*sqrt(input_size), 256)
  • 正则化策略

    • Dropout率通常设置在0.1-0.3之间
    • 权重衰减(L2正则)系数建议1e-4到1e-5
    • 批量归一化可显著改善深层MLP训练
  • 激活函数选择

    • ReLU:简单高效,但可能有"死亡神经元"问题
    • GELU:Transformer中的默认选择,表现优异
    • Swish:自动搜索发现的激活函数,效果稳定

常见陷阱与解决方案

问题现象解决方案
梯度消失深层MLP难以训练使用残差连接/适当的初始化
过拟合训练集表现远好于测试集增加Dropout/早停/正则化
计算瓶颈MLP部分成为速度瓶颈尝试分组卷积/降低维度
内存溢出参数量过大使用参数共享/蒸馏技术

在推荐系统实践中,发现MLP层数的选择存在一个"甜蜜点"——通常3-5层效果最佳。过深的MLP反而会降低模型性能,这可能与推荐数据的特性有关。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 20:41:55

从五段流水线到RISC-V:用Ripes模拟器对比学习CPU流水线设计

从五段流水线到RISC-V:用Ripes模拟器对比学习CPU流水线设计在计算机体系结构的学习过程中,流水线技术始终是一个核心话题。从早期的经典五段流水线到现代RISC-V架构,流水线设计理念经历了显著演变。本文将带您使用Ripes模拟器——一个支持RIS…

作者头像 李华
网站建设 2026/6/8 20:41:07

Qt 大型项目团队分工 + Q_DECL_IMPORT/Q_DECL_EXPORT 全套规范

Qt 大型项目团队分工 + Q_DECL_IMPORT/Q_DECL_EXPORT 全套规范(Qt5.9/MSVC2015 工程落地版) 一、团队分层分工架构(工业软件通用,按模块拆人) 1、工程目录分层(顶层Top.pro用TEMPLATE=subdirs统一管理全工程) plaintext ProjectRoot/ ├─ Top.pro #…

作者头像 李华
网站建设 2026/6/8 20:41:06

Windows 11终极优化指南:使用Win11Debloat三步打造纯净高效系统

Windows 11终极优化指南:使用Win11Debloat三步打造纯净高效系统 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutt…

作者头像 李华