神经网络:通用函数逼近器
2026/7/22 1:46:19 网站建设 项目流程

在《[[AI 研究方法的演变]]》那篇笔记中,我们沿着研究方法的演变脉络,理解了 AI 当前主流的研究为什么会走向深度神经网络。具体来说就是:在逻辑符号无法对所有规则进行编码,而概率方法又卡在了特征工程的情况下。深度神经网络提供了一种激进的方式回答了后一个难题,即放弃人工设计特征,让模型自己从数据中学。现在,我们需要进一步解释的是,这个回答背后的数学基础究竟是什么。

通用逼近定理
神经网络能成为 AI 主流研究方法所依赖的第一个数学基础,是 通用逼近定理(Universal Approximation Theorem)。根据该定理的陈述,任一仅含 单个隐藏层 的前馈神经网络,只要隐藏神经元数量足够多,并且使用某种非线性激活函数,就能在任意精度上逼近 任意紧集 上的任意连续函数。它在 1989 年由乔治·塞本科(George Cybenko)首次证明(对 sigmoid 类激活函数成立),同年由库尔特·霍尼克(Kurt Hornik)等人放宽到任意非常数有界连续激活函数("挤压"类函数),并由摩谢·莱什诺(Moshe Leshno)等人在 1993 年进一步扩展到包括 ReLU 在内的非多项式激活函数。这换用数学语言来描述就是:


ϵ

0
,

f
θ

F
,
sup
x

X

|
f
θ
(
x
)

f

(
x
)
|
<
ϵ
其中,
f

:
X

Y
就是任意紧集上的连续函数,
f
θ
是神经网络所表示的参数化函数族
F

{
f
θ

θ

Θ
}
中的某个成员,
θ
是网络中所有的权重与偏置。这个定理证明了神经网络 理论上能学会 任意输入到输出的映射。

需要特别指出的是,通用逼近定理证明的是神经网络的 存在性,而不是 可学习性。换言之,只要参数调得够好,神经网络就能逼近到任意精度,但这并不保证我们手中的优化算法能找到那个 “够好” 的参数。这一点呼应了《[[AI 研究方法的演变]]》中关于 “通用逼近能力” 那一节的论断:网络表达能力只是必要条件,不是充分条件。接下来,我们要用工程视角把 “神经网络是什么” 这件看似抽象的事情形式化,然后再看这种形式化在实际工作中会暴露什么边界。从数学形式上看,神经网络最简洁的定义可以写作一个映射:

f
θ
:
X

Y
,
θ

Θ
其中,
X
是输入空间(例如
28
×
28
的灰度图像),
Y
是输出空间(例如 10 个数字类别的概率分布),
θ

Θ
是参数空间(所有权重与偏置的集合)。训练这件事的本质,就是在
Θ
这个高维空间中,找到一组参数
θ

,使得
f
θ

在某种意义下最接近我们想要的函数
f

基于上面这种把神经网络看作 “参数化函数族” 的视角,我们就不难看出神经网络的能力边界。它首先由
Θ
的几何结构决定,然后才由
F

Θ
上的具体形态决定。关于这一点,读者接下来将会在我们讨论损失函数和优化过程时看到更为具体的例子。

典型应用:多层感知机
既然神经网络是一个映射,那么在 “输入一张图、输出一个分类概率” 这个过程中究竟发生了什么呢?这就需要用到一个被称为 前向传播(Forward Propagation) 的工程实现方法了。在该方法中,整个计算被组织成了一张 计算图(Computational Graph),这个数据结构中的每个节点都是一次具体的数学运算(矩阵乘法、加法、激活),而边则表示数据的流向。下面,让我们来看看人们是如何用最常见的多层感知机(MLP)来做 MNIST 手写数字分类的,并基于这个典型应用来直观感受一下神经网络是怎么工作的。

h
(
0
)

x
h
(
l
+
1
)

σ
(
W
(
l
)
h
(
l
)
+
b
(
l
)
)
,
l

0
,
1
,

,
L

1
^
y

softmax
(
W
(
L
)
h
(
L
)
+
b
(
L
)
)
其中,
x

R
784
是把
28
×
28
灰度图拉平后的向量,
W
(
l
)

R
d
l
+
1
×
d
l

b
(
l
)

R
d
l
+
1
是第
l
层的权重矩阵和偏置向量,
σ
是非线性激活函数(如 ReLU),
h
(
l
)
是第
l
层的隐藏表示,
^
y

R
10
是 10 个数字类别的预测概率。下面,让我们通过图 1 来展示一下这个多层感知机的前向传播过程。

多层感知机的前向传播

图 1 多层感知机的前向传播

从上面这张图中,读者可以看到整个计算过程非常直观,感知机的每一层都在做以下两件事:

把上一层的表示
h
(
l
)
通过
W
(
l
)
h
(
l
)
+
b
(
l
)
投影到一个新的空间,这个投影本身是线性的;
通过
σ
把线性结果折一下,让模型能表示非线性关系。如果只有线性投影,无论堆多少层,最终等价于一个单层线性变换(这是矩阵乘法的结合律决定的)。所以
σ
不是装饰,而是让 “深” 有意义的关键。这一点的最经典反例就是 Minsky 与 Papert 在 1969 年指出的 XOR 问题:单层线性感知机连最简单的非线性可分函数都无法表示,必须引入非线性激活或加深网络结构才能打破这一限制,如图 2 所示。
感知机的局限:线性可分与 XOR 问题

图 2 感知机的局限:线性可分与 XOR 问题

需要特别强调的是:通用逼近定理告诉我们:足够宽的单层网络就能逼近任意连续函数,但 深网络比宽网络更能实现参数的高效化。这个经验性事实至今没有严格的数学证明,但在实践中已被反复验证,也直接催生了 “深度学习” 这个名字。至于计算图本身,它不只是教学工具,同时也是执行反向传播的基础数据结构。PyTorch 和 JAX 这类框架之所以能做到自动微分,本质上就是维护了这一数据结构,之后在反向阶段只需沿着图结构进行反向计算梯度即可。关于这一点,我们稍后会详细讨论,目前,读者只需要记住:神经网络 = 一张可微的计算图,训练 = 调整图中的参数。

暴露的边界
基于上述数学视角,读者可以直观地理解到:基于神经网络的 AI 训练本质上就是基于一个参数化的函数族在寻找它的最佳参数。但同样的,这种视角也同时暴露出该方法在工程实现上绕不开的三个能力边界。

逼近能力 ≠ 拟合能力。 通用逼近定理归根结底只是在数学方法上指导 AI 去寻找 “存在够好的参数”,但是不是真的能在具体工程实现中找到这些参数,这其实是另一个问题。优化过程中的局部最优、鞍点、梯度消失都会让训练停在某个远未逼近
f

的位置。这就是为什么 “理论可学” 和 “实际能训出来” 是截然不同的两件事,后者是优化算法要解决的问题。

高维空间中的几何直觉失效。 我们对二维平面上的函数拟合有很好的几何直觉,但
Θ
的维度往往是百万级甚至十亿级。在这个量级的空间里,局部最优和全局最优的概念本身就变得微妙。毕竟,绝大多数临界点不是局部最优,而是鞍点。这导致训练过程的几何性质远不如低维情形那么直观。好在,流形假设(Manifold Hypothesis) 提供了一种部分补救:在很多真实任务中,尽管输入空间
X
维度极高,但有意义的数据其实分布在一个低维流形上。这意味着神经网络实际需要学习的函数,其有效定义域远小于
X
的标称维度。这个假设目前仍是经验性的而非严格证明的,但它是理解 为什么深度学习在图像、文本上有效 的认知桥梁。形式化讨论见 Fefferman, Mitter & Narayanan (2016) 关于"深度学习能工作吗"的综述。

函数逼近无法区分 “学到了规则” 与 “做对了模式”。 这是《[[AI 研究方法的演变]]》在符号主义与联结主义交锋时提出的那个追问。神经网络能拟合任何函数,但拟合成功的内部权重配置,到底是在编码某种 “规则”,还是仅仅在做高维插值?我们从训练曲线和参数值上读不出来。

损失函数:学习目标的标准化
在"神经网络:通用函数逼近器"那一节中,我们用数学语言将神经网络形式化成了一个参数化的函数族
f
θ
:
X

Y
,并指出用它训练 AI 的本质就是在
Θ
这个高维空间中寻找一组参数
θ

。但对于用什么标准来判断够好,还是一个亟待解决的问题。换言之,我们在 AI 的训练过程中不能盲目地反复修改
θ
,这就需要一个可计算的信号来指引当前神经网络的优化方向。

损失函数的定义
这个信号的生成器在专业术语中被称为 损失函数(Loss Function),它的作用是在单样本上定义下面这样一个实值函数:

L
:
Y
×
Y

R

0
,
L
(
y
,
^
y
)

0
其中,
y
是真值标签,
^
y

f
θ
(
x
)
是模型预测,
L
返回的是一个非负实数,用来刻画 “这一次预测偏离真值多远”。把它对数据集
D
取期望,就会得到如下 经验风险(Empirical Risk) 函数:

R
(
θ
)

E
(
x
,
y
)

D
[
L
(
y
,
f
θ
(
x
)
)
]

1
N
N

i

1

L
(
y
i
,
f
θ
(
x
i
)
)
从上述函数中,我们可以理解到 AI 训练的目标,就是在最小化这个
R
(
θ
)
的解集,损失函数是在解决 “学习目标的标准化” 问题。换言之,人们想要模型做什么,必须先用
L
这个数学对象把它写出来,否则优化器无从下手。

当然了,这个标准化的方式背后藏着一个容易被混淆的不对称理解:训练时优化的目标(
L
)和上线时评估的目标(业务指标),往往是两件不同的事。比如分类任务训练时用交叉熵,但业务上关心的是召回率、转化率;LLM 训练时用下一个 token 的交叉熵,但用户关心的是回答是否有用、是否安全。这种 “训练目标 vs 评估目标” 的脱节,正是损失函数所暴露的核心能力边界。

典型应用:从回归到序列的损失族
下面,我们沿着任务类型的演变,列出工程中最常用的损失函数族。

回归任务:这类任务关心的是连续值预测,它常用以下三类损失函数:

均方误差(Mean Squared Error, MSE):
L

(
y

^
y
)
2
。对大误差惩罚重(平方放大),但对异常值敏感。
平均绝对误差(Mean Absolute Error, MAE):
L

|
y

^
y
|
。对异常值更鲁棒,但在零点处不可导,需要次梯度处理。
Huber 损失:在小误差时表现为 MSE,在大误差时表现为 MAE,是两者的折中,常用于带噪声的回归场景。
分类任务:这类任务关心的是概率分布预测,常用的损失函数是 交叉熵(Cross Entropy):

L
CE


C

c

1

y
c
log
^
y
c
直觉上,交叉熵衡量的"模型预测分布
^
y
与真值分布
y
之间的信息距离"。对于二分类任务,交叉熵退化为二元交叉熵(Binary Cross Entropy, BCE);对于多分类任务,常与 softmax 配合使用。LLM 的预训练本质上就是一个大规模多分类问题(在词表上预测下一个 token 的分布),因此交叉熵是 LLM 训练的事实标准损失。

序列任务:这类任务则需要处理变长与对齐问题,常用以下两类损失函数:

CTC(Connectionist Temporal Classification):用于语音识别等需要把不定长输出对齐到定长标签的场景,例如把音频帧序列映射到文字序列。CTC 通过引入 “空白” token 来处理对齐不确定性,无需显式标注每一帧对应的字符。
标签平滑(Label Smoothing):把硬标签
y

{
0
,
1
}
软化为
y

(
1

ϵ
)
y
+
ϵ
/
C
,目的是防止模型对训练数据过度自信,从而提升泛化能力。GPT-3 训练时就用到了标签平滑(见 Brown et al. 2020 附录)。
LLM 训练链路的词表前置:BPE 与 Subword Tokenization。 上一段提到 LLM 预训练是"在词表上预测下一个 token 的分布",但词表本身从何而来?这是 LLM 训练链路上绕不开的前置工程:BPE(Byte-Pair Encoding,字节对编码) 是当前大模型词表的事实标准。它从字符级出发,反复合并训练语料中出现频率最高的相邻字节对,直到词表规模达到设定阈值(GPT 系常用约 5 万,BERT 用约 3 万)。Subword Tokenization 是这类方法的统称,介于"字符级"(词表太小、序列太长)与"词级"(词表太大、未登录词灾难)之间。其工程收益有三:一是把生僻词、专有名词拆成常见子词组合,从根本上解决未登录词问题;二是词表规模可控(5 万量级),使得 softmax 层的计算与显存占用可接受;三是子词粒度天然支持多语言共享词表,是 LLM 跨语言能力的基础。BPE 本身不是一个深度学习概念:它最早是 1994 年的无损压缩算法,但与 Transformer 的结合让它成为 LLM 工程的隐形支柱。理解这一点后,前述"LLM 预训练是词表上预测下一个 token 的分布"这句话的完整含义才完整:模型实际是在学习一个 5 万维的分类分布。

词表规模的工程权衡。 词表大小不是越大越好,它直接影响前述交叉熵损失的计算成本。词表越大,softmax 层
W

R
d
×
|
V
|
的参数与计算量越大,且在分布式训练中跨设备同步 token 频率统计的通信开销也增加。词表越小,平均每个 token 编码的语义信息越少,导致序列变长:一段 1000 个汉字的文本,词表 5 万时大约切成 500 个 token,词表 1 万时要切成 1000 个 token,序列长度翻倍直接抬升 Transformer 自注意力的
O
(
N
2
)
计算量与位置编码压力。当代 LLM 普遍把词表设在 3-10 万之间,本质上是在 softmax 计算成本与序列长度成本之间走钢丝。这是"损失函数"一节所暴露边界("训练目标 vs 计算成本"的耦合)在词表层面的具体表现。

暴露的边界
基于上述对损失函数的形式化与典型应用的梳理,读者可以直观地看到:损失函数决定了 AI 训练的方向,但也同时暴露出三个工程上绕不开的边界。

错误损失 → 错误目标。 损失函数是在定义学习目标的标准,但这种标准化定义的本身也可能会出错。其中的一种典型情况被称为 标签泄漏(Label Leakage),即训练数据中包含了本不应被 LLM 看到的目标信息,导致损失看似下降但泛化崩溃。另一种情况被称为 目标错配,即业务上关心的是召回率,但训练时用了精度相关的损失。损失函数选错了,再优秀的优化器也只能把模型带到错的地方。

损失与评估指标的脱节。 训练时优化的是
L
(可微、可求梯度),上线时评估的是业务指标(往往不可微、不可直接优化)。这两者之间存在天然的鸿沟。LLM 训练用 token 级交叉熵,但用户关心的是回答的有用性、安全性、事实性,这些指标既不可微又难以在训练中直接使用。这种脱节催生了后续 RLHF(基于人类反馈的强化学习)等对齐方法,用一个可微的奖励模型去逼近人类偏好,再回头指导语言模型训练。这条边界在"训练动力学"一节中会以 Goodhart 定律的形式再次出现:当指标变成目标后就不再是好指标。关于这一点的延伸讨论,读者可参考本笔记在 “补充路线:从监督训练到对齐训练” 这一节中所介绍的内容。

不平衡数据下的损失加权。 当数据分布严重倾斜时(例如欺诈检测中正样本占比 0.1%),标准的交叉熵会让模型倾向于预测多数类。常见的工程缓解包括:

类别加权:在损失中对少数类乘以更大的权重
w
c
,即
L



c
w
c

y
c
log
^
y
c
,其中
w
c
与类别频率成反比。
Focal Loss:在交叉熵基础上乘以
(
1

^
y
c
)
γ
调制因子,让"已经分对的样本"贡献更小的损失,迫使模型聚焦于难样本。这是目标检测领域处理正负样本不平衡的经典做法。
但这些加权策略都属于对错误的补救,不是对问题的根治。如果数据本身的标注质量差或采样偏差严重,再精巧的损失设计也只能在错位的数据上学到错位的模式。

优化过程:寻找足够好的参数
正如我们之前所说,神经网络在具体的工程实现中其实就是一张 可微的计算图。这里的 “可微”,指的是计算图上每个节点(矩阵乘法、加法、激活函数)都可以对其输入求偏导。而它训练的目标则由最小化损失函数
R
(
θ
)
来进行指导,具体方法是在
Θ
这个高维空间中沿负梯度方向迭代,在专业术语中被称为 梯度下降(Gradient Descent) 方法。同样的,本节接下来会先介绍优化器的数学原理,再沿 SGD 到 AdamW 的演化谱系展示工程实现,最后落到梯度不稳定与优化不等于泛化等绕不开的边界。

优化器的数学基础
损失函数只是定义了我们在整批训练数据上的期望,直接对全量数据求梯度在工程上代价过高,因此实践中几乎都使用 随机梯度下降(Stochastic Gradient Descent, SGD):每次只用一个 mini-batch 估计梯度,更新参数:

θ
t
+
1

θ
t

η

θ
L
batch
(
θ
t
)
其中,
η
是学习率,

θ
L
batch
是当前 mini-batch 上的梯度估计。这条公式看似平凡,但 如何高效算出每个参数的梯度呢? 这才是关键问题所在,人们目前所能想到的解决方案就是反向传播(Backpropagation),即沿计算图反向调用链式法则,如图 3 所示。

反向传播示意图

图 3 反向传播示意图

具体来说,若第
l
层的输出
h
(
l
)
取决于第
l

1
层的输出
h
(
l

1
)
,则根据链式法则,我们可以得到:


L

h
(
l

1
)


L

h
(
l
)


h
(
l
)

h
(
l

1
)
如此逐层反推,就能用一次前向 + 一次反向算出所有参数的梯度。这个过程的时间复杂度与一次前向传播同量级,这正是反向传播成为深度学习标配的根本原因:链式法则把它从数学理论上的可计算变成了工程方面的可实现计算。Rumelhart、Hinton、Williams 在 1986 年的工作把这一思想系统化,奠定了深度学习的训练机制,关于其历史脉络,参见《[[AI 研究方法的演变]]》的对应章节。

当然,尽管反向传播解决了梯度计算的实现问题,但它在工程上也存在着 梯度不稳定 的能力边界,其具体表现为:

梯度消失(Vanishing Gradient):深层网络中,靠后的梯度要沿链式法则连乘多遍才能传回靠前的层。若中间激活函数的导数小于 1(如 sigmoid 早期),连乘后会快速衰减到零,靠前的层几乎收不到学习信号。
梯度爆炸(Exploding Gradient):若中间导数大于 1,连乘后会指数增长,参数更新剧烈震荡甚至发散为 NaN。
这两类问题在 RNN 里尤为严重,因为 RNN 沿时间步反向传播,相当于在一条非常长的链上反复连乘。起初,人们在深度前馈网络里依靠一种被称为 残差连接(Residual Connection) 的方法对这两类问题做了局部的缓解。该方法的核心价值是让 “恒等映射” 成为网络的默认行为(He et al. 2016 解决的核心问题是深度网络的 “退化问题”,即深度增加时训练误差反升),同时也为梯度提供了绕过容易饱和激活的捷径。而最终,真正让问题在工程上收敛的,是用 现代化激活函数(Modern Activation Functions) 取代传统的 sigmoid/tanh 函数:

ReLU(修正线性单元, Rectified Linear Unit):
σ
(
x
)

max
(
0
,
x
)
。其导数在正区间恒为 1,从根本上避免了 sigmoid 类的梯度消失。这是 ResNet、GPT 等大多数当代模型的标配。

GELU(高斯误差线性单元, Gaussian Error Linear Unit):
σ
(
x
)

x

Φ
(
x
)
,其中
Φ
是标准正态分布的累积分布函数。GELU 在零点附近是平滑过渡而非硬截断,经验上比 ReLU 收敛更快。BERT、GPT-2 及之后的 OpenAI 系列模型都用它。

SwiGLU(Swish 门控线性单元, Swish Gated Linear Unit):将输入分两路,一路经过 Swish 激活(即
Swish
(
W
1
x
)

W
1
x

σ
(
β
W
1
x
)
),另一路保持线性,最终做逐元素乘:
SwiGLU
(
x
)

Swish
(
W
1
x
)

(
W
2
x
)
,其中

表示逐元素乘。SwiGLU 结合门控机制,是 LLaMA、PaLM 等近年大模型的默认选择。

需要指出的是,这些激活函数在数学上都是 “软化” 的 ReLU,而不是某种原理性突破。它们的引入反映的是一个工程真相:反向传播的稳定性不是一个能被理论定理证明的事,它要靠经验性的损失曲面与一阶导数统计去验证。这就是为什么激活函数的选择在大模型时代反而成为一项需要消融实验确认的工程决策。

典型应用:从 SGD 到 AdamW 的演化谱系
反向传播给出的是梯度方向,但决定沿这个方向走多远、以什么方式累积历史信息的,是优化器。下面,让我们从 SGD 出发,沿着 AdamW 的演化谱系,看看优化器在工程实践中是如何一步步发展的。

SGD 及其动量变种
SGD(随机梯度下降,Stochastic Gradient Descent) 是最简单的优化器,其更新规则为:

θ
t
+
1

θ
t

η

θ
L
(
θ
t
)
纯 SGD 的问题在于梯度估计有噪声,尤其在高维非凸损失面上,像布朗运动一样来回震荡。动量(Momentum) 引入历史梯度的指数滑动平均:

v
t
+
1

β
v
t
+

θ
L
(
θ
t
)
,
θ
t
+
1

θ
t

η
v
t
+
1
如果想直观点理解,动量的作用就是增加参数更新的 “惯性”(就像小球滚下坡),以便加速收敛并抑制震荡。Nesterov 动量进一步把 先按动量探一步、再在那个位置算梯度 的修正项引入,是凸优化中收敛速度更快的一个变种。

自适应学习率:AdaGrad / RMSProp / Adam
不同参数的梯度量级天然差异巨大,有些权重长期小幅更新,有些则剧烈震荡。固定学习率很难同时照顾两类参数。AdaGrad(Adaptive Gradient,自适应梯度) 对每个参数维护一个梯度平方的累积和,按参数的历史活跃度反比地缩小其学习率。其优点是稀疏特征友好,缺点是学习率单调下降、可能过早停止学习。RMSProp(Root Mean Square Propagation,均方根传播) 改用指数滑动平均缓解 AdaGrad 的过早衰减,Adam(Adaptive Moment Estimation,自适应矩估) 则把动量(一阶矩)和 RMSProp(二阶矩)合二为一,是当前深度学习的默认起点。其更新规则如下:

m
t
+
1

β
1
m
t
+
(
1

β
1
)

θ
L
(
θ
t
)
(一阶矩)
v
t
+
1

β
2
v
t
+
(
1

β
2
)
(

θ
L
(
θ
t
)
)
2
(二阶矩)
^
m
t
+
1

m
t
+
1
1

β
t
+
1
1
,
^
v
t
+
1

v
t
+
1
1

β
t
+
1
2
(偏差修正)
θ
t
+
1

θ
t

η
^
m
t
+
1

^
v
t
+
1
+
ϵ
其中
β
1
,
β
2
通常取 0.9 和 0.999。偏差修正步骤用于抵消训练初期
m
t

v
t
被初始化为零导致的偏差,是 Adam 工程实践中不可省略的一步。Adam 的工程经验是"几乎不需要调学习率",
η

10

3
在大量任务上都能起步;具体到不同模型类别,BERT 类小模型常用
2
×
10

5
量级,ResNet-50 类视觉模型常用
10

3
,GPT 类大模型受限于全局 batch size 较大,峰值学习率常被压到
3
×
10

4
上下。具体的扫描范围与判定标准将在"调优策略"一节的训练层面小节展开。

AdamW:解耦权重衰减
深度学习里常用的 权重衰减(Weight Decay) 是一种正则化:每步把参数向零拉一点,抑制过拟合。传统实现是直接把衰减项加到损失函数里,再求梯度。但 Adam 的自适应学习率会让衰减项也被 “自适应缩放”,失去了原本的意图。AdamW(Adam with decoupled Weight Decay) 的修正是把衰减项从损失里拿出来,直接作用在参数更新上:

θ
t
+
1

θ
t

η
^
m
t
+
1

^
v
t
+
1
+
ϵ

η
λ
θ
t
这样权重衰减就不再受自适应学习率的干扰。AdamW 是当前训练 Transformer 系模型的标配。

学习率调度(Learning Rate Scheduling)
把训练比作下山:刚开始要大胆迈步(高学习率),接近谷底时要谨慎(低学习率)。学习率调度 就是给
η
画一条随训练步数变化的曲线。

Warmup:训练最初几千步把
η
从 0 线性升到峰值,避免初期梯度剧烈震荡把参数推到坏区域。
Cosine Decay:训练中后段让
η
沿余弦曲线从峰值平滑降到接近零,比阶跃式下降更稳。
Linear Decay:把
η
从峰值线性降到 0,实现简单但尾部下降过快。
当代大模型训练普遍组合:Warmup + Cosine Decay 或 Warmup + Linear Decay。这两种不是"原理上最优",而是"工程上够用"。

暴露的边界
优化过程决定了"参数怎么动",但它本身也暴露三个工程上绕不开的边界。

优化 ≠ 泛化。 这是最重要的一条边界:训练损失降得越低,测试表现未必越好。这条边界的根源是经验风险的极小点并不等于真实风险的极小点。优化器把
θ
带到训练损失最低的位置,但训练数据只是真实分布的一个有偏样本。在这个位置,模型可能"完美拟合了训练数据中的噪声",却把未见样本的判别能力丢了,这就是过拟合。深度学习中的过拟合不是单一现象:它可能来自数据不足(特征相对样本数过多)、参数过多(表达能力过强)、训练时间过长(被噪声牵着走)。任何调优手段都只能"延缓"过拟合的发生,不能"消灭"它。一旦把优化与泛化当作一件事来处理,工程上会反复陷入"训练集完美 → 测试集崩盘"的死循环。

鞍点比局部最优更常见。 优化器在
Θ
这个高维空间里走的是局部路径,每一步只看自己当前点的梯度。这让人担心会不会卡在局部最优。事实上,Dauphin 等人 2014 年的研究指出:在高维非凸损失面上,绝大多数临界点不是局部最优,而是鞍点,形象地说,损失曲面更像一片有褶皱的山地,每个山坳都是一个 “出口”,真正的局部最优反而稀少。这意味着梯度下降一般能持续走出"看起来平"的地方,找到更好的位置。但这个结论有个前提:梯度必须有效传播。一旦进入 “梯度消失区”,优化器看到的全是接近零的梯度,会误以为已收敛,这其实是"假局部最优",是前述 “梯度不稳定” 小节中激活函数失效在优化阶段的体现。鞍点丰富这一事实,对深度学习是"半个好消息",它解释了为什么朴素 SGD 在大多数任务上不至于彻底失败。这一损失曲面的高维几何形态如图 4 所示。

高维损失曲面的鞍点分布

图 4 高维损失曲面的鞍点分布

大模型训练损失不收敛不等于效果差。 在小模型时代,不收敛意味着代码 bug 或超参数灾难。但在大模型时代,训练损失的不收敛在某些特定设置下是正常的、甚至是必要的。一个值得注意的现象是:当模型规模逼近数据量约束时(即所谓过训练),继续训练有时会导致验证损失先降后稳甚至回升,而训练损失仍在持续下降——这种训练与验证之间的剪刀差在传统 ML 中是过拟合的典型信号,但在大模型场景下,下游任务的表现仍可能继续改善。这个反直觉的现象说明:训练损失的数值变化,已经不再是模型质量的有效指标:评估必须看下游任务的实际表现。这是评估方法论从看损失曲线转向看评测基准的根本原因,也是接下来的这一节要展开的核心议题。而关于 Chinchilla 与规模化定律的进一步细节,将会在 “调优策略” 这一节中系统讨论。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询