控制理论发展专题课程报告——关于神经网络(BP和RBF,含源代码)

关于神经网络的研究报告

一、引言

       本门课程名称叫做“控制与科学发展专题”,其目的就是为了探讨当今世界信息与控制的融合,了解迅速发展的科学对控制学科的影响。而且本门课程涉及到其他多门课程,比如:信号与线性系统、最优化控制、鲁棒性能研究以及智能控制等等。控制与科学发展专题会针对当今控制理论的发展趋势来讨论关于控制研究的一些前沿问题,了解控制领域的现状,从整体上宏观把握控制发展方向。当控制与科学结合时,就会产生一些智能化、自动化的设备,这些设备可以提高工作效率,改进生产工艺,改善生产条件,并且可以在原材料消耗最小的情况下保证生产质量。可以得出,控制与科学的发展是十分重要的。

        著名控制科学专家黄琳教授说过:控制科学发展必须与中国的实践紧密结合[1]。用我们的理解来说,控制本身就是一门技术,人们生活需求不断驱动着技术的发展,比如从会说话的菲比娃娃到机器清洁工,再到斯坦利自动驾驶汽车,再到足球机器人(科技最先进的比赛项目),不断增长的需求推动了控制科学的发展。但如若想在控制方面做到最强,还是要着眼于中国的基本国情,了解我们到底想要什么样的作品;善于抓住机遇,时刻准备着(比如新冠疫情成就了许多线上企业和测温机器的使用);脚踏实地,从基本理论出发,才能更有底气进行创新。

        通过查阅资料[2]了解到,控制科学中一些基本的控制方法包括:

(1)经典控制法:基于波德图、维纳滤波器分析和奈奎斯特分析的比例积分微分(PID,Proportion Integral Differential coefficient)控制等。

(2)现代控制法:基于能控性、能观性和内部稳定性的线性二次型(LQ,Linear Quadratic)控制、线性二次型优化(LQR,Linear Quadratic Regulator)控制以及线性二次型高斯最优控制(LQG,Linear Quadratic Gaussian control)控制等。

(3)先进控制法:包含鲁棒控制、智能控制和集成控制,其中,智能控制涉及多方面,包括分级递阶智能控制、学习控制、专家控制、模糊控制以及神经网络控制。

了解了这么多,结合现代科学技术不断发展的现状,觉得先进控制法应该是目前最受欢迎的。结合以前毕业设计了解过神经网络,所以,决定对神经网络控制进行研究,该控制方法是本次小论文的重中之重!

二、神经网络控制

1. 前言

       随着科学技术的快速发展,神经网络在控制中的应用越来越多,其中主要包括多层前馈神经(BP,Back Propagation)网络[3]和径向基函数(RBF,Radial Basis Function)网络[4]。

       谈到BP神经网络,不由得从机器学习开始说起。机器学习通俗来讲,就是让机器自动学习、就是设计一些让机器可以自动学习的算法,利用已知数据来预测未来数据。它属于人工智能领域的一个分支,也是人工智能领域的核心,这意味着人类赋予机器学习的能力。与其对应的一个概念就是深度学习,这里主要阐述一下两者的区别,来更好的学习BP网络。图1为机器学习与人工智能和深度学习的关系。

         由图1可知,人工智能是最早出现的,也是最大、最外侧的同心圆;其次是机器学习,稍晚一点;最内侧,是深度学习。人工智能(AI,Artificial Intelligence)是指为机器赋予人的智能;机器学习是指一种实现人工智能的方法;深度学习是指一种实现机器学习的技术。

        深度学习是机器学习的一个子类,它更像我们人类的大脑,是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络就是包含了多个隐含层的神经网络,为了模仿人类大脑的工作方式,更好地解释一些数据,特意对神经元的连接方法以及激活函数等方面做出了调整。

         所以,这两个学习到底有何不同呢?经查阅资料[5],他们的不同之处表现在以下四个方面:

(1)应用场景的不同:机器学习主要应用在指纹识别和特征物体检测等领域中,由于发展较早的缘故,该技术已经成熟化,达到了商业上谋取利益的要求;而深度学习则主要应用在文字识别、人脸技术和智能监控等领域中,也在继续向教育、医疗等领域进军,堪称是当今人工智能大爆炸的核心驱动。

(2)所需数据量的不同:机器学习可以适应各种数据量,尤其适合数据量较小的场景;深度学习适合数据量较大的场景,深度学习的相关算法需要大量的数据支撑才能展现理想的效果。

(3)执行时间的不同:机器学习算法训练时需要的时间量比较少;因为深度学习算法中包含有很多参数,所以执行时间较长。

(4)解决问题方法的不同:机器学习将问题拆成多个小问题后,分别解决最终叠加得到结果,该方法根据标准程序去解决问题;深度学习和人脑的工作方式一样,不必进行拆分,可以集中解决问题。

        接下来,就着重讲讲机器学习和BP网络的联系。机器学习在体系架构上属于自主学习的一个小体系,机器学习中包含自适应控制、最优控制、模式识别和数据挖掘等,机器学习的分类体系如图2所示。而实现自主学习的方法主要有回归、神经网络、支持向量机、决策树和专家系统等。

       神经网络属于一种机器学习技术,它是深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。神经网络是用于模拟人类大脑中神经元的网络。每个“神经元”都具有用于从其输入确定输出的数学模型。神经网络属于图2中模式识别的一种形式,该神经网络必须由样本数据进行训练后,才能确定连接线之间的权重。

       图3显示了一个简单的神经网络,这是一个包含三个层次的神经网络。左侧是输入层,右侧是输出层,中间是隐藏层。输入层有n个输入单元,隐藏层有l个单元,输出层有n个单元。

 则图3中的结果可以表达为:

           (1)

其中,是激励函数。对比来说,深度学习对应的深度网络就是多了一个预训练的过程,这样可以更快找到权值的最优解,之后再进行微调,使整个网络更优。

        其实神经网络有很多种,具体大的两个方面分为人工神经网络和生物神经网络,人工神经网络是我们研究颇多的一类,图4展示了神经网络的分类。

      从图4中可以看出,在神经网络的两个大分类中,我们具体展示并研究了人工神经网络。人工神经网络主要又分为前馈网络和反馈网络,在人工神经网络中颇为感兴趣的是前馈网络,前馈网络可以根据层数分为单层、两层和多层。由于层数的增多,该神经网络系统的复杂度以及输出函数的表达式也会增加。

      神经网络可以实现诸多功能,因为它是一种模仿生物神经的方法,其目的就是模仿人脑,来智能处理各项工作。并且,在处理非线性问题上具有很大的优势,例如可以进行各类非线性预测,各类优化算法以及各类智能控制。本次小论文主要通过BP网络来实现数据的逼近,用以得到未知数据的特性。

2. BP网络实现逼近

       通过学习文献[6]了解到,Matlab工具箱中有四个函数,可以实现模式识别分类、函数逼近和函数压缩等。四种函数分别为:

(1)newff:创建一层前馈BP网络(隐含层只有一层)

(2)newcf:创建一个多层前馈BP网络(隐含层有多层)

(3)train:训练一个神经网络

(4)sim:仿真一个神经网络

       基于以上了解,结合一些Matlab基础知识,准备将BP网络设置为三层、隐层神经元个数设置为五个,实现非线性函数的逼近。

       给出的原始数据分布图如图5所示,横坐标的范围是[-1,1](保证收敛速度,可以不进行归一化)。

 图5 原始数据分布图

       为了更清楚地解释BP网络,对工具箱界面的各类参数进行解释,比如:训练函数中trainrp为弹性梯度下降法;net.trainParam.epoch为最大训练次数(缺省为10)。各参数具体解释详见图6。图6是Matlab中的一个界面,在该界面上,进行了一些自己的注解,其中包括输入、隐含层、输出层和输出,以及迭代次数的设置等等;训练函数可以根据实际输出结果与理想输出结果的误差来进行调换,包含梯度下降法、一步正割算法、拟牛顿算法、量化共轭梯度算法、弹性梯度下降法、自适应lr梯度下降法、有动量的梯度下降法等等多种可以选择的训练函数;性能函数可以选择均方误差函数(mse)和均方误差规范化函数(msereg)。

图6 各参数具体解释

最后,当设置的各项性能指标达到时,程序就会自动结束。经过训练,可以得到最终的逼近结果,各点的逼近值见图7。

 图7 最终逼近结果

      由图7可知,大部分点数的逼近结果可以接受,但-0.5处、0处、0.5处的效果太差,这就需要继续增加神经网络层数或者改变隐藏层节点个数来提高该系统的性能。

     但有时候会出现运行失败的界面,此时可能是由于最大迭代次数设置的太小,导致程序在半途中就被迫停止,所以迭代次数应该尽可能设置大一些,以免后面产生不必要的错误。

3. 神经网络控制

      神经网络控制经过了40多年的发展,已经成为了智能控制系统的一种设计方法。它适用于多种系统,比如我们常见到的线性与非线性系统、连续与离散系统﹑确定性与不确定性系统、集中参数与分布参数系统和集中控制与分散控制系统等。它的结构是高度并行的,并且拥有强大的学习能力。

     神经网络可以从大量的数据中提取数据的特征,它的主要工作流程就是调整内部节点的个数以及各个节点的权重,以达到网络输出的不同,从而实现对该系统的控制。比如,目前比较火爆的操控无人机[7],神经网络就担任了比较重要的责任,提供主要技术支持。

     与其他传统的控制策略相比,神经网络控制的优势表现在如下几个方面[8]:

(1)传统自适应控制会常常遇到一些复杂的数学理论分析问题;而神经网络控制对任意函数都具有学习能力,这种能力可以避免上述问题。

(2)传统控制策略不能解决高度的非线性控制问题;而在神经网络控制中,通过设置一个具有非线性映射功能的激活函数,这种非线性映射功能可以逼近任意非线性函数,这样就解决了上述问题。

(3)传统控制策略需要输入先验信息来决定控制模型;而神经网络控制不需要先验信息,因为神经网络具有逼近能力,所以,神经网络控制可以被用在一些不确定模型上。

(4)神经网络控制的结构是高度并行的,所以网络当中某些节点的损坏并不影响整体性能,大大提高了该控制系统的容错性。

      正如前文提到过RBF神经网络,所以接下来就介绍一下RBF神经网络控制。

     首先说一下RBF神经网络。1990年,非线性动力系统的人工神经网络自适应控制方法被首次提出。在这之后,多层神经网络和RBF神经网络频繁应用到模式识别和控制中。

      然后谈一下RBF神经网络控制包含在哪些方面。比如,对机械臂的控制这一难题,解决方案为神经网络自适应控制方法。机械臂要求具有精确的轨迹跟踪和良好的控制性能,前前后后学者们提出了很多方法。计算力矩控制方法是最简单的,但该方法需要借助系统的精确非线性动力学模型来进行控制,这就引出了自适应控制方法。它不需要系统的先验知识,是很多研究者的首要选择。近年来,针对机械臂关节位置跟踪的奇异摄动技术,设计了一个神经网络控制器,省去了先验知识和离线训练神经网络的麻烦。针对机械臂尖端位置跟踪控制问题,设计了神经网络自适应控制器,省去了有效载荷质量的先验知识。

      再者,具体说一下RBF神经网络。它包含输入层、隐含层和输出层。隐含层的神经元激活函数由RBF构成,隐含层组成的数组运算单元称为隐含层节点。下面示例为具有3个隐含层的RBF网络结构,如图8所示。

图8 RBF网络结构

      从图8中可以看出,它与前文中的BP神经网络的主要区别在于隐含层和输出层的连接上。图8中的各符号公式为:

                       (2)

其中,为隐含层第个神经元高斯基函数中心点的坐标向量,为隐含层第个神经元高斯基函数的宽度。

                   (3)

比如结构为2-4-1的RBF网络应该这样选取:取网络输入层,————————————————————————————————————————————————————————————————————分割线,emmmm,此处不太好敲上去,公式太多,有需要的可以找我要截图!!!!!!!!!!!!!————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

   可以应用RBF神经网络实现多种功能,包括训练、预测以及分类等。下文应用仿真软件实现RBF神经网络的数据分类功能。图9展现了运用RBF网络进行分类的整个流程,其中红色点和绿色点是待处理的数据,蓝色点为中心向量。经过RBF神经网络处理之后,将数据大致分为4类,但此处由于程序上准备将数据分为10类,所以得出了3-2-3-2比较邻近的结果,但就结果来说蓝色中心向量取4个就可以实现目标的分类。

图9 运用RBF网络进行分类

三、结论

        通过这门课,我更深入地了解到了神经网络控制。关于BP网络和RBF神经网络的知识还有很多,这次只是学到了皮毛。

        但我对于RBF神经网络控制更感兴趣一些,通过资料查找到:针对不同的寻优方向,有不同的RBF神经网络控制方法。比如基于梯度下降法的RBF神经网络控制,其中包括监督、自适应以及自校正;基于神经网络最小参数学习法的自适应滑模控制;基于模型整体逼近的自适RBF控制;基于局部逼近的自适应RBF控制等等。针对不同的目标,就有不同的方法。

        同时,还可以结合各类算法对神经网络的性能进行优化。比如可以引入蚁群优化算法、鼠群优化算法、鲸鱼优化算法、狼群优化算法、以及粒子群算法等智能优化算法对神经网络的参数进行优化,使网络具有更高的性能,这是因为一些优化算法具有更好的搜索能力,可以帮助网络跳出局部最优的困境,比传统的智能算法具有更好的优化能力。

         路漫漫其修远兮,接下来自己将在这方面继续学习,争取早日有所成就!

参考文献

[1]   黄琳. 控制科学发展必须与中国的实践紧密结合[J]. 科技导报, 2017, 35(12): 1.

[2]   控制科学发展专题.pdf, https://max.book118.com/html/2017/0621/117084285.shtm.

[3]   潘志新, 杨晓梅, 王成亮, 等. 基于BP神经网络的线圈定位技术研究[J]. 电测与仪表, 2021, 1-8.

[4]   楚庆玲, 平振东, 于明加, 等. 基于RBF神经网络的辛烷值损失预测模型[J]. 物联网技术, 2021, 11(11): 104-107.

[5]   科普一下:机器学习和深度学习的区别和关系, http://www.elecfans.com/rengongzhineng/691751.html.

[6]   王丽萍. 基于BP神经网络工具箱实现函数逼近[J]. 湖南农机, 2011, 38(9): 29-31.

[7]   张守武, 王恒, 陈鹏, 等. 神经网络在无人驾驶车辆运动控制中的应用综述[J]. 工程科学学报, 2021, 1-9.

代码!!!!

 1.Untitled.m

clc;
clear all;
close all;

%% ---- Build a training set of a similar version of XOR
c_1 = [0 0];
c_2 = [1 1];
c_3 = [0 1];
c_4 = [1 0];

n_L1 = 20; % number of label 1
n_L2 = 20; % number of label 2


A = zeros(n_L1*2, 3);
A(:,3) = 1;
B = zeros(n_L2*2, 3);
B(:,3) = 0;

% create random points
for i=1:n_L1
   A(i, 1:2) = c_1 + rand(1,2)/2;
   A(i+n_L1, 1:2) = c_2 + rand(1,2)/2;
end
for i=1:n_L2
   B(i, 1:2) = c_3 + rand(1,2)/2;
   B(i+n_L2, 1:2) = c_4 + rand(1,2)/2;
end

% show points
scatter(A(:,1), A(:,2),[],'r');
hold on
scatter(B(:,1), B(:,2),[],'g');
X = [A;B];
data = X(:,1:2);
label = X(:,3);

%% Using kmeans to find cinter vector
n_center_vec = 10;
rng(1);
[idx, C] = kmeans(data, n_center_vec);
hold on
scatter(C(:,1), C(:,2), 'b', 'LineWidth', 2);

%% Calulate sigma 
n_data = size(X,1);

% calculate K
K = zeros(n_center_vec, 1);
for i=1:n_center_vec
   K(i) = numel(find(idx == i)); 
end

% Using knnsearch to find K nearest neighbor points for each center vector
% then calucate sigma
sigma = zeros(n_center_vec, 1);
for i=1:n_center_vec
    [n, d] = knnsearch(data, C(i,:), 'k', K(i));
    L2 = (bsxfun(@minus, data(n,:), C(i,:)).^2);
    L2 = sum(L2(:));
    sigma(i) = sqrt(1/K(i)*L2);
end

%% Calutate weights
% kernel matrix
k_mat = zeros(n_data, n_center_vec);

for i=1:n_center_vec
   r = bsxfun(@minus, data, C(i,:)).^2;
   r = sum(r,2);
   k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));
end

W = pinv(k_mat'*k_mat)*k_mat'*label;
y = k_mat*W;
%y(y>=0.5) = 1;
%y(y<0.5) = 0;

%% training function and predict function
[W1, sigma1, C1] = RBF_training(data, label, 10);
y1 = RBF_predict(data, W, sigma, C1);
[W2, sigma2, C2] = lazyRBF_training(data, label, 2);
y2 = RBF_predict(data, W2, sigma2, C2);

2.RBF_training.m 

function [ W, sigma, C ] = RBF_training( data, label, n_center_vec )
%RBF_TRAINING Summary of this function goes here
%   Detailed explanation goes here

    % Using kmeans to find cinter vector
    rng(1);
    [idx, C] = kmeans(data, n_center_vec);
    
    % Calulate sigma 
    n_data = size(data,1);
    
    % calculate K
    K = zeros(n_center_vec, 1);
    for i=1:n_center_vec
        K(i) = numel(find(idx == i));
    end
    
    % Using knnsearch to find K nearest neighbor points for each center vector
    % then calucate sigma
    sigma = zeros(n_center_vec, 1);
    for i=1:n_center_vec
        [n] = knnsearch(data, C(i,:), 'k', K(i));
        L2 = (bsxfun(@minus, data(n,:), C(i,:)).^2);
        L2 = sum(L2(:));
        sigma(i) = sqrt(1/K(i)*L2);
    end
    % Calutate weights
    % kernel matrix
    k_mat = zeros(n_data, n_center_vec);
    
    for i=1:n_center_vec
        r = bsxfun(@minus, data, C(i,:)).^2;
        r = sum(r,2);
        k_mat(:,i) = exp((-r.^2)/(2*sigma(i)^2));
    end
    
    W = pinv(k_mat'*k_mat)*k_mat'*label;
end

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值