机器学习
关系
- 机器学习包含2种,传统机器学习、深度学习
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16人工智能 (AI)
│
├── 机器学习 (ML)
│ │
│ ├── 传统机器学习
│ │ ├── 监督学习(SVM、决策树、随机森林)
│ │ ├── 无监督学习(K-means、PCA)
│ │ └── 强化学习(Q-learning)
│ │
│ └── 深度学习 (DL) 👈 这是重点!
│ ├── 卷积神经网络(CNN - 图像)
│ ├── 循环神经网络(RNN - 序列)
│ ├── 变换器(Transformer - NLP)
│ └── 生成对抗网络(GAN - 生成)
│
└── 其他AI(专家系统、符号推理等)
传统机器学习和深度学习
- 都是从数据中学习,然后进行预测
- 过程
- 机器学习:输入数据-》提取特征-》训练模型-》预测
- 深度学习:输入数据-》多层网络自动提取特征-》训练模型-》预测
- 对比
1
2
3
4
5
6
7
8机器学习 深度学习
特征处理 手动特征工程,需要人工提取特征 自动特征学习,网络自己学习特征
数据需求 相对较少,几百到几千样本 大量数据,通常需要上万到百万样本
计算资源 CPU即可,相对轻量 需要GPU/TPU,计算密集,内存需求大
模型复杂度 相对简单,决策树、SVM等 非常复杂,多层神经网络,百万到万亿参数
可解释性 较好,可以理解决策过程 较差(黑箱),很难解释内部工作原理
训练时间 几分钟到几小时 几小时到几周
适用任务 结构化数据、简单模式 非结构化数据、复杂模式
特征矩阵
- 是事物属性/特点组成的表格/矩阵
- 矩阵一般用大写字母表示(X)
标签向量
- 是预测结果(标签)的集合
- 向量一般用小写字母表示(y)
- 例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14如有一个包含3个样本的数据集,每个样本有2个特征(房屋面积、卧室数量),对应标签是房屋价格
则特征矩阵X为:
样本1: 100 2
样本2: 150 3
样本3: 200 4
每一列是一个特征,即有2个特征:房屋面积、卧室数量
则标签向量y为:
样本1: 300万
样本2: 450万
样本3: 600万
其中每一个样本的预测结果是一个标签,所有标签的集合称为“标签向量”
开发机器学习流程
- 问题定义
- 明确类型:分类/回归/聚类/推荐
- 定义评估指标:准确率、精确率、F1、RMSE
- 确定输入输出:输入是什么特征,输出是什么
- 设定目标:要达到什么性能指标
- 数据处理
- 获取数据
- 加载数据
- 初步检查
- 清洗/编码/缩放/分割
- 数据集划分
- 选择模型并初始化
- 训练模型
- 模型评估
- 模型调优
- 模型应用
开发深度学习流程
- 数据准备
- 从文件/数据库中读取数据
- 对数据进行预处理:清洗/标准化/编码
- 数据分割:划分训练集、验证集、测试及
- 创建数据加载器
- 定义模型(如y=aX+b)
- 选择模型架构:MLP/CNN/RNN
- 设计网络层:确定层数、神经元数、激活函数
- 实现模型类:继承nn.Module,实现forward方法
- 训练配置
- 选择损失函数(交叉熵/MSE等)
- 选择优化器:Adam/SGD等
- 设置超参数:学习率、训练轮数epoch、批大小batch
- 配置学习率调度器:动态调整学习率
- 设置早停机制:防止过拟合
- 循环训练(预测->计算损失->反向传播->更新参数)
- 评估结果
模型
- 作用:数据转换器,可以将输入的数据转换成有意义的输出
- 一般将激活函数与神经网络模型联系在一起,因为它们是神经网络中引入非线性的关键组件。但其本质是数学函数,所以也可以在需要引入非线性数学建模场景中使用。
- 对结果的影响
- 决定上限:模型决定了性能的理论上限
- 特征提取:好的模型能自动学习有用的特征
- 泛化能力:模型结构影响在新数据上的表现
- 种类
- 前馈神经网络:MLP、全连接网络,适用于表格数据、简单分类回归
- 卷积神经网络:CNN、ResNet、VGG、Inception,适用于图像处理、计算机视觉
- 循环神经网络:RNN、LSTM、GRU,适用于序列数据、时间序列
- 注意力机制:Transformer、BERT、GPT,适用于NLP、长序列处理
- 生成模型:GAN、VAE、扩散模型,适用于图像生成、数据增强
- 图神经网络:CN、GAT、GraphSAGE,适用于图结构数据、社交网络
- 强化学习:DQN、PPO、A3C,适用于游戏、机器人控制
- 如何选择:根据类型
- 图像数据 → CNN家族
- 分类任务 → ResNet、EfficientNet、Vision Transformer
- 检测任务 → Faster R-CNN、YOLO、SSD
- 分割任务 → U-Net、Mask R-CNN、DeepLab
- 生成任务 → GAN、VAE、扩散模型
- 文本/序列数据 → Transformer/RNN家族
- 分类/理解 → BERT、RoBERTa、ALBERT
- 成任务 → GPT、T5、BART
- 翻译任务 → Transformer、mBART
- 时间序列 → LSTM、GRU、Transformer
- 表格/结构化数据 → 传统ML或简单NN
- 小数据集 → 逻辑回归、决策树、XGBoost
- 中等数据集 → MLP、LightGBM
- 大数据集 → DeepFM、Wide & Deep
- 图结构数据 → GNN家族
- 节点分类 → GCN、GAT
- 链接预测 → GraphSAGE
- 图分类 → GIN、DiffPool
- 多模态数据 → 多模态模型
- 图像+文本 → CLIP、ViLT
- 视频+音频 → 多模态Transformer
- 图像数据 → CNN家族
- 简单选择方法
- 图像分类:首选EfficientNet(平衡性能与效率)
- 文本分类:首选BERT或RoBERTa(中文用BERT-wwm)
- 时间序列:首选LSTM或Transformer
- 目标检测:首选YOLO(实时)或Faster R-CNN(高精度)
- 图像生成:首选StyleGAN或扩散模型
- 表格数据:先试XGBoost,不够再用深度模型
PyTorch优化器
- 作用:根据损失函数的反馈,调整模型参数
- 对结果的影响
- 训练效率:决定训练需要多长时间和计算资源
- 最终性能:影响模型能达到的最佳性能
- 稳定性:影响训练过程是否平稳
- 种类
- SGD:随机梯度下降
- 最基本,但容易陷入局部最小值,且对学习率敏感。
- 通常需要配合动量(momentum)使用以加速收敛并减少震荡。
- 适合数据较为稠密,问题相对简单的情况。
- Adam:自适应矩阵计
- 结合了动量和自适应学习率,收敛速度快,适合大多数深度学习任务。
- 是当前最常用的优化器之一。
- AdamW:Adam+权重衰减
- 在Adam的基础上加入了权重衰减(正则化),通常比Adam更有效,特别是对于泛化。
- RMSprop:均方根传播
- RNN/强化学习常用
- Adagrad:自适应梯度
- 稀疏数据效果好
- Adadelta:Adagrad改进
- 无需学习率
- SGD:随机梯度下降
- 如何选择:需要考虑问题的特征、数据量、网络结构等
- 机器视觉(CNN):SGD+momentum(调参好) / Adam(快速)
- 自然语言处理(NLP):AdamW / Adagrad
- 循环神经网络(RNN/LSTM):RMSprop / Adam
- 强化学习:RMSprop / Adam
- 生成对抗网络(GAN):Adam / AdamW
- 推荐系统:Adam / Adagrad
- 一般/通用任务:AdamW
损失函数
- 作用:衡量模型预测的错误程度
- 对结果的影响
- 优化目标:定义了模型要最小化的目标
- 训练稳定性:某些损失函数值更稳定
- 任务适配:必须匹配任务类型(回归/分类)
- 分类
- 回归任务损失函数
- MSELoss:对异常值敏感,适用一般回归问题
- L1Loss:对异常值不敏感,适合稳健回归
- SmoothL1Loss:结合MSE和L1优点,适合目标检测
- HuberLoss:可调节敏感性,适合稳健回归
- 分类任务损失函数
- CrossEntropyLoss:最常用,适合多分类
- BCELoss:二分类,适合二分类问题
- BCEWithLogitsLoss:数值稳定,适合二分类
- NLLLoss:负对数似然,适合多分类
- MultiLabelMarginLoss:多标签分类,适合多标签
- 特殊任务损失函数
- KLDivLoss:KL散度,分布匹配
- CosineEmbeddingLoss:余弦相似度,相似性学习
- TripletMarginLoss:三元组损失,度量学习
- CTCLoss:时序分类,语音识别、OCR
- 回归任务损失函数
- 如何选择:考虑问题的类型
- 回归任务(预测连续值)
- 数据有异常值: L1Loss / HuberLoss
- 需要稳健预测:SmoothL1Loss
- 一般回归任务: MSELoss
- 分类任务(预测类别)
- 二分类:BCEWithLogitsLoss
- 多分类:CrossEntropyLoss
- 多标签分类:BCEWithLogitsLoss
- 不平衡数据:带权重的CrossEntropyLoss
- 特殊任务
- 分布匹配:KLDivLoss
- 相似度学习:CosineEmbeddingLoss
- 度量学习:TripletMarginLoss
- 时序分类:CTCLoss
- 其他
- CrossEntropyLoss(分类)或 MSELoss(回归)
- 回归任务(预测连续值)
激活函数
- 作用:把“线性组合(直线)”变成“非线性组合(曲线/复杂形状)”
- 性能对比
1
2
3
4
5
6
7激活函数 计算速度 梯度消失 死亡神经元 适用场景
Sigmoid 慢 严重 无 输出层、门控
Tanh 中等 中等 无 RNN、需要正负输出
ReLU 极快 缓解 有风险 默认隐藏层
Leaky ReLU 快 缓解 很少 ReLU的改进版
GELU 慢 缓解 很少 Transformer、BERT
Swish 慢 缓解 很少 深度网络、搜索最佳 - 如何选择:隐藏层用ReLU,输出层看任务。分类概率用Sigmoid,多分类用Softmax。回归任务不用激活,负数担心用Leaky。 RNN喜欢Tanh,大模型爱用GELU。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17开始选择
↓
是输出层吗?─是─→ 需要概率吗?─是─→ Sigmoid(二分类)
↓ ↓
否 Softmax(多分类)
↓ ↓
任务类型? 线性(回归)
┌───────┼───────┐
↓ ↓ ↓
图像 序列 通用
(CNN) (RNN) (MLP)
↓ ↓ ↓
ReLU Tanh ReLU/Leaky ReLU
↓ ↓ ↓
考虑: 考虑: 考虑:
- Swish - Sigmoid - 死亡ReLU?
- GELU - ReLU - 用Leaky ReLU
Loss
- 是模型预测值与真实值的差距(“错误程度”的量化指标),但不是绝对值越小越好,应该趋于合理最小值,且loss值下降趋势要稳定
- 作用
- 训练模型的正常情况:loss值初始较大,然后明显下降,然后缓慢下降,最后趋于平稳
- 模型收敛:loss在某个值附近小幅波动,不再显著下降,变化小于学习率,表示找到(局部)最优解
- 训练集的loss和验证集loss应该相近,如果训练loss很小,但验证loss很大则表示过拟合
- 标题: 机器学习
- 作者: Henry
- 创建于 : 2026-01-19 15:46:04
- 更新于 : 2026-01-21 17:56:14
- 链接: https://mybetterworks.github.io/2026/01/19/机器学习/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论