《matlab径向基神经网络》底层实现原理(上)

《老饼讲解神经网络》icon-default.png?t=N7T8https://www.bbbdata.com/nn


目录

一、思想

(一) 问题

(二) RBF的解决思路

二、模型的数学表达式

(一) 数学表达式

(二) 例子说明

三、统一径向基神经网络与一般神经网络的格式

(一) 网络拓扑图

(二) 网络表达式

四、径向基基本类:精确径向基网络

(一)精确径向基原理

(二)精确径向基代码实现


径向基神经网络(RBF)常见的有精确径向基,径向基,概率神经网络,广义回归神经网络.网上已经有非常多文章讲述这几种网络。

本文主要讲述径向基神经网络的思想,数学表达式,参数意义,和讲述matlab里的径向基是如何实现的(不是工具箱的使用方法,是自写代码重现工具箱的效果).

开始掌握径向基神经网络的原理吧!


一、思想

(一) 问题

有一组原始数据点:

x123456
y(x*x/6)0.1670.6671.50.6674.1676

现在要找到一条光滑曲线拟合这6个数据点。

(二) RBF的解决思路

一图说明RBF的解决思路!:

从图中可以看到,RBF神经网络解决该问题的思想就是,以6个原始数据点(图中蓝色的点)为中心,生成了6个钟型函数(rbf)(实际只需要其中5个),6个钟型函数叠加后就是一条我们所需要的,能够光滑地拟合原始数据点的光滑曲线(绿色)。

参透此图,即参透了RBF的核心思想。


我们探究RBF的数学表达式,进一步更具体更形象深入理解径向基神经网络原理.

二、模型的数学表达式

(一) 数学表达式

径向基神经网的一般数学表达式为:

上式即多个钟形函数的叠加,再加上阈值b。

(二) 例子说明

例子:2个输入,1个输出,3个训练样本的径向基神经网络可写成三个钟型函数的叠加:

其中, 
a:一个影响钟型函数肥瘦程度的常数.
 x_i^{(j)}:第(j)个样本中第i个变量的值.
w和b:分别是待解的权重和阈值.


三、统一径向基神经网络与一般神经网络的格式

上面的格式是为了直观,很难让我们将它与神经网络联想到一起。下面我们将上式转为与一般神经网络统一的格式

(一) 网络拓扑图

把每个钟型函数看作一个隐节点,那么上例的网络拓扑图如下(只有3个样本,所以隐节点也是3个,隐节点个数与样本个数一样):

(二) 网络表达式

对应的,数学表达式写成一般神经网络结构的形式则如下:

参数说明
w和b的上标代表它属于第几层神经元的参数。

例如:
w_{31}^{(2)} :第2层(隐层)的第3个神经元与下一层(输出层)的第1个神经元的权值。
b_{3}^{(1)}:隐层第3个节点的阈值。

注意:输入层到隐层的权值和隐层的阈值的计算方法不再与BP神经网络相同,权值和输入使用欧氏距离函数dist计算,隐层的阈值再与它们相乘。


径向基神经网络有几种,精确径向基神经网络、径向基神经网络、广义回归神经网络、概率神经网络等。
这里我们先介绍精确径向基神经网络,它是最简单最基本的径向基神经网络。在下张文章再介绍其它神经网络。

四、径向基基本类:精确径向基网络

(一)精确径向基原理

现在问题来了,式(1)中的w和b怎么求?

精确地求出径向基的待解参数,就是《精确径向基》模型的主要特点

如何求得一组精确的w,b,使拟合误差为0?

很简单,因为当输入x知道时,在式中形如 e^{-a^2\left ( (x_1-x_1^{(1)})^2+(x_2-x_2^{(1)})^2 \right ) } 的部分都可以计算成一个常数,所以上式就成了一个线性方程。

假设现在有3个样本,那么就会有3个这样的线性方程组成方程组:

 只要解这个方程组就可以得到w和b的值了。因为未知数个数大于方程的个数,肯定能求得一组w满足上式。

可知精确径向基网络在训练数据上的预测误差会为0,正因如此,称它为"精确"径向基,它是最基本的径向基网络。

(二)精确径向基代码实现

代码主要重现matlab工具箱的精确径向基(newrbe)的实现逻辑,运行结果显示,自与代码实现精确径向基与调包结果一致

%主流程:通过自写精确径向基重现工具箱的newrbe,并与工具箱调用结果作比较
function testNewrbe()
    %本代码来自《老饼讲解神经网络》
    %本代码模仿matlab神经网络工具箱的newrbe神经网络,
    %代码主旨用于教学,供大家学习理解newrbe神经网络原理
    %%----------生成训练数据-------------------
    x1 = 1:0.4:10;
    x2 = x1;
    X = [ x1; x2];
    Y = sin (X(1, :)) + X( 2, :);
    spread = 2;  %扩展系数
    test_x = [2 3]'; %测试数据
    
    %--------使用自写代码建立精确径向基-------------
    [W1,B1,W2,B2] = myNewrbe( X,Y,spread );
    simY = mySim(W1,B1,W2,B2,test_x)    %模型预测
    
    %---使用matlab神经网络工具箱求xx的预测值-----------
    net = newrbe(X, Y, spread);
    simYByBox = sim( net, test_x)
    
    %-----------------------------------------
    testResult = isequal( simY, simYByBox);
    disp(['testResult = ',num2str(testResult)]);
end

%模型训练:精确径向基rbe
function [W1,B1,W2,B2] = myNewrbe(X,Y,spread)
    Q = size(X,2); %样本个数
    %输入层到隐层的权值和阈值
    W1 = X';
    B1 = ones( Q, 1)*sqrt( -log(.5))/spread;
    %求隐节点的值.
    h=zeros( Q, Q);
    for i = 1: Q
        for j = 1 : Q
            %计算第i个样本,第j个隐节点的值
            h(i,j) = B1(j)*sqrt(sum((X(:,i)' -W1(j,:)).^2));
        end
    end

    %hRbf是每个节点经过径向基传递函数变换后的值
    hRbf = exp( -h.*h) ;
    %利用隐节点的值和输出的值,求解隐层到输出层的权值和阈值
    hRbf = [ hRbf; ones( 1,size( hRbf,2))];
    WB  = Y /hRbf;
    W2 = WB( :, 1:end-1);
    B2 = WB( :, end);
end

%模型预测:精确径向基rbe
function y = mySim(W1,B1,W2,B2,xx)
    hNode = length(B1); %样本个数
    %求隐节点
    h_xx = zeros(hNode,1);
    for i = 1 : hNode
        h_xx(i) = B1(i) * sqrt(sum((xx' - W1(i,:)).^2));
    end
    hRbf_xx = exp( -h_xx .* h_xx );
    %网络的输出
    y = W2 * hRbf_xx + B2;
end

本文先介绍到这,下篇文章继续介绍径向基神经网络、广义回归神经网络、概率神经网络的原理和参数设置的技巧。


相关文章

​《BP神经网络梯度推导》

​​​​​​《BP神经网络提取的数学表达式》

《一个BP的完整建模流程》

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
径向神经网络是一种使用径向函数作为激活函数的人工神经网络。它在机器学习算法中有着广泛的应用,例如时间序列预测、数据分类以及回归预测等。在MATLAB中,可以使用"newrbe"函数来实现径向神经网络的创建。 该函数创建一个两层的神经网络。第一层是径向神经元,使用"dist"函数来计算加权输入,使用"netprod"函数计算网络输入。第二层是线性神经元,使用"dotprod"函数计算加权输入,使用"netsum"函数计算网络输入。两层都具有阈值。 要使用"newrbe"函数,需要提供2或3个输入参数。其中,输入矩阵P是一个R行Q列的矩阵,代表R个输入变量和Q个样本。目标输出矩阵T是一个S行Q列的矩阵,代表S个输出变量和Q个样本。还可以提供一个可选参数"spread",它是径向函数的扩展系数,默认值为1.0。 总结起来,MATLAB中的"newrbe"函数可以用于创建一个精确的径向神经网络,并且非常快速地在样本上实现零错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [径向神经网络(RBF)回归预测MATLAB实现超详细](https://blog.csdn.net/rouse_xing/article/details/129462554)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [精确径向(matlab工具箱)](https://blog.csdn.net/vili_sky/article/details/68966016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老饼讲解-BP神经网络

请老饼喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值