赞
踩
Transformers 使用的位置编码方法,其中每个位置/词素都被分配一个编号。到此,位置编码的输出是一个矩阵,其中每行的每一行代表序列中的一个特定词素与其位置信息相结合。下图演示了一个较小的位置编码矩阵示例的构成方式。
位置编码矩阵
位置编码矩阵示例 - 序列 ‘I am a robot’
位置编码的数学公式用于为每一个位置(即序列中的词素)分配一个独特的编码,以使其能够在不同的上下文中区别对待。位置编码使用下述公式来生成位置编码矩阵:
其中:
通过具体例子理解位置编码。以序列 “I am a robot” 为例,设定 n = 100, d = 4。在这个例子中,我们计算了 n = 100 和 d = 4 的序列的位置编码,位置编码的计算结果如下表:
位置编码矩阵示例 - 序列 ‘I am a robot’
使用 NumPy 库进行矩阵和数学运算以及 Matplotlib 库进行图形绘制,下面是 Python 代码示例以及其输出结果。
- import numpy as np
- import matplotlib.pyplot as plt
-
- def getPositionEncoding(seq_len, d, n=10000):
- P = np.zeros((seq_len, d))
- for k in range(seq_len):
- for i in np.arange(int(d/2)):
- denominator = np.power(n, 2*i/d)
- P[k, 2*i] = np.sin(k/denominator)
- P[k, 2*i+1] = np.cos(k/denominator)
- return P
-
- P = getPositionEncoding(seq_len=4, d=4, n=100)
- print(P)
使用 Matplotlib 库绘制不同位置的三角函数图,下面是 Python 代码示例以及其生成的图形。
- import numpy as np
- import matplotlib.pyplot as plt
-
- def getPositionEncoding(seq_len, d, n=10000):
- P = np.zeros((seq_len, d))
- for k in range(seq_len):
- for i in np.arange(int(d/2)):
- denominator = np.power(n, 2*i/d)
- P[k, 2*i] = np.sin(k/denominator)
- P[k, 2*i+1] = np.cos(k/denominator)
- return P
-
- def plotSinusoid(k, d, n):
- x = np.arange(0, 100, 1)
- denominator = np.power(n, 2*k/d)
- y = np.sin(x/denominator)
- plt.plot(x, y)
- plt.title('k = ' + str(k))
-
- # 使用长序列和较大维度的参数
- seq_len = 100
- d = 512
- n = 10000
- P = getPositionEncoding(seq_len, d, n)
- # 正弦波绘图
- fig = plt.figure(figsize=(15, 4))
- for i in range(4):
- plt.subplot(1, 4, i + 1)
- plotSinusoid(i*4, d, n) # 确保传入函数的参数和生成P矩阵时的参数一致
- plt.show()
下图是四个不同 k 值的正弦波形图。可以看到,随着 k 值的增大,波形周期发生了变化。
可视化结果:四个不同 k 值的正弦波形图,分别对应 k=0, k=4, k=8, 和 k=12 的情况。随着 k 值的增大,波形周期发生变化,显示了不同频率和波长的正弦波。
使用 Python 的 Matplotlib 库的 matshow()
函数,可以将位置编码矩阵以热图的形式可视化。热图可以直观地展示不同位置编码的值的大小。下面是 Python 代码示例以及热图的输出结果。
- # 热图绘图
- fig2 = plt.figure(figsize=(15, 4))
- cax = plt.matshow(P, aspect='auto') # aspect='auto'保证热图在x轴和y轴方向拉伸以填满画布
- plt.colorbar(cax)
- plt.show()
热图结果:展示了一个长为 100,宽为 512 的位置编码矩阵的热图。热图中的颜色变化表示不同位置编码值的大小,可以看到随着位置的变化,颜色也呈现出周期性的变化模式。
Transformer模型的位置编码过程包括将词汇转换为向量,然后与位置编码相加,以保持位置信息。以下是该过程的详细描述:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。