ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

通用逼近定理解析:神经网络如何逼近并用于控制稳定?

通用逼近定理解析:神经网络如何逼近并用于控制稳定?

神经网络控制器调试到一半,最常被问的一句话是:你凭什么相信一个黑箱函数放进闭环里还能稳定?这个问题问得很有水平,因为它直接指向了深度学习控制方法的理论根基。上一篇我从全局梳理了深度学习和控制结合的整体框架,这篇专门把地基挖开,讲清楚一个核心命题:神经网络为什么会逼近、逼近能力到底有多强、哪些情况它其实不保证。通用逼近定理是理解这一切的钥匙,也是后续理解系统辨识、自适应控制、强化学习策略网络设计的必要前提。


1. 通用逼近定理到底承诺了什么

1.1 定理怎么说:把高维函数当作可调参数的曲面

通用逼近定理的核心结论可以浓缩成一句话:只要激活函数满足一定条件,一个足够宽的单隐层前馈神经网络,就能以任意精度逼近定义在紧集上的任意连续函数。

这句话信息密度很高,得拆开逐块消化。

先说“任意连续函数”。控制问题里我们遇到的系统动力学、控制器映射、价值函数,绝大多数都是连续映射。被控对象的状态转移方程、摩擦模型、气动系数表,在正常工作范围内都是连续变化的。“连续”保证了一个基本性质:输入稍微变一点,输出不会突然跳飞。这个性质让数学上可以用可调参数的函数去“贴”它。

再说“紧集”。紧集是闭且有界集合的推广,在控制场景里翻译成大白话就是:**状态变量和输入信号不会无限跑出去,系统工作在某个已知范围内。**比如机械臂角度在正负180度之间,温度在20到80度之间,电机电流在额定范围内。这个假设对控制和逼近理论都是定心丸,因为有了这个范围,你才知道要在哪里逼近、数据要采到哪些区域、验证要在哪里做。

最后是“任意精度”。给定一个误差容忍度,比如模型误差不超过千分之一,理论保证存在一组网络权重参数,使得神经网络的输出和真实函数的偏差在整个紧集上处处小于这个容忍度。注意这里的“存在”是纯数学意义上的存在,不管这个参数好不好找、训练算法能不能收敛到它,先保证它确实存在。

1.2 一个反直觉的结论:逼近能力强,不代表逼近容易

很多人第一次接触定理时会觉得,那神经网络岂不是无敌了?这里要泼一盆冷水。定理说的是“存在”,不是在说“你随便训练就能达到任意精度”。

打个比方,超市里有一瓶水,理论上我能买到它,但我可能没带钱、可能迷路、可能超市没开门。定理告诉你水确实存在,但找不找得到、怎么找,是另一个问题。这在实践中的体现很明显:某个网络架构在理论上逼近能力强,实际训练可能振荡、可能陷入差的局部极小、可能因为数据分布问题完全没有泛化能力。

我早期做过一个模拟项目,要用神经网络拟合一台设备的非线性传递特性,网络宽度是自适应设计的三倍冗余,理论上肯定够用。结果训练到最后,训练集误差已经降到很低,但一到测试集就原形毕露。问题不在逼近能力,而在数据采集不够充分、采样集中在低幅段。所以理解这个定理最大的价值之一,是学会区分“逼近理论问题”和“优化与泛化问题”,这两个问题在控制工程里经常纠缠在一起,不分开看待很容易误诊。


2. 神经网络凭什么能做到:叠加与基函数机制

2.1 从多项式逼近说起

控制工程师对多项式拟合都不陌生。一条非线性曲线,可以在一个区间上用高次多项式去逼近,次数越高,逼近精度越高。Weierstrass逼近定理说的就是:定义在闭区间上的连续函数,可以用多项式一致逼近到任意精度。这个结论是数值分析和系统辨识的老祖宗级工具。

神经网络逼近连续函数,和多项式逼近连续函数,底层思路是相通的,都是把复杂函数拆成简单组件再叠加。区别在于组件的构造方式:多项式用的是 x 的各次幂组合,神经网络用的是“激活函数经过加权平移缩放后的组合”。

也就是说,神经网络不是一个全新的魔法,它是一类特殊的函数族。理解这一点对技术人员很重要,因为这意味着很多传统逼近理论的分析工具——误差界、基函数个数需求、外推风险——在神经网络领域依然有效,只是具体表现形式变了。

2.2 神经元的“砖块效应”:从激活函数到基函数

单个神经元做的事情,可以理解成两步:

  1. 先做一个线性变换,给输入向量乘上权重再加偏置;
  2. 再过一个非线性激活函数,输出一个标量。

如果选择常用的S型激活函数或ReLU类激活函数,单个神经元本身的输出形态其实很有限——要么是一个逐步上升的过渡带,要么是一条有拐点的折线。单独一个神经元表达能力很弱,但把多个神经元并行组合起来,再经过一层线性加权输出,表达力就完全不一样了。

一个直观的认识是:**多个神经元经过不同的权重和偏置组合后,各自产生了在不同位置、不同尺度上的“基函数”形状,然后输出层把这组基函数加权求和。**这就像在拼拼图,每个神经元负责一小块区域的拟合,整个网络负责把这些局部拟合拼接成一个全局函数。

这也是为什么很多经验丰富的实践者会说,神经网络的隐藏层本质上在做“特征变换”或“基函数构造”,而不是直接存储知识。隐藏层的参数决定了基函数的形态和位置,输出层的权重决定每个基函数的贡献大小。

2.3 构造性证明的直观思路

通用逼近定理的经典证明思路,不在于“深”,而在于“堆积”。大致路径是这样的:

给定目标函数,先在紧集上用一组高斯核函数去做逼近。高斯核均匀铺在紧集上,每个核函数权重取目标函数在该点的函数值,整体加权求和。当核函数的尺度趋于零、核密度足够高时,这个加权和就能一致逼近原函数。

关键一步在于,神经网络的一层结构可以构造出和核函数形态相似的函数:用S型激活函数的两个神经元相减,可以得到一个呈山丘形状的窄带函数,这就是核函数;再通过偏置调整位置、通过权重调整尺度。最后把所有核函数权重并列加到一个输出神经元上。这样一个单隐层网络,理论上就复现了整个核加权和过程。

这个证明思路带来的启示很实际:**网络容量的核心在于基函数数量和位置的可调性。**宽网络比深网络在这个证明框架下更直白,但深网络在实际中往往用更少的参数量达到相似的逼近效果,是因为深度让每一层都做了复合变换,表达能力更强。不过这些都是实践观察,不是定理本身的内容。


3. 逼近定理的边界:它不承诺的这些事必须心里有数

3.1 维度灾难:高维下“任意精度”的代价高得离谱

通用逼近定理里有一个魔鬼细节藏在“任意精度”里。它没有说明要达到这个精度需要多少个神经元,而这个数目往往随维度指数级增长。

假设我们要在一个d维空间里拟合函数,如果每个维度需要切N段才能满足精度,那么总段数是N的d次方。维度一高,这个数就是天文数字。工业控制里常见的状态空间动辄几十维,全部状态都参与逼近时,数据量和网络容量需求会爆炸。

这里实操层面的对策通常是降维、降任务复杂度。不要试图用一个巨大网络去逼近高维全状态函数,而是先把问题简化,只对关键维度做神经网络逼近,其余部分保留模型结构。比如补偿未知摩擦力时,输入就取速度和方向两个量,不要强行塞进几十维状态。架构设计的智慧往往不是把网络做多大,而是把输入空间缩得多小。

3.2 非连续函数与跳变系统:理论帮不上忙

通用逼近定理的前提是连续函数,控制里确实存在不连续或近似不连续的情况,比如干摩擦中的静摩擦跳变、阀门开启瞬间的流量突跳、碰撞过程中的速度瞬变。

严格来说,带跳变的函数无法被前馈神经网络一致逼近。实践里要做到的不是逼近跳变本身,而是用合理的模型结构处理跳变,把连续部分交给神经网络,不连续部分单独建模。一个我常用的做法是:摩擦力的静动摩擦差异部分用查表或开关逻辑处理,动态补偿部分才交给神经网络。把问题分解成“连续可逼近”和“不可连续逼近”两块,比硬塞给网络一个万能建模方案要可靠得多。

3.3 存在性悖论:可训练性才是真正的瓶颈

再强调一次,定理保证的是存在一组好权重,不保证梯度下降能找到它。这一点很多从理论转到工程的人会吃亏。

理论上,给定足够容量的网络,总是存在参数满足精度要求。但实际训练过程会受到损失函数地形、学习率选择、数据信噪比、初始化方案的共同影响。尤其当控制对象存在强非线性、数据又有噪声时,训练过程经常会在某个误差水平附近徘徊,怎么也压不下去。这时候不要盲目加网络宽度,优先检查数据质量和损失函数设计。我见过最典型的案例是,一个看起来“欠拟合”的网络,加宽之后反而更难收敛,最后发现是某段传感器信号噪声过大,模型在做无用功拟合噪声。

存在性给你信心,可训练性才是工作量所在。把这个认知刻在脑子里,调试神经网络控制器时心态会稳很多。


4. 神经网络在控制方法中的典型角色

4.1 系统辨识:用数据把“我不知道的模型”补出来

传统控制设计的第一步是建模。很多系统机理清楚但参数不准,比如机械臂的惯性参数、液冷系统的热容热阻,这时候神经网络可以直接充当辨识器。

一个经典结构是NARX模型:输出不仅依赖当前输入,还依赖历史输入和输出。神经网络把历史序列通过延迟环节形成输入特征,输出下一个时刻的预测值。训练完成后,网络就相当于一个数据驱动的系统模型。这个模型可以用于仿真、控制器设计、模型预测控制的内部预测模型。

实际操作中我最在意的两个细节:一是激励信号要足够丰富,扫频信号比单一正弦好得多,保证各个频段都被激活;二是数据分割必须按段切,不能随机打散。时间序列数据如果不按时间顺序切分,相当于把因果关系打乱了,模型很容易泄露未来信息,看着指标很好,一到在线就报废。

4.2 未知动态补偿:模型与网络的分工协作

如果系统主体模型已知但存在未建模动态,常见的做法是标称模型加神经网络补偿项。神经网络只负责逼近“模型偏差”,也就是真实系统与标称模型之间的残差。

这种分工的好处极其明显:神经网络需要逼近的函数从“整个复杂动力学”变成了“一个通常幅度较小、规律性较强的偏差”。函数更简单,数据需求更少,训练也更容易稳定。控制律形式上可以写成:

控制量 = 标称模型控制项 + 神经网络补偿项

我在某液压执行机构模拟项目中做过类似方案,标称模型就用线性近似,神经网络补偿非线性压力流量关系,补偿网络的输入就取了阀芯位移和压差两个量。最终的跟踪误差比纯标称控制和纯神经网络控制都好。这个“先模型后补偿”的分层哲学,值得反复体会。

4.3 强化学习中的策略逼近:从函数逼近到策略表达

强化学习和传统控制不太一样,但底层依然绕不开神经网络逼近。深度强化学习里的策略网络,本质上是用神经网络去逼近“从状态到动作的最优映射”,价值网络则是去逼近“状态或状态动作对的累计回报函数”。

在这里,通用逼近定理保证了策略函数空间在理论上可以被神经网络覆盖,但实际训练中策略网络的更新方式、探索噪声、奖励设计都对最终策略形态影响巨大。一个不太为外人所知的工程经验是:策略网络如果输入状态做不好归一化,训练初期很容易崩溃。状态量纲差别大时,同一组学习率对量级大的维度太激进、对量级小的维度太保守,梯度更新方向被大尺度维度主导,小尺度维度的有效信息被淹没。把所有输入归一化到相近量级,是整个深度强化学习落地中最便宜、最有效的一个技巧。


5. 从逼近到闭环稳定:中间隔着的四道坎

5.1 定义域覆盖:紧集假设是控制闭环的底线

理论上的紧集假设,在工程里需要被认真对待:训练数据覆盖的范围,就是网络可信的范围;出了这个范围,网络做的是外推,不是在逼近。

很多神经网络控制器上线后出问题,不是网络没训练好,而是运行时工作点跑到了训练区域之外。比如训练数据覆盖了负载从空载到满载的区间,系统在现场因为异常工况短暂超载,网络一下子进入完全陌生的输入区域,输出行为完全不可预测。这个问题的工程解法是:训练数据要设计覆盖预期全部工作范围,同时保留一个异常检测机制,当输入特征远离训练数据分布时,及时切换回保守的备份控制策略。

5.2 逼近误差的闭环放大:开环看着准,闭环可能发散

神经网络逼近是带误差的,哪怕拟合精度很高,误差也不会消失。在闭环里,这个误差会被反馈通路传递和放大。

一个典型的场景:神经网络模型预测效果好,被拿来设计模型预测控制器。模型预测误差导致控制器对预测状态产生系统偏差,偏差又导致控制量选择不对,控制量反过来让系统走向预测更不准的区域,误差进一步增大,最后发散。这和经典控制里模型失配导致的不稳定是一个道理,只是神经网络模型让失配变得隐蔽了。

解决方案是闭环验证极其谨慎。先在仿真环境里把闭环性能逼近理论给出的预期,再用小增益逐步在线介入。不要因为开环拟合指标漂亮就放心地满权限上线。

5.3 鲁棒性与滤波:不给噪声留下后门

神经网络作为控制器或补偿器时,把传感器噪声也学进去了,这是另一个常见陷阱。训练时用的数据如果信噪比低,网络很容易把噪声模式当作真实规律的一部分,运行时会被传感器噪声驱动输出抖动。

对策主要有三个方向:训练数据先做滤波处理,降低噪声教学;网络输出端加低通滤波或输出限幅,抑制高频抖动;损失函数里加入输出平滑惩罚项,鼓励网络给出平滑映射。三者可以组合使用。我在做某振动台控制模拟时,传感器高频干扰严重,最后是靠输出端一阶惯性滤波解决了大部分抖动问题,代价是相位滞后,需要在线调参平衡。

5.4 结构选择:残差学习的胜利

最后一个关键坎,是网络结构设计的哲学问题。理论上单隐层就能逼近连续函数,为什么实践里总是离不开残差结构、多层结构?

原因在于逼近效率和数据效率。残差学习让神经网络只需逼近“目标与已有近似模型之间的差”,这个差常常比原函数简单得多、幅度也小得多。数学上用同样的精度目标去衡量,更简单的目标函数需要更少的基函数、更少的训练数据,训练过程的景观也更平缓。

这就是为什么在控制里,“标称模型加残差神经网络”几乎总是优于“直接用神经网络做全量建模”。前者带着物理先验约束,后者是一个完全自由的函数逼近器。自由是双刃剑,自由意味着它可以用任何方式去拟合数据,但因为优化算法不是万能的,自由空间里的搜索往往更容易走到次优位置。物理先验相当于给逼近问题加了一个正则约束,缩小了待搜索空间,等于变相提高了训练效率。


6. 实践心得:神经网络逼近用于控制的几个经验

6.1 数据质量永远优先于网络架构

我调试过若干模拟项目和实际设备,一个反复出现的规律是:**数据缺陷导致的性能上限,结构再好的网络也无法突破。**数据覆盖不全、传感器未校准、时序错位、激励不充分,这些问题反映在训练结果上都是“模型不行”,但本质不是模型的问题。

建议在开始考虑网络结构之前,先做一次数据的“可辨识性”体检:把数据可视化,看输入范围覆盖是否完整;把同一工况的多次数据对比,看重复性与噪声水平;做一次最基本的线性回归,看线性模型能达到什么基线。基线测试能告诉你非线性到底有多强,值不值得上神经网络。有时候系统非线性占比很小,线性模型加自适应就足够,非要用神经网络反而引入复杂度、降低可解释性。

6.2 验证要测外推,不要只看内插

很多人把数据随机切成训练集和验证集,然后用验证集误差评估模型。这在静态函数拟合问题里还算合理,在控制问题里是完全不够的。原因很简单:控制系统的输入时间上有强相关性,随机打散等于人为制造信息泄漏,并且验证集和训练集高度重叠,测不出外推能力。

我的经验是按时段切分:用前70%时间的数据训练,后30%时间的数据验证。看模型在你没教过的时段表现如何。如果想更严格,可以专门留出一段系统在极端工况下运行的数据作为压测集,这一段在训练时完全不见,用于检验模型真正泛化的边界。这个验证方法不需要特殊工具,但效果远超无脑随机划分。

6.3 在线部署要配三重保险

神经网络控制器上线时,我通常会加三重保险:第一层是输入范围监测,检测输入特征是否进入训练分布之外,一旦越界立刻切换备份控制;第二层是输出限幅与变化率限制,防止网络输出惊变导致执行器冲击;第三层是长期运行的漂移监测,定期比对网络预测和实际系统响应,偏差持续增大时报警提示重新训练。

这三层不需要复杂控制理论支撑,类似PLC里的安全逻辑,但价值很大。神经网络控制项目失败,很少是因为理论不对,更多是因为没有给极端场景预留安全通道。

神经网络逼近理论为深度学习控制方法提供了合法性根基,但把这个根基用在工程现场,靠的仍然是数据、边界、安全机制这些扎实的底层功夫。希望这篇能把逼近理论和技术落地之间的距离呈现清楚,也帮你在选型、调试、出问题时,最先找到正确的判断方向。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进