BP神经网络 用matlab库实现
先把代码存在这里,以后用了方便
原理
BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型:
BP神经网络的过程主要分为两个阶段,第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。
计算流程
神经网络的基本组成单元是神经元。神经元的通用模型如图所示,其中常用的激活函数有阈值函数、sigmoid函数和双曲正切函数。
神经元的输出为:
神经网络是将多个神经元按一定规则联结在一起而形成的网络,如图 所示。
从图可以看出,一个神经网络包括输入层、隐含层(中间层)和输出层。输入层神经元个数与输入数据的维数相同,输出层神经元个数与需要拟合的数据个数相同,隐含层神经元个数与层数就需要设计者自己根据一些规则和目标来设定。在深度学习出现之前,隐含层的层数通常为一层,即通常使用的神经网络是3层网络。
激活函数
BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算法的时候会进行进一步的介绍。S函数有单极性S型函数和双极性S型函数两种,单极性S型函数定义如下:f(x)=1/1+e−x
其函数曲线如图所示:
双极性S型函数:f(x)=1−e−x/1+e−x
使用S型激活函数时,输入:
输出:
输出的导数:
导数使用S型激活函数时,BP网络的输出及其导数图形:
根据S激活函数的图形:
net在 -5~0 的时候导数的值为正,且导数的值逐渐增大,说明此时f(x)在逐渐变大 且 变大的速度越来越快
net在 0~5 的时候导数的值为正,且导数的值逐渐减小,说明此时f(x)在逐渐变大 但是 变大的速度越来越慢
对神经网络进行训练,我们应该尽量将net的值尽量控制在收敛比较快的范围内。
梯度下降
梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。
在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。
举一个非常简单的例子,如求函数
的最小值。
利用梯度下降的方法解题步骤如下:
1、求梯度,
2、向梯度相反的方向移动 x,如下
,其中r 为步长。如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。
3、循环迭代步骤2,直到x的值变化到使得f(x)在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的 基本没有变化,则说明此时 已经达到局部最小值了。
4、此时,输出 x,这就是使得函数f(x) 最小时的 的取值 。
Matlab代码实现
clc;clear all;
close all;
x=0:0.1:4;
p=x.^2-2.*x+1+rand(1,size(x,2));
t=p(1:30);
%%%%%%%%%%画图%%%%%%%%%%%%%
figure(1)
plot(x,p,'+',x,x.^2-2.*x+1,':')
%%%%%%%%%%归一化%%%%%%%%%%%%%
pmax=max(p);
pmin=min(p);
p=(p-pmin)./(pmax-pmin);
tmax=max(t);
tmin=min(t);
%%%%%%%%%%创建前向神经网络%%%%%%%%%%%%%
net=newff(minmax(x),[20,1],{'tansig','purelin'});
%%%%%%%%%%%设置训练参数%%%%%%%%%%%%%%
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.epochs=500;
net.trainParam.goal=1e-3;
%%%%%%%%%%%设置BP网络%%%%%%%%%%%%%%
[net,tr]=train(net,x,p);
%%%%%%%%%%对BP网络进行仿真%%%%%%%%%%%
A=sim(net,x);
%%%%%%%%%%%计算仿真误差%%%%%%%%%%%%%
E=p-A;
MSE=mse(E);
%%%%%%%%%%%绘制结果%%%%%%%%%%%%%%
figure(2)
plot(x,A,x,p,'+');
legend('样本点','标准','拟合曲线')
figure(3)
plot(x,x.^2-2.*x+1,':',x,A.*(pmax-pmin)+pmin,'+')
原理转自 链接:https://www.jianshu.com/p/6ab6f53874f7