【深度学习|学习笔记】从机器学习范式看神经网络能解决什么?(一)
【深度学习|学习笔记】从机器学习范式看神经网络能解决什么?(一)
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可扫描博文下方二维码 “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148877490
前言
- 下面这份“总览 + 代码示例”会把神经网络能解决的问题,放在机器学习的经典范式里系统讲清楚,并给出可直接改造的 PyTorch 小样例。你可以把它当作“问题→方法→实现”的速查表。
1. 从机器学习范式看神经网络能解决什么
神经网络(NN)= 可学习的非线性函数族,通过梯度下降在数据驱动下自动学习表示(representation)。它覆盖了几乎所有常见学习范式:
监督学习:有标签
- 回归(连续变量预测)、分类(离散类别)、结构化输出(语义分割、实例分割、检测、关键点/姿态)。
无监督 / 自监督:无人工标签
- 聚类、表征学习(对比学习、掩码重建)、密度估计、异常检测(自编码器、扩散模型重建误差)。
生成建模:学到数据分布并采样
- 文生图(扩散/Transformer)、文本生成、语音合成、超分辨率、去噪、缺失值填补。
时序/序列建模:RNN/LSTM/Transformer
- 机器翻译、语音识别、时间序列预测(气象、水文、交易量、IoT)、事件序列建模。
强化学习(RL):与环境交互学策略
- 机器人/控制、运筹优化(车队调度、路径规划)、游戏智能体。
图学习(GNN):图结构数据
- 社交/交通/分子图的节点分类、链路预测、图分类。
推荐/排序:CTR/CVR 预估、多目标排序
- Wide&Deep、DeepFM、DIN/DIEN 等深度特征交互模型。
科学与工程:PINNs、反演与同化
- 偏微分方程求解、物理约束重建、遥感反演、下采样→上采样/下尺度化(downscaling)。
多模态:图文、语音、时空
- 检索(CLIP)、VQA、视频理解、遥感时空融合。
2. 典型问题清单(含输入输出与常用评价)
问题类型 | 输入→输出 | 常用架构 | 损失 | 评价指标 |
---|---|---|---|---|
回归 | x→y∈ℝ | MLP/ResNet/Transformer | MSE/Huber | RMSE/MAE/R² |
二/多分类 | x→y∈{1…K} | MLP/CNN/Transformer | CE/Focal | Acc/F1/AUC |
语义分割 | 图像→像素类别图 | U-Net/DeepLab | CE+Dice | mIoU/Dice |
目标检测 | 图像→框+类别 | YOLO/Detectron | GIoU+CE | mAP |
时序预测 | 序列→未来值 | LSTM/TCN/Transformer | MSE/MAE | RMSE/MAPE |
异常检测 | x→重建x̂ | AE/VAE | L2/ELBO | AUROC/PR |
推荐/排序 | 用户×物品→点击/分数 | DeepFM/DIN | BCE/Pairwise | AUC/NDCG |
图学习 | 图/节点→标签 | GCN/GAT | CE | Acc/F1 |
生成 | 噪声/提示→样本 | Diffusion/VAE | Diffusion/ELBO | FID/IS/PSNR |
强化学习 | 状态→动作 | Policy/Value Net | RL目标 | 累积回报 |
3. 何时优先用神经网络?
- 强非线性/高维原始模态:图像、语音、文本、时空格点数据。
- 端到端表征学习:手工特征难以覆盖时。
- 大数据 + 可计算:NN 随数据规模提升表现通常更稳健。
- 需要生成/重建/填补:扩散、AE、VAE 很合适。
4. 何时慎用/不用?
- 样本极少但特征工程成熟:先试线性/树模型。
- 强可解释性刚需:可选广义加性模型/GAM、树模型或加可解释约束。
- 部署资源极小:考虑蒸馏/剪枝/量化或更轻模型。
5. Python 代码小册(PyTorch 迷你范式)
- 说明:以下示例都尽量精简,展示“问题→网络→损失→指标”的骨架,便于你替换数据集与超参。
5.1 表格数据:二分类/回归(同一 MLP 结构复用)
import torch, torch.nn as nn, torch.nn.functional as F
from torch.utils.data import TensorDataset, DataLoader
# 伪造一些数据:N 行、d 维
N, d = 2000, 20
X = torch.randn(N, d)
# 二分类标签
y_cls = (X[:, 0] + 0.5*X[:, 1] - 0.3*X[:, 2] + 0.1*torch.randn(N) > 0).long()
# 回归标签
y_reg = X[:, :5].sum(dim=1) + 0.1*torch.randn(N)
class MLP(nn.Module):
def __init__(self, in_dim, out_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(in_dim, 128), nn.ReLU(),
nn.Linear(128, 64), nn.ReLU(),
nn.Linear(64, out_dim)
)
def forward(self, x): return self.net(x)
def train_simple(X, y, out_dim, loss_fn, epochs=20):
ds = TensorDataset(X, y)
dl = DataLoader(ds, batch_size=64, shuffle=True)
model = MLP(X.shape[1], out_dim)
opt = torch.optim.Adam(model.parameters(), 1e-3)
for _ in range(epochs):
for xb, yb in dl:
pred = model(xb)
loss = loss_fn(pred.squeeze(), yb)
opt.zero_grad(); loss.backward(); opt.step()
return model
# 二分类:CrossEntropy 要求 logits,标签为 long
clf = train_simple(X, y_cls, out_dim=2, loss_fn=lambda p,y: F.cross_entropy(p, y))
# 回归:MSE
reg = train_simple(X, y_reg, out_dim=1, loss_fn=lambda p,y: F.mse_loss(p, y))