背景

神经网络快速发展,对传统的数学问题求解提出了新的思路,积分问题传统方式采用牛顿莱布尼茨公式,存在原函数难以找到的不足,以及现有被积函数的表达式可能无法显式表达,只能通过离散点来表示,而神经网络不依赖表达式,只要有离散的点(被积函数曲线上的点)即可完成积分。但缺点是不如传统得到原函数表达式的情况,神经网络积分不能计算任意定义域内的,必须是训练集给定的范围内的。

问题描述

2x+exp(x)2x+exp(x)2x+exp(x)
给定区间x in (−1,1)x\ in\ (-1,1)x in (1,1)上积分
原函数为x2+exp(x)x^2+exp(x)x2+exp(x)
可计算F(1)-F(0)得到真实值用来测试精度

神经网络搭建

        # 原函数网络
        self.raw_net = Sequential([
            # 需要指定input_shape 否则报错shape不匹配
            layers.Dense(1, input_shape=(1,), activation=activation),
            layers.Dense(8, activation=activation),
            layers.Dense(32, activation=activation),
            layers.Dense(8, activation=activation),
            layers.Dense(1, )
        ])

搭建一个菱形网络

模型训练

流程
神经网络为原函数等效器,通过train step的方式完成自动微分,得到被积函数等效器,利用已知的被积函数函数值进行偏差计算,输出loss后反向传播更新神经网络梯度,最后得到原函数等效器用于计算积分值。

训练结果训练曲线

蓝线和绿线几乎重合了,同时黄线幅值过大导致两者几乎重合。
可见loss下降正常,但黄线上升,下面分析原因:
原函数拟合情况
原函数的拟合情况如图所示,差距增大主要是因为从开始的接近到最后的稳定间隔分离,所以需要进行修正,修正的方式经过思考加入了值约束,将其考虑到loss中,修正后重新训练模型:
训练曲线
原函数拟合情况

可见效果取得了质的飞跃,之前的问题也全部解决,可作为亮点和核心关键算法来写。

扩展工作

神经网络的优势还在于网络模型结构不用变化,可适应一般情况。所以这里修改被积函数为
公式
配置超参数如下:
超参配置
训练效果:
指标曲线
原函数拟合效果
可见原函数拟合效果极佳
调整迭代次数,得到
偏差影响
实际应用中可根据精度要求以及计算速度的要求灵活选取迭代次数,所以该方法工程落地的指导性较强。
基于本博客的思想和扩展工作成果,本人已撰写一篇论坛论文,欢迎技术交流!

备注

如需技术支持(源码+本项目相关的任何问题答疑),请打赏支付宝并添加支付宝好友备注。
技术支持

代码质量可靠有保障,提供了丰富的用户接口可以自定义实验,还可根据你的个性化需求进行代码定制修改(比如修改被积函数),提供的主要用户接口如下:

    bias = 1#原函数的偏置量
    epochs = 5000
    lr = 0.001
    train_model = True
    retrain = False
    # 首先xl和xr的范围,不能超出范围去预测范围外的积分值
    xl = -1
    xr = 1
    size = 1000
    epoch_interval = 200
    # tanh relu sigmoid elu selu
    # softmax softplus softsign hard_sigmoid exponential
    # linear
    activation = 'elu'
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐