Appearance
模型核心架构:从传统 ML 到 Transformer
本页解决什么:不推导算法公式,而是说明传统机器学习、神经网络、CNN、RNN/LSTM/GRU 和 Transformer 的核心组件、信息流、适用数据与工程边界。读完应能看懂架构图,并知道项目为什么选择或不选择某类模型。
五类架构总图
| 架构 | 输入如何组织 | 核心计算直觉 | 常见输出 |
|---|---|---|---|
| 传统机器学习 | 人工整理的表格特征 | 用线性、树或距离规则组合特征 | 类别、分数、连续数值、分组 |
| 前馈神经网络 MLP | 固定长度向量 | 多层变换逐步学习更抽象的表示 | 分类、回归、Embedding |
| CNN | 图像、网格或局部连续信号 | 同一卷积核在局部区域重复查找模式 | 分类、检测、分割、特征图 |
| RNN/LSTM/GRU | 按时间步进入的序列 | 把前一步的隐藏状态传给下一步 | 序列分类、逐步预测、时间序列 |
| Transformer | Token、图像 Patch 或多模态序列 | 用注意力直接计算不同位置之间的关系 | 文本生成、理解、检索表示、多模态输出 |
模型架构不是完整产品架构。训练数据、检索、权限、业务规则、工具调用、监控、评估和人工接管仍然位于模型之外。
传统机器学习与神经网络
传统机器学习和神经网络都属于机器学习。它们的主要区别不是“旧”和“新”,而是特征主要由谁构造,以及模型能承载多复杂的表示。
| 对比 | 传统机器学习 | 神经网络 / 深度学习 |
|---|---|---|
| 常见输入 | 结构化表格、统计特征、业务指标 | 图像、音频、文本、复杂时序,也可以处理表格 |
| 特征来源 | 主要由人设计和筛选 | 可从原始数据中逐层学习表示 |
| 数据规模 | 小中规模也能形成强基线 | 通常更依赖数据量、预训练模型和算力 |
| 可解释性 | 线性模型、树模型更容易解释 | 需要可视化、归因、探针或案例分析辅助解释 |
| 训练与部署 | 成本较低,CPU 常可满足 | 训练和推理成本更高,常需 GPU、量化或批处理 |
| 优先场景 | 表格预测、风控、运营分析、规则增强 | 视觉、语言、语音、复杂模式和端到端表示学习 |
应用工程应先建立简单基线:表格分类不应因为“深度学习更先进”就跳过逻辑回归、随机森林或 GBDT;图像、语音和自然语言任务则通常需要神经网络或预训练模型。机器学习完整的数据、标签和泛化基础见机器学习基础。
神经网络基础
神经网络可以理解成一组可学习的多层函数。每一层接收上一层的数值表示,使用权重和偏置做组合,再经过激活函数产生下一层表示。
三类层
| 层 | 做什么 | 工程上要确认什么 |
|---|---|---|
| 输入层 | 接收表格向量、像素、Token Embedding 或传感器窗口 | 维度、归一化、缺失值、长度和权限是否稳定 |
| 隐藏层 | 逐层提取组合特征和抽象表示 | 层数、宽度、计算量是否与数据规模匹配 |
| 输出层 | 把内部表示变成类别、数值、序列或向量 | 输出是否能直接对应业务动作和验收指标 |
激活函数给网络加入非线性,否则很多层叠在一起仍接近一次线性变换。ReLU 常用于隐藏层;Sigmoid 常用于二分类概率;Softmax 常用于多类别概率。具体选择由任务和实现决定,不需要背诵公式。
模型怎样“学”
- 前向计算:输入依次经过各层,得到预测。
- 损失函数:把预测和正确答案比较,形成一个可优化的错误信号。
- 反向传播:沿网络反向计算每个权重对错误的影响。
- 优化器更新:按学习率调整权重和偏置,让下一轮预测更接近目标。
- 重复验证:在独立验证集和测试集上检查是否只记住训练数据。
这里不要求公式推导,但要理解:训练改变参数,推理只使用已经训练好的参数;损失下降不等于业务指标一定变好;网络更深也不保证泛化更强。
CNN:卷积神经网络
CNN 适合空间上相邻位置具有关系的数据。它不像全连接层那样让每个像素直接连接所有节点,而是让较小的卷积核在图像上滑动,重复寻找局部模式。
典型信息流
输入图像 → 卷积层 → 激活函数 → 池化/下采样 → 多层特征图 → 分类头/检测头/分割头
| 组件 | 核心原理 | 应用工程含义 |
|---|---|---|
| 卷积核 | 在局部窗口内提取边缘、纹理或形状 | 核大小决定一次观察多大的局部区域 |
| 局部感受野 | 一个节点只看输入的一小块区域 | 适合局部结构明显的图像和网格信号 |
| 权重共享 | 同一卷积核在不同位置使用同一组权重 | 减少参数,并能在不同位置识别同类模式 |
| 特征图 | 一个卷积核在整幅输入上的响应结果 | 浅层常对应边缘纹理,深层逐渐组合成语义特征 |
| 步幅 Stride | 卷积核每次移动的距离 | 步幅越大,输出尺寸和计算量通常越小 |
| 填充 Padding | 在边缘补值,控制输出尺寸 | 避免边缘信息过快丢失,方便多层对齐 |
| 池化 | 对局部区域做最大值或平均值汇总 | 降低分辨率和计算量,但可能损失精细位置 |
| 任务头 | 把共享特征转成具体任务输出 | 分类头给类别,检测头给框和类别,分割头给像素级结果 |
一维 CNN 可以处理短序列和波形,二维 CNN 处理图像,三维 CNN 可以处理体数据或短视频片段。残差网络 ResNet 通过跨层连接缓解深层网络难训练的问题;U-Net 通过编码器—解码器和跳跃连接保留分割所需的细节。
CNN 的边界也要清楚:它擅长局部空间模式,但对很远区域的关系、超长序列或跨模态上下文并不天然高效;图像质量、拍摄角度、光照和标注偏差仍会决定上线表现。
RNN/LSTM/GRU:序列记忆
RNN 按时间步依次读取序列。当前输入和上一个时间步的隐藏状态共同产生新的隐藏状态,因此模型具有“前文影响后文”的短期记忆。
x₁ → h₁ → x₂ → h₂ → x₃ → h₃ → 输出
| 架构 | 核心机制 | 适用情况 | 主要边界 |
|---|---|---|---|
| RNN | 每个时间步传递隐藏状态 | 短序列、简单时序模式 | 长距离依赖容易衰减,训练不稳定 |
| LSTM | 维护单独记忆通道,并用遗忘门、输入门、输出门控制信息 | 加载过程、传感器时序、语音和中长序列 | 结构较重,仍需顺序计算 |
| GRU | 用更新门和重置门合并部分 LSTM 功能 | 数据或算力较受限的序列任务 | 表达能力与效率需按任务验证 |
| 双向 RNN | 同时读取过去和未来上下文 | 已完整获得的文本或离线序列 | 不适合严格实时、不能看到未来的场景 |
| ConvLSTM | 用卷积处理每个时间步的空间状态 | 雷达图、应变场、速度场和视频预测 | 空间与时间计算成本都较高 |
RNN 家族的核心限制是顺序计算:后一个时间步通常要等待前一个时间步,训练难以像 Transformer 那样大规模并行。对超长文本和大规模预训练,Transformer 已成为主流;但在数据较小、实时流式处理、状态递推明确的任务中,RNN/LSTM/GRU 仍可能更简单有效。
Transformer:注意力架构
Transformer 不依赖 RNN 的逐步状态传递,而是让序列中的不同位置通过注意力直接建立关系。它既能并行处理训练序列,也更容易扩展到大规模预训练。
一层 Transformer 的核心积木
Token / 图像 Patch → Embedding + 位置信息 → 多头自注意力 → 前馈网络 → 残差连接与归一化 → 输出表示
| 组件 | 直觉解释 | 解决什么 |
|---|---|---|
| Token / Patch | 把文本、代码或图像切成模型可处理的单元 | 定义模型看到的基本粒度 |
| Embedding | 把离散单元映射为连续向量 | 让相似信息可以在向量空间中计算 |
| 位置信息 | 告诉模型各单元的顺序或空间位置 | 注意力本身不天然知道先后与坐标 |
| Query / Key / Value | Query 表示“我需要什么”,Key 表示“我包含什么”,Value 是要传递的信息 | 计算一个位置应该从其他位置取多少信息 |
| 多头自注意力 | 多组注意力并行观察不同关系 | 同时关注语义、指代、结构和远距离依赖 |
| 前馈网络 FFN | 对每个位置的表示做进一步非线性变换 | 增强单个位置的特征加工能力 |
| 残差连接 | 把输入直接加回子层输出 | 让深层网络更容易训练,减少信息丢失 |
| 归一化 | 稳定不同层之间的数值分布 | 提高深层训练稳定性 |
三种主流结构
| 结构 | 代表模型 | 信息流 | 常见任务 |
|---|---|---|---|
| Encoder-only | BERT | 双向读取完整输入,形成理解型表示 | 分类、抽取、Embedding、重排序 |
| Decoder-only | GPT | 只能关注当前位置之前的内容,自回归生成下一个 Token | 对话、写作、代码生成、通用 LLM |
| Encoder-Decoder | T5 | Encoder 理解输入,Decoder 根据输入逐步生成输出 | 翻译、摘要、结构转换、受控生成 |
ViT 把图像切成 Patch 后交给 Transformer;多模态模型则把文字、图像、音频或视频表示放进可以相互注意的序列中。Transformer 的注意力并不等于可靠推理或事实数据库:长上下文会增加显存和延迟,输入顺序与提示方式仍会影响结果,参数知识会过期,生成结果必须由 RAG、工具、规则、评估和人工控制补强。
其他常见架构
| 架构 | 核心结构 | 典型用途 |
|---|---|---|
| GNN | 节点从相邻节点聚合信息,多层后获得图结构表示 | 知识图谱、分子、供应链、推荐和关系风险 |
| Autoencoder | 编码器压缩输入,解码器重建输入 | 降维、异常检测、表示学习、去噪 |
| Diffusion | 训练模型逐步预测并去除噪声 | 图像、音频、视频和部分结构化内容生成 |
| 混合架构 | 组合 CNN、RNN、Transformer、规则或物理约束 | 多模态、时空预测、工业测量和复杂业务系统 |
如何选择架构
| 数据与任务 | 优先基线 | 可能升级的架构 | 选型提醒 |
|---|---|---|---|
| 表格分类或回归 | 线性模型、随机森林、GBDT | MLP、Tabular Transformer | 小数据先做传统 ML,解释和数据泄漏更重要 |
| 图像分类、检测、分割 | 传统视觉 + 预训练 CNN | ViT、视觉 Transformer、混合模型 | 采集、标定、分辨率和标注质量先于模型名 |
| 短序列或实时传感器流 | 统计特征、1D CNN | RNN、LSTM、GRU | 明确采样频率、窗口长度和实时延迟 |
| 长文本、代码和长序列 | 预训练 Transformer | 长上下文或检索增强模型 | 注意上下文成本、证据来源和幻觉 |
| 图结构与关系传播 | 图统计、规则、知识图谱查询 | GNN | 图构建质量和关系含义决定结果上限 |
| 时空场、视频和多模态 | CNN + 时序基线 | ConvLSTM、时空 Transformer、混合架构 | 同时验证空间误差、时间稳定性和计算成本 |
选型顺序:先建立非 AI 或简单模型基线,再看错误主要来自数据、特征、架构还是业务定义。只有当前架构无法表达关键关系且有可验证数据时,才升级复杂度。
工程评审六问
| 评审项 | 必须说清的问题 |
|---|---|
| 输入形态 | 是表格、图像、音频、短序列、长文本、图结构还是多模态?输入如何采集和校验? |
| 输出形态 | 需要类别、数值、框、掩码、序列、Embedding 还是生成内容?谁消费输出? |
| 数据规模 | 有多少独立样本、覆盖哪些边界场景、标签是否一致、是否允许使用预训练模型? |
| 延迟与成本 | 是离线批处理还是实时服务?CPU/GPU、显存、并发和上下文成本上限是多少? |
| 错误代价 | 误报、漏报、幻觉、漂移或延迟分别会影响谁?什么时候必须拒绝或转人工? |
| 验收指标 | 用准确率、召回率、F1、MAE、IoU、引用正确率、任务完成率还是业务指标验收? |
Python 库
| 库 | 用途 |
|---|---|
scikit-learn | 传统机器学习基线、预处理和评估 |
torch | 神经网络、CNN、RNN 和 Transformer 训练与推理 |
torchvision | 图像数据、预训练 CNN/ViT 和视觉变换 |
transformers | BERT、GPT、T5、Embedding 和多模态模型调用 |
torch_geometric | 图神经网络 |
最小示例
python
import torch
import torch.nn as nn
class TinyCNN(nn.Module):
def __init__(self):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(1, 8, kernel_size=3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool2d((1, 1))
)
self.classifier = nn.Linear(8, 2)
def forward(self, x):
features = self.features(x).flatten(1)
return self.classifier(features)
model = TinyCNN()
image_batch = torch.randn(4, 1, 64, 64)
logits = model(image_batch)
print(logits.shape) # torch.Size([4, 2])这个例子只展示信息流:图像先经过卷积特征提取,再经过分类头输出两个类别的分数。真实项目还要处理数据划分、增强、损失函数、优化器、评估集、版本和部署监控。
下一步
- 理解数据、标签与泛化:机器学习基础
- 理解 Transformer 如何形成 LLM 能力:LLM 训练机制
- 理解图像任务与工程测量:计算机视觉与 OpenCV
- 理解上线指标和人工接管:评估与风险
