《老饼讲解神经网络》https://www.bbbdata.com/nn
目录
径向基神经网络(RBF)常见的有精确径向基,径向基,概率神经网络,广义回归神经网络.网上已经有非常多文章讲述这几种网络。
本文主要讲述径向基神经网络的思想,数学表达式,参数意义,和讲述matlab里的径向基是如何实现的(不是工具箱的使用方法,是自写代码重现工具箱的效果).
开始掌握径向基神经网络的原理吧!
一、思想
(一) 问题
有一组原始数据点:
x | 1 | 2 | 3 | 4 | 5 | 6 |
y(x*x/6) | 0.167 | 0.667 | 1.5 | 0.667 | 4.167 | 6 |
现在要找到一条光滑曲线拟合这6个数据点。
(二) RBF的解决思路
一图说明RBF的解决思路!:
从图中可以看到,RBF神经网络解决该问题的思想就是,以6个原始数据点(图中蓝色的点)为中心,生成了6个钟型函数(rbf)(实际只需要其中5个),6个钟型函数叠加后就是一条我们所需要的,能够光滑地拟合原始数据点的光滑曲线(绿色)。
参透此图,即参透了RBF的核心思想。
我们探究RBF的数学表达式,进一步更具体更形象深入理解径向基神经网络原理.
二、模型的数学表达式
(一) 数学表达式
径向基神经网的一般数学表达式为:
上式即多个钟形函数的叠加,再加上阈值b。
(二) 例子说明
例子:2个输入,1个输出,3个训练样本的径向基神经网络可写成三个钟型函数的叠加:
其中,
a:一个影响钟型函数肥瘦程度的常数.
:第(j)个样本中第i个变量的值.
w和b:分别是待解的权重和阈值.
三、统一径向基神经网络与一般神经网络的格式
上面的格式是为了直观,很难让我们将它与神经网络联想到一起。下面我们将上式转为与一般神经网络统一的格式 。
(一) 网络拓扑图
把每个钟型函数看作一个隐节点,那么上例的网络拓扑图如下(只有3个样本,所以隐节点也是3个,隐节点个数与样本个数一样):
(二) 网络表达式
对应的,数学表达式写成一般神经网络结构的形式则如下:
参数说明:
w和b的上标代表它属于第几层神经元的参数。例如:
:第2层(隐层)的第3个神经元与下一层(输出层)的第1个神经元的权值。
:隐层第3个节点的阈值。
注意:输入层到隐层的权值和隐层的阈值的计算方法不再与BP神经网络相同,权值和输入使用欧氏距离函数dist计算,隐层的阈值再与它们相乘。
径向基神经网络有几种,精确径向基神经网络、径向基神经网络、广义回归神经网络、概率神经网络等。
这里我们先介绍精确径向基神经网络,它是最简单最基本的径向基神经网络。在下张文章再介绍其它神经网络。
四、径向基基本类:精确径向基网络
(一)精确径向基原理
现在问题来了,式(1)中的w和b怎么求?
精确地求出径向基的待解参数,就是《精确径向基》模型的主要特点。
如何求得一组精确的w,b,使拟合误差为0?
很简单,因为当输入x知道时,在式中形如
的部分都可以计算成一个常数,所以上式就成了一个线性方程。
假设现在有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
本文先介绍到这,下篇文章继续介绍径向基神经网络、广义回归神经网络、概率神经网络的原理和参数设置的技巧。
相关文章