简要介绍Simcenter ROM Builder中的神经网络基本原理和概念。
神经网络属于一类非线性回归器,在使用足够大的数据集进行训练后,可以捕捉函数的输入和输出之间的非线性关系。
神经网络由多个层组成,每层包含固定数量的单元或“神经元”。第一层称为输入层,其维度与系统的输入数量相同。最后一层称为输出层,其维度与系统的输出数量相同。其余的层称为隐藏层,其维度取决于相应的单元数量。工具会自动定义输入层和输出层;用户只需定义隐藏层。
神经网络示意
神经网络的计算过程包括以下几个步骤:
神经网络的优势在于它能够自动学习和调整权重,从而适应不同类型的数据和复杂的输入输出关系。这种能力使得神经网络在图像识别、语音识别、自然语言处理等领域表现出色。
神经网络是一种模仿人类神经系统设计的计算模型,用于机器学习和人工智能领域。它由大量的人工神经元(也称为节点或单元)组成,这些神经元通过连接形成层级结构。每个神经元接收来自上一层神经元的输入,通过加权和非线性激活函数处理后,将输出传递给下一层神经元。
神经网络的训练过程通常涉及优化网络中权重和偏置的数值,以便根据输入数据学习到期望的输出。通过调整这些参数,神经网络可以适应不同的输入模式,并对复杂的模式进行学习和预测,使其成为强大的模式识别工具。
在Simcenter Reduced Order Modeling 2404中,提供了下图所示的几种网络模型:
对于静态问题,仅用密集层Dense layers(也称为全连接层、前馈层)。可以组合多个层来构建一个深度静态网络。
对于动态问题,可以用一个或多个递归层Recurrent layers来捕捉输入和输出之间的时间依赖关系。这些层可以与密集层相结合,形成深度动态网络。
在密集层(或全连接层)中,本层每个节点都连接到下一层中的每个节点。提供了输入和输出之间的静态关系。将上一层的所有输出传递到其所有节点,每个节点向下一层提供一个输出。密集层是神经网络最基本的层。将多个这种层组合起来,便形成了经典类型的神经网络或多层感知器(MLP)。它们本质上非常灵活,通常可以学习从输入到输出的几乎任何静态映射。
递归神经网络(RNN)具有内部状态,可以在一个时间步长到另一个时间步长存储信息,从而能够捕捉时间上的动态变化。
递归神经网络是一种能够处理序列数据的神经网络,与传统的前馈神经网络不同,RNN具有“记忆”能力。它们通过在网络中引入循环连接,使得网络可以利用先前的输入信息来影响当前的输出。这使得RNN非常适合处理具有时间依赖性或顺序性的任务。
门控递归单元(GRU)是一种经过轻微修改的RNN(是RNN的一种变体),除了内部状态外,还具有控制门。与RNN相比,GRU可以捕获长期动态。
GRU是为了解决传统RNN中在处理实际问题时遇到的长期记忆丢失和反向传播中的梯度消失或爆炸等问题而提出的。
为了解决标准RNN的梯度消失问题,GRU使用了所谓的“更新门”和“重置门”。基本上,这两个向量决定了哪些信息应该传递给输出。它们的特别之处在于,可以被训练来保存长时间以前的信息,而不是随时间流逝而消失,或者删除与预测无关的信息。
不管RNN还是GRU,本质上处理的是序列学习问题。GRU中的重置门有助于提取序列中的短期依赖关系,更新门有助于获取序列数据的长期依赖关系。
长短时记忆(LSTM)单元具有多种类型的内部状态和门控机制,可以更好地捕捉长期动态。而递归神经网络(RNN)只能回望一个时间步长,LSTM利用额外的内部状态和门控机制在处理复杂动态时表现更佳。
LSTM是RNN的进阶版。和RNN不同的是:RNN就是个简单的线性求和的过程。而LSTM可以通过“门”结构来去除或者增加“单元状态”的信息,实现了对重要内容的保留和对不重要内容的去除。通过Sigmoid层输出一个0到1之间的概率,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过 ”。
三个门控制对前一段信息、输入信息以及输出信息的记忆状态,进而保证网络可以更好地学习到长距离依赖关系。
遗忘门(记忆门):通过判断当前输入信息的重要程度决定对过去信息的保留度;
输入门:通过判断当前输入信息的重要程度决定对输入信息的保留度;
输出门:当前输出有多大程度取决于当前记忆单元。
激活函数:门:sigmoid,0-1分布概率,符合门控的定义。且当输入较大或者较小时,值会接近1或0,进而控制开关。
候选记忆:分布在-1~1之间,与大多场景下0中心分布吻合。在输入为0有较大的梯度,使模型更快收敛。
每个神经元包含一个激活函数,它通过线性或非线性函数调节所有输入的加权和。这个函数将这个加权和映射到0到1的范围(例如Sigmoid函数),0到∞的范围(例如ReLU函数),或者-1到1的范围(例如TanH函数)。非线性激活函数使神经网络能够建模任何类型的函数,使其成为一种通用的函数逼近器。线性激活通常保留用于输入和输出层,这两层中信号仅仅被简单地缩放。
激活函数示例
训练神经网络指的是找到神经网络所有层的最优权重和偏置的过程。首先,需要将包含输入和输出样本的数据集分成两个独立的集合:训练集和验证集。通过在训练集上最小化真实输出与模型预测输出之间的均方误差(也称为训练损失),来获取网络的最优参数。
训练损失的最小化通常是一个非凸问题,为此提供了两种优化方法:一种是被称为Adamax的梯度下降算法(Gradient descent)的变体,另一种是被称为Levenberg-Marquardt下降的二阶技术。
Gradient Descent |
Levenberg-Marquardt |
𝑤𝑘+1=𝑤𝑘-𝛼𝑔𝑘 |
𝑤𝑘+1=𝑤𝑘-(𝐻𝑘+𝜇𝐼)-1𝑔𝑘 |
|
|
优化方法本质上是迭代的,训练周期数(Epoch)是指算法的迭代次数。一个训练周期代表对整个训练集的完整遍历,这意味着模型已经看过每一个样本一次。在优化过程中,训练损失通常在训练开始时减少,并随着训练周期数的增加最终饱和到一个较低的值。如果训练误差没有趋向于一个最小值,则必须增加训练周期数。
由于算法中的二阶项,Levenberg-Marquardt方法具有快速收敛到最小值的特性,但它计算代价高昂,因为必须计算误差的Hessian矩阵。Levenberg-Marquardt方法还提供了一种自动停止功能,当达到最小值时训练会自动停止。当数据集相对较小且网络不太深时,建议使用此选项。由于Levenberg-Marquardt方法的收敛速度很快,使用该算法时可以将训练周期数设置为50。
梯度下降是一种计算速度快且能够随着数据和网络规模的增加而良好扩展的算法。然而,由于是一阶方法,梯度下降的收敛速度较慢。为了减少计算时间和内存消耗,梯度下降用训练集的子集(称为批次)来最小化训练损失。这种梯度下降的变体被称为随机梯度下降Stochastic Gradient Descent(SGD)。为了提高SGD的收敛性,用“动量”和梯度缩放来平滑梯度,并根据收敛历史调整学习率,这样就产生了Adamax优化器。梯度下降的有效性还取决于学习率,它控制着最小化的速度。较大的学习率会导致训练损失更快下降,但更快的训练可能导致模型性能不是最优的。较小的学习率会导致训练损失平滑且缓慢地下降,从而增加训练所需的时间。
学习率的影响
训练损失并不是衡量神经网络性能的最终指标。性能通常用特定的指标来衡量,例如归一化均方根误差的低值或保真度指数的高值。较低的训练损失意味着神经网络参数已得到很好的优化以适应训练数据集。然而,神经网络的评估基于其在系统任意运行点,捕捉输入-输出关系的能力。因此,必须用验证数据集来评估神经网络模型。
理想的训练质量介于欠拟合和过拟合之间。
过拟合Overfitting 是指神经网络模型在训练数据集上表现良好,但在验证集上表现不佳。将验证损失与训练损失一起绘制有助于识别过拟合。当过拟合发生时,验证损失开始增加,而训练损失继续减少。在这种情况下,可以提前停止训练以避免过拟合。过拟合的典型原因是为具有相对简单动态的系统训练大型、复杂的神经网络。例如,对线性弹簧-质量系统拟合为三层隐藏层、每层20个单元、激活tanh的神经网络会导致过拟合。另一个原因可能是训练集和验证集样本之间的显著差异。如果训练集的动态不反映验证集的动态,则可能会出现性能不佳的情况。需要记住的是,神经网络不了解底层系统的任何物理规律,只是一个统计的、非线性的拟合工具。
欠拟合Underfitting 发生在神经网络模型在训练数据集和验证集上表现都很差的情况下。原因可能是神经网络相比于系统而言太简单,或者训练数据集不够丰富,无法很好地建模系统。解决方法是通过收集系统的多样化样本来丰富训练数据集,或者拟合一个更复杂的神经网络。
过拟合和欠拟合
Simcenter ROM Builder的机器学习框架依赖于Keras和Tensorflow。当前版本使用计算机的CPU执行相关任务。
Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。
TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。
注:以上内容,彩色字体来自网络,黑色字体来自Simcenter ROM Builder Help.