Spec-Zone.ru › TensorFlow 1.15

tf.contrib.distributions.QuantizedDistribution

Распределение, представляющее квантование Y = ceiling(X).

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

tf.contrib.distributions.QuantizedDistribution(
    distribution, low=None, high=None, validate_args=False,
    name='QuantizedDistribution'
)

Определение в терминах выборки

1. Draw X
2. Set Y <-- ceiling(X)
3. If Y < low, reset Y <-- low
4. If Y > high, reset Y <-- high
5. Return Y

Определение в терминах функции вероятностной массы

Дано скалярная случайная величина X, мы определяем дискретную случайную величину Y со значениями на целых числах следующим образом:

P[Y = j] := P[X <= low],  if j == low,
         := P[X > high - 1],  j == high,
         := 0, if j < low or j > high,
         := P[j - 1 < X <= j],  all other j.

Понятие, без отсечений, процесс квантования разделяет действительную ось R на полуоткрытые интервалы и идентифицирует целое число j с правыми концами:

R = ... (-2, -1](-1, 0](0, 1](1, 2](2, 3](3, 4] ...
j = ...      -1      0     1     2     3     4  ...

P[Y = j] — это масса X внутри интервала jth. Если low = 0, и high = 2, то интервалы перерисовываются, и j переназначается:

R = (-infty, 0](0, 1](1, infty)
j =          0     1     2

P[Y = j] всё ещё является массой X внутри интервала jth.

Примеры

Мы иллюстрируем смесь дискретизированных логистических распределений [(Salimans et al., 2017)][1]. Это используется, например, для захвата 16-битного аудио в WaveNet [(van den Oord et al., 2017)][2]. Значения находятся в одномерной целой области [0, 2**16-1], а дискретизация захватывает P(x - 0.5 < X <= x + 0.5) для всех x в области, за исключением конечных точек. Наименьшее значение имеет вероятность P(X <= 0.5), а наибольшее — P(2**16 - 1.5 < X).

Ниже мы предполагаем функцию wavenet. Она принимает в качестве входных данных сдвинутые вправо аудио-образцы формы [..., sequence_length]. Она возвращает вещественный тензор формы [..., num_mixtures * 3], то есть каждый компонент смеси имеет параметры loc и scale логистического распределения и параметр logits, определяющий ненормализованную вероятность этого компонента.

import tensorflow_probability as tfp
tfd = tfp.distributions
tfb = tfp.bijectors

net = wavenet(inputs)
loc, unconstrained_scale, logits = tf.split(net,
                                            num_or_size_splits=3,
                                            axis=-1)
scale = tf.nn.softplus(unconstrained_scale)

# Form mixture of discretized logistic distributions. Note we shift the
# logistic distribution by -0.5. This lets the quantization capture "rounding"
# intervals, `(x-0.5, x+0.5]`, and not "ceiling" intervals, `(x-1, x]`.
discretized_logistic_dist = tfd.QuantizedDistribution(
    distribution=tfd.TransformedDistribution(
        distribution=tfd.Logistic(loc=loc, scale=scale),
        bijector=tfb.AffineScalar(shift=-0.5)),
    low=0.,
    high=2**16 - 1.)
mixture_dist = tfd.MixtureSameFamily(
    mixture_distribution=tfd.Categorical(logits=logits),
    components_distribution=discretized_logistic_dist)

neg_log_likelihood = -tf.reduce_sum(mixture_dist.log_prob(targets))
train_op = tf.train.AdamOptimizer().minimize(neg_log_likelihood)

После создания экземпляра mixture_dist мы иллюстрируем максимальное правдоподобие, вычисляя логарифмическую вероятность аудио-образцов как target и оптимизируя.

Ссылки

[1]: Tim Salimans, Andrej Karpathy, Xi Chen и Diederik P. Kingma. PixelCNN++: улучшение PixelCNN с использованием дискретизированной логистической смеси вероятностей и других модификаций. Международная конференция по представлениям о машинном обучении, 2017. https://arxiv.org/abs/1701.05517 [2]: Aaron van den Oord и др. Параллельный WaveNet: быстрый синтез речи с высоким качеством. arXiv preprint arXiv:1711.10433, 2017. https://arxiv.org/abs/1711.10433

Аргументы
distribution Класс базового распределения для преобразования. Обычно экземпляр Distribution .
low Целое число с той же размерностью, что и это распределение, и формой, которую можно добавлять к выборкам. Должно быть целым числом. По умолчанию None. Если задано, базовая функция распределения должна быть определена в low.
high Целое число с той же размерностью, что и это распределение, и формой, которую можно добавлять к выборкам. Должно быть целым числом. По умолчанию None. Если задано, базовая функция распределения должна быть определена в high - 1. high должно быть строго больше low .
validate_args Python-выражение, по умолчанию False. Когда параметры распределения True проверяются на допустимость, несмотря на возможную деградацию производительности выполнения. Когда False неверные входные данные могут втихаря генерировать некорректные выходные данные.
name Префикс Python-имени к операциям, созданным этим классом.
Исключения
TypeError Если dist_cls не является подклассом Distribution или непрерывным.
NotImplementedError Если базовая функция распределения не реализует cdf.
Атрибуты
allow_nan_stats Python-выражение, описывающее поведение при неопределённом статистическом показателе.

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

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

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

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

distribution Базовое распределение, p(x).
dtype Значение DType Tensor обработанных этим Distribution.
event_shape Размерность одной выборки из одного пакета в виде TensorShape.

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

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

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

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]

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

Для целых чисел y:

cdf(y) := P[Y <= y]
        = 1, if y >= high,
        = 0, if y < low,
        = P[X <= y], otherwise.

Поскольку Y имеет массу только в целых числах, P[Y <= y] = P[Y <= floor(y)]. Это подразумевает, что дробные y сначала округляются до ближайшего целого числа, и затем применяется вышеприведенное определение.

Метод cdf базового распределения должен быть определён в y - 1.

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

entropy

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

entropy(
    name='entropy'
)

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

event_shape_tensor

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

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одного образца из одного пакета как целочисленный вектор 1-D 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[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.

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

Для целых чисел y,

cdf(y) := P[Y <= y]
        = 1, if y >= high,
        = 0, if y < low,
        = P[X <= y], otherwise.

Так как у Y есть масса только в целых числах, P[Y <= y] = P[Y <= floor(y)]. Это означает, что дробные y сначала округляются до ближайшего целого, а затем применяется приведенное выше определение.

Метод log_cdf базового распределения должен быть определён для y - 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'
)

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

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

Для целых чисел y,

P[Y = y] := P[X <= low],  if y == low,
         := P[X > high - 1],  y == high,
         := 0, if j < low or y > high,
         := P[y - 1 < X <= y],  all other y.

Метод log_cdf базового распределения должен быть определён для y - 1. Если у базового распределения есть метод log_survival_function, результаты будут более точными для больших значений y, и в этом случае метод log_survival_function также должен быть определён для y - 1.

Аргументы
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.

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

Для целых чисел y,

survival_function(y) := P[Y > y]
                      = 0, if y >= high,
                      = 1, if y < low,
                      = P[X <= y], otherwise.

Поскольку у Y есть масса только в целых числах, P[Y <= y] = P[Y <= floor(y)]. Это означает, что дробные y сначала округляются до ближайшего целого числа, а затем применяется вышеприведённое определение.

Метод базового распределения log_cdf должен быть определён для y - 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 Имя префикса для операций.
Возвращаемое значение
Словарь из имени параметра к формам Tensor .

param_static_shapes

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

@classmethod
param_static_shapes(
    sample_shape
)

param_static_shapes, с статическими (т.е. TensorShape) формами.

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

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

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

prob

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

prob(
    value, name='prob'
)

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

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

Для целых чисел y,

P[Y = y] := P[X <= low],  if y == low,
         := P[X > high - 1],  y == high,
         := 0, if j < low or y > high,
         := P[y - 1 < X <= y],  all other y.

Метод базового распределения cdf должен быть определён для y - 1. Если у базового распределения есть метод survival_function, результаты будут более точными для больших значений y, и в этом случае survival_function также должен быть определён для y - 1.

Аргументы
value float или double Tensor.
name Python-префикс str к именам операций, созданных этой функцией.
Возвращаемое значение
prob тензор Tensor формы 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-префикс str к именам операций, созданных этой функцией.
Возвращаемое значение
quantile тензор Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

sample

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

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

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

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

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

stddev

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

stddev(
    name='stddev'
)

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

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

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

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

Аргументы
name Python-префикс str к именам операций, созданных этой функцией.
Возвращаемое значение
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).

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

Для целых чисел y,

survival_function(y) := P[Y > y]
                      = 0, if y >= high,
                      = 1, if y < low,
                      = P[X <= y], otherwise.

Поскольку у Y есть масса только в целых числах, P[Y <= y] = P[Y <= floor(y)]. Это означает, что дробные y сначала округляются до ближайшего целого числа, а затем применяется вышеприведённое определение.

Метод базового распределения cdf должен быть определён для y - 1.

Аргументы
value float или double Tensor.
name Python-префикс str к именам операций, созданных этой функцией.
Возвращаемое значение
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 str, добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
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/QuantizedDistribution

Spec-Zone.ru

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