利⽤BP神经⽹络进⾏函数拟合
linspace函数python
利⽤BP神经⽹络进⾏函数拟合
摘要
数据拟合是在假设模型结构已知的条件下最优确定模型中未知参数使预测值与数据吻合度最⾼,本⽂选取线性项加激活函数组成⼀个⾮线性模型,利⽤神经⽹络算法最优确定模型中的未知参数,利⽤随机搜索的⽅式确定函数模型,从⽽达到很好的拟合效果
关键词
BP神经⽹络 随机搜索 随机重启 参数优化 数据拟合 RELU
问题描述
数据拟合问题普遍存在,拟合问题本质上是在假设模型结构已知的条件下最优确定模型中未知参数以使得模型预测与数据的吻合度最⾼,即数据拟合问题往往描述为⼀个参数优化问题。
复杂⼯业过程对于模型精度的要求,线性模型往往不能满⾜。因此模型结构假设为⾮线性更为合理。此处我们假设模型结构为:
算法设计
BP神经⽹络是⼀种按照误差逆向传播训练的多层前馈神经⽹络。神经⽹络理论上可以拟合任意曲线,这⼀点已经得到了严格的数学证明。
1. 三层神经⽹络模型
通常⼀个多层神经⽹络由L层构成,其中有1层输出层,1层输⼊层,L-2层隐藏层。输⼊层是神经⽹络的第⼀层,表⽰⼀列矩阵或多列矩阵的输⼊。输出层是神经⽹络的最后⼀层,表⽰⽹络的输出结果,通常是⼀列矩阵。隐藏层有L-2层,表⽰每⼀层神经元通过前向传播算法计算的结果矩阵。
在本程序中,采⽤3层神经⽹络。输⼊矩阵X=[X1,X2],题⽬中给出的模型需要对输⼊矩阵X进⾏增⼴,然后乘以参数
,其实相当于神经⽹络中的偏置项bi,i=1,2。因此在本程序中⽆需对输⼊矩阵进⾏增⼴。wi,wi, i=1,2;bi,i=1,2分别是输⼊层与隐藏层之间,隐藏层与输出层之间的连接权重和偏置项。设,n=1,i=1,2,3,…,M,表⽰隐藏层的第i个神经元的输出。
层与隐藏层之间,隐藏层与输出层之间的连接权重和偏置项。设,n=1,i=1,2,3,…,M,表⽰隐藏层的第i个神经元的输出。
2. 激活函数
本程序中采⽤的激活函数为RELU函数,即函数模型中的,⽬的是去除整个神经⽹络输出的线性化,使得整个神经⽹络模型呈⾮线性化。
3. 损失函数
本程序中采⽤的损失函数为MSE(均⽅误差),利⽤均⽅误差和激活函数的导数来更新权重和偏置。
前向传播算法是指依次向前计算相邻隐藏层之间的连接输出,直到模型的最终输出值。其特点作⽤于相邻层的两个神经元之间的计算,且前⼀层神经元的输出是后⼀层的神经元的输⼊。
设对于第n层的第i个神经元,有n-1层的M(M为超参数)个神经元与该神经元有突触相连,则第n层第i个神经元的输⼊为:
第n层的第i个神经元的输出为:
4. 反向传播算法
结合前向传播的两个式⼦,得到第n层第i个神经元的输⼊与第n-1层第i个神经元的输出的关系为:
5. 梯度下降算法
得到每⼀个隐藏层的连接权重和偏置项的梯度后,利⽤学习率和梯度下降算法更新每⼀层的连接权重和偏置项:
6. 学习率更新策略
在配合梯度下降优化的过程中,如果学习率设置过⼤,则容易导致模型过拟合;如果设置过⼩,会使得模型优化的速度变得很缓慢。
为此加⼊衰减因⼦和学习次数来计算模型每次学习的学习率:
7. 归⼀化与反归⼀化
8. 随机重启算法
为了防⽌更新参数时陷⼊局部极⼩,采⽤随机重启的⽅式更换初始参数状态。
9. 超参数M的确定
本程序的超参数M的确定⽅法为随机搜索法,最终确定M的取值为20。
10. 编程环境和程序主要函数说明
全部内容均在JetBrains发布的PyCharm社区版(版本号2019.2.5)编程环境中完成,使⽤的语⾔为Python,解释器为
Python3.8。
#产⽣数据,并将产⽣的数据⽅阵降维,⽅便计算处理
def init(inpit_n_row):
#激活函数
def relu(x):
#激活函数RELU的导数
def d_relu(x):
#归⼀化数据
def normalize(data):
#反归⼀化数据
def d_normalize(norm_data, data):
#计算损失函数:平⽅损失函数
def quadratic_cost(y_, y):
#评价函数RSSE
def rsse(y_predict, y):
#前向传播算法
def prediction(l0, W, B):
#反向传播算法:根据损失函数优化各个隐藏层的权重
def optimizer(Layers, W, B, y, learn_rate):
#训练BP神经⽹络
def train(X, y, W, B, method, learn_rate):
#拟合曲⾯可视化
def visualize(y, inpit_n_row, input_n_col, hidden_n_1):
#为了解决陷⼊局部极⼩值,随机重启
def random_restart():
#main()函数
if name == ‘main’:
结果分析与讨论

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。