【发布时间】:2017-08-17 19:23:52
【问题描述】:
在机器学习中,给定要最小化的损失函数,我们通常会选择一些机器学习库来更新参数。比如在tensorflow中,我们通常会做如下的事情,先写下损失函数,
self.loss = F(\theta, \eta)
self.optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
self.train_op = self.optimizer.minimize(
self.loss, global_step=tf.contrib.framework.get_global_step())
然后使用_, loss = sess.run([self.train_op, self.loss], feed_dict) 更新参数以最小化损失函数。
在这种情况下,我们不需要关心 F(\theta, \eta) w.r.t \theta 和 \eta 的梯度的确切形式是什么。
我想知道如何使用特定形式的损失梯度 w.r.t 来更新参数并最小化损失。也就是说,给定梯度的形式,如何使用机器学习库写下要更新的东西。
Update1 @lejlot 提供了一个惊人的答案(见下文),它首先通过 Adam 计算了一些 true_gradient,然后将渐变修改为您想要的。但是,对我来说,我想知道是否可以绕过这一点,直接将所需的梯度形式应用于损失。这背后的原因是我不知道计算的true_gradients 的形式,所以我不能添加一些东西。例如,我想要的渐变形式是f(\theta),但是如何从计算出的true_gradients 到f(\theta) 是未知的,因为我们不知道计算出的true_gradients 的形式。
【问题讨论】:
标签: numpy machine-learning tensorflow