“Physics-based Deep Learning”学习笔记(1)

“Physics-based Deep Learning”学习笔记(1)

可微分物理模型(Differentiable physics(DP))

基于物理的深度学习,其本质是应用某个特定领域内的模型方程,将其离散化之后的方程整合进深度学习的训练过程。正如其名称中所提到的“可微分”,拥有可微分的公式对于训练神经网络至关重要。

接下来,我们通过一个粒子来了解基于DP的深度学习。
假设存在一个未知的函数 f ∗ : X → Y f^{*}:X \rightarrow Y fXY(通常用 ∗ * 的上标来表示理想或者未知的函数,而可离散化或者可实现的函数则不会带此标记)。

再假设存在一个通用微分方程 P ∗ : Y → Z \mathcal{P}^{*}:Y \rightarrow Z PYZ,这个方程可以编码一些现实世界中的属性。

如果说我们使用一个神经网络 f f f来学习这些未知函数 f ∗ f^* f,一般来说我们可以利用经典的监督式学习,通过收集一些数据来得出 f f f。具体来讲,就是先通过从 X X X中采样得到一些数据点 x x x和其相对应在 Y Y Y中的数据点 y y y作为数据集,这之后可以训练神经网络 f f f来拟合这个数据集。

而基于可微分物理模型的方法优势则在于,用离散化后的物理模型 P \mathcal{P} P来引导训练神经网络 f f f。也就是说,我们希望能够通过让 f f f意识到存在一个模拟器 P \mathcal{P} P,并与之产生交互。而这样则会大大提升学习效率,这之后会用一个简单的粒子来证明。

这里值得注意的是,要想基于DP的方法是有效的,则该物理模型的方程必须是可微分的。这些以梯度形式存在的差值就是驱动学习过程的重要因素。

以抛物线拟合为例

为了更好地理解监督式方法(Supervised Approach)和DP方法的区别,以一个焦点在 x x x正半轴的抛物线作为案例来说明。我们设定一个函数 P : y → y 2 , y ∈ [ 0 , 1 ] \mathcal{P}:y \rightarrow y^2, y \in [0,1] P:yy2,y[0,1],目标是寻找到一个未知函数 f f f使得: P ( f ( x ) ) = x , x ∈ [ 0 , 1 ] \mathcal{P}(f(x))=x, x \in [0,1] P(f(x))=x,x[0,1]

对于这个抛物线而言,我们都知道 f f f的解就是正或负的平方根函数。由于这并不是很困难,所以我们可以选择训练一个神经网络来拟合逆向映射。经典的监督式学习方法是随机生成一个在负平方根到正平方根之间的数据集作为神经网络的数据集。如下是示例代码:

import numpy as np 
import tensorflow as tf 
import matplotlib.pyplot as plt

# X-Data 
N = 200 
X = np.random.random(N)

# Generation Y-Data
sign = (- np.ones((N,)))**np.random.randint(2,size=N) 
Y = np.sqrt(X) * sign

# Neural network 
act = tf.keras.layers.ReLU() 
nn_sv = tf.keras.models.Sequential([ 
    tf.keras.layers.Dense(10, activation=act), 
    tf.keras.layers.Dense(10, activation=act),
    tf.keras.layers.Dense(1,activation='linear')])

# Loss
loss_sv = tf.keras.losses.MeanSquaredError() 
optimizer_sv = tf.keras.optimizers.Adam(lr=0.001) 
nn_sv.compile(optimizer=optimizer_sv, loss=loss_sv)

# Training 
results_sv = nn_sv.fit(X, Y, epochs=5, batch_size= 5, verbose=1)

# Results
plt.plot(X,Y,'.',label='Data points', color="lightgray") 
plt.plot(X,nn_sv.predict(X),'.',label='Supervised', color="red") 
plt.xlabel('y')
plt.ylabel('x') 
plt.title('Standard approach')
plt.legend()
plt.show()

通过监督式方法得到的拟合结果如下:
enter image description here
此处红色为预测的结果,而灰色为原始数据。从结果来看这远远没有达到我们灰色曲线所设定的目标。

通过Keras可视化工具我们可以很简单看到这个神经网络隐藏层的构造:

tf.keras.utils.plot_model(nn_sv, show_shapes=True)

enter image description here

基于可微分物理模型的抛物线拟合

与监督式学习方法不同的是,基于可微分物理模型的方法是不需要生成数据集中每个点 x x x对应的真实数据 y y y的。根据上一节中所提到的" f f f的解是正或负的平方根函数"这一特性,我们可以通过一个简单的均方差形式的公式来作为损失函数 ∣ y p r e d 2 − y t r u e ∣ 2 |y^2_{pred}-y_{true}|^2 ypred2ytrue2,通过在训练过程中最小化这个函数便可以实现拟合效果。值得注意的是,在这里如果我们能够利用更多信息或者更好数值计算的方法,我们就能更好地去指引整个神经网络的训练。

对比一下和监督式学习方法的不同之处:

# Supervised 
# Loss 
loss_sv = tf.keras.losses.MeanSquaredError() 

# Training
results_sv = nn_sv.fit(X, Y, epochs=5, batch_size= 5, verbose=1)

# DP
# Loss 
mse = tf.keras.losses.MeanSquaredError() 
def loss_dp(y_true, y_pred): 
return mse(y_true,y_pred**2)

# Training
results_dp = nn_dp.fit(X, X, epochs=5, batch_size=5, verbose=1)

下面是完整的基于DP的代码:

import numpy as np 
import tensorflow as tf 
import matplotlib.pyplot as plt

# X-Data 
N = 200 
X = np.random.random(N)

# Generation Y-Data
sign = (- np.ones((N,)))**np.random.randint(2,size=N) 
Y = np.sqrt(X) * sign

act = tf.keras.layers.ReLU() 
# Model
nn_dp = tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, activation=act), 
    tf.keras.layers.Dense(10, activation=act),
    tf.keras.layers.Dense(1, activation='linear')])
#Loss 
mse = tf.keras.losses.MeanSquaredError() 
def loss_dp(y_true, y_pred): 
    return mse(y_true,y_pred**2)

optimizer_dp = tf.keras.optimizers.Adam(learning_rate=0.001) 
nn_dp.compile(optimizer=optimizer_dp, loss=loss_dp)

#Training 
results_dp = nn_dp.fit(X, X, epochs=5, batch_size=5, verbose=1)

# Results 
plt.plot(X,Y,'.',label='Datapoints', color="lightgray") 
#plt.plot(X,nn_sv.predict(X),'.',label='Supervised', color="red") 
# optional for comparison 
plt.plot(X,nn_dp.predict(X),'.',label='Diff. Phys.', color="green") 
plt.xlabel('x') 
plt.ylabel('y') 
plt.title('Differentiable physics approach') 
plt.legend() 
plt.show()

通过DP方法可以得到的拟合结果如下:
enter image description here

从结果上来说,DP方法要比监督式方法效果看起来更好。具体来说,DP方法是通过评估离散模型与网络的当前预测值,而不是使用预先计算出的数据用来评估,结果上DP方法防止了拟合数据结果出现平均化这一问题。

但是,从结果上看,依然存在着几个问题:

  • 拟合结果依然只有目标函数的一侧被拟合出来。造成这个的原因是由于我们只使用了一个确定性函数,只能捕捉到单一的模式。为了捕捉函数中的多种模式,需要扩展这个神经网络结构并需要考虑额外的维度对其进行参数化。同时,拟合出的目标函数一侧是上侧还是下侧是由初始化权重决定的,多运行几次便可以看到不同侧的拟合结果。
  • 在这个实验中, x x x轴正方向上接近零的区域还是存在着一定的偏离现象。这是由于神经网络在这里基本上是只学习到了抛物线一半的线性近似。造成这样的原因是当前使用的神经网络结构非常简单而且层数并不够多。除此之外,沿 x x x轴均匀分布的样本点使神经网络偏向于学习较大的 y y y值。因为这部分对损失函数的影响更大,结果就是神经网络为了减少这个区域的误差而投入了大量的资源。

补充实验

更好地拟合单边

为了更好地拟合抛物线一般性质,我尝试了对实验中一些参数的调整。最终可以通过以下参数获得更好拟合单边的效果,设置参数learning_rate=0.0001, epochs=3000, batch_size=20,结果如下:
enter image description here

代码

https://github.com/RaymondMcGuire/PBDL_practice

TODO

  • 如何拟合抛物线两侧,如何实现Multimodal target
  • 抛物面拟合
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 物理基础深度学习是一种结合物理学定律和深度学习方法的研究领域,旨在通过整合物理学知识来提高深度学习在科学和工程领域的应用效果。 在进行物理基础深度学习时,首先需要建立一个符合物理学定律的模型。这个模型可以是一个物理系统的数学描述,也可以是物理规律的等式或方程。这一步是将物理问题转化为数学问题的关键。 接下来,使用深度学习的方法,通过大量的数据训练这个模型。通常是使用已有的实验数据或模拟数据进行训练。深度学习模型可以是传统的卷积神经网络、循环神经网络,或者是基于物理学定律设计的特殊神经网络结构。 在训练过程中,可以使用各种传统的深度学习技术,诸如反向传播算法、梯度下降等,来对模型参数进行更新和调整,以最小化模型预测结果与真实数据之间的误差。 最后,完成模型训练后,可以将该模型应用于实际问题中进行预测、优化或控制等任务。通过物理基础深度学习,可以更好地理解和解释复杂的物理现象,提高预测的准确性和效率。 需要注意的是,物理基础深度学习的一个关键点是“解释性”。由于引入了物理学知识,模型的训练结果可以更好地解释其背后的物理原理,使得模型的输出更具有可解释性。 总而言之,物理基础深度学习通过结合物理学定律和深度学习方法,对物理系统进行数学建模和模型训练,以解决科学和工程领域的问题。这种综合应用可以提高模型的预测效果和解释能力,推动科学研究和工程实践的发展。 ### 回答2: 物理基础深度学习Physics-based Deep Learning)是一种结合物理基本原理和深度学习方法的技术。它可以用于解决一些涉及物理规律和模型的问题,例如计算流体力学、材料科学、系统控制等领域。 物理基础深度学习的基本思想是将物理规律融入神经网络的训练过程中。一般而言,这种方法包括以下几个步骤: 1. 数据获取:首先需要准备与问题相关的物理数据,例如测量数据、模拟结果等。这些数据可以是实验数据,也可以是基于物理模型求解得到的结果。 2. 特征提取:在深度学习中,特征提取是一个关键步骤。对于物理基础深度学习而言,特征提取通常涉及物理规律的建模。通过对数据进行预处理、选择合适的物理假设和特征工程,可以提取出与问题相关的物理特征。 3. 网络构建与训练:根据提取的物理特征,构建合适的神经网络模型。网络的结构可以根据问题的需求进行设计,可以包括卷积神经网络、循环神经网络等。通过对网络的参数进行训练,使其能够学习到物理规律,并能够对未知的情况进行预测和分析。 4. 模型验证与优化:在模型训练完成后,需要对其进行验证和优化。通过与实际物理现象进行对比,评估模型的性能和预测能力。根据验证结果,可以对模型进行修改和调整,以提高其性能和适应性。 总的来说,物理基础深度学习是将物理规律和深度学习相结合,通过融合物理学知识和神经网络训练,来解决与物理模型和规律相关的问题。这种方法的优势在于可以利用先验的物理知识来提高模型的准确性和解释性,并且可以减少需求大量标注数据的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值