|
|
|
@ -67,6 +67,24 @@ tensor([[ 0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00,
|
|
|
|
|
|
|
|
|
|
> 我们上面参数也参考GPT-2的,比如max_seq_len=1024、d_model=768
|
|
|
|
|
|
|
|
|
|
你也可以根据第二章的"LLM with me"的索引,去获取对应的位置编码。
|
|
|
|
|
|
|
|
|
|
~~~python
|
|
|
|
|
print(positional_encoding[13][:10])
|
|
|
|
|
print(positional_encoding[14][:10])
|
|
|
|
|
print(positional_encoding[11][:10])
|
|
|
|
|
"""out:
|
|
|
|
|
tensor([ 0.4202, 0.9074, 0.1252, 0.9921, -0.1744, 0.9847, -0.4519, 0.8921,
|
|
|
|
|
-0.6858, 0.7278])
|
|
|
|
|
tensor([0.9906, 0.1367, 0.8920, 0.4520, 0.7018, 0.7124, 0.4454, 0.8953, 0.1523,
|
|
|
|
|
0.9883])
|
|
|
|
|
tensor([-1.0000, 0.0044, -0.9673, -0.2535, -0.8724, -0.4889, -0.7253, -0.6884,
|
|
|
|
|
-0.5387, -0.8425])
|
|
|
|
|
"""
|
|
|
|
|
~~~
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240427180954246.png" alt="image-20240427180954246" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
为什么是用正弦和余弦函数,对于正弦函(sin):最大值是 1,最小值是 -1。对于余弦函数(cos):最大值是 1,最小值是 -1。也就是它们可以保证值是比较小的,而且也是符合深度学习模型可学习的参数。
|
|
|
|
|
|
|
|
|
|
其中最重要的是允许模型学习相对位置:由于正弦和余弦函数的周期性,对于任意固定偏移量 `k`,`PE(pos+k)`可以表示为 `PE(pos)` 的线性函数。这意味着模型可以很容易地通过学习注意力权重来关注相对位置,因为相对位置的编码可以通过简单的线性变换来获得。
|
|
|
|
|