Spec-Zone.ru › TensorFlow 2.3

tf.compat.v1.distributions.Dirichlet

Распределение Дирихле.

Наследуется от: Distribution

tf.compat.v1.distributions.Dirichlet(
    concentration, validate_args=False, allow_nan_stats=True, name='Dirichlet'
)

Распределение Дирихле определено на (k-1)-симплексе с использованием положительного вектора длины k concentration (k > 1). Распределение Дирихле идентично распределению Бета, когда k = 2.

Математические подробности

Распределение Дирихле является распределением на открытом (k-1)-симплексе, т.е.

S^{k-1} = { (x_0, ..., x_{k-1}) in R^k : sum_j x_j = 1 and all_j x_j > 0 }.

Плотность вероятности (pdf) равна,

pdf(x; alpha) = prod_j x_j**(alpha_j - 1) / Z
Z = prod_j Gamma(alpha_j) / Gamma(sum_j alpha_j)

где:

  • x in S^{k-1}, т.е., (k-1)-симплекс,
  • concentration = alpha = [alpha_0, ..., alpha_{k-1}], alpha_j > 0,
  • Z является константой нормировки, также известной как многомерная бета-функция, и,
  • Gamma является гамма-функцией.

concentration представляет собой среднее общее количество появлений классов, т.е.

concentration = alpha = mean * total_concentration

где mean в S^{k-1} и total_concentration — положительное действительное число, представляющее среднее общее количество.

Параметры распределения автоматически транслируются во всех функциях; см. примеры для получения подробностей.

Предупреждение: Некоторые компоненты выборок могут быть равны нулю из-за конечной точности. Это случается чаще, когда некоторые концентрации очень малы. Убедитесь, что вы округляете выборки до np.finfo(dtype).tiny перед вычислением плотности.

Образцы из этого распределения перепараметризованы (с возможностью вычисления по траекториям). Производные вычисляются с использованием метода, описанного в (Figurnov et al., 2018).

Примеры

import tensorflow_probability as tfp
tfd = tfp.distributions

# Create a single trivariate Dirichlet, with the 3rd class being three times
# more frequent than the first. I.e., batch_shape=[], event_shape=[3].
alpha = [1., 2, 3]
dist = tfd.Dirichlet(alpha)

dist.sample([4, 5])  # shape: [4, 5, 3]

# x has one sample, one batch, three classes:
x = [.2, .3, .5]   # shape: [3]
dist.prob(x)       # shape: []

# x has two samples from one batch:
x = [[.1, .4, .5],
     [.2, .3, .5]]
dist.prob(x)         # shape: [2]

# alpha will be broadcast to shape [5, 7, 3] to match x.
x = [[...]]   # shape: [5, 7, 3]
dist.prob(x)  # shape: [5, 7]
# Create batch_shape=[2], event_shape=[3]:
alpha = [[1., 2, 3],
         [4, 5, 6]]   # shape: [2, 3]
dist = tfd.Dirichlet(alpha)

dist.sample([4, 5])  # shape: [4, 5, 2, 3]

x = [.2, .3, .5]
# x will be broadcast as [[.2, .3, .5],
#                         [.2, .3, .5]],
# thus matching batch_shape [2, 3].
dist.prob(x)         # shape: [2]

Вычислить градиенты выборок по параметрам:

alpha = tf.constant([1.0, 2.0, 3.0])
dist = tfd.Dirichlet(alpha)
samples = dist.sample(5)  # Shape [5, 3]
loss = tf.reduce_mean(tf.square(samples))  # Arbitrary loss function
# Unbiased stochastic gradients of the loss function
grads = tf.gradients(loss, alpha)

Ссылки:

Неявные градиенты перепараметризации: Figurnov et al., 2018 (pdf)

Аргументы
concentration Положительное число с плавающей точкой Tensor , указывающее среднее количество появлений класса; также известен как "альфа". Подразумевает self.dtype, и self.batch_shape, self.event_shape, т.е., если concentration.shape = [N1, N2, ..., Nm, k] , то batch_shape = [N1, N2, ..., Nm] и event_shape = [k].
validate_args Python bool, по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможную деградацию производительности во время выполнения. Когда False некорректные входные данные могут безмолвно привести к неправильным результатам.
allow_nan_stats Python bool, по умолчанию True. Когда True, статистические данные (например, среднее значение, мода, дисперсия) используют значение "NaN" для обозначения того, что результат не определен. Когда False, возникает исключение, если один или несколько элементов партии статистики не определены.
name Имя Python str , добавляемое к операциям, созданным этим классом.
Атрибуты
allow_nan_stats Python bool , описывающий поведение при неопределенности статистик.

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

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

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

Размерность партии — индексы независимых, но не идентичных параметризаций данного распределения.

concentration Параметр концентрации; ожидаемые подсчеты для этой координаты.
dtype DType Tensor , обрабатываемые этим Distribution.
event_shape Форма одного образца из одной партии в виде TensorShape.

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

name Имя, добавляемое ко всем операциям, созданным этим Distribution.
parameters Словарь параметров, используемых для создания этого Distribution.
reparameterization_type Описание того, как образцы из распределения перепараметризованы.

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

total_concentration Сумма последнего измерения параметра концентрации.
validate_args Python bool , указывающий, что возможно дорогостоящие проверки включены.

Методы

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 str , добавляемое к именам операций, созданных этой функцией.
Возвращает
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 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, добавляемое к именам операций, созданных этой функцией.
Возвращаемое значение
cross_entropy self.dtype Tensor с формой [B1, ..., Bn], представляющей n различные вычисления (энтропии Шеннона).

data-text="entropy" id="entropy" tabindex="0">entropy

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

entropy(
    name='entropy'
)

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

data-text="event_shape_tensor" id="event_shape_tensor" tabindex="0">event_shape_tensor

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

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одного образца из одной партии в виде 1-мерного целочисленного значения int32 Tensor.

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

data-text="is_scalar_batch" id="is_scalar_batch" tabindex="0">is_scalar_batch

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

is_scalar_batch(
    name='is_scalar_batch'
)

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

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

data-text="is_scalar_event" id="is_scalar_event" tabindex="0">is_scalar_event

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

is_scalar_event(
    name='is_scalar_event'
)

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

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

data-text="kl_divergence" id="kl_divergence" tabindex="0">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, добавляемое к именам операций, созданных этой функцией.
Возвращаемое значение
kl_divergence self.dtype Tensor с формой [B1, ..., Bn], представляющей n различные вычисления расхождения Кульбака-Лайблера.

data-text="log_cdf" id="log_cdf" tabindex="0">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, добавляемое к именам операций, созданных этой функцией.
Возвращаемое значение
logcdf Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

data-text="log_prob" id="log_prob" tabindex="0">log_prob

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

log_prob(
    value, name='log_prob'
)

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

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

Примечание: value должна быть неотрицательным тензором с типом self.dtype и принадлежать к (self.event_shape() - 1)-симплексу, т. е. tf.reduce_sum(value, -1) = 1. Она должна иметь форму, совместимую с self.batch_shape() + self.event_shape().
Аргументы
value float или double Tensor.
name Предположение Python, добавляемое к именам операций, созданных этой функцией.
Возвращаемое значение
log_prob Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

data-text="log_survival_function" id="log_survival_function" tabindex="0">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, добавляемое к именам операций, созданных этой функцией.
Возвращаемое значение
Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

data-text="mean" id="mean" tabindex="0">mean

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

mean(
    name='mean'
)

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

data-text="mode" id="mode" tabindex="0">mode

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

mode(
    name='mode'
)

Мода.

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

Примечание: Мода не определена, когда любая concentration <= 1. Если self.allow_nan_stats является True, используется NaN для неопределённых мод. Если self.allow_nan_stats является False, при неопределённых модах возникает исключение.

data-text="param_shapes" id="param_shapes" tabindex="0">param_shapes

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

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

Формы параметров с учётом желаемой формы вызова sample().

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

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

Аргументы
sample_shape Tensor или список/кортеж Python. Желаемая форма вызова sample().
name имя для добавления к операциям.
Возвращает
dict имени параметра к форматам 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'
)

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

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

Примечание: value должно быть ненулевым тензором с типом self.dtype и находиться в (self.event_shape() - 1)-симплексе, т. е. tf.reduce_sum(value, -1) = 1. Оно должно иметь форму, совместимую с 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:

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 для генератора псевдослучайных чисел (RNG)
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/r2.3/api_docs/python/tf/compat/v1/distributions/Dirichlet

Spec-Zone.ru

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