Path: blob/master/site/zh-cn/probability/examples/FFJORD_Demo.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
设置
首先,安装本演示使用的软件包。
FFJORD 双射器
在此 Colab 中,我们将演示 FFJORD 双射器,此双射器最初由 Grathwohl、Will 等人在其论文(arXiv 链接)中提出。
简而言之,这种方式背后的思想是在已知的基础分布与数据分布之间建立对应关系。
为了建立这种联系,我们需要进行以下操作:
在定义基础分布的空间 与数据域的空间 之间定义一个双射映射 , 。
有效地跟踪我们执行的将概率概念转移到 上的变形。
在 上定义的概率分布的以下表达式中对第二个条件进行了形式化:
FFJORD 双射器通过定义以下转换来实现这一点:
只要描述状态 演化的函数 表现良好,并且可以通过集成以下表达式来计算 log_det_jacobian
,则此转换可逆。
在此演示中,我们将训练 FFJORD 双射器,将高斯分布扭曲到 moons
数据集定义的分布上。这将分 3 个步骤完成:
定义基础分布
定义 FFJORD 双射器
最小化数据集的精确对数似然。
首先,我们加载数据
接下来,我们实例化基础分布
我们使用多层感知器对 state_derivative_fn
进行建模。
虽然对此数据集来说并非必需,但使 state_derivative_fn
依赖于时间通常有益。在这里,我们通过将 t
连接到网络的输入来实现这一点。
现在,我们构造一个 FFJORD 双射器的堆栈。为每个双射器提供 ode_solve_fn
和 trace_augmentation_fn
,以及它自己的 state_derivative_fn
模型,因此它们表示一个不同转换的序列。
现在,我们可以使用 TransformedDistribution
,这是使用 stacked_ffjord
双射器扭曲 base_distribution
的结果。
现在,我们来定义训练过程。只需使数据的负对数似然最小化。
根据基础分布和转换分布绘制样本。
0%| | 0/40 [00:00<?, ?it/s]
通过学习率对其训练更长时间,可获得进一步改善。
本例中未涉及,FFJORD 双射器支持哈钦森的随机迹估算。可通过 trace_augmentation_fn
提供特定的 estimator。同样,也可以通过定义自定义 ode_solve_fn
来使用替代积分器。