神经网络学习笔记(五) 径向基函数神经网络

径向基函数神经网络

首先介绍一下网络结构:

这里写图片描述

1.输入层为向量,维度为m,样本个数为n,线性函数为传输函数。

2.隐藏层与输入层全连接,层内无连接,隐藏层神经元个数与样本个数相等,也就是n,传输函数为径向基函数。

3.输出层为线性输出。

理论基础

径向基函数神经网络只要隐含层有足够多的隐含层节点,可以逼近任何非线性函数。
在拟合函数的时候,我们要尽量的经过每一个点,但是当一大堆散乱数据的时候我们如果经过每一个点就造成过拟合,也就是根本无法寻找里面的隐含规律,我们需要一个权值均衡的拟合方式,这时候就要用到最小二乘法。

那么我们对样本点附近的点用什么方法插值呢?
这就是基函数的作用了。通常我们将基函数设为高斯函数,那么高斯函数里面就涉及到两个参数了:sigma和距离d

高斯函数: exp(-d^2/(2*sigma^2));

sigam就是平滑因子,他可以控制高斯函数的平滑度。

sigma=10
这里写图片描述

sigma=5
这里写图片描述

sigma=1
这里写图片描述

sigma=0.1
这里写图片描述

当平滑因子较低时,高斯函数就会尖锐,也就是边缘点的权值会很小,导致过拟合。

那么距离d是什么呢?

距离d就是向量离每一个隐含层中心的距离,通常隐含层的中心对应每个节点,所以每个距离就是节点矩阵自身相对自身每个点的距离。

距离表示着离节点越近,所受该节点的输出影响就越大。

下面就来实现一下这个神经网络

matlab(非API实现)

1.定义一些变量:

data=-9:1:8;
x=-9:.2:8;
label=[129,-32,-118,-138,-125,-97,-55,-23,-4,2,1,-31,-72,-121,-142,-174,-155,-77];

spread=2;

spread就是sigma值 也称平滑度。
data为实际数据。
x为测试数据。
label表示目标输出。

2.看一下输出点

plot(data,label,'o');
hold on;

这里写图片描述

3.拟合这条曲线的权值

dis=dist(data',data); %求距离

gdis=exp(-dis.^2/spread);%gauss

G=[gdis,ones(length(data(1,:)),1)];%广义rbf网络 (加入一个恒为1的隐含层节点)

w=G\label';%最小二乘的矩阵求解

4.测试所拟合的权值

chdis=dist(x',data);

chgdis=exp(-chdis.^2/spread);

chG=[chgdis,ones(length(x(1,:)),1)];

chy=chG*w;

plot(x,chy);

这里写图片描述

如果将spread取0.1

这里写图片描述

节点附近的插值点的全脂会非常小导致曲线过拟合。

如果将spread取50000

这里写图片描述

很多点都已经偏离,曲线过于平滑。导致欠拟合。

如果再加2个0,取5000000

这里写图片描述

这个sigma太大了,直接会导致函数不拟合。

结束语

径向基函数有着bp算法不能达到的拟合效果,在拟合曲线上,径向基函数更快,更准确。
下一节我们会讨论优化的变种径向基函数神经网络—-广义回归神经网络(GRNN)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值