我有一个带有两个标量成本函数的模型 C_1 ( p , t )和 C_2 (< em> p , t )。我的目标是同时将 p 的 C_1 和 t 的 C_2 最小化。换句话说,选择 p 和 t 使得
d C_1 ( p , t )/ d p = 0
d C_2 ( p , t )/ d t = 0
注意我不想要d C_1 ( p , t )/ d t 为0,反之亦然。换句话说,此问题不等于最小化 C_1 和 C_2 的某些线性组合。
当前,我通过在传递 p 作为参数列表的同时最小化 C_1 然后在传递时最小化 C_2 t 。但是,这效率低下,并导致基于动量的优化器出现问题。有没有一种方法可以同时优化张量流中的两种成本,而无需将 C_1 的梯度应用于 t ,反之亦然?
编辑:
一个简单的示例如下:
import tensorflow as tf
import numpy as np
p = tf.Variable(np.random.random(size=(5, 5)))
t = tf.Variable(np.random.random(size=(5, 5)))
C_1 = tf.abs(p) / (1 + t**4)
C_2 = tf.abs(t) / (1 + p**4)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=.05)
step1 = optimizer.minimize(C_1, var_list=[p])
step2 = optimizer.minimize(C_2, var_list=[t])
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(20):
for j in range(5):
sess.run(step1)
for j in range(5):
sess.run(step2)
我正在寻找一种避免在C_1和C_2之间交替的方法,以便可以使用基于动量的优化器(并且还因为我怀疑它将导致更好的收敛性)。