4、神经网络控制基础

各位工程师朋友,今天我们来聊聊神经网络控制的基础。说实话,我刚接触这个领域时,也觉得神经网络像个黑盒子——输入一堆数据,输出一堆结果,中间发生了什么?不清楚。但做了十几年控制项目后,我慢慢摸清了它的脾气。

神经网络在控制中的作用,说白了就是帮我们解决那些传统方法搞不定的问题。比如你面对一个非线性系统,数学模型建不出来,或者模型太复杂算不动,这时候神经网络就派上用场了。

系统辨识与控制的区别

很多人容易把系统辨识和控制混为一谈。我刚开始做项目时也犯过这个错。

系统辨识是什么?就是给系统建模。你给系统一个输入,看它怎么响应,然后想办法用数学表达式描述这个响应过程。比如你给电机一个电压,记录转速变化,最后得到一个传递函数——这就是辨识。

控制呢?是反过来。我已经知道系统长什么样了,现在要设计一个控制器,让系统按照我的意愿运行。比如让电机转速稳定在1000转,不管负载怎么变。

神经网络在这两个角色里都能干。它可以做辨识器,也可以做控制器。但要注意,两者的目标函数不一样:

角色 目标 输入 输出
辨识器 让模型输出≈实际系统输出 控制量u(t) 系统估计值ŷ(t)
控制器 让系统输出≈期望输出 误差e(t)、状态x(t) 控制量u(t)

嗯,这里要注意:辨识追求的是模型精度,控制追求的是系统性能。两者有时候会打架——模型太精确了,控制器反而可能不稳定。我在做温控系统时就遇到过这种情况,神经网络辨识精度99%,但控制器一上去就震荡。后来我降低了辨识精度要求,反而控制效果更好了。

神经网络的逼近能力

为什么神经网络能用来做控制?核心原因就是万能逼近定理

这个定理说:只要隐藏层神经元足够多,一个三层前馈神经网络就能以任意精度逼近任意连续函数。注意,是任意连续函数!

你想想看,这意味着什么?意味着不管你的系统有多非线性,多复杂,只要给我足够的神经元,我就能用神经网络把它学出来。我在做机器人关节控制时,摩擦模型、柔性模型、迟滞模型,全都能用一个神经网络搞定。

万能逼近定理的直观理解:

想象你要画一条任意曲线。用一堆小线段去逼近,线段越多,逼近越准。神经网络里的每个神经元就像一个小线段,激活函数就是那个线段的形状。神经元多了,就能拼出任意复杂的曲线。

但这里有个坑——万能逼近定理只说了存在性,没说怎么找到那个最优的网络。说白了,它告诉你「一定能行」,但没告诉你「怎么行」。我见过不少工程师,一上来就堆神经元,结果过拟合得一塌糊涂。我的建议是:从简单结构开始,逐步增加复杂度。

神经网络控制器的基本结构

典型的神经网络控制器长什么样?我画个图给你看:

神经网络控制器基本结构 期望值 r(t) Σ 神经网络 控制器 被控对象 (未知系统) y 反馈信号 (用于在线调整) 给定值 控制律 u(t) 系统响应

这个结构其实和传统反馈控制很像,区别在于:传统控制器(比如PID)的参数是固定的,而神经网络控制器的参数是在线调整的。

具体来说,神经网络控制器的工作流程是这样的:

  1. 计算误差:期望值 r(t) 减去实际输出 y(t),得到误差 e(t)
  2. 前向传播:把误差 e(t) 和系统状态送进神经网络,算出控制量 u(t)
  3. 施加控制:u(t) 作用到被控对象上,产生新的输出 y(t+1)
  4. 反向传播:根据新的误差,调整神经网络的权值

循环往复,直到系统输出跟上期望值。

我的经验之谈:

刚开始做神经网络控制时,别想着一步到位。我建议先离线训练一个初始模型,再放到线上去微调。直接在线从零开始训练,很容易把系统搞崩。我曾经在液压伺服系统上试过,结果执行器直接冲到了极限位置,差点把设备搞坏。

避坑指南:

我曾经犯过一个低级错误——把神经网络的初始权值设成了全零。结果所有神经元输出都一样,梯度也一模一样,网络根本学不动。记住:权值初始化要用随机小值,打破对称性。

好了,神经网络控制的基础就聊到这儿。核心就三件事:搞清楚辨识和控制的区别、理解万能逼近定理的威力、掌握控制器的基本结构。下一节我们会深入具体的神经网络类型,看看它们在控制中怎么落地。


公众号:蓝海资料掘金营,微信deep3321