Spec-Zone.ru › TensorFlow 1.15

tf.contrib.distributions.MultivariateNormalTriL

Многомерное нормальное распределение над R^k.

tf.contrib.distributions.MultivariateNormalTriL(
    loc=None, scale_tril=None, validate_args=False, allow_nan_stats=True,
    name='MultivariateNormalTriL'
)

Распределение Многомерной Нормали определяется над R^k и параметризуется (пачкой) вектором длины k loc (также известным как "mu") и (пачкой) нижнетреугольной k x k scale матрицей; covariance = scale @ scale.T где @ обозначает матричное умножение.

Математические детали

Функция плотности вероятности (pdf) равна,

pdf(x; loc, scale) = exp(-0.5 ||y||**2) / Z,
y = inv(scale) @ (x - loc),
Z = (2 pi)**(0.5 k) |det(scale)|,

где:

  • loc — это вектор в R^k,
  • scale — это матрица в R^{k x k}, covariance = scale @ scale.T,
  • Z обозначает константу нормирования, и,
  • ||y||**2 обозначает квадрат Евклидовой нормы y.

Матрица (без пакета) scale равна:

scale = scale_tril

где scale_tril — это нижнетреугольная k x k матрица с ненулевой диагональю, т.е. tf.linalg.tensor_diag_part(scale_tril) != 0.

Дополнительные ведущие размерности (если таковые имеются) будут индексировать пакеты.

Распределение MultivariateNormal является членом семейства локально-масштабного, т.е. его можно создать как,

X ~ MultivariateNormal(loc=0, scale=1)   # Identity scale, zero shift.
Y = scale @ X + loc

Обучаемые (пакетные) нижнетреугольные матрицы могут быть созданы с помощью tfp.distributions.matrix_diag_transform() и/или tfp.distributions.fill_triangular()

Примеры

import tensorflow_probability as tfp
tfd = tfp.distributions

# Initialize a single 3-variate Gaussian.
mu = [1., 2, 3]
cov = [[ 0.36,  0.12,  0.06],
       [ 0.12,  0.29, -0.13],
       [ 0.06, -0.13,  0.26]]
scale = tf.linalg.cholesky(cov)
# ==> [[ 0.6,  0. ,  0. ],
#      [ 0.2,  0.5,  0. ],
#      [ 0.1, -0.3,  0.4]])
mvn = tfd.MultivariateNormalTriL(
    loc=mu,
    scale_tril=scale)

mvn.mean().eval()
# ==> [1., 2, 3]

# Covariance agrees with cholesky(cov) parameterization.
mvn.covariance().eval()
# ==> [[ 0.36,  0.12,  0.06],
#      [ 0.12,  0.29, -0.13],
#      [ 0.06, -0.13,  0.26]]

# Compute the pdf of an observation in `R^3` ; return a scalar.
mvn.prob([-1., 0, 1]).eval()  # shape: []

# Initialize a 2-batch of 3-variate Gaussians.
mu = [[1., 2, 3],
      [11, 22, 33]]              # shape: [2, 3]
tril = ...  # shape: [2, 3, 3], lower triangular, non-zero diagonal.
mvn = tfd.MultivariateNormalTriL(
    loc=mu,
    scale_tril=tril)

# Compute the pdf of two `R^3` observations; return a length-2 vector.
x = [[-0.9, 0, 0.1],
     [-10, 0, 9]]     # shape: [2, 3]
mvn.prob(x).eval()    # shape: [2]

# Instantiate a "learnable" MVN.
dims = 4
with tf.compat.v1.variable_scope("model"):
  mvn = tfd.MultivariateNormalTriL(
      loc=tf.compat.v1.get_variable(shape=[dims], dtype=tf.float32,
      name="mu"),
      scale_tril=tfd.fill_triangular(
          tf.compat.v1.get_variable(shape=[dims * (dims + 1) / 2],
                          dtype=tf.float32, name="chol_Sigma")))
Аргументы
loc Число с плавающей запятой Tensor. Если это установлено как None, loc неявно 0. При указании может иметь форму [B1, ..., Bb, k], где b >= 0 и k — размер события.
scale_tril Число с плавающей запятой, нижнетреугольная Tensor с ненулевыми диагональными элементами. scale_tril имеет форму [B1, ..., Bb, k, k], где `b

= 0andkis the event size. </td> </tr><tr> <td>validate_args</td> <td> Pythonbool, defaultFalse. WhenTruedistribution parameters are checked for validity despite possibly degrading runtime performance. WhenFalseinvalid inputs may silently render incorrect outputs. </td> </tr><tr> <td>allow_nan_stats</td> <td> Pythonbool, defaultTrue. WhenTrue, statistics (e.g., mean, mode, variance) use the value "NaN" to indicate the result is undefined. WhenFalse, an exception is raised if one or more of the statistic's batch members are undefined. </td> </tr><tr> <td>name</td> <td> Pythonstr` имя, добавляемое к операциям, созданным этим классом.

Исключения
ValueError если ни loc ни scale_tril не указаны.
Атрибуты
allow_nan_stats Python-описание поведения при отсутствии статистики.

Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если функция плотности распределения не достигает максимума в пределах области распределения, мода не определена. Если среднее значение не определено, то дисперсия по определению не определена. Например, среднее значение для распределения Стьюдента при df = 1 не определено (нет ясного способа сказать, что это либо + либо - бесконечность), поэтому дисперсия = E[(X - среднее)**2] также не определена.

batch_shape Форма одного образца из одного индекса события как TensorShape.

Может быть частично определена или неизвестна.

Измерения пакетной обработки индексируют независимые, нетождественные параметризации этого распределения.

bijector Функция, преобразующая x => y.
distribution Базовое распределение, p(x).
dtype DType Tensors, обрабатываемые этим Distribution.
event_shape Форма одного образца из одной группы как TensorShape.

Может быть частично определена или неизвестна.

loc loc Tensor в Y = scale @ X + loc.
name Префикс имени ко всем операциям, созданным этим Distribution.
parameters Словарь параметров, используемых для создания этого Distribution.
reparameterization_type Описывает, как образцы из распределения перепараметризованы.

В настоящее время это один из статических экземпляров distributions.FULLY_REPARAMETERIZED или distributions.NOT_REPARAMETERIZED.

scale scale LinearOperator в Y = scale @ X + loc.
validate_args Python-индикатор, указывающий, возможно, на включение дорогостоящих проверок.

Методы

batch_shape_tensor

Просмотреть исходный код

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма одного образца из одного индекса события как одномерный Tensor.

Измерения пакетной обработки индексируют независимые, нетождественные параметризации этого распределения.

Аргументы
name имя, присваиваемое операции
Возвращаемое значение
batch_shape Tensor.

cdf

Просмотреть исходный код

cdf(
    value, name='cdf'
)

Функция накопленного распределения.

Для случайной величины X, функция накопленного распределения cdf равна:

cdf(x) := P[X <= x]
Аргументы
value float или double Tensor.
name Python-префикс имен операций, созданных этой функцией.
Возвращаемое значение
cdf Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

copy

Просмотреть исходный код

copy(
    **override_parameters_kwargs
)

Создает глубокую копию распределения.

Примечание: распределение копии может по-прежнему зависеть от исходных аргументов инициализации.
Аргументы
**override_parameters_kwargs Строковый/словарный словарь аргументов инициализации, которые нужно переопределить новыми значениями.
Возвращаемое значение
distribution Новый экземпляр type(self) инициализирован из объединения self.parameters и override_parameters_kwargs, т.е. dict(self.parameters, **override_parameters_kwargs).

covariance

Просмотреть исходный код

covariance(
    name='covariance'
)

Ковариация.

Ковариация (возможно) определяется только для распределений с нескалярным событием.

Например, для распределения со значением длины k, векторного значения, она вычисляется как,

Cov[i, j] = Covariance(X_i, X_j) = E[(X_i - E[X_i]) (X_j - E[X_j])]

где Cov — (пакет из) k x k матрицы, 0 <= (i, j) < k, и E обозначает математическое ожидание.

В противном случае, для не векторных, многомерных распределений (например, матрично-значных, Вишарта), Covariance должен возвращать (пакет из) матриц в рамках некоторой векторизации событий, т.е.

Cov[i, j] = Covariance(Vec(X)_i, Vec(X)_j) = [as above]

где Cov — (пакет из) k' x k' матриц, 0 <= (i, j) < k' = reduce_prod(event_shape), и Vec — некоторая функция, сопоставляющая индексы размерностей события данного распределения с индексами вектора длины k'.

Аргументы
name Python-префикс имен операций, созданных этой функцией.
Возвращаемое значение
covariance Число с плавающей запятой Tensor с формой [B1, ..., Bn, k', k'], где первые n измерения являются координатами пакета, и k' = reduce_prod(self.event_shape).

cross_entropy

Просмотреть исходный код

cross_entropy(
    other, name='cross_entropy'
)

Вычисляет кросс-энтропию (Шеннона).

Обозначим это распределение (self) через P и распределение other через Q. Предполагая, что P, Q абсолютно непрерывны друг относительно друга и допускают плотности p(x) dr(x) и q(x) dr(x), кросс-энтропия (Шеннона) определяется как:

H[P, Q] = E_p[-log q(X)] = -int_F p(x) log q(x) dr(x)

где F обозначает область определения случайной величины X ~ P.

Аргументы
other Экземпляр tfp.distributions.Distribution.
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
cross_entropy self.dtype Tensor с формой [B1, ..., Bn], представляющей собой n различных расчётов кросс-энтропии (энтропии Шеннона).

entropy

Просмотреть исходный код

entropy(
    name='entropy'
)

Энтропия Шеннона в натах.

event_shape_tensor

Просмотреть исходный код

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одного образца из одной группы в виде 1-мерного int32 Tensor.

Аргументы
name Имя для операции
Возвращаемое значение
event_shape Tensor.

is_scalar_batch

Просмотреть исходный код

is_scalar_batch(
    name='is_scalar_batch'
)

Указывает, что batch_shape == [].

Аргументы
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
is_scalar_batch bool скаляр Tensor.

is_scalar_event

Просмотреть исходный код

is_scalar_event(
    name='is_scalar_event'
)

Указывает, что event_shape == [].

Аргументы
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
is_scalar_event bool скаляр Tensor.

kl_divergence

Просмотреть исходный код

kl_divergence(
    other, name='kl_divergence'
)

Вычисляет расстояние Кульбака—Лайблера.

Обозначим это распределение (self) как p, а распределение other как q. Предполагая, что p, q абсолютно непрерывны относительно меры отсчёта r, расстояние KL определяется как:

KL[p, q] = E_p[log(p(X)/q(X))]
         = -int_F p(x) log q(x) dr(x) + int_F p(x) log p(x) dr(x)
         = H[p, q] - H[p]

где F обозначает область определения случайной величины X ~ p, H[., .] обозначает (энтропию Шеннона) кросс-энтропию, а H[.] обозначает (энтропию Шеннона) энтропию.

Аргументы
other Экземпляр tfp.distributions.Distribution.
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
kl_divergence self.dtype Tensor с формой [B1, ..., Bn], представляющей собой n различных расчётов расстояния Кульбака—Лайблера.

log_cdf

Просмотреть исходный код

log_cdf(
    value, name='log_cdf'
)

Логарифмическая кумулятивная функция распределения.

Для случайной величины X, кумулятивная функция распределения cdf имеет вид:

log_cdf(x) := Log[ P[X <= x] ]

Часто для log_cdf(x) можно использовать численное приближение, которое даёт более точный результат, чем просто логарифмирование cdf, когда x << -1.

Аргументы
value float или double Tensor.
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
logcdf Tensor формы sample_shape(x) + self.batch_shape с значениями типа self.dtype.

log_prob

Просмотреть исходный код

log_prob(
    value, name='log_prob'
)

Логарифмическая функция плотности/массы вероятности.

Дополнительная документация из MultivariateNormalLinearOperator:

value — это вектор группы с совместимой формой, если value — это Tensor, форма которого может быть расширена до:

self.batch_shape + self.event_shape

или

[M1, ..., Mm] + self.batch_shape + self.event_shape
Аргументы
value float или double Tensor.
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
log_prob Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

log_survival_function

Просмотреть исходный код

log_survival_function(
    value, name='log_survival_function'
)

Логарифмическая функция выживания.

Для случайной величины X, функция выживания определяется как:

log_survival_function(x) = Log[ P[X > x] ]
                         = Log[ 1 - P[X <= x] ]
                         = Log[ 1 - cdf(x) ]

Обычно для логарифмической функции выживания можно использовать различные численные приближения, которые более точны, чем 1 - cdf(x) при x >> 1.

Аргументы
value float или double Tensor.
name Префикс для имён операций, созданных этой функцией.
Возвращаемое значение
Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

mean

Просмотреть исходный код

mean(
    name='mean'
)

Математическое ожидание.

mode

Просмотреть исходный код

mode(
    name='mode'
)

Мода.

param_shapes

Просмотреть исходный код

@classmethod
param_shapes(
    sample_shape, name='DistributionParamShapes'
)

Формы параметров при заданной форме вызова sample().

Это метод класса, который описывает, какие пары «ключ-значение» необходимы для создания экземпляра данного Distribution, чтобы при вызове sample() у этого экземпляра возвращалась определённая форма.

Подклассы должны переопределять метод класса _param_shapes.

Аргументы
sample_shape Tensor или список/кортеж Python. Желаемая форма вызова sample().
name Имя для добавления префикса к операциям.
Возвращаемое значение
Отображение имени параметра на формы Tensor.

param_static_shapes

Просмотреть исходный код

@classmethod
param_static_shapes(
    sample_shape
)

param_shapes с постоянными (т. е. TensorShape) формами.

Это метод класса, описывающий необходимые аргументы ключевое слово/значение для создания заданного Distribution, чтобы при вызове sample() экземпляром возвращалась определённая форма. Предполагается, что форма образца известна статически.

Подклассы должны переопределять метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при подаче постоянных значений.

Аргументы
sample_shape TensorShape или список/кортеж Python. Желаемая форма вызова sample().
Возвращаемое значение
dict имени параметра к TensorShape.
Исключения
ValueError если sample_shape является TensorShape и не определён полностью.

prob

Просмотреть исходный код

prob(
    value, name='prob'
)

Функция плотности/массы вероятности.

Дополнительная документация из MultivariateNormalLinearOperator:

value — это пакетный вектор с совместимой формой, если value является Tensor с формой, которая может быть расширена до одной из:

self.batch_shape + self.event_shape

или

[M1, ..., Mm] + self.batch_shape + self.event_shape
Аргументы
value float или double Tensor.
name Предшествующая Python-строка, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
prob тензор с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

quantile

Просмотреть исходный код

quantile(
    value, name='quantile'
)

Функция квантиля. Также известна как «обратная функция распределения» или «функция процентиля».

Для случайной величины X и p in [0, 1] значение квантиля:

quantile(p) := x such that P[X <= x] == p
Аргументы
value float или double Tensor.
name Предшествующая Python-строка, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
quantile тензор с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

sample

Просмотреть исходный код

sample(
    sample_shape=(), seed=None, name='sample'
)

Генерировать образцы указанной формы.

Обратите внимание, что вызов sample() без аргументов сгенерирует один образец.

Аргументы
sample_shape 0D или 1D int32 Tensor. Форма сгенерированных образцов.
seed Целое число Python-семя для генератора случайных чисел.
name Имя операции.
Возвращаемое значение
samples тензор с добавленными размерностями sample_shape.

stddev

Просмотреть исходный код

stddev(
    name='stddev'
)

Среднеквадратическое отклонение.

Среднеквадратическое отклонение определяется как,

stddev = E[(X - E[X])**2]**0.5

где X — случайная величина, связанная с этим распределением, E — математическое ожидание, а stddev.shape = batch_shape + event_shape.

Аргументы
name Предшествующая Python-строка, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
stddev Вещественный Tensor с формой, совпадающей с batch_shape + event_shape, т. е. такой же формы, как у self.mean().

survival_function

Просмотреть исходный код

survival_function(
    value, name='survival_function'
)

Функция выживания.

Для случайной величины X, функция выживания определяется:

survival_function(x) = P[X > x]
                     = 1 - P[X <= x]
                     = 1 - cdf(x).
Аргументы
value float или double Tensor.
name Предшествующая Python-строка, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

variance

Просмотреть исходный код

variance(
    name='variance'
)

Дисперсия.

Дисперсия определяется как,

Var = E[(X - E[X])**2]

где X — случайная величина, связанная с этим распределением, E — математическое ожидание, а Var.shape = batch_shape + event_shape.

Аргументы
name Предшествующая Python-строка, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
variance Вещественный Tensor с формой, совпадающей с batch_shape + event_shape, т. е. такой же формы, как у self.mean().

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/distributions/MultivariateNormalTriL

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API