|
|
|
@ -16,7 +16,7 @@ $$
|
|
|
|
|
|
|
|
|
|
### 残差连接
|
|
|
|
|
|
|
|
|
|
`Input`跟`x`的相加,则是对应位置元素简单相加,可以理解为跟位置编码一样的,即`Input[i][j]`+`x[i][j]`,i、j分别表示不同维度的某个位置。
|
|
|
|
|
`Input`跟`x`的相加,则是对应位置元素简单相加,可以理解为类似位置编码一样的向量加法,即`Input[i][j]`+`x[i][j]`,i、j分别表示不同维度的某个位置。
|
|
|
|
|
|
|
|
|
|
模拟代码如下:
|
|
|
|
|
|
|
|
|
@ -50,7 +50,7 @@ print(residual_output)
|
|
|
|
|
|
|
|
|
|
### 层归一化
|
|
|
|
|
|
|
|
|
|
缩放规则:均值为0,方差为1。以下是GPT-2里的源码
|
|
|
|
|
调整数据使得其均值为0,方差为1。以下是GPT-2里的源码
|
|
|
|
|
|
|
|
|
|
~~~python
|
|
|
|
|
def norm(x, scope, *, axis=-1, epsilon=1e-5):
|
|
|
|
@ -77,10 +77,10 @@ $$
|
|
|
|
|
\text{LN}(x) = g \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + b
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
|
|
跟标准的层归一化不一样,但两者是等价的。简单理解为,最终值又会进行一轮的缩放,让它们都回到一个相对统一的区间。
|
|
|
|
|
跟你网上查的层归一化的公式可能不一样,但两者是等价的。代码考虑了实际情况,调整成运行更优的方式。简单理解为,最终值又会进行一轮的缩放,让它们都回到一个相对统一的区间。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 总结
|
|
|
|
|
|
|
|
|
|
多头注意力的输出A矩阵通过残差连接与原始输入x相加,得到相同位置元素的和。这个过程类似于人们对成功经验的依赖。然而,相加后的值可能超出标准范围,因此需要层归一化(LayerNorm)来调整数据分布,使其均值为0,方差为1。层归一化通过可学习参数γ和β,对输入进行缩放和偏移,确保网络的稳定性。
|
|
|
|
|
多头注意力的输出A矩阵通过残差连接与原始输入x相加,得到相同位置元素的和。这个过程类似于人们对成功经验的依赖。然而,相加后的值可能超出标准范围,因此需要层归一化(LayerNorm)来调整数据分布,使其均值为0,方差为1。层归一化通过可学习参数g和b,对输入进行缩放和偏移,确保网络的稳定性。
|
|
|
|
|