机器学习

Henry Lv3

关系

  • 机器学习包含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
  • 简单选择方法
    • 图像分类:首选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改进
      • 无需学习率
  • 如何选择:需要考虑问题的特征、数据量、网络结构等
    • 机器视觉(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 进行许可。
评论