Transformer 中的层归一化

在文献中 层归一化 (Layer Normalization) 一般被定义为: 对单样本进行归一化 (计算单样本所有元素的均值和方差, 用其对该样本的所有元素做 zscore 归一化), 然后利用可学习的 beta 和 gamma 参数对归一化的样本进行 affine 运算 (形如 gamma * x + beta, beta 和 gamma 参数的尺寸一般等于通道数, 不过 PyTorch 中的实现有点特别, beta 和 gamma 参数的尺寸与归一化尺寸 normalized_shape 相同).

假设输入数据尺寸为 (batch_size, sequence_len, embedding_size), 按照上述定义, 层归一化是在第二和第三维度上做的, 然而在 Transformer 中, 层归一化只在最后一个维度上 (即通道维度上) 进行 (如 transformers.BertModel 中), 与一般定义不符. 严格意义上这种只在通道维度上进行的归一化称为通道归一化 (Channel Normalization) 更为恰当, 不过已经约定俗成了, 不妨将其视为层归一化的一种变形形式.

参考:

修改历史

  • 20240416 发布

版权声明

署名-非商业性使用-相同方式共享 4.0 国际许可协议

版权归属: 采石工
本文链接: https://quarryman.cn/article/20240416
版权声明: 除特别声明外, 文章采用《署名-非商业性使用-相同方式共享 4.0 国际》许可协议.