我读过 GPT-2 和其他转换器在自注意和前馈块之前使用层规范化,但我仍然不确定规范化是如何工作的。
假设我们的上下文大小为 1024 个标记,嵌入大小为 768(因此每个标记及其后续隐藏状态由大小为 768 的向量表示),并且我们使用 12 个多注意头。所以在上图中,有 1024 个 r,每个 r 有 768 维。
对于变压器中的给定层,计算了多少归一化统计信息(样本均值和标准差)?我们是否对每个令牌进行一次标准化,进行 12x1024 标准化,以便每个令牌内的特征值具有均值 0 和标准 1?或者我们是否对 12x768 标准化跨标记的每个特征的值进行标准化?或者我们是否将所有标记的所有特征值归一化,进行 12 次归一化?我们是否为小批量中的每个上下文计算单独的规范化?
我也很想直观地理解为什么这种标准化是可取的。假设该方案是将特征值归一化每个标记:假设我们的一个标记是一个像“ok”这样的乏味词,而另一个标记是“仇恨”这个词。我希望“仇恨”的表示会更加尖锐,不同特征值之间的差异更大。为什么丢弃这些信息并强制“ok”的表示同样尖锐是有用的?另一方面,如果归一化方案是跨特征值进行归一化,那么如果您从我们上下文中的所有标记中获取特征 1,它们的均值和标准偏差为 1,这不会在所有标记中丢弃信息吗?在我们的上下文中的词是非常负面的,例如在上下文中“战争暴力仇恨恐惧”?
另外,通过层归一化,通过学习的偏差和增益参数重新缩放归一化值似乎是可选的。GPT-2 是这样做的,还是将值标准化为 0 和 std 1?