人工智能算法综述实战:从分类框架到选型对比指南

人工智能算法综述实战:从分类框架到选型对比指南 简介一份面向人工智能初学者与相关课程学习者的算法综述文档以 doc 格式系统梳理搜索技术与人工神经网络两大主线覆盖盲目式搜索广度优先、深度优先、迭代深入等、启发式搜索A*、AO*、存储限制启发式等、局部搜索爬山、模拟退火、遗传、群集智能等以及多层感知网络、KOHONEN 竞争型神经网络、Hopfield 神经网络等经典算法。文档不仅给出各算法的原理、特点与适用场景还结合专家系统、自然语言理解、自动程序设计、模式识别、机器人学、信息检索与博弈等典型应用领域加以比较评价并对人工智能算法的发展前景作出展望有助于读者从整体上把握算法脉络。资源为 1 个 doc 文件压缩包大小约 93KB文档含摘要、目录、正文及参考文献结构清晰便于按章节研读或作为课程报告参考。已有 160 人学习下载。通过这份综述读者可以快速了解不同算法的适用边界与优化思路减少算法选型时的盲目性尤其适合用于期末复习、论文综述写作或自学入门。1. 人工智能算法综述到底在综述什么很多团队做 AI 落地时第一步都落在一份“人工智能算法综述”上。我见过两种浪费一种是把维基百科列表抄一遍从 KMP 到冒泡排序都放进去结果没人翻另一种是只写深度学习算法模型把逻辑回归、GBDT、粒子群和匈牙利算法全部省略导致选型时漏掉最合适的方案。真正有用的综述不是算法词典而是决策索引给定场景、数据量和硬件约束哪些算法值得先跑、按什么顺序跑。下面用的不是教材复述而是一套可以落地的做法用分类框架把算法装进去用同一套评估管道跑出可对比的数据再把结论沉淀成一张算法卡。适合算法工程师、技术负责人以及正在规划自己人工智能学习路径的人。2. 人工智能算法的分类框架与数学基础做一个综述最怕开头就陷入算法定义。我的习惯是先立两根轴第一根是学习范式第二根是算法族。二者交叉后能覆盖绝大多数主流方法也能暴露边界。2.1 按学习范式分监督、无监督与强化学习按范式分类最常见但只按这个轴分很快会遇到边界情况。监督学习假设每个样本有标签回归、分类、排序都能放进来无监督学习是找结构聚类、降维、异常检测都是它的体现强化学习不依赖静态标签而是通过奖励信号学习策略适合控制、博弈和机器人场景。真正麻烦的是自监督学习和 RLHF 这类混合范式对比学习自己构造正负样本算无监督还是监督奖励模型是监督学习策略优化又是强化学习硬塞进一个格子会把整个综述的逻辑带偏。我一般会在表格里加一列“范式混合”把这类算法单独标注。这样既保持了分类轴的稳定又不会丢掉真实业务里的复合形态。生物智能、人工智能、计算智能的层次关系也可以在这里参考计算智能是手段生物智能提供启发人工智能是任务外显层。算法综述本质上做的是“手段-任务”映射而不是给算法评职称。无监督和强化学习也不能因为当前深度学习热就轻视。具身智能数据集质量要求及评价方法这类新标准恰恰是把感知、决策和数据质量放在一起评背后还是这三种范式的协同。综述里给每个学习范式写一小段“当前活跃点”比罗列十个算法名称有价值。2.2 按算法族分线性模型、树模型、概率图、群智能与深度学习范式的粒度太粗同一个监督学习里线性模型和深度模型的工程表现可能天差地别。所以第二根轴按算法族分我常用的分法如下算法族代表算法典型任务常见实现线性模型系线性回归、逻辑回归、线性SVM表格数据回归/分类scikit-learn树模型系决策树、随机森林、XGBoost、LightGBM表格数据、排序xgboost、lightgbm概率图模型HMM、CRF、贝叶斯网络序列标注、因果推理pgmpy、hmmlearn群智能/元启发粒子群算法、遗传算法、模拟退火组合优化、特征选择scipy、deap深度学习系CNN、RNN、Transformer、图神经网络视觉、文本、关系预测PyTorch、TensorFlow匹配类算法匈牙利算法、KM算法任务分配、目标关联scipy.optimize这个分法不是按数据结构教材来的刻意把剪枝算法归到模型压缩把混合整数线性规划放在约束优化里。原因是综述的消费者是选型的人不是考试的人。深度学习算法在视觉和文本任务上优势明显但在中小型表格数据上树模型往往更稳这个反直觉点应该放在综述摘要部分。概率图模型现在热度下降却在知识推理和低数据场景里依然有用不能删。2.3 统一视角目标函数、优化器、正则化三要素把这么多算法放进同一份文档后还要有一套共同语言来比较它们。我用的统一视角是任何监督算法都可以写成最小化目标函数L 1/N * Σ L_i λΩ不同算法只在三处不同损失函数怎么定义、优化器怎么搜索、正则项怎么约束。import numpy as np def sgd_step(X, y, w, lr0.01, lam0.01, loss_typemse): 统一的三要素更新步骤演示用真实场景请直接调框架。 pred X w if loss_type mse: loss np.mean((pred - y) ** 2) grad 2 * X.T (pred - y) / len(y) elif loss_type logistic: p 1 / (1 np.exp(-np.clip(pred, -30, 30))) loss -np.mean(y * np.log(p 1e-12) (1 - y) * np.log(1 - p 1e-12)) grad X.T (p - y) / len(y) grad 2 * lam * w w - lr * grad return w, loss这里lr是学习率控制参数更新步长工程上通常从1e-3开始调lam是正则化强度L2 正则让权重向零收缩换成 L1 正则则产生稀疏解。loss_type切换的是损失函数对应三要素中的“目标函数”。这个函数只是教学演示np.exp在极端输入下有溢出风险但足以展示模型的统一骨架。你自己写综述结论时先把基线算法按这三要素拆开记录比单独记录准确率更能解释“为什么换损失会改变结果”。3. 动手复现一份可运行的算法对比代码分类框架说完进入真正的综述实验。下面这段流程以表格数据二分类为例所有算法跑同一份数据、同一套交叉验证折。这样才敢写“谁比谁好”。3.1 最小环境与基准数据准备先建干净环境。我总是先锁虚拟环境再装固定版本否则半年后同一份脚本会因为依赖升级跑出完全不同的结论。mkdir ai_survey cd ai_survey python -m venv .venv source .venv/bin/activate pip install numpy pandas scikit-learn xgboost torch提示依赖版本不一致是算法综述最隐蔽的坑。记录实验环境与记录算法结果同样重要最好把pip freeze requirements.txt的输出一并放进综述附录。环境就绪后用make_classification生成一份可复现的表格数据避免网络下载带来的波动from sklearn.datasets import make_classification X, y make_classification( n_samples5000, n_features40, n_informative15, n_redundant5, random_state42 )n_informative控制真正有用的特征数n_redundant引入线性冗余组合起来接近真实表格数据的结构。random_state42保证每次生成完全一致。如果你手头有业务数据也可以替换进来但要在综述里写明数据来源、样本量和特征含义。3.2 从逻辑回归到XGBoost的参数对照拿到数据后我把几个基准算法放进同一个评估函数。公平性来自同一组StratifiedKFold划分而不是每次都重新随机。from sklearn.model_selection import cross_val_score, StratifiedKFold from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier from xgboost import XGBClassifier cv StratifiedKFold(n_splits5, shuffleTrue, random_state42) models { logit: LogisticRegression(max_iter2000), svm_rbf: SVC(kernelrbf, C1.0, gammascale), rf_200_8: RandomForestClassifier(n_estimators200, max_depth8, n_jobs-1), xgb_200_6: XGBClassifier(n_estimators200, max_depth6, learning_rate0.05) } for name, model in models.items(): scores cross_val_score(model, X, y, cvcv, scoringf1) print(f{name}: {scores.mean():.4f} ± {scores.std():.4f})这里cv对象在循环内被复用确保每个算法都在相同的训练/验证组合上评估。scoringf1对二分类不平衡数据更诚实AUC 偏向排序质量但无法直接反映阈值下的业务代价。不要在一个算法跑到一半时手动改 shuffle 参数否则你没法解释分数差异到底是算法带来的还是划分带来的。参数对照如下算法关键超参含义常见调整方向逻辑回归max_iter迭代上限不收敛时增大到 5000SVMC, gamma误分类惩罚、核影响范围C 太大会过拟合gamma 太大会局部化随机森林n_estimators, max_depth树数量、最大深度优先调 depth树数到 200 后收益递减XGBoostlearning_rate, n_estimators步长、树数小步长配多树是典型的精度来源跑完后如果发现 SVM 最慢、XGBoost 分数最高这说明树模型在密集表格特征上占优。不要在综述里只写“效果排序”还要写“最慢花了多久”这直接关系能不能上线。3.3 深度学习算法PyTorch下的小型CNN调参表格数据里深度学习不一定占优势但综述不能缺这个算法族。下面用一个随机图像数据跑通流程验证结构没问题后再替换成真实数据。这个例子在视觉任务里很典型CNN 的卷积核就是特征提取器池化在降采样dropout 是深度学习算法里最常用的正则化手段。即使你参考的是《计算机视觉算法与应用》这类教材工程综述也要额外记录实测耗时的参数量不能只抄书上的网络结构。import torch from torch import nn torch.manual_seed(42) class SmallCNN(nn.Module): def __init__(self): super().__init__() self.features nn.Sequential( nn.Conv2d(1, 32, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.ReLU(inplaceTrue), nn.AdaptiveAvgPool2d((4, 4)), ) self.classifier nn.Sequential( nn.Flatten(), nn.Dropout(p0.3), nn.Linear(64 * 4 * 4, 10), ) def forward(self, x): return self.classifier(self.features(x)) x torch.randn(64, 1, 32, 32) y torch.randint(0, 10, (64,)) model SmallCNN() opt torch.optim.AdamW(model.parameters(), lr3e-4, weight_decay1e-4) for epoch in range(3): out model(x) loss nn.functional.cross_entropy(out, y) opt.zero_grad() loss.backward() opt.step() print(final loss:, loss.item())weight_decay1e-4就是第2章说的 L2 正则PyTorch 里以优化器参数出现。下面是这类模型综述必须记录的四个参数。表格里每一行都可以直接抄进综述的实验说明尤其要注意 dropout 在推理阶段的开关很多复现坑都出在忘记切换到model.eval()模式。参数推荐范围注意事项batch_size32-256太大收敛慢太小 BatchNorm 不稳定lr1e-4 - 1e-2超过 1e-2 容易 loss 爆炸weight_decay1e-5 - 1e-3太大会欠拟合dropout0.1-0.5推理时必须关闭PyTorch 的model.eval()会处理这一段跑通后把批大小、学习率和 dropout 都记录进表里。深度学习算法的“结构”比超参更难比较综述里还要记录参数量和推理耗时因为 GPU 显存和时延往往比 accuracy 分差更早让人放弃某个模型。3.4 优化类算法粒子群、匈牙利、剪枝算法的边界综述不能只写分类模型还要覆盖“在模型之外的算法”。常见教材很少把这几个放一起但工程里它们出现频率很高。粒子群算法适合连续参数搜索也能用在特征选择匈牙利算法解决二分图最优匹配剪枝算法用于决策树和神经网络压缩。它们的共同点是都服务于某个更大的 AI 流程。import numpy as np def pso_minimize(func, dim5, n_particles30, max_iter100): 极简粒子群优化用于连续参数搜索。 rng np.random.default_rng(0) x rng.uniform(-5, 5, (n_particles, dim)) v rng.uniform(-1, 1, (n_particles, dim)) pbest x.copy() fitness np.array([func(xi) for xi in x]) pbest_fit fitness.copy() gbest pbest[np.argmin(pbest_fit)].copy() gbest_fit pbest_fit.min() for _ in range(max_iter): r1, r2 rng.random((2, n_particles, dim)) v 0.5 * v 2.0 * r1 * (pbest - x) 2.0 * r2 * (gbest - x) x np.clip(x v, -5, 5) fitness np.array([func(xi) for xi in x]) better fitness pbest_fit pbest[better] x[better] pbest_fit[better] fitness[better] if pbest_fit.min() gbest_fit: gbest_fit pbest_fit.min() gbest pbest[np.argmin(pbest_fit)].copy() return gbest, gbest_fit这里的0.5是惯性权重控制粒子保持前一刻速度的程度2.0是加速系数决定向个体历史最优和全局最优靠近的强度。实际调参时惯性权重大偏向全局搜索小偏向局部收敛。用我自己做特征选择的经验粒子群每次迭代只评估一批特征子集的模型分数比穷举组合快得多。匈牙利算法就更直接from scipy.optimize import linear_sum_assignment cost [[10, 5, 3], [9, 7, 8], [6, 4, 2]] rows, cols linear_sum_assignment(cost) print(rows, cols, sum(cost[r][c] for r, c in zip(rows, cols)))linear_sum_assignment返回的行/列下标就是最优匹配方案。遇到人员容量约束、每组最多分几个人这类限制匈牙利就不够用了要升级成混合整数线性规划。综述里把这两者放在一起才能覆盖真实业务里的分配问题。决策树剪枝则常在 sklearn 里用cost_complexity_pruning_path找到 ccp_alpha 序列再选验证集分数最高的点。这类算法在综述里的定位我建议按问题类型而不是按“是否属于机器学习”来记录这样实战时更容易翻到。算法问题类型关键参数综述应记录粒子群连续参数优化粒子数、惯性权重、加速系数收敛曲线、最终目标值匈牙利二分图最小代价匹配代价矩阵匹配总代价、耗时决策树剪枝模型压缩ccp_alpha剪枝前后验证分数4. 从综述到选型评估指标与基准测试只列分数没有意义还要解释“在什么约束下谁值得上线”。这一步需要把指标口径统一并且记录成本数据。4.1 回归、分类、排序场景下的指标选择我经常看到综述把所有模型都用准确率比较这在小样本或者类别不平衡场景里会得出错误结论。我的做法是先定义任务类型再选指标任务推荐指标使用注意二分类F1、AUC、LogLossF1 依赖阈值AUC 不关心概率校准多分类macro/micro F1、top-k 准确率macro F1 对少数类更敏感回归MAE、RMSE、MAPERMSE 放大离群点MAPE 在真值为 0 时不可用排序NDCG、MAP位置信息很重要不能只用 AUC强化学习累计奖励、平均步长方差大需要多次随机种子的均值对应代码很直接。用同一套cross_val_score换scoring参数就行例如scoringroc_auc。如果任务有位置信息要直接用ndcg_score而不是套一个分类器。4.2 用交叉验证和超参数搜索做公平对比不同算法的默认参数可能差异巨大直接把默认参数对比等于欺负老实人。我一般会给每个候选算法分配一个超参数搜索预算预算一致才公平。随机搜索比网格搜索效率高因为超参数之间重要性不均等。from sklearn.model_selection import RandomizedSearchCV from xgboost import XGBClassifier param_dist { n_estimators: [100, 300], max_depth: [4, 6, 8], learning_rate: [0.01, 0.05, 0.1], } search RandomizedSearchCV( XGBClassifier(use_label_encoderFalse, eval_metriclogloss), param_dist, n_iter10, cvStratifiedKFold(5), scoringroc_auc, random_state42, n_jobs-1 ) search.fit(X, y) print(search.best_params_, search.best_score_)n_iter10表示只抽 10 组参数预算有限时比全网格快一个量级。scoringroc_auc与线上指标保持一致如果线上更关注高召回这里就应该换成recall。搜索结束后要在综述里写出最优参数和验证分数而不是只写“调优后更好”。4.3 卡时间、卡显存、卡稳定性工程约束下的取舍精度差 0.01 但推理慢 20 倍的算法在实时场景里不值得上。综述还需要有“成本轴”。import time def benchmark_fit_predict(model, X_train, y_train, X_test): t0 time.perf_counter() model.fit(X_train, y_train) t_fit time.perf_counter() - t0 t0 time.perf_counter() pred model.predict(X_test) t_pred time.perf_counter() - t0 return {fit_s: t_fit, pred_s: t_pred, pred_len: len(pred)}用time.perf_counter记录拟合和预测耗时每个模型重复跑 5 次取中位数避免冷启动干扰。深度学习模型还要记录显存峰值PyTorch 里用torch.cuda.max_memory_allocated()。把这些数据放进综述对比表后选型逻辑就变成了一个多目标问题约束倾向算法反例延迟低于 10ms逻辑回归、浅层树、蒸馏小模型大 Transformer 很难达标显存 4GB逻辑回归、GBDTViT 大模型直接 OOM离线批处理集成模型、大搜索空间单次训练耗时次要数据量小于 1 万线性模型 强正则深度模型容易过拟合稳定性同样重要。跑 5 次交叉验证如果标准差比均值差还大说明模型对数据划分敏感这类模型即使分数高也要在综述里标红。5. 快速整理综述手册的技巧以一张大表驱动整个综述实验做完文档怎么写我的建议是别从第一章开始写先做一张大表让表格当骨架所有结论都收缩在列名里。用 pandas 把实验记录汇总成 markdown 表直接贴进.doc综述的对比章节。import pandas as pd results [] for name, model in models.items(): scores cross_val_score(model, X, y, cvcv, scoringf1) results.append({ 算法: name, F1均值: round(scores.mean(), 4), F1标准差: round(scores.std(), 4), 拟合耗时s: round(bench_seconds[name], 2), }) df pd.DataFrame(results).sort_values(F1均值, ascendingFalse) print(df.to_markdown(indexFalse))to_markdown会输出干净的 markdown 源粘贴到 Word 或 Typora 都能直接转成表格。这张表就是综述的数据中心后续换数据、换参数只更新表再刷新文字结论不维护两套内容。配合了大表后我给每个算法再维护一张算法卡算法名逻辑回归 / 粒子群 / 匈牙利一句话该算法在什么假设下有效三个关键参数含义、调节方向两个失败模式什么数据或约束下会崩和最近竞争算法的差距差多少精度快多少倍这套模板能逼你把每个算法写到可决策的颗粒度。比如逻辑回归的卡片可以写“线性决策边界特征间无强交互时好用关键参数 C 是正则强度当特征与标签有复杂非线性映射时被 GBDT 甩开约 0.05 F1但推理速度快两个数量级。” 这样一句话比半页公式说清楚得多。写综述最忌讳平均用力。先按大表排出前三个候选再把这三个的算法卡写厚其他算法各留两行边界说明。这张表保持可执行半年后有人拿着新数据找你你只需要重跑这段代码看表头不变、排名有没有翻转就能快速判断业务是否发生了迁移。用几十行脚本代替几千字文字综述也就真正变成了一个长期可用的决策系统。本文还有配套的精品资源点击获取