RBF神经网络设计
- 格式:pptx
- 大小:683.87 KB
- 文档页数:24
摘要当今人类社会已经进入了大数据时代,数据大多呈现出维数高、规模大、结构复杂等特性。
在大数据的研究当中,许多数据如媒体数据、遥感数据、生物医学数据、社交网络数据、金融数据等都是高维数据,尤其是在人类生产生活中,含高维数据的无解析模型或一次候选解的评价计算成本十分巨大的昂贵多目标问题,对其仿真求解势必面临维数灾难。
因此,寻找合适的降维方法处理高维数据已是迫切需求。
神经网络是模拟人脑的结构和功能而建立起来的分布式信息处理系统,面对高维多目标优化等非线性问题,与其他降维方法相比,神经网络具有巨大的优势,这得益于神经网络具有高度非线性、结构复杂、自学习、自适应等特点。
RBF神经网络是一种新颖有效的前馈式神经网络,它具有很强的非线性映射能力,能以任意精度全局逼近一个非线性函数,而且学习速度快。
利用RBF神经网络实现对高维数据的降维预处理,不仅有充分的理论依据,而且更具优越性。
本文在对RBF神经网络算法进行优化研究的基础上,研究了基于数据驱动的特征选择RBF 神经网络降维方法,并将其应用在高维多目标优化决策空间降维预处理及Pareto 优劣性预测中。
为了提高RBF神经网络的学习效率,本文首先对RBF神经网络进行改进研究。
通过自适应调节RBF神经网络的学习率和动量因子,加快了RBF神经网络的收敛速度;同时,利用遗传算法对RBF神经网络的三个参数初始值进行优化设计,提出了一种遗传自适应RBF神经网络算法。
将改进算法分别应用于故障诊断和UCI数据集的分类实验上,验证了改进RBF神经网络算法的有效性和优越性。
针对无解析模型的高维多目标优化问题,提出了一种最大信息系数与最大相关最小冗余相结合的特征选择方法,利用遗传自适应RBF神经网络算法在高维特征空间中选取出了一个低维的特征子集,从而实现对高维特征空间的降维。
通过在UCI数据集上的分类实验,证明了该降维算法在保证较好分类精度的前提下,大大减少了计算成本。
为了降低高维多目标优化的维数灾难,将本文提出的基于最大冗余最小相关的遗传自适应RBF神经网络特征选择算法用于多目标优化中的决策空间降维预处理,进行Pareto优劣性预测并将其嵌入MOEAs算法。
基于RBF神经网络整定的PID控制器设计及仿真摘要目前,因为PID控制具有简单的控制结构,可通过调节比例积分和微分取得基本满意的控制性能,在实际应用中又较易于整定,所以广泛应用于过程控制和运动控制中,尤其在可建立精确模型的确定性控制系统中应用比较多。
然而随着现代工业过程的日益复杂,对控制要求的逐步增高(如稳定性、准确性、快速性等),经典控制理论面临着严重的挑战。
对工业控制领域中非线性系统,采用传统PID 控制不能获得满意的控制效果。
采用基于梯度下降算法优化RBF神经网络,它将神经网络和PID控制技术融为一体,既具有常规PID控制器结构简单、物理意义明确的优点,同时又具有神经网络自学习、自适应的功能。
因此,本文通过对RBF神经网络的结构和计算方法的学习,设计一个基于RBF神经网络整定的PID控制器,构建其模型,进而编写M语言程序。
运用MATLAB软件对所设计的RBF神经网络整定的PID控制算法进行仿真研究。
然后再进一步通过仿真实验数据,研究本控制系统的稳定性,鲁棒性,抗干扰能力等。
关键词:PID;RBF神经网络;参数整定SETTING OF THE PID CONTROLLER BASED ON RBF NEURAL NETWORK DESIGN AND SIMULATIONAbstractAt present, because the PID control has a simple control structure, through adjusting the proportional integral and differential gain basic satisfactory control performance, and is relatively easy to setting in practical application, so widely used in process control and motion control, especially in the accurate model can be built more deterministic control system application. With the increasingly complex of the modern industrial process, however, increased step by step to control requirements (e.g., stability, accuracy and quickness, etc.), classical control theory is faced with severe challenges. Non-linear systems in industrial control field, using the traditional PID control can not obtain satisfactory control effect. Optimized RBF neural network based on gradient descent algorithm, it will be integrated neural network and PID control technology, with a conventional PID controller has simple structure, physical meaning is clear advantages, at the same time with neural network self-learning, adaptive function. Therefore, this article through to the RBF neural network structure and the calculation method of learning, to design a setting of the PID controller based on RBF neural network, constructs its model, and then write M language program. Using the MATLAB software to design the RBF neural network settingof PID control algorithm simulation research. Data and then further through simulation experiment, the control system stability, robustness, anti-interference ability, etc.Keywords: PID; RBF neural network; Parameter setting目录摘要 (Ⅰ)Abstract (Ⅱ)1 绪论 (1)1.1 课题研究背景及意义 (1)1.2神经网络的发展历史 (2)1.3本课题研究的主要内容 (5)2 神经网络 (6)2.1神经网络的基本概念和特点 (6)2.2人工神经网络构成的基本原理 (6)2.3神经网络的结构 (7)2.3.1前馈网络 (7)2.3.2 反馈网络 (7)2.4神经网络的学习方式 (8)2.4.1监督学习(有教师学习) (8)2.4.2非监督学习(无教师学习) (8)2.4.3再励学习(强化学习) (9)2.5 RBF神经网络 (9)2.5.1 RBF神经网络的发展简史 (9)2.5.2 RBF的数学模型 (9)2.5.3被控对象Jacobian信息的辨识算法 (10)2.5.4 RBF神经网络的学习算法 (11)2.6 本章小结 (13)3 PID控制器 (13)3.1 PID控制器简介 (13)3.2 经典PID控制原理 (13)3.3 现有PID控制器参数整定方法 (15)3.4 PID控制的局限 (15)3.5本章小结 (16)4 基于RBF神经网络整定的PID控制器设计 (17)4.1 RBF神经网络的PID整定原理 (17)4.2 神经网络PID控制器的设计 (17)4.3 本章小结 (18)5 仿真分析 (19)5.1 系统的稳定性分析 (19)5.2 系统抗干扰能力分析 (20)5.3 系统鲁棒性分析 (22)5.4 本章小结 (23)结论 (24)参考文献 (25)致谢 (26)附录仿真程序 (27)1 绪论1.1 课题研究背景及意义PID控制器(按比例、积分和微分进行控制的调节器)是最早发展起来的应用经典控制理论的控制策略之一,是工业过程控制中应用最广泛,历史最悠久,生命力最强的控制方式,在目前的工业生产中,90%以上的控制器为PID控制器。
1998年3月重庆大学学报 (自然科学版)V ol.21,№.2第21卷第2期J o urnal o f Ch ongqing U niv er sity(N atura l Science Editio n)M ar.1998基于遗传算法的RBF神经网络设计黄席樾 刘菡萏 石为人(重庆大学自动化系,重庆,400044;第一作者54岁,男,教授) 摘 要 采用了遗传算法自动构造RBF网络,把网络结构的形式作为一个子集选择问题来解决,并提出了新的遗传操作算子来改进遗传算法,加快了收敛速度,提高了算法的实用性。
文中介绍了遗传算法的结构与优化原理,并给出了RBF网络结构的生成方法,用仿真结果证明了本算法的可行性。
关键词 系统辩识/遗传算法;RBF网络;网络结构 中国图书资料分类法分类号 TP273.220 引 言非线性系统的控制是人们面临的一大难题。
神经网络以其逼近非线性函数的能力而被广泛用于解决非线性系统的控制问题。
对于连续系统,由于径向基函数(Radial basis Func-tion,简称RBF)神经网络的可调参数与网络的输出呈线性关系而用作非线性系统的模型,用于非线性连续系统的自动控制系统中。
然而,如何设计RBF神经网络结构,至今没有系统的规则可循。
目前训练RBF网络的方法大致分为两类:1)学习隐层的中心向量和宽度;2)学习隐层到输出层的连接权重。
在这些学习算法中,网络结构或隐层结点数目是基于先验知识预定的[1]。
但是,RBF网络结构是关于隐层结点数、中心向量和连接权的最小化问题。
由于隐层结点数是不连续和不可微的,而传统优化方法需要对象函数的导数信息,当对象函数是多模态时,存在很多局部极小,传统优化方法很可能陷入这些局部极小。
而且,当考虑网络结构和参数时,搜索空间实际上是无限的,对传统优化方法来说在计算上是不可能实现的。
由于这些原因,许多传统优化方法,例如随机法、梯度下降法、仿真退火法等,应用于完成搜索时都存在着很多问题。
Python实现的径向基(RBF)神经⽹络⽰例本⽂实例讲述了Python实现的径向基(RBF)神经⽹络。
分享给⼤家供⼤家参考,具体如下:from numpy import array, append, vstack, transpose, reshape, \dot, true_divide, mean, exp, sqrt, log, \loadtxt, savetxt, zeros, frombufferfrom numpy.linalg import norm, lstsqfrom multiprocessing import Process, Arrayfrom random import samplefrom time import timefrom sys import stdoutfrom ctypes import c_doublefrom h5py import Filedef metrics(a, b):return norm(a - b)def gaussian (x, mu, sigma):return exp(- metrics(mu, x)**2 / (2 * sigma**2))def multiQuadric (x, mu, sigma):return pow(metrics(mu,x)**2 + sigma**2, 0.5)def invMultiQuadric (x, mu, sigma):return pow(metrics(mu,x)**2 + sigma**2, -0.5)def plateSpine (x,mu):r = metrics(mu,x)return (r**2) * log(r)class Rbf:def __init__(self, prefix = 'rbf', workers = 4, extra_neurons = 0, from_files = None):self.prefix = prefixself.workers = workersself.extra_neurons = extra_neurons# Import partial modelif from_files is not None:w_handle = self.w_handle = File(from_files['w'], 'r')mu_handle = self.mu_handle = File(from_files['mu'], 'r')sigma_handle = self.sigma_handle = File(from_files['sigma'], 'r')self.w = w_handle['w']self.mu = mu_handle['mu']self.sigmas = sigma_handle['sigmas']self.neurons = self.sigmas.shape[0]def _calculate_error(self, y):self.error = mean(abs(self.os - y))self.relative_error = true_divide(self.error, mean(y))def _generate_mu(self, x):n = self.nextra_neurons = self.extra_neurons# TODO: Make reusablemu_clusters = loadtxt('clusters100.txt', delimiter='\t')mu_indices = sample(range(n), extra_neurons)mu_new = x[mu_indices, :]mu = vstack((mu_clusters, mu_new))return mudef _calculate_sigmas(self):neurons = self.neuronsmu = self.musigmas = zeros((neurons, ))for i in xrange(neurons):dists = [0 for _ in xrange(neurons)]for j in xrange(neurons):if i != j:dists[j] = metrics(mu[i], mu[j])sigmas[i] = mean(dists)* 2# max(dists) / sqrt(neurons * 2))return sigmasdef _calculate_phi(self, x):C = self.workersneurons = self.neuronsmu = self.musigmas = self.sigmasphi = self.phi = Nonen = self.ndef heavy_lifting(c, phi):s = jobs[c][1] - jobs[c][0]for k, i in enumerate(xrange(jobs[c][0], jobs[c][1])):for j in xrange(neurons):# phi[i, j] = metrics(x[i,:], mu[j])**3)# phi[i, j] = plateSpine(x[i,:], mu[j]))# phi[i, j] = invMultiQuadric(x[i,:], mu[j], sigmas[j]))phi[i, j] = multiQuadric(x[i,:], mu[j], sigmas[j])# phi[i, j] = gaussian(x[i,:], mu[j], sigmas[j]))if k % 1000 == 0:percent = true_divide(k, s)*100print(c, ': {:2.2f}%'.format(percent))print(c, ': Done')# distributing the work between 4 workersshared_array = Array(c_double, n * neurons)phi = frombuffer(shared_array.get_obj())phi = phi.reshape((n, neurons))jobs = []workers = []p = n / Cm = n % Cfor c in range(C):jobs.append((c*p, (c+1)*p + (m if c == C-1 else 0)))worker = Process(target = heavy_lifting, args = (c, phi))workers.append(worker)worker.start()for worker in workers:worker.join()return phidef _do_algebra(self, y):phi = self.phiw = lstsq(phi, y)[0]os = dot(w, transpose(phi))return w, os# Saving to HDF5os_h5 = os_handle.create_dataset('os', data = os)def train(self, x, y):self.n = x.shape[0]## Initialize HDF5 cachesprefix = self.prefixpostfix = str(self.n) + '-' + str(self.extra_neurons) + '.hdf5'name_template = prefix + '-{}-' + postfixphi_handle = self.phi_handle = File(name_template.format('phi'), 'w')os_handle = self.w_handle = File(name_template.format('os'), 'w')w_handle = self.w_handle = File(name_template.format('w'), 'w')mu_handle = self.mu_handle = File(name_template.format('mu'), 'w')sigma_handle = self.sigma_handle = File(name_template.format('sigma'), 'w') ## Mu generationmu = self.mu = self._generate_mu(x)self.neurons = mu.shape[0]print('({} neurons)'.format(self.neurons))# Save to HDF5mu_h5 = mu_handle.create_dataset('mu', data = mu)## Sigma calculationprint('Calculating Sigma...')sigmas = self.sigmas = self._calculate_sigmas()# Save to HDF5sigmas_h5 = sigma_handle.create_dataset('sigmas', data = sigmas)print('Done')## Phi calculationprint('Calculating Phi...')phi = self.phi = self._calculate_phi(x)print('Done')# Saving to HDF5print('Serializing...')phi_h5 = phi_handle.create_dataset('phi', data = phi)del phiself.phi = phi_h5print('Done')## Algebraprint('Doing final algebra...')w, os = self.w, _ = self._do_algebra(y)# Saving to HDF5w_h5 = w_handle.create_dataset('w', data = w)os_h5 = os_handle.create_dataset('os', data = os)## Calculate errorself._calculate_error(y)print('Done')def predict(self, test_data):mu = self.mu = self.mu.valuesigmas = self.sigmas = self.sigmas.valuew = self.w = self.w.valueprint('Calculating phi for test data...')phi = self._calculate_phi(test_data)os = dot(w, transpose(phi))savetxt('iok3834.txt', os, delimiter='\n')return os@propertydef summary(self):return '\n'.join( \['-----------------','Training set size: {}'.format(self.n),'Hidden layer size: {}'.format(self.neurons),'-----------------','Absolute error : {:02.2f}'.format(self.error),'Relative error : {:02.2f}%'.format(self.relative_error * 100)])def predict(test_data):mu = File('rbf-mu-212243-2400.hdf5', 'r')['mu'].valuesigmas = File('rbf-sigma-212243-2400.hdf5', 'r')['sigmas'].valuew = File('rbf-w-212243-2400.hdf5', 'r')['w'].valuen = test_data.shape[0]neur = mu.shape[0]mu = transpose(mu)mu.reshape((n, neur))phi = zeros((n, neur))for i in range(n):for j in range(neur):phi[i, j] = multiQuadric(test_data[i,:], mu[j], sigmas[j])os = dot(w, transpose(phi))savetxt('iok3834.txt', os, delimiter='\n')return os更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
RBF(径向基)神经⽹络 只要模型是⼀层⼀层的,并使⽤AD/BP算法,就能称作 BP神经⽹络。
RBF 神经⽹络是其中⼀个特例。
本⽂主要包括以下内容:什么是径向基函数RBF神经⽹络RBF神经⽹络的学习问题RBF神经⽹络与BP神经⽹络的区别RBF神经⽹络与SVM的区别为什么⾼斯核函数就是映射到⾼维区间前馈⽹络、递归⽹络和反馈⽹络完全内插法⼀、什么是径向基函数 1985年,Powell提出了多变量插值的径向基函数(RBF)⽅法。
径向基函数是⼀个取值仅仅依赖于离原点距离的实值函数,也就是Φ(x)=Φ(‖x‖),或者还可以是到任意⼀点c的距离,c点称为中⼼点,也就是Φ(x,c)=Φ(‖x-c‖)。
任意⼀个满⾜Φ(x)=Φ(‖x‖)特性的函数Φ都叫做径向基函数,标准的⼀般使⽤欧⽒距离(也叫做欧式径向基函数),尽管其他距离函数也是可以的。
最常⽤的径向基函数是⾼斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中x_c为核函数中⼼,σ为函数的宽度参数 , 控制了函数的径向作⽤范围。
⼆、RBF神经⽹络 RBF神将⽹络是⼀种三层神经⽹络,其包括输⼊层、隐层、输出层。
从输⼊空间到隐层空间的变换是⾮线性的,⽽从隐层空间到输出层空间变换是线性的。
流图如下: RBF⽹络的基本思想是:⽤RBF作为隐单元的“基”构成隐含层空间,这样就可以将输⼊⽮量直接映射到隐空间,⽽不需要通过权连接。
当RBF的中⼼点确定以后,这种映射关系也就确定了。
⽽隐含层空间到输出空间的映射是线性的,即⽹络的输出是隐单元输出的线性加权和,此处的权即为⽹络可调参数。
其中,隐含层的作⽤是把向量从低维度的p映射到⾼维度的h,这样低维度线性不可分的情况到⾼维度就可以变得线性可分了,主要就是核函数的思想。
这样,⽹络由输⼊到输出的映射是⾮线性的,⽽⽹络输出对可调参数⽽⾔却⼜是线性的。
⽹络的权就可由线性⽅程组直接解出,从⽽⼤⼤加快学习速度并避免局部极⼩问题。