Spec-Zone.ru › TensorFlow 2.9

tf.keras.layers.LayerNormalization

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

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

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

Просмотр псевдонимов

Псевдонимы для миграции

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

tf.compat.v1.keras.layers.LayerNormalization

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

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

Для тензора inputs, моменты вычисляются, а нормализация выполняется по осям, указанным в axis.

Пример:

data = tf.constant(np.arange(10).reshape(5, 2) * 10, dtype=tf.float32)
print(data)
tf.Tensor(
[[ 0. 10.]
 [20. 30.]
 [40. 50.]
 [60. 70.]
 [80. 90.]], shape=(5, 2), dtype=float32)
layer = tf.keras.layers.LayerNormalization(axis=1)
output = layer(data)
print(output)
tf.Tensor(
[[-1. 1.]
 [-1. 1.]
 [-1. 1.]
 [-1. 1.]
 [-1. 1.]], shape=(5, 2), dtype=float32)

Обратите внимание, что с Layer Normalization нормализация происходит по осям внутри каждого примера, а не по различным примерам в батче.

Если 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 = tf.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 по отдельному набору осей, отличных от осей, по которым происходит нормализация. Например, Group Normalization (Wu et al. 2018) с размером группы 1 соответствует Layer Normalization, которая нормализует по высоте, ширине и каналу и имеет gamma и beta, охватывающие только размерность канала. Таким образом, эта реализация Layer Normalization не будет соответствовать слою Group Normalization с размером группы, установленным в 1.

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

Форма входных данных:

Произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включающий ось образцов), когда этот слой используется как первый слой в модели.

Форма выходных данных:

Такая же, как у входных данных.

Ссылка:

  • Lei Ba et al., 2016.

© 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/versions/r2.9/api_docs/python/tf/keras/layers/LayerNormalization

Spec-Zone.ru

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