目录
一、人工神经网络
1.1 人工神经网络结构
1.2 神经元/感知器
1.3 激活函数
1.3.1 sign函数
1.3.2 sigmoid函数(Logistic函数)
1.3.3 tanh双曲正切函数
1.3.4 ReLU函数
1.4 分类
二、BP人工神经网络
2.1 概述
2.2 处理过程
2.3 例题
2.4 Matlab实现
2.4.1 一个简单程序
2.4.2 newff——BP神经网络参数设置函数
2.4.3 train——BP神经网络训练函数
一、人工神经网络
1.1 人工神经网络结构
1.2 神经元/感知器
1.3 激活函数
1.3.1 sign函数
1.3.2 sigmoid函数(Logistic函数)
可以看出,sigmoid函数的导数只有在x=0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,造成梯度弥散,无法完成深层网络的训练。
1.3.3 tanh双曲正切函数
1.3.4 ReLU函数
1.4 分类
(1)拓扑结构划分
两层、三层、多层神经网络
(2)结点间的连接方式划分
层间连接、层内连接
(3)结点间的连接方向划分
前馈式神经网络BP(Back Propagation)、反馈式神经网络(Feedback)
二、BP人工神经网络
2.1 概述
BP人工神经网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程
2.2 处理过程
(1)初始化网络权值和处理单元的阈值
最简单的办法就是随机初始化,分别为wij,wjk,…,wkl和bij,bjk,…,bkl赋随机值。
(2)信号的前向传播,计算各处理单元的输出
按照网络连接以及组合函数和激活函数关系公式,逐层计算隐藏层处理单元和输出层处理单元的输入和输出。
(3)误差后向传播
对于训练数据xi,输出应为yl,与人工神经网络实际输出Ol存在差异。
定义系统的总输出误差为系统输出层各处理单元输出误差的平均值
(即各输出Ol与训练数据yl的差异),
是输出与其期望值的均方差:
需要根据差异的情况对系统内各连接的权值进行调整,使二者相等或逼近 yl。
(4)模型评估
(5)模型应用
2.3 例题
2.4 Matlab实现
2.4.1 一个简单程序
P=[0 1 2 3 4 5 6 7 8 9 10]; %输入
T=[0 1 2 3 4 3 2 1 2 3 4]; %期望输出
ff=newff(P,T,20); %建立一个BP网络,包含20个节点的隐含层
ff.trainParam.epochs=50; %最大训练次数
ff=train(ff,P,T); %训练
Y1=sim(ff,P); %仿真
plot(P,T,'o-');
2.4.2 newff——BP神经网络参数设置函数
功能:构建一个BP神经网络
(1)net=newff(P, T, S)
P: R*Q1矩阵,表示创建的神经网络中,输入层有R个神经元。每行对应一
个神经元输入数据的典型值,实际应用中常取其最大最小值。
T: SN*Q2矩阵,表示创建的网络有SN个输出层节点,每行是输出值的典型
值。
S: 标量或向量,用于指定隐藏层神经元个数,若隐藏层多于一层,则写成
行向量的形式。
(2)net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)
TFi: 第i层节点的传递函数,包括线性传递函数purelin, 正切S型传递函数
tansig,对数S型传递函数logsig,默认为“tansig”;
BTF: 训练函数,用于网络权值和阈值的调整,默认为基于莱文贝格-马夸
特共轭梯度法的训练函数trainlm,其他参数见下表所示;
一般在使用过程中设置这2个参数,后面5个参数采用系统默认参数。
BP神经网络训练函数
训练函数的意义 | MATLAB中相应的函数 |
梯度下降法 | traingd |
动量反传的梯度下降法 | traingdm |
动态自适应学习率的梯度下降法 | traingda |
带动量动态自适应学习率的梯度下降法 | traingdx |
弹性梯度下降法 | trainrp |
量化共轭梯度法 | traincg |
莱文贝格-马夸特共轭梯度法 | trainlm |
弗莱彻-里夫斯共轭梯度法 | traingf |
波拉克-里比埃共轭梯度法 | traingp |
鲍威尔-比尔共轭梯度法 | traingb |
2.4.3 train——BP神经网络训练函数
功能:用训练函数训练BP神经网络
[net, tr]=train(NET, P, T)
NET: 待训练网络;
P: 输入数据矩阵;
T: 期望输出数据矩阵;
net: 训练好的网络;
tr: 训练过程记录。
BP神经网络训练函数
训练参数名称及默认值 | 属性 |
net.trainParam.epochs=100 | 最大训练次数 |
net.trainParam.goal=0 | 训练目标 |
net.trainParam.show=25 | 两次显示之间的训练次数(无显示时取NAN) |
net.trainParam.time=inf | 最大训练时间(秒) |
net.trainParam.max_fail=5 | 确认失败的最大次数 |
net.trainParam.min_grad=1e-6 | 最小性能梯度 |
net.trainParam.lr=0.2 | 学习速率 |