Keras 3 API 文档 / 层 API / 归一化层 / 层归一化层

层归一化层

[source]

LayerNormalization class

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
)

层规范化层(Ba 等,2016).

独立地规范化前一层在每个给定样本中的激活,而不是像批量规范化那样跨批次进行规范化.即应用一种变换,使每个样本中的平均激活接近0,激活标准差接近1.

如果启用了 scalecenter,该层将通过广播与可训练变量 gamma 相乘来缩放规范化输出,并通过广播与可训练变量 beta 相加来中心化输出.gamma 将默认为一个全1的张量,beta 将默认为一个全0的张量,因此在训练开始之前,中心化和缩放都是无操作.

因此,启用了缩放和中心化的情况下,规范化方程如下:

设小批量的中间激活为 inputs.

对于 inputs 中的每个样本 x_ik 个特征,我们计算样本的均值和方差:

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 通过 gammabeta 进行线性变换,这两个参数是学习得到的:

output_i = x_i_normalized * gamma + beta

gammabeta 将跨越 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)

注意,其他层规范化实现可能会选择在不同于被规范化轴的一组轴上定义 gammabeta.例如,组规范化(Wu 等,2018),当组大小为1时,对应于一个跨高度、宽度和通道进行规范化的层规范化,并且 gammabeta 仅跨越通道维度.因此,这个层规范化实现不会匹配组大小设置为1的组规范化层.

参数: axis: 整数或列表/元组.要进行规范化的轴或轴.通常,这是特征轴/轴.未指定的轴通常是批次轴/轴.-1 是输入的最后一个维度.默认为 -1. epsilon: 添加到方差中的小浮点数,以避免除以零.默认为 1e-3. center: 如果为 True,将 beta 添加到规范化张量.如果为 False,则忽略 beta.默认为 True. scale: 如果为 True,乘以 gamma.如果为 False,则不使用 gamma.当下一层是线性层(例如 nn.relu)时,可以禁用此选项,因为下一层会进行缩放.默认为 True. rms_scaling: 如果为 True,忽略 centerscale,并将输入乘以 gamma 和所有输入平方的逆平方根.这是一种近似且更快的处理方法,避免了计算输入的均值. beta_initializer: beta 权重的初始化器.默认为 zeros. gamma_initializer: gamma 权重的初始化器.默认为 ones. beta_regularizer: beta 权重的可选正则化器.默认为 None. gamma_regularizer: gamma 权重的可选正则化器.默认为 None. beta_constraint: beta 权重的可选约束.默认为 None. gamma_constraint: gamma 权重的可选约束.默认为 None. **kwargs: 基础层的键值对参数(例如 namedtype).

参考文献: