Press "Enter" to skip to content

神经网络(ANN)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

算法介绍

 

人工神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够 模拟生物神经神经系统 对真实世界物体所作出的交互反应。在实际应用中,80%-90%的人工神经网络模型是采用 误差反转算法 或其变形形式的网络模型。

 

一个神经网络的典型结构:

 

1.拟合 ->预测。

 

2.分离 -> 聚类分析。

 

神经网络模型和网络结构

 

1.神经元

 

大脑可视作为1000多亿神经元组成的神经网络。

 

下面为神经元的工作过程:

 

2.神经元信息传递

 

神经元的信息传递和处理是一种电化学活动,树突由于电化学作用接受外界的刺激;通过胞体内的活动体现为轴突电位,当 轴突电位 达到一 定的值 则形成神经脉冲或动作电位;再通过轴突末梢传递给其他的神经元。从控制论的观点来看,这一过程可以看作一个 多输入单输出 非线性系统的过程。

 

3.人工神经元的模型

 

x1-xn是从其他神经元传来的 输入信号 。

 

wij表示从神经元j到神经元i的连接权值。

 

另一个自变量表示 阈值 ,或称为 偏置 。

 

神经元的输入与输出的关系:

 

4.激活函数

 

激活函数是对净激活函数与输出进行映射的函数。一些常用的激活函数,由于输入数据与期望值之间可能并不是量级一样,所以需要激活。

 

S形和双极S形函数图像:

 

S形和双极S形函数的导函数均为连续函数。

 

5.网络模型

 

根据网络中神经元的互联方式的不同,网络模型分为:

 

前馈神经网络:只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到达到输出层,层间没有向后的输出信号。

反馈神经网络 :从输出到输入具有反馈连接的神经网络,其结构要比前馈网络复杂的多。

自组织网络:通过自动寻找样本中的内在规律和本质属性,自组织,自适应地改变网络参数与结构。

 

6.工作状态

 

神经网络的工作状态分为 学习 和 工作 状态。

 

学习:利用学习算法来调整神经元间的连接权重,使得网络输出更符合实际。

 

工作:神经元间的连接权值不变,可以作为分类器或者预测数据之用。

 

7.学习方式

 

学习方式分为 有导师学习(监督学习) 和 无导师学习(非监督学习) 。

 

有导师学习:将一组训练集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。(如:BP算法)

 

无导师学习:抽取样本集合中蕴含的统计特性,并以神经元之间的联接权的形式存于网络中。(如:Hebb学习率)

 

建立和应用神经网络的步骤

 

(1)网络结构的确定

 

包括网络的拓扑结构和每个神经元相应函数的选取。

 

(2)权重和阈值的确定

 

通过学习得到,为有指导的学习,也就是利用已知的一组正确的输入、输出数据,调整权和阈值使得网络输出与理想输出偏差尽量小。

 

(3)工作阶段

 

用带有确定权值和阈值的神经网络解决实际问题的过程,也叫做 模拟 。

 

采用BP学习算法的前馈神经网络称为BP神经网络。

 

BP算法基本原理:利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层反传下去,就获得了所有其他各层的误差估计。

 

预测类代码

 

% 读取数据
input = rand(2,200);
output = input(1,:) .* input(2, :);
% 训练集,测试集
input_train = input(:, 1:150);
output_train = output(1:150);
input_test = input(:, 151:end);
output_test = output(151:end);
% 数据归一化
[inputn, inputps] = mapminmax(input_train, 0, 1);
[outputn, outputps] = mapminmax(output_train);
inputn_test = mapminmax('apply', input_test, inputps);
% 构建BP神经网络
net = newff(inputn, outputn, [8, 7]) % 输入层,输出层,隐含层神经元个数
% 网络参数
net.trainParam.epochs = 1000; % 训练次数
net.trainParam.lr = 0.01; % 学习速率
net.trainParam.goal = 0.000001 % 训练目标最小误差
% BP神经网络训练
net = train(net, inputn, outputn);
% BP神经网络测试
an = sim(net, inputn_test); % 用训练好的模型进行仿真
test_simu = mapminmax('reverse', an, outputps); % 预测结果反归一化
error = test_simu - output_test; % 预测值和真实值的误差
% 真实值与预测值误差比较
figure(1)
plot(output_test, 'bo-')
hold on
plot(test_simu, 'r*-')
hold on
plot(error, 'square', 'MarkerFaceColor', 'b')
legend('期望值', '预测值', '误差值')
xlabel('数据组数'),ylabel('值'),title('测试集预测值和期望值的误差对比'),set(gca,'fontsize',12)%计算误差
[~,len] = size(output_test);
MAE1 = sum(abs(error ./ output_test)) / len;
MSE1 = error * error' / len;
RMSE1 = MSE1 ^ (1/2);
disp(['---------------误差计算---------------'])
disp(['平均绝对误差MAE为:', num2str(MAE1)])
disp(['均方误差MSE为:', num2str(MSE1)])
disp(['均方根误差RMSE为:', num2str(RMSE1)])

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注