Page 186 - 《软件学报》2025年第9期
P. 186

胡思宇 等: 基于层重组扩展卡尔曼滤波的神经网络力场训练                                                    4097



                                                           −1
                                                 w t+1 = w t −H ∇L( f (x i ;w t ),y i )               (4)
                    卡尔曼滤波是鲁道夫卡尔曼在            1960  年提出的一个数据处理的算法         [51] . 假定过程模型和测量模型如公式        (5)
                 所示, 且过程模型中的噪声和测量模型中的噪声                v 分别服从   p(w) ∼ N (0,Q), p(v) ∼ N(0,R) 的正态分布. 在这个线
                 性系统的前提下, 卡尔曼滤波可以表示成如图              2(a) 所示的预测-修正的迭代算法, 广泛应用于自动驾驶和航海等领
                 域. 对于非线性系统, 只需将非线性的测量模型和过程模型进行泰勒展开, 即可按线性系统处理, 推广得到扩展卡
                 尔曼滤波. 神经网络是一个典型的非线性的系统, 当状态值迁移到神经网络的权重时, 也即全局卡尔曼滤波                                (global
                 extended Kalman filter, GEKF) 用在神经网络权重的更新上时    [52] , 预测和修正的更新模式表示在图       2(b) 中.

                                                   {
                                                     x t = Ax t−1 + Bu t +w t−1
                                                                                                      (5)
                                                     z t = Hx t +v t

                        预测                      修正                   预测                      修正
                                         (1) 计算卡尔曼增益            (1) 计算状态值            (1) 计算卡尔曼增益
                    (1) 计算状态值                                                             T   T
                                                T
                                              P  H HP  H T                              P  H  H P  H
                                        (2) 根据测量模型更新状态值                             (2) 根据测量模型更新状态值
                  (2) 计算误差的协方差                                 (2) 计算误差的协方差                       h
                     P  P  T            (3) 更新误差的协方差               P  P              (3) 更新误差的协方差
                                                                                          P     H P
                                              P     H P
                      时序更新 t−1 t               测量更新               时序更新 t−1 t               测量更新

                          (a) 在线性系统情况下的一般表示                                (b) 在非线性系统的表示
                                               图 2 卡尔曼滤波算法的更新流程

                    层重组卡尔曼滤波优化器          [35] 是全局卡尔曼滤波优化器      [52] 的改进算法. 通过一种特殊的解耦合方法减小存储
                 和计算开销. 为了方便理解层充足卡尔曼滤波优化算法, 首先简略介绍全局卡尔曼滤波. 全局卡尔曼滤波优化器在
                 更新权重时    (权重的总数记为      N), 更新过程中的参与计算的梯度          H  和权重  w 均为  (N ×1) 的列向量, 权重的误差协
                 方差  P  为  (N × N) 的矩阵. 层重组的卡尔曼滤波优化器对计算进行了解耦合, 把参与计算梯度                    H  和权重  w 分别切
                 分成  L  个列向量  {N 1 ×1,N 2 ×1,...,N L ×1}, 把  P  矩阵近似成多个对角的子矩阵  P = {N 1 × N 1 ,N 2 × N 2 ,...,N L × N L }, 其
                      ∑
                 中  N =  N i . 这种切分结果是根据神经网络的层参数量决定的, 当给定一个块大小阈值                     (blocksize,  N b ), 当神经网
                         i
                 络层的参数量小于该阈值时, 聚合多个小的神经网络的层; 当神经网络的参数量大于该阈值时, 将该层按照
                 blocksize 的值进行拆分. 算法   1  是层重组卡尔曼滤波算法的实现细节, 层重组卡尔曼滤波优化器用于神经网络权
                 重更新时的流程可分为        3  部分: (1) 计算误差和梯度, 体现在算法       1  的第  1, 2  行中; (2) 标准的卡尔曼更新计算流程
                 作用在分层之后的更新量上, 参考算法             1  的第  3  行和第  5–7  行, 其中第  5–7  行中的层重组操作用   split 函数表示.
                 算法  1  中第  9  行是记忆因子的更新; (3) 把更新后的切分后的权重重新拼接起来并重组成神经网络权重原本的维
                 度大小, 用算法    1  的第  10, 11  行中  collect 表示.

                 算法  1. 层重组卡尔曼滤波优化器.

                               in
                             in
                     b Y Y
                 输入:  ,   DFT ,w ,P ,λ in               ▷ 输入
                        ∑             ∑


                           b Y i         Y i DFT  − b Y i
                 1.  b Y  =   i  ,  errY =  i          ▷ 计算绝对值误差
                      length(Y  DFT )  length(Y  DFT )
                 2.  H = ∇ w Y| w=w in                   ▷ 计算梯度
                        b
                              in
                 3.  A =1/( λ +H P H))              ▷ 标准计算流程, 用于第      7  行状态值的更新
                            T
                        in
                 4. for  l = 1,2,...,L do              ▷ 层重组: 把整体的更新分为独立的       L  块分别更新
                             in
                 5.   K = split(P ,l)× split(H,l)         ▷ 按层分别更新卡尔曼增益   K
   181   182   183   184   185   186   187   188   189   190   191