Update. 修改公式,对应上源码

master
ben.guo 6 months ago
parent 7f0d4c60fb
commit d23e7db9df

@ -50,18 +50,34 @@ print(residual_output)
### 层归一化 ### 层归一化
缩放规则均值为0方差为1。 缩放规则均值为0方差为1。以下是GPT-2里的源码
~~~scss ~~~python
LayerNorm(x) = γ * (x - μ) / σ + β def norm(x, scope, *, axis=-1, epsilon=1e-5):
"""Normalize to mean = 0, std = 1, then do a diagonal affine transform."""
with tf.variable_scope(scope):
n_state = x.shape[-1].value
g = tf.get_variable('g', [n_state], initializer=tf.constant_initializer(1)) # 创建可训练的缩放因子scale factor g
b = tf.get_variable('b', [n_state], initializer=tf.constant_initializer(0)) # 创建可训练的偏置项bias term b
u = tf.reduce_mean(x, axis=axis, keepdims=True) # 计算均值
s = tf.reduce_mean(tf.square(x-u), axis=axis, keepdims=True) # 求方差
x = (x - u) * tf.rsqrt(s + epsilon)
x = x*g + b
return x
~~~ ~~~
- *x* 是待归一化的输入张量。 - 𝑥 是输入张量,
- 𝜇 是输入张量 𝑥 的均值。 - 𝜇 是输入张量 𝑥*x* 沿着指定轴的均值,
- 𝜎 是输入张量 𝑥 的标准差。 - 𝜎2 是输入张量 𝑥*x* 沿着指定轴的方差,
- 𝛾 和 𝛽 是可学习的参数,通过反向传播和梯度下降算法在训练过程中学习的。。 - 𝜖 是一个小的常数,用于防止除以零,
- 𝑔 是可学习的缩放因子,
- 𝑏 是可学习的偏置项。
$$
\text{LN}(x) = g \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + b
$$
简单理解为,最终值又会进行一轮的缩放,让它们都回到一个相对统一的区间。 跟标准的层归一化不一样,但两者是等价的。简单理解为,最终值又会进行一轮的缩放,让它们都回到一个相对统一的区间。

Loading…
Cancel
Save