P3-6.3 人工设计的特征,与模型学习到的表示,应该怎样区分¶
Section ID:
P3-6.3Version:v2026.07.20
当我们把特征(feature)和 中间表示(intermediate representation) 放在一起看时,就会出现一个重要问题:人来决定输入结构,和 模型在这个输入里学习表示,到底应该在哪里分开来读。如果这个区别变得模糊,Part 3 的特征设计就容易看起来像过时的预处理;反过来,也容易误以为模型会替我们把问题结构也一起决定掉。关键在于,它们并不是竞争关系。Part 3 里人设计出来的特征和中间表示,是先决定 应该把问题读成什么输入结构;而模型学到的表示,则是在这个输入结构里进一步学习 哪些模式更能把有用差异区分出来。
读者首先应该抓住的区分其实很简单。人来构造输入,模型在这个输入里面学习表示。先最短地拆开来看,就是下面这样。
| 区分 | 它做的事 |
|---|---|
| 人工设计的特征 | 把符合问题的比较轴保留成数值列 |
| 人工设计的中间表示 | 把顺序和结构重新打包成更容易读取的输入 |
| 模型学习到的表示 | 在给定输入内部,自行组合出有用的模式 |
所以,Part 3 的责任不是 反正模型会学习表示,就随便留着吧,而是 先把模型可以读取的输入单位设计出来。
为什么要先由人来设计特征¶
人先做特征,不是因为那只是旧时代做法,而是因为在问题结构层面上,我们仍然必须先决定:现在到底想比较什么、哪些差异在运行上重要、哪些东西还应该先留在比较报告里。
例如,后段会不会急剧崩掉、波动性是不是变大了、与基准线的差距是不是拉开了 这样的提问,在模型出现之前就已经可以先定下来。也正是因为有了这些问题,我们才能解释为什么平均值、斜率、波动性、区间差值这些特征是必要的。
| 先定下来的问题 | 人优先留下的特征 |
|---|---|
| 整体水平是否变化了 | 平均值、中位数 |
| 结构是否在后段崩塌 | 区间差值、下降率 |
| 结果看起来差不多,但波动是否增大 | 标准差、波动性 |
| 相对基准线的变化是否很大 | 基准线差值 |
如果没有这一阶段,那么无论后面使用什么学习结构,到底想预测什么 和 什么差异才算重要 都会变得很弱。
为什么还需要中间表示¶
中间表示,是数值特征和原始日志之间的桥。像 UP, FLAT, DOWN 这样的 token 序列,或者按区段整理出来的表达,仍然是人定规则的表示,但它已经拥有 带有顺序的输入 这一性质。因此,它能在数值特征容易漏掉的地方,更直接地保留下结构。这里的重点同样不是期待模型自己把表示造出来,而是人再一次决定:到底要把什么形状的输入往后送。
| Part 3 中构造出来的输入结构 | 现在更容易保留下来的东西 |
|---|---|
| 一次动作的汇总向量 | 整体水平和代表值差异 |
| 分段特征向量 | 区段之间的变化和波动差异 |
| token 化区段序列 | 顺序和重复模式的大致轮廓 |
这里很重要的一点是:中间表示本身并不等于深度学习里的表示学习。中间表示,是人做出来的输入重构;而表示学习,则是在这个输入之中,由模型去学出更有用的内部表示。换句话说,这一节最先要抓住的边界,是 人来构造输入 和 模型来解释这个输入 的差异。
输入说明(input specification)和表示学习是从哪里分开的¶
它们的边界,分在 什么要先由人决定作为输入,和 模型在给定输入里自行组合出哪些内部模式 这两件事之间。
| 问题 | 在输入说明里先决定的事 | 在表示学习里后面发生的事 |
|---|---|---|
| 什么算一条样本 | 先决定它是一整次动作,还是一个近期区间 | 在已固定的样本单位上构造内部表示 |
| 哪些值要被送作输入 | 选择平均值、斜率、token 序列这样的输入形式 | 在这些输入里学习有用的组合 |
| 原始日志要如何被改写 | 把它重构成表、向量或序列 | 在重构后的输入里捕捉更深层模式 |
所以,特征和中间表示决定的是 输入要被看成什么,而表示学习学习的是 在这个输入里面什么最重要。
两种常见误解¶
第一种误解是:既然是深度学习,那就不需要特征设计。 深度学习确实可以减少人手工设计每一个特征的必要,但它不会替我们决定样本边界和输入范围。一整次动作算一条样本,还是一个近期区间算一条样本,整条时间序列要不要切开,这些决定仍然是人的责任。
第二种误解是:既然已经做了特征,那深度学习就不需要了。 人工设计的特征可以是很好的起点,但更长的顺序依赖,或者更复杂的模式,后面也可能由模型学习到的表示抓得更好。所以,特征设计和表示学习更接近前后阶段,而不是互相替代。
| 误解 | 更准确的说法 |
|---|---|
| 既然是深度学习,就不需要特征设计 | 样本定义和输入结构设计仍然要先做 |
| 已经做了特征,就不需要表示学习 | 人工设计的特征是起点,更深的模式后面仍可能被学习出来 |
再用一个场景串起来¶
假设我们手里有一次完整动作的原始日志。
- 在 Part 3 里,先把一次完整动作定义成一条样本。
- 把平均值、斜率、波动性、区间差值留下来作为特征。
- 如果需要,再做成像
UP, FLAT, DOWN这样的区段序列,作为中间表示。 - 这样整理出来的表和序列,会成为后续学习阶段里模型读取的输入。
- 然后,模型才会在这个输入里继续学习更长的依赖关系或更复杂的组合。
看清这个顺序之后,就会明白:特征设计不是深度学习之前过时的准备动作,而是不管用什么学习方法都需要先完成的输入定义阶段。所以,这一节的结论也不是 人工特征 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