Spec-Zone.ru › TensorFlow

tf.keras.layers.LayerNormalization

Слой нормализации по слоям (Ba et al., 2016).

Наследует от: Layer, Operation

tf.keras.layers.LayerNormalization(
    axis=-1,
    epsilon=0.001,
    center=True,
    scale=True,
    rms_scaling=False,
    beta_initializer='zeros',
    gamma_initializer='ones',
    beta_regularizer=None,
    gamma_regularizer=None,
    beta_constraint=None,
    gamma_constraint=None,
    **kwargs
)

Используется в блокнотах

Используется в учебных пособиях
  • Создание описаний изображений с визуальным вниманием
  • Нейронный машинный перевод с Transformer и Keras
  • Нейронный машинный перевод с механизмом внимания

Нормализует активации предыдущего слоя независимо для каждого заданного примера в пакете, а не для всего пакета, как при пакетной нормализации. То есть применяет преобразование, которое поддерживает среднее значение активации каждого примера близким к 0, а стандартное отклонение активации — близким к 1.

Если включены scale или center, слой масштабирует нормализованные выходные данные, распространяя по ним обучаемую переменную gamma, и центрирует выходные данные, распространяя по ним обучаемую переменную beta. По умолчанию gamma будет тензором единиц, а beta — тензором нулей, поэтому до начала обучения центрирование и масштабирование не будут оказывать эффекта.

Таким образом, при включенных масштабировании и центрировании уравнения нормализации выглядят следующим образом:

Пусть промежуточные активации мини-пакета задаются как inputs.

Для каждого примера x_i в inputs с k признаками вычислим среднее и дисперсию примера:

mean_i = sum(x_i[j] for j in range(k)) / k
var_i = sum((x_i[j] - mean_i) ** 2 for j in range(k)) / k

а затем вычислим нормализованное значение x_i_normalized, добавив небольшую величину epsilon для обеспечения численной устойчивости.

x_i_normalized = (x_i - mean_i) / sqrt(var_i + epsilon)

И наконец, x_i_normalized линейно преобразуется с помощью gamma и beta — обучаемых параметров:

output_i = x_i_normalized * gamma + beta

gamma и beta охватывают оси inputs, заданные в axis; эта часть формы входных данных должна быть полностью определена.

Например:

layer = keras.layers.LayerNormalization(axis=[1, 2, 3])
layer.build([5, 20, 30, 40])
print(layer.beta.shape)
(20, 30, 40)
print(layer.gamma.shape)
(20, 30, 40)

Обратите внимание, что в других реализациях нормализации по слоям параметры gamma и beta могут определяться по отдельному набору осей, отличному от осей, по которым выполняется нормализация. Например, групповая нормализация (Wu et al., 2018) с размером группы 1 соответствует нормализации по слоям, выполняемой по высоте, ширине и каналам, при этом gamma и beta охватывают только измерение каналов. Поэтому эта реализация нормализации по слоям не будет соответствовать слою групповой нормализации с размером группы 1.

Аргументы
axis Целое число или список/кортеж. Ось или оси, по которым выполняется нормализация. Обычно это ось или оси признаков. Оси, которые не учитываются, обычно являются осями пакета. -1 — последнее измерение входных данных. Значение по умолчанию — -1.
epsilon Небольшое число с плавающей запятой, добавляемое к дисперсии, чтобы избежать деления на ноль. Значение по умолчанию — 1e-3.
center Если значение равно True, к нормализованному тензору добавляется смещение beta. Если значение равно False, beta игнорируется. Значение по умолчанию — True.
scale Если значение равно True, выполняется умножение на gamma. Если значение равно False, gamma не используется. Если следующий слой является линейным (например, nn.relu), этот параметр можно отключить, поскольку масштабирование будет выполнено следующим слоем. Значение по умолчанию — True.
rms_scaling Если значение равно True, center и scale игнорируются, а входные данные масштабируются на gamma и обратный квадратный корень из суммы квадратов всех входных данных. Это приближенный и более быстрый подход, позволяющий не вычислять среднее значение входных данных.
beta_initializer Инициализатор веса beta. По умолчанию — нули.
gamma_initializer Инициализатор веса gamma. По умолчанию — единицы.
beta_regularizer Необязательный регуляризатор веса beta. По умолчанию отсутствует.
gamma_regularizer Необязательный регуляризатор веса gamma. По умолчанию отсутствует.
beta_constraint Необязательное ограничение для веса beta. По умолчанию отсутствует.
gamma_constraint Необязательное ограничение для веса gamma. По умолчанию отсутствует.
**kwargs Именованные аргументы базового слоя (например, name и dtype).

Литература:

  • Lei Ba et al., 2016.
Атрибуты
input Возвращает входные тензоры символьной операции.

Возвращает только тензоры, соответствующие первому вызову операции.

output Возвращает выходные тензоры слоя.

Возвращает только тензоры, соответствующие первому вызову операции.

Методы

from_config

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

@classmethod
from_config(
    config
)

Создает слой на основе его конфигурации.

Этот метод является обратным по отношению к get_config и позволяет создать экземпляр того же слоя на основе словаря конфигурации. Он не обрабатывает связи между слоями (этим занимается Network) и веса (этим занимается set_weights).

Аргументы
config Словарь Python, обычно являющийся результатом вызова get_config.
Возвращает
Экземпляр слоя.

symbolic_call

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

symbolic_call(
    *args, **kwargs
)

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/keras/layers/LayerNormalization

Spec-Zone.ru

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