【问题标题】:Does tensorflow propagate gradients through a pdf张量流是否通过pdf传播梯度
【发布时间】:2018-05-10 20:46:50
【问题描述】:

可以说,分布函数定义如下:

dist = tf.contrib.distributions.Normal(mu, sigma)

从分布中抽取样本

val = dist.pdf(x)

这个值在模型中用于预测变量

X_hat = f(val)
loss = tf.norm(X_pred-X_hat, ord=2)

如果我想优化变量 mu 和 sigma 以减少我的预测误差,我可以执行以下操作吗?

train = tf.train.AdamOptimizer(1e-03).minimize(loss, var_list=[mu, sigma])

我很想知道梯度例程是否通过正态分布传播,或者我是否应该预料到一些问题,因为我在定义分布的参数上采用梯度

【问题讨论】:

  • 理论上不会,但是有一个众所周知的重新参数化技巧。生成一个标准的高斯噪声z(可能是tf.random_normal),然后做x = z * std + mu
  • 感谢您的回复。我喜欢你优化 std 和 mu 的方法。

标签: tensorflow


【解决方案1】:

tl;dr: 是的,梯度反向传播将与tf.distributions.Normal 一起正常工作。

dist.pdf(x) 不会从分布中抽取样本,而是返回x 处的概率密度函数。这可能不是您想要的。

要获得随机样本,您真正想要的是调用dist.sample()。对于许多随机分布,随机样本对参数的依赖性是不平凡的,不一定是可反向传播的。

然而,正如@Richard_wth 所指出的,特别是对于正态分布,可以通过重新参数化来获得对位置和尺度参数(musigma)的简单依赖。

其实在tf.contrib.distributions.Normalthe implementation(最近迁移到tf.distributions.Normal)中,sample就是这样实现的:

def _sample_n(self, n, seed=None):
  ...
  sampled = random_ops.random_normal(shape=shape, mean=0., stddev=1., ...)
  return sampled * self.scale + self.loc

因此,如果您将尺度和位置参数作为张量提供,那么反向传播将在这些张量上正常工作。

请注意,这种反向传播本质上是随机的:它会根据正常高斯变量的随机抽取而变化。但是,从长远来看(在许多训练示例中),这可能会如您所愿。

【讨论】:

  • 您好,我了解随机抽样和通过大数定律收敛,我想要一个 x 处的概率密度,它不会是“随机的”。您提供给实现的链接使用位置和比例参数计算“z 分数”,那么优化器会通过梯度优化这些吗?
  • 是的,我相信是的。但是,如果您所做的事情没有随机性,您也可以自己计算 pdf 的公式。
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2023-03-27
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多