Hidden States、Representation Geometry 与语义方向底层图谱
从 residual stream、hidden state、embedding space、语义方向、logit lens、steering vector 到表征漂移,理解模型内部“意思”怎样以向量形态流动
Token Id
离散编号
→
Embedding
初始向量
→
Residual Stream
信息总线
→
Attention / MLP
读写更新
→
Hidden State
层后表征
→
LM Head
投到词表 logits
| 环节 | 发生什么 | 关键直觉 | 容易误解 |
| Token id | 文本先被 tokenizer 切成离散编号 | 编号本身没有语义,语义来自学习到的向量和上下文计算 | 把 token id 当作词义 |
| Embedding | 每个 token id 查表得到初始向量 | 这是模型内部表征的起点,不是最后语义 | 以为 embedding 空间已经包含所有推理结果 |
| Residual stream | 每一层把 attention 和 MLP 的输出加回同一条信息流 | 像一条逐层被写入、改写和读取的工作区 | 只看单个 attention head,忽略残差叠加 |
| Hidden state | 某层某位置的当前向量状态 | 它同时混合词义、位置、上下文、任务、格式和行为倾向 | 把一个维度直接解释成一个概念 |
| LM head | 把最后 hidden state 投影到词表维度 | 输出不是“生成文字”,而是先给所有 token 打分 | 跳过 logits,直接把 hidden state 当答案 |
一句话:
Hidden state 是模型在某一层、某一位置对“当前 token 在当前上下文里意味着什么、接下来应该推动什么输出”的临时向量状态。
| 概念 | 它回答什么 | 典型观察 | 边界 |
| Embedding space | token、句子或文档在向量空间里怎样靠近或远离 | 语义相近、用法相近、领域相近的向量距离更近 | 外部 embedding 检索不等于 LLM 内部每层表征 |
| Representation geometry | 模型怎样用方向、子空间和距离组织信息 | 情感、语言、主题、实体、格式、风险信号可能形成可读方向 | 降维图好看,不代表机制真实 |
| Semantic direction | 某个方向是否对应可解释语义或行为倾向 | 加减向量可能改变语气、拒答、情绪或主题 | 方向通常是近似标签,不是模型的“内心概念” |
| Subspace | 一组方向共同承载某类信息 | 语法、位置、实体绑定、任务格式可能分布在多个维度 | 单轴解释往往过度简化 |
| Trajectory | 同一个 token 经过多层后表征怎样移动 | 早层偏字面和局部,中层整合上下文,后层更靠近输出决策 | 不同架构、任务和 token 位置差异很大 |
几何直觉
向量空间里的“方向”比单个坐标更重要。模型可能用某个方向表达语言、拒答倾向、情绪、代码格式或实体类型;也可能把多个概念叠加在同一子空间里,所以真实表征常常是混合和分布式的。
Attention 读上下文
- 通过 Q/K 匹配找到相关 token 位置
- 通过 V 把被关注位置的信息写回当前位置
- 常承担复制、指代、格式对齐和上下文检索
MLP 加工特征
- 对当前位置已有信息做非线性变换
- 可能激活事实、规则、风格、风险或行为特征
- 常像一组高维特征查找和组合器
Norm 控制尺度
- LayerNorm / RMSNorm 让表示尺度更稳定
- 影响残差流里各方向的相对强弱
- 量化、权重转换和推理后端问题常在这里暴露
| 方向类型 | 可能对应 | 怎样发现 | 怎样验证 |
| 主题方向 | 法律、医学、代码、数学、金融等领域倾向 | 对比样本均值、聚类、PCA / probe | 沿方向干预后主题概率是否变化 |
| 行为方向 | 拒答、服从、礼貌、简洁、结构化输出 | 正负样本激活差、偏好数据对照 | steering 后行为是否按预期改变且不破坏任务 |
| 风险方向 | 敏感内容、越权请求、幻觉高风险、不确定性 | 红队样本、错误样本、拒答样本对比 | 在 holdout 风险集上看召回、误伤和可绕过性 |
| 格式方向 | JSON、表格、代码块、列表、引用格式 | 同义任务不同格式输出的激活差 | 格式改变是否保持语义不变 |
| 语言方向 | 中文、英文、翻译风格、专业术语密度 | 多语样本对照、层间轨迹比较 | 跨语言迁移和混合语言样本测试 |
验证标准:
一个“语义方向”只有在干预后能稳定、可复现、跨样本地改变相关行为,并且不会造成大量无关副作用时,才接近可靠工具;否则它只是一个有趣相关性。
| 方法 | 做法 | 能看见什么 | 不能证明什么 |
| Logit Lens | 把中间层 hidden state 直接送进 LM head | 每一层逐渐倾向哪些 token | 不能证明中间层真的按最终 LM head 使用 |
| Tuned Lens | 给每层加一个校正映射再读 logits | 更接近该层自己的可读输出倾向 | 校正器本身也会引入解释假设 |
| Layer Trajectory | 比较同一位置 top tokens 随层变化 | 答案、格式、拒答或工具调用倾向何时形成 | 不能替代因果 patching |
| Contrastive Lens | 比较正确 / 错误、拒答 / 不拒答样本的差异 | 错误分叉点和风险信号出现层 | 不能单独解释为什么分叉 |
工程用途
Logit lens 很适合当排查工具:答案很早就出现但后面被改写,可能是后层策略或格式控制问题;答案直到最后都没出现,可能是检索、上下文或模型能力问题;错误 token 在中层突然变强,可能提示某个样例、文档或格式诱导了错误方向。
| 现象 | 表征层解释 | 外部表现 | 调试动作 |
| Few-shot 示例有效 | 示例把任务、标签、格式和映射方向写进当前上下文表征 | 模型按示例输出 | 打乱示例顺序、替换标签、看 hidden state / logits 变化 |
| 错误示例污染 | 错误标签或错误风格成为当前任务方向的一部分 | 输出稳定偏向错误格式或错误分类 | 做示例消融、golden examples、prompt 回归 |
| 长上下文稀释 | 关键信息方向被无关材料叠加和距离影响冲淡 | 规则失效、引用错位、回答漂移 | 上下文压缩、排序、needle 测试、关键规则靠近输出 |
| 指令冲突 | 多个行为方向同时被激活,权威层级不清 | 一会服从用户,一会服从文档伪指令 | 指令分层、上下文可信度标注、隔离不可信文本 |
| 后训练改写 | SFT / RLHF / DPO 改变了某些行为方向和输出边界 | 拒答、礼貌、谨慎、格式遵循增强或过强 | 对比 base / instruct 模型的激活和行为集 |
最大坑:
把上下文看成“文字材料”,而不是会写入 hidden states 的临时条件。模型看到的每个示例、文档、格式和指令,都会改变当前表征几何里的方向强弱。
| 症状 | 优先怀疑 | 先做什么实验 | 继续下钻 |
| 输出格式总被带偏 | 格式方向被示例、RAG 片段或系统模板覆盖 | 替换格式示例、固定语义只变格式 | Prompt / 上下文 |
| 模型答错但很自信 | 错误语义方向被上下文或训练先验强激活 | 看 logprob、替换证据、做反事实样本 | 能力边界 / 幻觉 |
| 同一问题换顺序结果变 | 任务方向和位置 / recency 强相关 | 打乱示例、移动规则、缩短上下文 | ICL / Induction Heads |
| 量化后某类任务掉分 | 关键表征方向或小幅 logit 差被数值误差破坏 | 对比量化前后层输出、logits、错误样本 | 模型压缩 / 端侧 AI |
| 安全拒答误伤 | 风险方向过宽或上下文可信度混淆 | 正负样本对照、拒答 logit / 行为方向分析 | AI 安全 / 护栏 |
| 证据节点 | 必须记录的字段 | 判断重点 |
| 请求与模型指纹 | request_id、trace_id、model_id、model_checkpoint、tokenizer_version、release_gate_id | 这次表征异常是否绑定某个请求、模型版本、tokenizer 或发布门禁? |
| 层级快照 | sample_id、layer_id、token_position、activation_snapshot_id、hidden_state_hash、activation_norm | 异常行为从哪一层开始出现,是否和特定 token 或位置有关? |
| 残差流 | residual_stream_delta、attention_delta、mlp_delta、layernorm_stats、ablation_result | 信息是被 attention 搬运、MLP 改写,还是归一化 / 数值问题放大?消融后症状是否消失? |
| 语义方向 | direction_id、projection_score、steering_vector_version、probe_version、control_sample | 某个安全、格式、语言或主题方向是否被上下文异常激活?probe 版本是否可复现? |
| 反事实实验 | counterfactual_input_id、patched_layer、patched_position、intervention_id、behavior_delta | 表征变化是否因果影响输出,而不只是相关现象?干预是否带来旁路副作用? |
| 输出与回归连接 | logit_lens_snapshot、top_token_shift、eval_case_id、regression_slice、release_gate_id | 中间表征漂移如何一路传到 logits、采样和最终答案,并落到 Eval 切片和发布门禁? |
| 表征事故 | 回放证据 | 关联 Trace / 证据包 | 回归动作 |
| 上下文污染 | 对比原请求与清洗后请求的 hidden state 轨迹、attention_delta、top_token_shift | request_id、trace_id、activation_snapshot_id、counterfactual_input_id | 把污染样本加入 prompt / RAG regression_slice,检查上下文隔离和可信度标注 |
| 量化导致方向丢失 | 对比 fp16 / int8 / int4 的 projection_score、activation_norm、logit_lens_snapshot | model_checkpoint、tokenizer_version、ablation_result、eval_case_id | 建立量化前后能力切片门禁,必要时回滚量化配置或保留关键层精度 |
| 安全误伤 | 查看风险方向 projection_score 是否在良性样本中过强,拒答 top token 是否提前抬升 | direction_id、probe_version、trace_id、release_gate_id | 扩充良性边界集与安全回归集,按误伤类型拆分 release gate |
| steering 副作用 | 记录 intervention_id 前后的行为方向、事实准确率、格式遵循和无关任务退化 | steering_vector_version、intervention_id、regression_slice、eval_case_id | 缩小干预层位和强度,增加副作用回归,未达标则撤销 steering 发布 |
误区:向量距离就是语义真理
距离只是模型学到的相似性线索,会受语料、任务、层数、归一化和采样方式影响。
误区:一个方向等于一个概念
真实表征通常是多方向、多层、多组件共同承载,一个人类概念常常不是单轴结构。
误区:steering 一定可控
向量干预可能有副作用,会破坏事实、格式、拒答边界或其他能力,必须用回归集验证。
误区:中间层 top token 就是模型真实想法
Logit lens 是读数工具,不是心智窗口。它需要和 ablation、patching、行为评测一起使用。
误区:外部 embedding 和内部 hidden state 是一回事
外部 embedding 常用于检索相似度;内部 hidden state 是生成模型逐层计算中的动态上下文状态。
误区:表征分析可以替代上线评测
表征分析负责定位机制和风险,生产上线仍要靠样本切片、回归、灰度和线上观测。
这张图在主线里的位置
Teacher Forcing 页解释训练目标,QKV 页解释信息路由,ICL 页解释上下文如何临时改变行为,Logits 页解释输出打分。本页站在它们之间,解释这些变化如何以 hidden state、residual stream、语义方向和表征几何的形式在模型内部流动;再往工程侧,需要把表征证据挂到请求 Trace、AI 证据包、Eval 回归和发布回滚链路上。