可以说,分配函数的定义如下:
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])
我有兴趣知道渐变例程是通过正态分布传播的,还是我应该期待一些问题,因为我对定义分布的参数进行渐变
答案 0 :(得分:5)
tl; dr:是的,渐变反向传播可以与beat.name:
ebb8a5ec413b
beat.hostname:
ebb8a5ec413b
host:
ebb8a5ec413b
tags:
beat.version:
6.2.2
source:
/opt/apache-tomcat-7.0.82/logs/IDExtraction.log
otype:
extractOCRData
duration:
12344
transaction_id:
abcdef1234
@timestamp:
April 9th 2018, 16:20:31.853
offset:
805,655
@version:
1
error:
error
message:
2017-01-05T14:28:00 INFO zeppelin IDExtractionService transactionId abcdef1234 operation extractOCRData received request duration 12344 exception error occured
_id:
7X0HqmIBj3MEd9pqhTu9
_type:
doc
_index:
filebeat-2018.04.09
_score:
6.315
一起正常工作。
tf.distributions.Normal
不从分布中抽取样本,而是返回dist.pdf(x)
处的概率密度函数。这可能不是你想要的。
要获得随机样本,您真正想要的是致电x
。对于许多随机分布,随机样本对参数的依赖性是非常重要的,并且不一定是可逆的。
然而,正如@Richard_wth指出的那样,特别是对于正态分布,可以通过重新参数化来获得对位置和比例参数的简单依赖(dist.sample()
和mu
)。
事实上,在sigma
tf.contrib.distributions.Normal
(最近迁移到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
因此,如果您提供缩放和位置参数作为张量,则反向传播将在这些张量上正常工作。
请注意,这种反向传播本质上是随机的:它将根据普通高斯变量的随机抽取而变化。但是,从长远来看(通过许多培训示例),这可能会像您期望的那样发挥作用。