Это реализовано как простое tfb.Chain из tfb.FillTriangular, за которым следует tfb.TransformDiagonal, и предоставлено в основном для удобства. По умолчанию используется несколько субъективная настройка, использующая преобразование Softplus, за которым следует небольшой сдвиг (1e-5), который пытается избежать числовых проблем с нулями на диагонали.
Примеры
import tensorflow_probability as tfp
tfd = tfp.distributions
tfb = tfp.bijectors
b = tfb.ScaleTriL(
diag_bijector=tfb.Exp(),
diag_shift=None)
b.forward(x=[0., 0., 0.])
# Result: [[1., 0.],
# [0., 1.]]
b.inverse(y=[[1., 0],
[.5, 2]])
# Result: [log(2), .5, log(1)]
# Define a distribution over PSD matrices of shape `[3, 3]`,
# with `1 + 2 + 3 = 6` degrees of freedom.
dist = tfd.TransformedDistribution(
tfd.Normal(tf.zeros(6), tf.ones(6)),
tfb.Chain([tfb.CholeskyOuterProduct(), tfb.ScaleTriL()]))
# Using an identity transformation, ScaleTriL is equivalent to
# tfb.FillTriangular.
b = tfb.ScaleTriL(
diag_bijector=tfb.Identity(),
diag_shift=None)
# For greater control over initialization, one can manually encode
# pre- and post- shifts inside of `diag_bijector`.
b = tfb.ScaleTriL(
diag_bijector=tfb.Chain([
tfb.AffineScalar(shift=1e-3),
tfb.Softplus(),
tfb.AffineScalar(shift=0.5413)]), # softplus_inverse(1.)
# = log(expm1(1.)) = 0.5413
diag_shift=None)
Аргументы
diag_bijector
экземпляр Bijector, используемый для преобразования выходной диагонали в положительную. Значение по умолчанию: None (т.е. tfb.Softplus()).
diag_shift
Вещественное значение, передаваемое и добавляемое ко всем диагональным элементам после применения diag_bijector. Установка положительного значения заставляет выходные диагональные элементы быть положительными, но не позволяет инвертировать преобразование для матриц с диагональными элементами меньше этого значения. Значение по умолчанию: 1e-5 (т.е. сдвиг не применяется).
validate_args
Python bool, указывающий, следует ли проверять аргументы на правильность. Значение по умолчанию: False (т.е. аргументы не проверяются).
name
Python str имя, заданное для операций, управляемых этим объектом. Значение по умолчанию: scale_tril.
Атрибуты
bijectors
dtype
тип данных Tensor преобразуемых этим распределением.
forward_min_event_ndims
Возвращает минимальное число измерений, на которых работает bijector.forward.
graph_parents
Возвращает graph_parents этого Bijector в виде списка Python.
inverse_min_event_ndims
Возвращает минимальное число измерений, на которых работает bijector.inverse.
is_constant_jacobian
Возвращает true, если матрица Якоби не является функцией от x.
Примечание: Матрица Якоби либо постоянна для прямого и обратного преобразования, либо для ни одного из них.
name
Возвращает строковое имя этого Bijector.
validate_args
Возвращает True, если тензорные аргументы будут проверены.
Tensor. Вход для вычисления определителя якобиана "вперёд".
event_ndims
Число измерений в вероятностных событиях, преобразуемых. Должно быть больше или равно self.forward_min_event_ndims. Результат суммируется по последним измерениям для получения скалярного определителя якобиана для каждого события, т. е. у него есть форма x.shape.ndims - event_ndims измерений.
name
Имя, которое нужно дать этой операции.
Возвращает
Tensor, если этот биектор инъективный. Если не инъективный, это не реализовано.
Исключения
TypeError
если self.dtype указано и y.dtype не self.dtype.
NotImplementedError
если ни _forward_log_det_jacobian ни {_inverse, _inverse_log_det_jacobian} не реализованы, или это неинъективный биектор.
Обратите внимание, что forward_log_det_jacobian является отрицанием этой функции, вычисленной в точке g^{-1}(y).
Аргументы
y
Tensor. Вход для вычисления определителя обратного якобиана.
event_ndims
Число измерений в вероятностных событиях, преобразуемых. Должно быть больше или равно self.inverse_min_event_ndims. Результат суммируется по последним измерениям, чтобы получить скалярный определитель якобиана для каждого события, т.е. он имеет размерность y.shape.ndims - event_ndims измерений.
name
Имя для этой операции.
Возвращаемое значение
Tensor, если данный биектор является инъективным. Если не инъективен, возвращает кортеж логарифмов определителей местных якобианов, log(det(Dg_i^{-1}(y))), где g_i является ограничением g на ith раздел Di.