【深度学习|学习笔记】从机器学习范式看神经网络能解决什么?(二)
【深度学习|学习笔记】从机器学习范式看神经网络能解决什么?(二)
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可扫描博文下方二维码 “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148877490
前言
- 下面这份“总览 + 代码示例”会把神经网络能解决的问题,放在机器学习的经典范式里系统讲清楚,并给出可直接改造的 PyTorch 小样例。你可以把它当作“问题→方法→实现”的速查表。
5. Python 代码小册(PyTorch 迷你范式)
- 说明:以下示例都尽量精简,展示“问题→网络→损失→指标”的骨架,便于你替换数据集与超参。
5.2 图像分类:极简 CNN
import torch, torch.nn as nn, torch.nn.functional as F
class SmallCNN(nn.Module):
def __init__(self, n_classes=10):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(1, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(16, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2)
)
self.fc = nn.Sequential(nn.Linear(32*7*7, 128), nn.ReLU(), nn.Linear(128, n_classes))
def forward(self, x):
x = self.conv(x) # [B,32,7,7] for 28×28 输入
x = x.flatten(1)
return self.fc(x)
# pred = model(images); loss = F.cross_entropy(pred, labels)
5.3 时间序列单步/多步预测:LSTM 版
import torch, torch.nn as nn
class LSTMForecaster(nn.Module):
def __init__(self, in_dim=1, hid=64, layers=1, horizon=1):
super().__init__()
self.rnn = nn.LSTM(input_size=in_dim, hidden_size=hid, num_layers=layers, batch_first=True)
self.head = nn.Linear(hid, horizon) # 输出未来 horizon 步
def forward(self, x): # x: [B, T, in_dim]
y, _ = self.rnn(x)
return self.head(y[:, -1, :]) # 取最后时刻
# loss = nn.MSELoss()(model(x_seq), y_future)
5.4 自编码器异常检测:重建误差为分数
import torch, torch.nn as nn, torch.nn.functional as F
class AE(nn.Module):
def __init__(self, d):
super().__init__()
self.enc = nn.Sequential(nn.Linear(d,128), nn.ReLU(), nn.Linear(128,16))
self.dec = nn.Sequential(nn.Linear(16,128), nn.ReLU(), nn.Linear(128,d))
def forward(self, x): z = self.enc(x); return self.dec(z)
# 训练:最小化 MSE 重建误差
# 预测:score = ((x - x_hat)**2).mean(dim=1); 分位数阈值判异常
5.5 图学习:极简 GCN(以 PyG 为例,思路示意)
# pip install torch-geometric (需匹配版本)
# from torch_geometric.nn import GCNConv
# class GCN(nn.Module):
# def __init__(self, in_dim, hid, out_dim):
# super().__init__()
# self.g1, self.g2 = GCNConv(in_dim, hid), GCNConv(hid, out_dim)
# def forward(self, x, edge_index):
# x = F.relu(self.g1(x, edge_index))
# return self.g2(x, edge_index) # 节点分类 logits
5.6 推荐/排序:DeepFM 思路骨架(示意)
# 稀疏类别特征 embedding + MLP 的 deep 分支 + 因子分解机 FM 分支 → concat → sigmoid
# loss = BCEWithLogitsLoss(); metrics = AUC/NDCG
6. 选型与落地:一张小抄
- 图像/栅格:分类→ResNet/EfficientNet;分割→U-Net/DeepLab;超分辨→SRResNet/EDSR/扩散;下尺度化/重建→U-Net/残差+注意力/条件扩散。
- 时序:短依赖→TCN/GRU;长依赖/多变量→Transformer;不平稳→差分/局部归一化+注意力。
- 表格:小数据→树模型;中大规模→MLP+正则(Dropout/BatchNorm)或 TabTransformer、FT-Transformer。
- 推荐:特征交互明显→FM/DeepFM;行为序列→DIN/Transformer。
- 科学/物理:PINNs(物理损失)/学术先验+NN 组合;不确定性→Bayesian/MC-Dropout/分位数回归。
- 工程:蒸馏(Distillation)、剪枝、量化;ONNX/TensorRT 导出;A/B 测试与监控(概念漂移、数据漂移)。
7. 实践要点
- 数据与标签决定上限;良好划分与评估(时间/空间外推)才可信。
- 损失函数要与业务目标一致;类别极不均衡用 Focal/加权 CE、或重采样。
- 正则化:Dropout、权重衰减、早停;数据增强对视觉/语音尤关键。
- 可解释性:特征归因(SHAP/IG)、注意力可视化、启发式可解释模块。
- 鲁棒性/安全:对抗扰动、异常输入、概念漂移检测与再训练策略。