system: [SYSTEM]

user: 3. 基于BP神经网络的WENO权重算法 BP神经网络能学习和存储大量的输入–输出模式映射关系，而无需事前揭示描述这种映射关系的数学方程，其网络模型拓扑结构包括输入层(input layer)、隐含层(hidden layer)和输出层(output layer)。BP神经网络的学习过程由前向计算过程和误差反向传播过程组成。在前向计算过程中，输入量从输入层经隐含层逐层计算，并传向输出层，每层神经元的状态只影响下一层神经元的状态。如果输出层不能得到期望的输出，则转入误差反向传播过程，误差信号沿原来的连接通路返回，逐次调整网络各层的权值和阈值，直至达到输入层，再重复向计算。这两个过程依次反复进行，不断调整各层的权重和阈值，使得网络误差最小或达到人们所期望的要求时，学习过程结束。 由公式(1)可知，计算每个单元边界 x i + 1 / 2 处的值时，都要重新计算非线性权重 ω k ( k = 0 ， 1 ， 2 ) ，并且在计算非线性权重时，会依赖于灵敏度参数和光滑指示因子的选择。因此我们考虑用BP神经网络来近似式(1)中的权重 ω k ( k = 0 ， 1 ， 2 ) ，从而避免人工参数的选择，输入 x i 及其附近的函数值 ( f i − 2 ， f i − 1 ， f i ， f i + 1 ， f i + 2 ) ∈ ℝ 5 ，可以快速的输出每个子模板上函数的光滑性，记为Index，然后将输出的光滑性指标Index转化为定每个子模板上的权重 ω k ( k = 0 ， 1 ， 2 ) ，两者的对应关系如表1所示。 Table 1 The corresponding relationship between the smoothness index and the weights of the sub-stencils ω k ( k = 0 ， 1 ， 2 Index ( 1 ， 1 ， 1 ) ( 1 ， 1 ， 0 ) ( 0 ， 1 ， 1 ) ( 1 ， 0 ， 0 ) ω ( 1 10 ， 3 5 ， 3 10 ) ( 1 7 ， 6 7 ， 0 ) ( 0 ， 2 3 ， 1 3 ) ( 1 ， 0 ， 0 ) Index ( 0 ， 0 ， 1 ) ( 0 ， 0 ， 0 ) ( 1 ， 0 ， 1 ) ( 0 ， 1 ， 0 ) ω ( 0 ， 0 ， 1 ) ( 1 626 ， 625 939 ， 625 1878 ) ( 169 730 ， 27 365 ， 507 730 ) ( 625 4402 ， 949 1114 ， 27 4402 ) 表1. 光滑性指标Index与子模版上权重 ω k ( k = 0 ， 1 ， 2 ) 的对应关系 3.1. 网络的输入输出 网络的输入为 x i 及其附近的函数值 ( f i − 2 ， f i − 1 ， f i ， f i + 1 ， f i + 2 ) ∈ ℝ 5 ，因此输入层神经元个数 N I = 5 。网络输出层神经元个数 N O = 3 ，为子模版光滑性指标Index，其与三个子模板的光滑性有关，具体见表2： Table 2 The corresponding relationship between the smoothness index and the smoothness of the three sub-stencils S 0 ， S 1 ， S 光滑性 S 0 ， S 1 ， S 2 都光滑 S 0 ， S 1 光滑， S 2 间断 S 0 间断， S 1 ， S 2 光滑 S 0 光滑， S 1 ， S 2 间断 S 0 ， S 1 间断， 光滑 S 0 一阶导数不连续 S 1 一阶导数不连续 S 2 一阶导数不连续 Index ( 1 ， 1 ， 1 ) ( 1 ， 1 ， 0 ) ( 0 ， 1 ， 1 ) ( 1 ， 0 ， 0 ) ( 0 ， 0 ， 1 ) ( 0 ， 0 ， 0 ) ( 1 ， 0 ， 1 ) ( 0 ， 1 ， 0 ) 表2. 三个子模板 S 0 ， S 1 ， S 2 上光滑性与子模版光滑性指标Index的对应关系 3.2. 数据集的设计 如3.1中所述，数据集的输入取函数 f ( x ) 定义域D内某一点 x i 及其左右两点处的函数值 ( f i − 2 ， f i − 1 ， f i ， f i + 1 ， f i + 2 ) ，函数 f ( x ) 、参数取值、定义域、间断标识及每类函数的选取数量如表3所示。在神经网络训练过程中，随机选取80%进行训练，剩余的20%用于网络测试。 Table 3 The function f ( x ) ， the value of the parameters， the domain， the smoothness index and the number of the functions in the data bas f ( x ) 参数取值 定义域D Index 数量 sin ( k π x ) k = 2 ( 0 ， 1 ) ( 1 ， 1 ， 1 ) 18000 k x k ∈ ( − 10 ， 10 ) ( 1 ， 1 ， 1 ) 40000 k x a k ∈ ( − 10 ， 10 ) ， a ∈ ( 2 ， 5 ) ( − 1 k ， 1 k + 4 d x ) ( 1 ， 1 ， 1 ) 40000 c c ∈ ( − 1 ， 1 ) ( 0 ， 1 ) ( 1 ， 1 ， 1 ) 20000 k | x | k ∈ ( − 10 ， 10 ) ( 0 ， 0 ， 0 ) 10000 ( 1 ， 0 ， 1 ) 10000 ( 0 ， 1 ， 0 ) 10000 l ( x < x 0 ) + r ( x > x 0 ) l ∈ ( − 1 ， 1 ) ， r ∈ ( − 1 ， 1 ) ( 0 ， 1 ) ( 1 ， 1 ， 0 ) 20000 ( 0 ， 1 ， 1 ) 20000 ( 1 ， 0 ， 0 ) 20000 20000 表3. 数据集中的函数 f ( x ) 、参数取值、定义域、光滑性指标及训练集中每类函数的数量 3.3. 网络结构的确定 1) 网络的层数 1989年，Robert Hecht-Nielsen [ 17 ] 证明了对于任何闭区间内的一个连续函数，都可以用一个隐含层的BP网络来逼近，当学习不连续函数时BP网络需要两个隐含层。因此，本文选择两个隐含层 H 1 ， H 2 的BP网络。 2) 隐含层节点数 各隐藏层节点数的选取会影响神经网络的性能。若隐藏层中节点数太少，会出现网络识别未经训练样本能力差，容错性低等问题；若隐藏层节点数太多，则会导致网络学习时间大幅加长，样本中一些如干扰、噪声等非规律性内容存储进网络等问题。隐藏层的节点数往往与求解问题的要求，输入输出节点数有不可分割的联系。在本文中设置的隐含层节点数 { l 1 ， l 2 } = { 20 ， 15 } 。 3) 激活函数(activation function) 引入激活函数的目的是在模型中引入非线性。如果没有激活函数，那么无论神经网络有多少层，最终都是一个线性映射，单纯的线性映射无法解决线性不可分问题。 本文在隐含层 H 1 ， H 2 中均选用Relu激活函数( f ( x ) = max ( 0 ， x ) )，以增加特征效应；在输出层中选用 sigmoid激活函数( f ( x ) = 1 1 + e − x )，将输出数据映射到 ( 0 ， 1 ) 的范围内，从而进行分类。 4) 数据的归一化处理。 对于大小不一致的输入函数值，本文中选取的S型激活函数(sigmoid)在输入数据过大时变化平缓，区分度太小。因此需要采取归一化算法对输入数据进行预处理，本文中采用线性归一化算法将数据归一化到 [ 0 ， 1 ] 区间： f ^ j = f j max k = − 2 ， ⋯ ， 2 ( | f i + k | ， 1 ) ， j = i − 2 ， ⋯ ， i + 2 ， 其中 f ^ 是 f 的归一化向量。 综上所述，本文设计采用的间断点检测的BP神经网络模型为(图2)： 图2. BP神经网络模型