BP神经网络实现函数逼近python实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机器学习作业一BP神经网络实现函数逼近
一.算法描述
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
二.数据描述
逼近函数y = sin(x)
三.算法参数
输入学习率,迭代次数,逼近函数,神经网络规模
输出逼近的函数
四.实验流程
反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播。
这两个过程简述如下:
1.正向传播
输入的样本从输入层经过隐单元一层一层进行处理,传向输出层;在逐层处理的过程中。
在输出层把当前输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。
2.反向传播
反向传播时,把误差信号按原来正向传播的通路反向传回,逐层修改连接权值,以望代价函数趋向最小。
输入层输入向量(n维):X=(x1,x2,…,xi,…,xn)T
隐层输出向量(隐层有m个结点):Y=(y1,y2,…,yj,…,ym)T
输出层输出向量(l维):O=(o1,o2,…,ok,…,ol)T
期望输出向量:d=(d1, d2,…,dk,…,dl)T
输入层到隐层之间的权值矩阵:V=(V1,V2,…,Vj,…,Vm)
隐层到输出层之间的权值矩阵用:W=(W1,W2,…,Wk,…,Wl)
对输出层第k个结点和隐含层的第j个结点有如下关系:
激活函数f(x)常用sigmoid函数(一个在生物学中常见的S型的函数,也称为S 形生长曲线)或者tanh(双曲正切)函数。
各种S型曲线函数如下图所示:
下面以sigmoid函数进行推导。
sigmoid函数定义为:
其导函数为:
定义对单个样本输出层所有神经元的误差总能量总和为:
将以上误差定义式展开至隐层:
权值调整思路为:
上面式子中负号表示梯度下降,常数η∈(0,1)表示权值调整步长(学习速度)。
推导过程中,对输出层有j=0,1,2,…,m;k=1,2,…,l;对隐层有
i=0,1,2,…,n;j=1,2,…,m
对输出层和隐层,上面式子可写为:
对输出层和隐层,定义δ:
将以上结果代入δ的表达式,并根据sigmoid函数与其导函数的关
系:f'(x)=f(x)*[1-f(x)],可以计算出:
可以看出要计算隐层的δ,需要先从输出层开始计算,显然它是反向递推计算的公式。
以此类推,对于多层神经网络,要先计算出最后一层(输出层)的δ,然后再递推计算前一层,直到输入层。
根据上述结果,三层前馈网的BP学习算法权值调整计算公式为:
对所有输入样本(P为训练样本的个数),以总的平均误差能量作为经验损失函数(经验风险函数,代价函数)为:
五.实验结果
六.讨论
神经网络可以用作分类、聚类、预测等。
神经网络需要有一定量的历史数据,通过历史数据的训练,网络可以学习到数据中隐含的知识。
在你的问题中,首先要找到某些问题的一些特征,以及对应的评价数据,用这些数据来训练神经网络。
虽然BP网络得到了广泛的应用,但自身也存在一些缺陷和不足,主要包括以下几个方面的问题。
首先,由于学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。
对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。
其次,BP算法可以使权值收敛到某个值,但并不保证其为误差平面的全局最小值,这是因为采用梯度下降法可能产生一个局部最小值。
对于这个问题,可以采用附加动量法来解决。
再次,网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。
因此,网络往往存在很大的冗余性,在一定程度上也增加了网络学习的负担。
最后,网络的学习和记忆具有不稳定性。
也就是说,如果增加了学习样本,训练好的网络就需要从头开始训练,对于以前的权值和阈值是没有记忆的。
但是可以将预测、分类或聚类做的比较好的权值保存。