跳转至

P3-6.3 人工设计的特征,与模型学习到的表示,应该怎样区分

Section ID: P3-6.3 Version: v2026.07.20

当我们把特征(feature)和 中间表示(intermediate representation) 放在一起看时,就会出现一个重要问题:人来决定输入结构,和 模型在这个输入里学习表示,到底应该在哪里分开来读。如果这个区别变得模糊,Part 3 的特征设计就容易看起来像过时的预处理;反过来,也容易误以为模型会替我们把问题结构也一起决定掉。关键在于,它们并不是竞争关系。Part 3 里人设计出来的特征和中间表示,是先决定 应该把问题读成什么输入结构;而模型学到的表示,则是在这个输入结构里进一步学习 哪些模式更能把有用差异区分出来

读者首先应该抓住的区分其实很简单。人来构造输入,模型在这个输入里面学习表示。先最短地拆开来看,就是下面这样。

区分 它做的事
人工设计的特征 把符合问题的比较轴保留成数值列
人工设计的中间表示 把顺序和结构重新打包成更容易读取的输入
模型学习到的表示 在给定输入内部,自行组合出有用的模式

所以,Part 3 的责任不是 反正模型会学习表示,就随便留着吧,而是 先把模型可以读取的输入单位设计出来

为什么要先由人来设计特征

人先做特征,不是因为那只是旧时代做法,而是因为在问题结构层面上,我们仍然必须先决定:现在到底想比较什么、哪些差异在运行上重要、哪些东西还应该先留在比较报告里。

例如,后段会不会急剧崩掉波动性是不是变大了与基准线的差距是不是拉开了 这样的提问,在模型出现之前就已经可以先定下来。也正是因为有了这些问题,我们才能解释为什么平均值、斜率、波动性、区间差值这些特征是必要的。

先定下来的问题 人优先留下的特征
整体水平是否变化了 平均值、中位数
结构是否在后段崩塌 区间差值、下降率
结果看起来差不多,但波动是否增大 标准差、波动性
相对基准线的变化是否很大 基准线差值

如果没有这一阶段,那么无论后面使用什么学习结构,到底想预测什么什么差异才算重要 都会变得很弱。

为什么还需要中间表示

中间表示,是数值特征和原始日志之间的桥。像 UP, FLAT, DOWN 这样的 token 序列,或者按区段整理出来的表达,仍然是人定规则的表示,但它已经拥有 带有顺序的输入 这一性质。因此,它能在数值特征容易漏掉的地方,更直接地保留下结构。这里的重点同样不是期待模型自己把表示造出来,而是人再一次决定:到底要把什么形状的输入往后送。

Part 3 中构造出来的输入结构 现在更容易保留下来的东西
一次动作的汇总向量 整体水平和代表值差异
分段特征向量 区段之间的变化和波动差异
token 化区段序列 顺序和重复模式的大致轮廓

这里很重要的一点是:中间表示本身并不等于深度学习里的表示学习。中间表示,是人做出来的输入重构;而表示学习,则是在这个输入之中,由模型去学出更有用的内部表示。换句话说,这一节最先要抓住的边界,是 人来构造输入模型来解释这个输入 的差异。

输入说明(input specification)和表示学习是从哪里分开的

它们的边界,分在 什么要先由人决定作为输入,和 模型在给定输入里自行组合出哪些内部模式 这两件事之间。

问题 在输入说明里先决定的事 在表示学习里后面发生的事
什么算一条样本 先决定它是一整次动作,还是一个近期区间 在已固定的样本单位上构造内部表示
哪些值要被送作输入 选择平均值、斜率、token 序列这样的输入形式 在这些输入里学习有用的组合
原始日志要如何被改写 把它重构成表、向量或序列 在重构后的输入里捕捉更深层模式

所以,特征和中间表示决定的是 输入要被看成什么,而表示学习学习的是 在这个输入里面什么最重要

两种常见误解

第一种误解是:既然是深度学习,那就不需要特征设计。 深度学习确实可以减少人手工设计每一个特征的必要,但它不会替我们决定样本边界和输入范围。一整次动作算一条样本,还是一个近期区间算一条样本,整条时间序列要不要切开,这些决定仍然是人的责任。

第二种误解是:既然已经做了特征,那深度学习就不需要了。 人工设计的特征可以是很好的起点,但更长的顺序依赖,或者更复杂的模式,后面也可能由模型学习到的表示抓得更好。所以,特征设计和表示学习更接近前后阶段,而不是互相替代。

误解 更准确的说法
既然是深度学习,就不需要特征设计 样本定义和输入结构设计仍然要先做
已经做了特征,就不需要表示学习 人工设计的特征是起点,更深的模式后面仍可能被学习出来

再用一个场景串起来

假设我们手里有一次完整动作的原始日志。

  1. 在 Part 3 里,先把一次完整动作定义成一条样本。
  2. 把平均值、斜率、波动性、区间差值留下来作为特征。
  3. 如果需要,再做成像 UP, FLAT, DOWN 这样的区段序列,作为中间表示。
  4. 这样整理出来的表和序列,会成为后续学习阶段里模型读取的输入。
  5. 然后,模型才会在这个输入里继续学习更长的依赖关系或更复杂的组合。

看清这个顺序之后,就会明白:特征设计不是深度学习之前过时的准备动作,而是不管用什么学习方法都需要先完成的输入定义阶段。所以,这一节的结论也不是 人工特征 vs 深度学习 的对立,而是 输入说明(input specification)表示学习(representation learning) 究竟从哪里分开。特征设计不该被读成过时的手工劳动,而应被读成:它是先把后续学习阶段所依赖的输入结构说明清楚的工作。

用一个小图来看

这一节的边界很简单。人先用特征和中间表示把 输入 设计出来,模型收到这个输入之后,才开始学习内部表示。它们不是竞争关系,而是前后相接的阶段。

flowchart TD
    H[人先设计输入]
    F[特征与中间表示]
    M[模型接收该输入]
    R[模型学习内部表示]

    H --> F --> M --> R

来源与参考资料

  • Google for Developers, Machine Learning Glossary 中的 feature。它把 feature 解释为用于预测的输入变量,因此为“人先决定什么要作为输入变量留下来”和“后面的学习阶段”之间的区分提供了基础。 https://developers.google.com/machine-learning/glossary / 确认日期: 2026-07-20
  • Google for Developers, Machine Learning Glossary 中的 feature engineering。它把 feature engineering 解释为把原始数据变成更适合学习的形式,因此强化了这样一点:Part 3 中的特征设计和中间表示设计,本质上属于输入定义阶段。 https://developers.google.com/machine-learning/glossary / 确认日期: 2026-07-20
  • TensorFlow, Subword tokenizers. 它展示了 token 化序列在变成 token IDs 之后被当作模型输入的预处理阶段,因此支持这样一种解释:Part 3 里做出的区段序列,是 进入模型之前的输入重构,而不是 已经学到的内部表示。这种连接,是把官方预处理说明推广到时间序列例子中的一种解释。 https://www.tensorflow.org/text/guide/subwords_tokenizer / 确认日期: 2026-07-20