问题描述
我最近致力于实施 https://arxiv.org/abs/2102.07501 中所述的退火流传输方法。在某一时刻,任务是通过使用 SGD 学习标准化流来最小化给定的损失函数。我研究了很多关于这个问题带来的几个主题的论文,但无法弄清楚如何将这些想法联系起来。所以,问题来了:
假设我们有一个分布 p 的样本 (x_1,...,x_N)。我们现在想要学习传输每个粒子的归一化流 T,以便 (T(x_1),T(x_N)) 是目标分布 q 的合适样本。正如已经提到的来源中所述,这是通过最小化 T(p) 和 q 的 Kullback-Leibler-divergence 来完成的。得到的损失函数(我们想要最小化的损失函数)用 L 或 L(T) 标记。
作者非常详细地描述了他们的算法,但此时他们只是说“使用 SGD 学习 T 以最小化 L”。
我的意图是使用 TensorFlow 和 Keras,使用 L 作为自定义损失函数和 - 正如作者所建议的 - Adam 优化器,但是,就目前而言,这是我的代码:
def LearnFlow_Test(train_iters,x_train,W_train,x_val,W_val):
# Initialize
identity = lambda x: x # Initialize flow
flows = np.array(identity)
y_true = np.array([f_target(identity(x)) for x in x_val])
y_pred = np.array([f_initial(x)/jacobian_det(identity,x) for x in x_val])
val_losses = loss_function(y_true,y_pred)
# Learn
for j in range(train_iters):
# Compute training loss
y_true = np.array([f_target(identity(x)) for x in x_train])
y_pred = np.array([f_initial(x)/jacobian_det(identity,x) for x in x_train])
train_loss = loss_function(y_true,y_pred)
"""
Update flow using SGD to minimize train_loss
minimizing_flow =
"""
# Update list of flows & list of validation losses
flows = np.append(flows,minimizing_flow)
# Compute new validation loss and update the list
y_true = np.array([f_target(minimizing_flow(x)) for x in x_val])
y_pred = np.array([f_initial(x)/jacobian_det(minimizing_flow,x) for x in x_val])
val_losses = np.append(val_losses,[loss_function(y_true,y_pred)])a
return flows[np.argmin(val_losses)] # Return flow with the smallest validation error
如果我提供任何建议,我将不胜感激,因为我对现有代码的搜索没有成功。
非常感谢, 克里斯蒂安
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)