RMSNormalization¶
RMSNormalization - 23¶
版本¶
- 域: - main
- 起始版本: - 23
- 函数: - True
- 支持级别: - SupportType.COMMON
- 形状推断: - True
此版本的操作符已可用于版本 23 及以上。
摘要¶
这是 ONNX 中定义的 RMS 归一化函数,如论文 https://arxiv.org/pdf/1910.07467 中所述。整个计算可以分为两个阶段。均方根范数在最后 D 个维度上进行计算,其中 D 是 normalized_shape 的维度。例如,如果 normalized_shape 是 (3, 5)(一个二维形状),则 RMS 范数在输入的最后 2 个维度上进行计算。标准化所需的计算可以用以下方程描述。
XSquared = Mul(X, X)
XSquaredMean = ReduceMean<axes=normalized_axes>(XSquared)
MeanSquareEpsilon = Add(XSquaredMean, epsilon)
RMS = Sqrt(MeanSquareEpsilon)
Normalized = Div(X, RMS)
其中 normalized_axes 是 [axis, ..., X 的 rank - 1]。变量 RMS 代表均方根。根据 stash_type 属性,实际计算必须以不同的浮点精度进行。例如,如果 stash_type 为 1,则此操作符将所有输入变量转换为 32 位浮点数,执行计算,最后将 Normalized 转换回 X 的原始类型。第二阶段然后使用以下公式缩放第一阶段的结果:
Y= Mul(Normalized, Scale)
设 d[i] 表示 X 的第 i 个维度。如果 X 的形状是 [d[0], ..., d[axis-1], d[axis], ..., d[rank-1]],则 RMS 的形状是 [d[0], ..., d[axis-1], 1, ..., 1]。Y 和 X 具有相同的形状。此操作符支持单向广播(Scale 应该能够单向广播到张量 X);更多详细信息请查看 ONNX 中的广播。
属性¶
- 轴 - INT(默认值为 - '-1')- 第一个归一化维度。如果 rank(X) 为 r,则 axis 的允许范围是 [-r, r)。负值表示从后向前计数维度。 
- epsilon - FLOAT (默认为 - '1e-05')- 用于避免除以零的 epsilon 值。 
- stash_type - INT (默认为 - '1')- 计算第一阶段使用的浮点精度。 
输入¶
- X (异构) - T - 要归一化的输入张量。通常,对于 n 维数据,形状为 (D1, D2, ..., Dn),其中均方根范数在最后 D 个维度上进行计算,D 由 axis 属性确定。 
- scale (异构) - V - 缩放张量。缩放张量形状应可广播到归一化形状。 
输出¶
- Y (异构) - V - 输出数据张量。形状与 X 相同 
类型约束¶
- T 在 ( - tensor(bfloat16),- tensor(double),- tensor(float),- tensor(float16)) 中- 将输入 X 类型限制为浮点张量。 
- V 在 ( - tensor(bfloat16),- tensor(double),- tensor(float),- tensor(float16)) 中- 将输出 Y 和缩放类型限制为浮点张量。