小菜鸟

java菜鸟号正在起航

当直线不再够用

如果你刚用线性回归拟合过真实数据,大概率遇到过这种情况:损失值降到某个位置就卡住,残差图画出明显的弧线。这通常意味着模型表达力到顶了。现实数据几乎总是非线性的,线性回归只能画直线。

我们需要一种能自动学习非线性映射的函数形式。工程中我们追求的是能用有限数据训练出来、泛化能力强的复杂函数,而非任意复杂的函数。这就引出三个实际问题:网络要多宽多深才够?怎么高效算梯度?表达力太强时怎么防过拟合?

本文围绕这三个问题展开,跳过数学证明,只讲什么时候用什么、为什么这样用。

万能近似定理的工程用法

万能近似定理说单隐藏层网络足够宽就能逼近任意连续函数。但“足够宽”在工程里是个黑箱,定理只管存在性,不管你能不能训出来。

实践中我们靠经验法则起步。输入维度为d时,隐藏层神经元通常要d到d平方量级才能捕捉特征交互,但超过阈值后加宽收益急剧下降,反而容易过拟合。

现代架构普遍偏好深而窄。深层通过组合低层特征构建抽象,用更少参数达到同等表达力。这也是ResNet和Transformer都走向纵深的原因。

可训练性才是真正的瓶颈。我原以为只要网络够宽就能拟合一切,后来才发现深度才是关键。理论上千神经元单层能拟合的数据,实际可能因梯度消失或优化地形崎岖而失败。此时加深度、加残差连接或换激活函数,往往比单纯加宽有效得多。

阅读全文 »

核心观点速览

  • Agent 缺的不是记忆,是状态估计能力;语言模式匹配与环境状态追踪属于不同认知层次。
  • HMM 与 LDS 是针对特定环境结构的信念更新范式,提供可解释的状态表示,而非通用序列建模工具。
  • 序列理解的本质是从历史中提炼压缩可靠的信念状态;设计时需严格匹配环境本质与模型假设。

当 Agent 缺少状态:从 HMM/LDS 重建认知架构

今天的大语言模型驱动的 Agent 能流畅对话、调用工具,甚至完成多步任务。但它们普遍存在一个隐蔽的认知断层:擅长从历史文本中检索片段,却难以构建并维护关于外部环境的、持续演化的内部状态。这种缺失根植于架构层面,与模型规模或训练数据无关。语言模式匹配与环境状态追踪,本就是两种不同层次的认知能力。

人类在部分可观测的环境中行动时,不会记住每一帧视觉输入或传感器读数。大脑始终维持着一个压缩的信念状态:我在哪里?周围有什么?哪些变量在变化?这个信念超越了原始数据的简单副本,成为支撑预测、规划和决策的动态模型。正是这种状态估计能力,让我们能在信息不完整时依然做出合理推断。

阅读全文 »

别再只把 LLM 当文本接龙了

我们太习惯把大模型当成一个条件概率生成器了。给 Prompt,出 Token,完事。这套心智模型够用,但也把我们困住了。

SFT 后模型变刻板?Agent 多轮对话丢上下文?RLHF 奖励信号震荡不收敛?这些问题很少是因为数据不够或算力不足。真正卡住我们的,往往是那些看不见却支配一切的东西——潜在变量。

风格、事实性、推理路径、用户意图……它们无法被直接观测,却决定了模型到底在“想”什么。EM 和变分推断,说白了就是一套从残缺数据里反推并操控这些隐藏结构的语言。学它们不是为了手搓 GMM,而是为了学会在黑盒上开窗,把模糊的对齐目标变成可优化的 Loss,让 Agent 拥有能被调试的内部状态。

一、潜在变量不是数学概念,是 Agent 的内部器官

教科书里说潜在变量是“缺失数据”或“隐类别”。但对做微调和 Agent 的人来说,它更像是模型内部没被标注、却决定输出的压缩表征。

你把所有期望行为都写进 Prompt 或标进数据集,但语言本身就是有损的。“帮我总结一下”可能是快速浏览,也可能是深度分析,还可能是提取行动项。只靠表层文本监督,模型只能学到平均态,结果就是平庸。潜在变量框架的价值,就在于承认数据不完备,允许模型在内部维护一套更高维的状态空间来解释这一切。

在 Agent 里,这套东西有了具体名字。思维链不只是提示技巧,每一步推理都是对当前认知状态的采样,最终答案只是这个隐状态序列的发射。这就是为什么强制固定格式的 CoT 有时会伤性能——你管住了输出形式,却掐断了隐状态的自由演化。

长期记忆也不该是扁平向量库。记忆条目天然有混合结构,一次好的检索是对“记忆簇”的后验估计,不是余弦相似度打分。对齐也一样,人类偏好是多模态、情境依赖的,DPO 之所以比显式奖励模型稳,部分原因就是它把偏好当成了响应级的潜变量,避开了过拟合陷阱。

阅读全文 »

多层感知器:从API黑盒到张量洪流

你大概率写过这样的代码:定义几个 nn.Linear,串上激活函数,扔进训练循环,看着loss下降便心安理得。但当loss突然NaN、梯度莫名归零、或模型在验证集上诡异震荡时,model(x) 就从一个可靠的工具变成了一个无法诊断的黑盒。

问题不在于你不会调API,而在于你的脑子里缺少一张清晰的“张量流动地图”。本文不讲生物神经元类比,也不重复教科书上的链式法则推导。我们将以一个真实的 [32, 784] 输入张量为线索,完整追踪它穿过MLP每一层时的形状变化与数值流向。在中段,我们会用一段极简NumPy代码撕开框架封装,让你亲眼看到前向与反向传播的裸机实现。最后,我们会把这张地图映射到三个高频实战问题:梯度消失、loss震荡、过拟合——每个问题都给出“观察什么→定位到哪一层→如何修复”的诊断链路。

读完之后,希望你下次遇到训练异常时,第一反应不再是盲目调参,而是能在脑中跑一遍数据流,精准定位断裂点。

前向传播:形状即契约

让我们从一个具体的输入开始追踪。假设你定义了如下两层MLP,并传入一个形状为 [32, 784] 的张量:

x = torch.randn(32, 784)
out = model(x)  # model: Linear(784,256) → ReLU → Linear(256,10)

从这一刻起,x 不再是抽象符号,而是一个有明确维度的数据实体。它的每一次变换,都必须遵守矩阵运算的形状契约。这个概念我们会在全文贯穿使用,但为避免疲劳,后文也会用“维度约束”“形状规则”等词交替指代。

第一层:Linear(784, 256)

  • 输入形状:[32, 784]
  • 参数形状:权重 W1 为 [784, 256],偏置 b1 为 [256]
  • 输出形状:[32, 256]
  • 运算语义:将784维输入线性投影到256维子空间

这里的维度约束核心是矩阵乘法:输入最后一维(784)必须等于权重第一维(784)。若你在调试时见过 RuntimeError: mat1 and mat2 shapes cannot be multiplied,本质就是此规则被破坏。而偏置 b1 虽只有256个元素,却通过广播机制加到输出的每一行上——这是框架替你完成的隐式契约,但理解它才能避免后续手动操作时的维度陷阱。

阅读全文 »

当 Agent “自信地犯错”:不确定性量化的工程近似与边界

你大概率遇到过这样的场景:Agent 信誓旦旦地调用了一个根本不存在的 API,或者在多步规划中,对一条明显缺乏依据的路径给出了极高的置信度。你尝试调低 Temperature,或监控 Logits 熵,但问题只是换了种形式出现——模型要么变得过于保守而丧失行动力,要么依然在语义层面“自信地胡说”。

这背后是一个更深层的认知错位:我们正试图用确定性系统的调试手段,去驾驭一个本质上是概率采样的系统。Temperature 和 Logits 熵只是对模型内部状态的粗糙近似,无法捕捉模型在语义空间中的真实信念分布。要真正理解 Agent 为何“自信地犯错”,我们需要回到描述不确定性的理论源头,同时清醒认识到理论完美方案与工程可行近似之间的鸿沟。本文不承诺提供银弹,而是试图厘清哪些贝叶斯思想可以安全转化为工程实践,哪些只能作为诊断思维而非实施工具。

采样不等于后验:LLM 不确定性的真实图景

理解 Agent 的不确定性,首先要完成一次视角切换:LLM 每次生成的回复,仅仅是从其后验分布中抽取的一个样本;而我们真正关心的,是这个分布本身的形状。

这里需要建立一个关键的概念防火墙:LLM 的 N 次输出采样,绝不等于贝叶斯神经网络(BNN)的权重后验采样。BNN 的认知不确定性来自权重空间的后验分布,每次前向传播采样的是不同的模型参数假设,反映的是“模型对哪些假设缺乏数据”。而 LLM 的权重是固定的,多次采样只是在给定权重下对输出分布的蒙特卡洛近似,它捕获的是解码器随机性与部分认知不确定性的混合体,无法像 BNN 那样干净分离“模型无知”与“输入歧义”。因此,LLM 的多次采样是一种有损的工程近似——我们通过观察采样结果的离散模式间接推断不确定性的主导类型,但这种推断本身带有偏差。

同样需要修正的是对 Temperature 的理解。它是对 logits 分布的重参数化:T<1 锐化分布、放大 logit 差异;t>1 平滑分布、缩小差异;T→0 时退化为 argmax 的近似确定性输出。Temperature 无法分离认知与偶然不确定性,因为它均匀缩放所有 logit 差异,无法区分“模型因缺乏训练数据而产生的平坦分布”与“输入本身多义性导致的多峰分布”。这两种情况在 Temperature 调节下表现相似,但工程应对策略截然不同。

阅读全文 »
0%