tf.contrib.distributions.ExpRelaxedOneHotCategorical
Распределение ExpRelaxedOneHotCategorical с температурой и логарифмами.
Наследуется от: Distribution
tf.contrib.distributions.ExpRelaxedOneHotCategorical(
temperature, logits=None, probs=None, dtype=None, validate_args=False,
allow_nan_stats=True, name='ExpRelaxedOneHotCategorical'
)
Распределение ExpRelaxedOneHotCategorical — это логарифмированное распределение RelaxedOneHotCategorical. RelaxedOneHotCategorical — это распределение над случайными векторами вероятностей, векторами положительных вещественных чисел, сумма которых равна единице, которое непрерывно приближает распределение OneHotCategorical. Степень приближения контролируется температурой: при стремлении температуры к 0 RelaxedOneHotCategorical становится дискретным с распределением, описанным логарифмами; при стремлении температуры к бесконечности RelaxedOneHotCategorical становится постоянным распределением, которое тождественно постоянному вектору (1/размер_события, ..., 1/размер_события).
Поскольку вычисление логарифмических вероятностей RelaxedOneHotCategorical может страдать от проблем с потерей точности, этот класс является одним из решений для функций потерь, зависящих от логарифмических вероятностей, таких как расстояние Кульбака-Лейблера, используемое в функциях потерь вариационных автоэнкодеров. Расстояние Кульбака-Лейблера между двумя распределениями инвариантно относительно обратимых преобразований, поэтому вычисление расстояний Кульбака-Лейблера для выборок ExpRelaxedOneHotCategorical, которые всегда следуют за операцией tf.exp, эквивалентно вычислению расстояний Кульбака-Лейблера для выборок RelaxedOneHotCategorical. Дополнительные математические подробности см. в приложении Maddison et al., 2016, где это распределение называется ExpConcrete.
Примеры
Создаёт непрерывное распределение, чья экспонента приближает распределение 3-классовой one-hot категориальной переменной. Второй класс наиболее вероятен для того, чтобы быть крупнейшим компонентом в выборках, полученных из этого распределения. Если этим выборкам следует операция tf.exp, то они распределены как расслабленная one-hot категориальная переменная.
temperature = 0.5 p = [0.1, 0.5, 0.4] dist = ExpRelaxedOneHotCategorical(temperature, probs=p) samples = dist.sample() exp_samples = tf.exp(samples) # exp_samples has the same distribution as samples from # RelaxedOneHotCategorical(temperature, probs=p)
Создаёт непрерывное распределение, чья экспонента приближает распределение 3-классовой one-hot категориальной переменной. Второй класс наиболее вероятен для того, чтобы быть крупнейшим компонентом в выборках, полученных из этого распределения.
temperature = 0.5 logits = [-2, 2, 0] dist = ExpRelaxedOneHotCategorical(temperature, logits=logits) samples = dist.sample() exp_samples = tf.exp(samples) # exp_samples has the same distribution as samples from # RelaxedOneHotCategorical(temperature, probs=p)
Создаёт непрерывное распределение, чья экспонента приближает распределение 3-классовой one-hot категориальной переменной. Поскольку температура очень низкая, выборки из этого распределения почти дискретны, с одним компонентом, почти равным 0, и другими компонентами очень отрицательными. Второй класс наиболее вероятен для того, чтобы быть крупнейшим компонентом в выборках, полученных из этого распределения.
temperature = 1e-5 logits = [-2, 2, 0] dist = ExpRelaxedOneHotCategorical(temperature, logits=logits) samples = dist.sample() exp_samples = tf.exp(samples) # exp_samples has the same distribution as samples from # RelaxedOneHotCategorical(temperature, probs=p)
Создаёт непрерывное распределение, чья экспонента приближает распределение 3-классовой one-hot категориальной переменной. Поскольку температура очень высокая, выборки из этого распределения обычно близки к вектору (-log(3), -log(3), -log(3)). Второй класс по-прежнему наиболее вероятен для того, чтобы быть крупнейшим компонентом в выборках, полученных из этого распределения.
temperature = 10 logits = [-2, 2, 0] dist = ExpRelaxedOneHotCategorical(temperature, logits=logits) samples = dist.sample() exp_samples = tf.exp(samples) # exp_samples has the same distribution as samples from # RelaxedOneHotCategorical(temperature, probs=p)
Chris J. Maddison, Andriy Mnih, and Yee Whye Teh. Распределение Concrete: Непрерывное приближение дискретных случайных величин. 2016.
| Args | |
|---|---|
temperature | 0-мерный Tensor, представляющий температуру набора распределений ExpRelaxedCategorical. Температура должна быть положительной. |
logits | N-мерный Tensor, N >= 1, представляющий логарифмы вероятностей набора распределений ExpRelaxedCategorical. Первые N - 1 измерения индексируют пакет независимых распределений, а последнее измерение представляет собой вектор логарифмов вероятностей для каждого класса. Должен быть передан только один из logits или probs. |
probs | N-мерный Tensor, N >= 1, представляющий вероятности набора распределений ExpRelaxedCategorical. Первые N - 1 измерения индексируют пакет независимых распределений, а последнее измерение представляет собой вектор вероятностей для каждого класса. Должен быть передан только один из logits или probs. |
dtype | Тип выборок событий (по умолчанию: определяется из логарифмов/вероятностей). |
validate_args | Python bool, по умолчанию False. Когда параметры распределения True проверяются на корректность, несмотря на возможную деградацию производительности. Когда False неверные входные данные могут молча привести к некорректным результатам. |
allow_nan_stats | Python bool, по умолчанию True. Когда True, статистические данные (например, среднее значение, мода, дисперсия) используют значение "NaN" для обозначения того, что результат не определён. Когда False, возникает исключение, если один или несколько статистических элементов набора не определены. |
name | Имя Python str, добавленное в префикс к операциям, созданным этим классом. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python bool описывает поведение, когда статистическая величина не определена. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если плотность вероятности распределения не достигает максимума в пределах области определения распределения, мода не определена. Если среднее значение не определено, то, по определению, дисперсия также не определена. Например, среднее значение для распределения Стьюдента для df = 1 не определено (нет ясного способа сказать, что это либо + или - бесконечность), поэтому дисперсия = E[(X - среднее)**2] также не определена. |
batch_shape | Форма одной выборки из одного индекса события как TensorShape. Может быть частично определена или неизвестна. Измерения пакета являются индексами в независимых, не идентичных параметризациях этого распределения. |
dtype | DType Tensors, обрабатываемых этим Distribution. |
event_shape | Форма одной выборки из одного пакета как TensorShape. Может быть частично определена или неизвестна. |
event_size | Скалярный int32 тензор: количество классов. |
logits | Вектор логарифмов вероятностей для каждой координаты. |
name | Префикс имени ко всем операциям, созданным этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
probs | Вектор вероятностей, суммируемых до единицы. |
reparameterization_type | Описание того, как выборки из распределения перепараметризуются. В настоящее время это один из статических экземпляров |
temperature | Тензор температуры для каждого пакета распределения RelaxedCategorical. |
validate_args | Python bool, указывающий, что, возможно, дорогостоящие проверки включены. |
Методы
batch_shape_tensor
batch_shape_tensor(
name='batch_shape_tensor'
)
Форма одной выборки из одного индекса события как одномерный Tensor.
Измерения пакета являются индексами в независимых, не идентичных параметризациях этого распределения.
| Args | |
|---|---|
name | имя, присваиваемое операции |
| Возвращает | |
|---|---|
batch_shape | Tensor. |
cdf
cdf(
value, name='cdf'
)
Функция накопленного распределения.
Для случайной величины X, функция накопленного распределения cdf имеет вид:
cdf(x) := P[X <= x]
| Args | |
|---|---|
value | float или double Tensor. |
name | Python str префикс к именам операций, созданных этой функцией. |
| Возвращает | |
|---|---|
cdf | тензор формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
copy
copy(
**override_parameters_kwargs
)
Создаёт глубокую копию распределения.
Примечание: скопированное распределение может по-прежнему зависеть от исходных аргументов инициализации.
| Args | |
|---|---|
**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 str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс Python str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс Python str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_batch | bool скаляр Tensor. |
is_scalar_event
is_scalar_event(
name='is_scalar_event'
)
Указывает, что event_shape == [].
| Аргументы | |
|---|---|
name | Префикс Python str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс Python str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс Python str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
logcdf | тензор Tensor формы sample_shape(x) + self.batch_shape с значениями типа self.dtype. |
log_prob
log_prob(
value, name='log_prob'
)
Логарифм плотности/массы вероятности.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Префикс Python str к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс Python str к именам операций, созданных этой функцией. |
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 | Имя для добавления префикса к операциям. |
| Возвращаемое значение | |
|---|---|
| Словарь, сопоставляющий имя параметра с его формой. |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
param_shapes со статическими (т.е. TensorShape) формами.
Это метод класса, который описывает, какие аргументы ключ/значение необходимы для создания экземпляра данного Distribution, чтобы в вызове sample() данного экземпляра возвращалась определённая форма. Предполагается, что форма выборки известна статически.
Подклассы должны переопределить метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями, когда подаются постоянные значения.
| Аргументы | |
|---|---|
sample_shape | TensorShape или список/кортеж Python. Желаемая форма вызова sample(). |
| Возвращаемое значение | |
|---|---|
| Словарь, сопоставляющий имя параметра с его статической формой. |
| Исключения | |
|---|---|
ValueError | если sample_shape является TensorShape и не полностью определён. |
prob
prob(
value, name='prob'
)
Функция плотности/массы вероятности.
| Аргументы | |
|---|---|
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:
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 | Вещественный тензор с формой, идентичной 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 для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
тензор формы 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 | Вещественный тензор с формой, идентичной 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/ExpRelaxedOneHotCategorical