目录

一. 问题与背景

二、例子

三、常用的实际问题


原创文章,转载请说明来自《老饼讲解-BP神经网络》:www.bbbdata.com

BP神经网络是一个常用的算法,它广泛应用于数值预测,模式识别,数据压缩,曲线拟合等应用,BP神经网络有什么优势和特点,为什么要使用BP神经网络呢

本文讲述BP神经网络一般用来解决什么什么,并列举常用的例子。

一、问题与背景


问题:已知y和X存在某种关系(X和y可以是一个向量),我们希望得到y和X的数学关系,这样在知道X的值,可以求得y的值。

第一种场景

我们完全知道X和y的内部机制,那么我们可以根据X和y的逻辑关系推导出X和y的数学关系。例如物体自由落体运动时,位置与时间的关系。

第二种场景

我们只知道X和y的部分逻辑关系,得到的数学表达式带有参数,那么,我们可以通过采集历史数据,用最小误差的方法,去估算参数。例如,根据胡克定律,我们知道力和变形量成线性关系,F=-kx,k待定,可以采集数据,估算出k。

第三种场景
完全不知道X和y的逻辑关系。这时的解决方案是,采集到大量历史数据样,再找一个函数,通过调整函数的参数,使函数与历史数据吻合。再用测试数据,检验该函数在新样本中是否可用。

通过对比,我们可以知道,

第一种场景得到的数学关系是非常可靠的,

第二种其次,

第三种就纯属黑箱拟合了。

但在X和y的内部逻辑完全不知道,或过于复杂时,第三种反而是一种唯一可用的方案。


而BP,就是解决第三种场景的众多方法中极为出采的方法之一。


二、例子


我们对系统采集了一些历史样本,

投放到一个3个隐神经元的网络(实际就是一个函数F(X))中训练,

在历史数据训练好后,就可以投入生产中进行预测,

例如,输入【0.5,0.5】,网络就输出0.7636的预测值。

具体实现在《一个简单的BP案例DEMO

matlab代码如下:

x1 = [-3,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,0.9,1.2,1.5,1.8];% x1:x1 = -3:0.3:2;
x2 = [-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,-2.2204,0.2,0.4,0.6,0.8,1,1.2]; % x2:x2 = -2:0.2:1.2;
y  = [0.6589,0.2206,-0.1635,-0.4712,-0.6858,-0.7975,-0.8040,...
          -0.7113,-0.5326,-0.2875 ,0,0.3035,0.5966,0.8553,1.0600,1.1975,1.2618];    % y: y = sin(x1)+0.2*x2.*x2;

inputData  = [x1;x2];      % 将x1,x2作为输入数据
outputData = y;            % 将y作为输出数据
setdemorandstream(88888);%指定随机种子,这样每次训练出来的网络都一样。

%使用用输入输出数据(inputData、outputData)建立网络,
%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。

net = newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');

%设置一些常用参数
net.trainparam.goal = 0.0001;               % 训练目标:均方误差低于0.0001
net.trainparam.show = 400;                  % 每训练400次展示一次结果
net.trainparam.epochs = 15000;              % 最大训练次数:15000.
[net,tr] = train(net,inputData,outputData); % 调用matlab神经网络工具箱自带的train函数训练网络

simout = sim(net,inputData);                % 调用matlab神经网络工具箱自带的sim函数得到网络的预测值
figure;                                     % 新建画图窗口窗口
t=1:length(simout);
plot(t,y,t,simout,'r')                      % 画图,对比原来的y和网络预测的y

运行后得到原曲线与BP神经网络拟合的曲线:



 事实上,很多问题都可以归结为曲线拟合,

BP神经网络就可以很好地解决这类问题。


三、常用的实际问题



此外,BP在实际中,还常常用于,数值预测、模式识别、曲线拟合、数据压缩(特征提取) 等等。这些都是BP神经网络常用于解决的问题。

数值预测:这是BP神经网络最常用的问题,因为很多问题本身就可以归结为数值的预测。

模式识别:模式识别与数值预测的区别在于,数值是连续的,而模式识别的输出是【0 1 0】这样的one-hot格式。本质上与数值预测没有太大的区别。

数据压缩:数据压缩是BP神经网络的一种巧用,它用数据本身去拟合数据自己,而中间的隐层,就成为了压缩的数据。因为数据先映射到隐层,隐层节点虽然比输入节点少,但隐层又能还原出自身,说明隐层已经包含了数据的信息。

曲线拟合:曲线拟合也是BP神经网络数值预测的一种,只是它的目的用于拟合曲线。

BP神经网络是可以解决很多问题的,比较万能,但我们不会所有问题都会使用BP神经网络。


在我们在知道X,Y之间的一些特性的条件下,我们更愿意充分利用这些特性,建立其他模型,这样更具解释性。


相关文章

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

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

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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐