Matlab神经网络
一、数据预处理
在训练神经网络前一般需要对数据进行预处理一种重要的预处理手段是归一化处理 。
1、什么是归一化
数据归一化就是将数据映射到[0,1]或[1,1]区间或更小的区间比如[0.1,0.9]。
2、为什么要归一化处理
(1) 输入数据的单位不一样 有些数据的范围可能特别大 导致的结果是神经网络收敛慢 、 训练时间长 。
(2) 数据范围大的输入在模式分类中的作用可能会偏大 而数据范围小的输入作用就可能会偏小 。
(3) 由于神经网络输出层的激活函数的值域是有限制的 因此需要将网络训练
的目标数据映射到激活函数的值域 。例如神经网络的输出层若采用 S 形激活函数由于S形函数的值域限制在(0,1)也就是说神经网络的输出只能限制在(0,1)所以训练数据的输出就要归一化到(0,1)区间 。
(4) S形激活函数在(0,1)区间以外区域很平缓区分度太小 。例如S形函数 f(X)在参数a=1时f(100)与f(5)只相差0.0067。
3、归一化算法
一种简单而快速的归一化算法是线性转换算法。 线性转换算法常见有两种形式:
(1)
y
=
(
x
−
m
i
n
)
/
(
m
a
x
−
m
i
n
)
y=(x-min)/(max-min)
y=(x−min)/(max−min)
其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y。上式将数据归一化到区间(0,1),当激活函数采用 S 形函数时,值域为(0,1)时这条式子适用 。
(2)
y
=
2
(
x
−
m
i
n
)
/
(
m
a
x
−
m
i
n
)
−
1
y =2(x-min)/(max-min)-1
y=2(x−min)/(max−min)−1
这条公式将数据归一化到(-1,1)区间。当激活函数采用双极S形函数值域为(-1,1)时.这条式子适用 。
二、BP 神经网络的训练过程
(1) 初始化网络的突触权值和阈值矩阵;
(2) 训练样本的呈现;
(3) 前向传播计算;
(4) 误差反向传播计算并更新权值;
(5) 迭代:用新的样本进行步骤 3 和 4 直至满足停止准则 。
三、BP 神经网络的测试过程
(1) 数据分为训练数据和测试数据 根据训练数据训练模型 再根据测试数据验证模型训练的正确性 。
(2) 将测试数据输入模型,得到理论测试输出和实际输出,对比后即可确定
模型预测的正确率 。
流程图如下:
四、Matlab代码程序
1、 数据预处理
Matlab中归一化处理数据可以采用 premnmx、postmnmx、tramnmx这3个函数 。
(1) premnmx
[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t)
参数:
pn:p矩阵按行归一化后的矩阵
minp,maxp:p 矩阵每一行的最小值、最大值
tn:t矩阵按行归一化后的矩阵
mint,maxt:t 矩阵每一行的最小值最大值
作用: 将矩阵p,t归一化到[-1,1],主要用于归一化处理训练数据集。
(2) tramnmx
[pn] = tramnmx(p,minp,maxp)
参数:
minp,maxp:premnmx函数计算的矩阵的最小,最大值
pn:归一化后的矩阵
作用: 主要用于归一化处理待分类的输入数据。
(3) postmnmx
[p,t] = postmnmx(pn,minp,maxp,tn,mint,maxt)
参数:
minp、maxp:premnmx函数计算的p矩阵每行的最小值、最大值。
mint、maxt:premnmx函数计算的t矩阵每行的最小值、最大值。
作用: 将矩阵pn、tn映射回归一化处理前的范围。postmnmx函数主要用于将神经网络的输出结果映射回归一化前的数据范围 。
2、 神经网络的训练和测试
使用Matlab建立前馈神经网络主要会使用到下面3个函数:
newff:前馈网络创建函数
train:训练一个神经网络
sim:使用网络进行仿真
(1) newff 函数
newff函数参数列表有很多的可选参数,具体可以参考Matlab的帮助文档这里介绍newff函数的一种简单的形式。
net = newff(A, B,B,{C}, 'trainFun')
参数:
A:一个 n × 2 的矩阵 第 i 行元素为输入信号 xi 的最小值和最大值;
B:一个 k 维行向量 其元素为网络中各层节点数;
C:一个 k 维字符串行向量 每一分量为对应层神经元的激活函数;
trainFun:为学习规则采用的训练算法 。
常用的激活函数
常用的激活函数有:
a)线性函数 (Linear transfer function):f(x)=x 该函数的字符串为purelin 。
b)对数 S 形转移函数(Logarithmic sigmoid transfer function):该函数的字符串为logsig 。
c)双曲正切S形函数 (Hyperbolic tangent sigmoid transfer function):也就是上面所提到的双极S形函数 。该函数的字符串为tansig 。
Matlab的安装目录下的toolbox\nnet\nnet\nntransfer子目录中有所有激活函数的定义说明 。
常见的训练函数
traingd:梯度下降 BP 训练函数 (Gradient descent backpropagation)
traingdx:梯度下降自适应学习率训练函数
网络配置参数
一些重要的网络配置参数如下:
net.trainparam.goal :神经网络训练的目标误差
net.trainparam.show 显示中间结果的周期
net.trainparam.epochs :最大迭代次数
net.trainParam.lr:学习率
(2) train函数:网络训练学习函数
[net, tr, Y1, E] = train( net, X, Y )
参数:
X:网络实际输入
Y:网络应有输出
tr:训练跟踪信息
Y1 :网络实际输出
E:误差矩阵
(3) sim 函数
Y=sim( net,X )
参数:
net:网络
X:输入给网络的K × N 矩阵 其中 K 为网络输入个数 N 为数据样本数
Y:输出矩阵 Q × N 其中 Q 为网络输出个数
五、BP神经网络的优缺点
优点:
1、非线性映射能力: BP 神经网络实质上实现了一个从输入到输出的映射功能数学理论证明三层的神经网络就能够以任意精度逼近任何非线性连续函数 。这使得其特别适合于求解内部机制复杂的问题 即 BP 神经网络具有较强的非线性映射能力 。
2、自学习和自适应能力: BP 神经网络在训练时 能够通过学习自动提取输出 、输出数据间的 合理规则 并自适应的将学习内容记忆于网络的权值中 。 即BP 神经网络具有高度自学习和自适应的能力 。
3、泛化能力:所谓泛化能力是指在设计模式分类器时 即要考虑网络在保证对所需分类对象进行正确分类 还要关心网络在经过训练后 能否对未见过的模式或有噪声污染的模式 进行正确的分类 。 也即 BP 神经网络具有将学习成果应用于新知识的能力 。
4、容错能力: BP 神经网络在其局部的或者部分的神经元受到破坏后对全局的训练结果不会造成很大的影响 也就是说即使系统在受到局部损伤时还是可以正常工作的 。 即 BP 神经网络具有一定的容错能力 。
缺点:
1、 局部极小化问题:从数学角度看 传统的 BP 神经网络为一种局部搜索的优化方法 它要解决的是一个复杂非线性化问题 网络的权值是通过沿局部改善的方向逐渐进行调整的这样会使算法陷入局部极值 权值收敛到局部极小点 从而导致网络训练失败 。 加上 BP 神经网络对初始网络权重非常敏感 以不同的权重初始化网络 其往往会收敛于不同的局部极小这也是很多学者每次训练得到不同结果的根本原因 。
2、 BP 神经网络算法的收敛速度慢:由于 BP 神经网络算法本质上为梯度下降法 它所要优化的目标函数是非常复杂的 因此 必然会出现“锯齿形现象”这使得 BP 算法低效;又由于优化的目标函数很复杂 它必然会在神经元输出接近 0 或 1 的情况下 出现一些平坦区 在这些区域内 权值误差改变很小 使训练过程几乎停顿; BP 神经网络模型中 为了使网络执行 BP算法 不能使用传统的一维搜索法求每次迭代的步长 而必须把步长的更新规则预先赋予网络 这种方法也会引起算法低效 。 以上种种 导致了 BP 神经网络算法收敛速度慢的现象 。
3、 BP 神经网络结构选择不一: BP 神经网络结构的选择至今尚无一种统一而完整的理论指导 一般只能由经验选定 。 网络结构选择过大 训练中效率不高 可能出现过拟合现象 造成网络性能低 容错性下降 若选择过小 则又会造成网络可能不收敛 。 而网络的结构直接影响网络的逼近能力及推广性质 。 因此 应用中如何选择合适的网络结构是一个重要的问题 。
4、 应用实例与网络规模的矛盾问题: BP 神经网络难以解决应用问题的实例规模和网络规模间的矛盾问题 其涉及到网络容量的可能性与可行性的关系问题 即学习复杂性问题 。
5、 BP 神经网络预测能力和训练能力的矛盾问题:预测能力也称泛化能力或者推广能力 而训练能力也称逼近能力或者学习能力 。 一般情况下 训练能力差时 预测能力也差 并且一定程度上 随着训练能力地提高 预测能力会得到提高 。 但这种趋势不是固定的 其有一个极限 当达到此极限时 随着训练能力的提高 预测能力反而会下降 也即出现所谓 过拟合 现象 。 出现该现象的原因是网络学习了过多的样本细节导致 学习出的模型已不能反映样本内含的规律 所以如何把握好学习的度 解决网络预测能力和训练能力间矛盾问题也是 BP 神经网络的重要研究内容 。
6、 BP 神经网络样本依赖性问题:网络模型的逼近和推广能力与学习样本的典型性密切相关 而从问题中选取典型样本实例组成训练集是一个很困难的问题 。
(本博客仅作学习笔记)
参考链接