张量流是否通过pdf传播梯度

knk*_*knk 5 tensorflow

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

dist = tf.contrib.distributions.Normal(mu, sigma)
Run Code Online (Sandbox Code Playgroud)

从分布中抽取一个样本

val = dist.pdf(x)
Run Code Online (Sandbox Code Playgroud)

该值在模型中用于预测变量

X_hat = f(val)
loss = tf.norm(X_pred-X_hat, ord=2)
Run Code Online (Sandbox Code Playgroud)

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

train = tf.train.AdamOptimizer(1e-03).minimize(loss, var_list=[mu, sigma])
Run Code Online (Sandbox Code Playgroud)

我想知道梯度例程是否通过正态分布传播,或者我应该期待一些问题,因为我正在对定义分布的参数进行梯度处理

Zvi*_*ika 5

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

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

要获得随机样本,您真正想要的是致电dist.sample()。对于许多随机分布,随机样本对参数的依赖性是不平凡的,并且不一定是可逆的。

但是,正如@Richard_wth所指出的,特别是对于正态分布,可以通过重新参数化来简单地依赖于位置和比例参数(musigma)。

实际上,在(最近迁移到)的实现中,这正是实现方式:tf.contrib.distributions.Normaltf.distributions.Normalsample

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

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

请注意,这种反向传播本质上是随机的:它将根据正常高斯变量的随机抽取而变化。但是,从长远来看(通过许多培训示例),这可能会按您期望的那样工作。