木一六 2020年5月21日
被控对象的模型是控制器设计的基础,对象模型越准确,越有利于设计出最优的控制律。
被控对象建模,即建立对象输入 x x x与输出 y y y之间的映射关系 f ( ⋅ ) f(\cdot) f(⋅)。
y = f ( x ) y=f(x) y=f(x)
在控制理论发展的早期,被控对象模型是通过分析对象的组成结构,结合相关的物理与数学知识,建立起系统输出与输入之间的解析关系式(这种建模方法又称为机理建模)。由于这种方法具有很强的物理意义,因此可以较为可靠地描述系统的模型,并且取得了大量的应用。但是,随着被控对象越来越复杂,控制精度要求越来越高,且实际应用中存在各类扰动,导致传统机理建模方法难以通过精确的数学公式描述被控对象的全部内部传递特性,其在精度和自适应方面存在较大的局限性。
随着测控技术、计算机技术和人工智能的飞速发展,数据驱动的建模方法在近些年来得到了大量的发展和应用。基于数据驱动的建模方法,顾名思义,就是通过被控对象的实测输入和输出数据,学习对象模型的映射关系 f ( ⋅ ) f(\cdot) f(⋅)。模型结构和模型参数是数据驱动建模方法的两个重要因素。为了了解模型结构和模型参数,我们首先看一个例子,假设一个简单的对象模型可以通过下式进行描述
y = a x 2 + b x + c sin ( x ) (1) y=\red{a}x^2+\red{b}x+\red{c}\sin(x) \tag{1} y=ax2+bx+csin(x)(1)
在上式中, x 2 x^2 x2, x x x和 sin ( x ) \sin(x) sin(x)就是模型的结构,表示对象模型中包含了这三种特征。红色部分的 a \red{a} a, b \red{b} b和 c \red{c} c就是模型的参数。
在数据驱动模型中,模型的结构用于描述模型的内部特征。理想情况下,如果能够选择一个与实际被控对象完全匹配的模型结构,那么这个模型结构就是完美的。因为这个模型结构能够完全精确地描述模型的所有内部特征,不存在任何冗余,也不存在任何缺失。这样以来,数据驱动建模就只剩下确定模型参数这一个任务了。
实际上,我们已经建立了完备的线性系统理论知识,可以通过自回归模型(Auto Regressive Model,AR),滑动平均模型(Moving Average Model,MA)和自回归滑动平均模型(Auto Regressive Moving Average Model,ARMA)三类模型结构来精确地描述任何单输入单输出(SISO)的线性系统。接下来以最一般的ARMA模型为例进行说明,ARMA模型的离散形式可以写为
y ( k ) = ∑ i = 1 n a i y ( k − i ) + ∑ j = 0 m b j x ( k − j ) y(k)=\sum_{i=1}^{n}a_{i}y(k-i)+\sum_{j=0}^{m}b_{j}x(k-j) y(k)=i=1∑naiy(k−i)+j=0∑mbjx(k−j)
该模型表明,线性系统的输出可以由其历史时刻输出以及当前和历史时刻输入的线性叠加来表示。其中,括号中的 k k k表示离散时刻, a i a_i ai和 b j b_j bj分别表示输出 y y y和输入 x x x的参数。将上式转化为传递函数形式,即为
H ( z − 1 ) = Y ( z − 1 ) X ( z − 1 ) = b 0 + b 1 z − 1 + ⋯ + b m z − m 1 − a 1 z − 1 − a 2 z − 2 − ⋯ − a n z − n H(z^{-1})=\frac{Y(z^{-1})}{X(z^{-1})}=\frac{b_{0}+b_{1}z^{-1}+\cdots+b_{m}z^{-m}}{1-a_{1}z^{-1}-a_{2}z^{-2}-\cdots-a_{n}z^{-n}} H(z−1)=X(z−1)Y(z−1)=1−a1z−1−a2z−2−⋯−anz−nb0+b1z−1+⋯+bmz−m
离散形式的传递函数在 z z z域表示,其中 z − 1 z^{-1} z−1为传递函数的算子。
控制系统中常用连续形式的 s s s域变换来表示传递函数。例如
G ( s ) = Y ( s ) X ( s ) = b m s m + b m − 1 s m − 1 + ⋯ + b 0 a n s n + a n − 1 s n − 1 + ⋯ + a 0 G(s)=\frac{Y(s)}{X(s)}=\frac{b_{m}s^{m}+b_{m-1}s^{m-1}+\cdots+b_{0}}{a_{n}s^{n}+a_{n-1}s^{n-1}+\cdots+a_{0}} G(s)=X(s)Y(s)=ansn+an−1sn−1+⋯+a0bmsm+bm−1sm−1+⋯+b0
它是如下常微分方程的Laplace变换
a n d n y d t n + a n − 1 d n − 1 y d t n − 1 + ⋯ + a 0 y = b m d m x d t m + b m − 1 d m − 1 x d t m − 1 + ⋯ + b 0 x a_{n}\frac{\mathrm{d}^{n}y}{\mathrm{d}t^{n}}+a_{n-1}\frac{\mathrm{d}^{n-1}y}{\mathrm{d}t^{n-1}}+\cdots+a_{0}y=\\ b_{m}\frac{\mathrm{d}^{m}x}{\mathrm{d}t^{m}}+b_{m-1}\frac{\mathrm{d}^{m-1}x}{\mathrm{d}t^{m-1}}+\cdots+b_{0}x andtndny+an−1dtn−1dn−1y+⋯+a0y=bmdtmdmx+bm−1dtm−1dm−1x+⋯+b0x
离散形式传递函数 H ( z − 1 ) H(z^{-1}) H(z−1)与连续形式传递函数 G ( s ) G(s) G(s)之间可以互相转换。详细内容请查阅零阶采样与零阶保持相关内容。实际控制系统中采用离散形式的数字信号进行采样、控制量计算以及实施控制,因此必须通过AD及DA进行转换(董霞,陈康宁,李天石. 机械控制理论基础[M]. 西安: 西安交通大学出版社, 2005.)。
根据上述理论,我们确定了线性系统模型结构的基本形式。在后续的建模过程中,还需要进行两项工作
模型阶次辨识可以参考(侯媛彬, 周莉, 王立琦等. 系统辨识[M]. 西安: 西安电子科技大学出版社, 2014.),模型参数辨识见后续内容。
非线性系统比线性系统的结构复杂得多,截至目前为止,也没有形成统一的模型结构。目前最常用的结构主要有
神经网络和支持向量机主要用于离线建模,对于具有实时性要求的建模场景,一般采用非线性自适应滤波方法进行建模。这类方法主要有
在非线性模型结构的选择方面,目前的非线性结构存在一个最大的缺点,就是模型结构与实际被控对象不匹配。
- 以神经网络模型为例,虽然它可以描述任意类型的非线性特性,但是在应用过程中,神经网络的层数,每一层的神经元个数难以选择。另外,它存在大量的冗余特性(对实际被控对象完全无用、多余的特性)。
- 其他某些稍微简单的非线性模型则可能存在特性欠缺。
模型结构不匹配时,那么无论模型中的参数如何辨识,都不可能得到和实际被控对象完全一致的数据模型。实际上,我们无法找到像公式(1)中假设的那种理想状况,因此我们得到的模型都只是对实际被控对象的一个近似。只要数据模型的结构选择地比较合适,用于模型训练的数据具有代表性(至少要保证训练数据能够覆盖被控对象的工况),选择合理的参数优化方法,那么我们即可得到符合一定容差的数据模型。这对于实际工况已经足够了。
当然,假设有一天,能够建立一种可以自适应寻找模型结构的深度学习模型,那么将会得到一个更加准确的对象模型。(实际上,已经有模型结构自适应的深度学习结构了。)
相对于传统的机理建模方法,数据驱动模型虽然更加精确,但是却不如传统方法那么稳定。由于数据驱动模型的物理意义不明确,在模型训练过程中经常存在炼丹的状况,而且容易出现过拟合的假象。甚至在实际使用过程中,数据驱动模型还不如机理模型那么可靠。
如果我们具有一定的先验知识,掌握了模型某些固有属性,那么将这些物理意义明确的先验知识与数据驱动模型融合起来,则可以得到兼具稳定性与精确性的数据驱动模型,我们暂且将其命名为“数据融合模型”吧。这里,如何进行融合,是一个值得研究的问题。
确定了模型的结构,下一步就是通过被控对象的实测输入和输出数据对模型参数进行参数寻优(即确定一组模型参数,使得在这组模型参数和训练数据下,模型输出的误差达到某种意义上的最小)。这实际上是一个最优化问题,模型参数寻优可以分为两大类方法:
这类方法通常是一些仿生的智能优化算法,通过设置一定的参数空间、目标函数和参数更新准则,随机进行优化搜索。常用于没有明确表达式的模型参数寻优和参数求导困难的情况。这类方法主要有
(1)梯度下降法(Gradient Descent, GD)是最优化方法的一种最基本算法,也是目前机器学习中训练参数的最常用和最基础算法。它是在目标函数的性能曲面上寻找当前参数状态的负梯度方向,进行参数更新的一种方法。这种方法具有明确的数学意义和参数搜索方向,因此比随机搜索优化方法的收敛速度更快,应用场合更广泛。
梯度下降法可以通过下式进行表达
w k + 1 = w k − μ ∇ w J \mathbf{w}_{k+1}=\mathbf{w}_{k}-\mu\nabla_{\mathbf{w}}J wk+1=wk−μ∇wJ
其中, μ \mu μ是参数更新步长, ∇ w J \nabla_{\mathbf{w}}J ∇wJ是代价函数 J J J对参数向量 w \mathbf{w} w的梯度向量。
(2)梯度下降法是一种一阶收敛算法,即当前更新的参数向量只包含当前参数状态在目标函数性能曲面上的一阶导数信息。Newton法是一种二阶收敛算法,它包含了当前参数状态的二阶导数信息,牛顿法的表达式如下
w k + 1 = w k − μ H − 1 ∇ w J \mathbf{w}_{k+1}=\mathbf{w}_{k}-\mu\mathbf{H}^{-1}\nabla_{\mathbf{w}}J wk+1=wk−μH−1∇wJ
其中, H \mathbf{H} H是一个Hessian矩阵,表示目标函数对参数向量 w \mathbf{w} w的二阶导数。由于Newton法包含了二阶梯度信息,因此收敛速度比梯度下降法更快一些。
(3)此外,还有拟牛顿法(Quasi-Newton Method)、共轭梯度法(Gonjugate Gradient)等。
(4)在机器学习中,为了提高传统随机梯度下降法(SGD)的收敛速度,解决鞍点驻留和局部极小值等问题,发展出了如下优化算法。