词嵌入(Embedding)

词嵌入(Embedding)

1 位置编码(Positional Encoding)

位置编码是Transformer模型中的一部分,用于为输入序列中的每个位置提供一个位置向量,提供时序信息。

1.1 标准位置编码

如果输入序列长度为seq_len,词嵌入的维度为d_model。位置编码的计算公式如下:

\[ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)\\ PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \]

其中,\(pos\)表示token在序列中的位置,\(i\)表示维度。位置编码的维度与词嵌入的维度相同。 偶数维度用sin函数编码,奇数维度用cos函数编码。

对于一个序列,位置编码的维度为[seq_len, d_model]。 词嵌入和位置编码相加,作为模型的输入。

比如对于其中一个token,就是一个[d_model]的一维向量,对位相加一个[d_model]的一维位置编码向量。

1.2 旋转位置编码(ROPE)

ROPE(Rotary Position Embedding)通过对词向量进行旋转变换来编码位置信息,而不是像传统方法那样将位置编码直接加到词向量上。

如果输入序列长度为seq_len,词嵌入的维度为d_model。RoPE的计算公式如下:

  1. 复数形式 \[ \text{RoPE}(x_m, m) = x_m \cdot e^{im\theta} \]
  2. 基本形式 \[ \theta_{pos,i} = \frac{pos}{10000^{\frac{2i}{d}}}\\ \text{RoPE}(x, pos)_{2i} = x_{2i} \cos(\theta_{pos,i}) + x_{2i+1} \sin(\theta_{pos,i})\\ \text{RoPE}(x, pos)_{2i+1} = x_{2i+1} \cos(\theta_{pos,i}) - x_{2i} \sin(\theta_{pos,i}) \]
  3. 矩阵形式 \[ R_{\theta,pos,2i} = \begin{bmatrix} \cos(\theta_{pos,i}) & -\sin(\theta_{pos,i}) \\ \sin(\theta_{pos,i}) & \cos(\theta_{pos,i}) \end{bmatrix}\\ \begin{bmatrix} x'_{2i} \\ x'_{2i+1} \end{bmatrix} = \begin{bmatrix} x_{2i} \\ x_{2i+1} \end{bmatrix} \cdot R_{\theta,pos,2i} \]

1.3 线性注意力偏置(ALiBi)

不同于传统方法,ALiBi不直接修改token embeddings,而是在注意力计算过程中添加一个线性偏置项,这个偏置项随着序列中tokens的相对距离线性增加。

[(Q, K, V) = ( + B) V]

其中,位置偏置矩阵 ( B ) 定义为:

[B_{ij} = -|i - j| m]

2 词向量(Word2Vec)

上下文相似的两个词,它们的词向量也应该相似,比如香蕉和梨在句子中可能经常出现在相同的上下文中,因此这两个词的表示向量应该就比较相似。

Word2Vec是一种词嵌入技术,它的目的是将词语映射到一个低维空间中,使得语义相近的词在这个空间中的距离也比较近。核心思想是通过训练神经网络,使得词向量的内积尽可能的大,而与之不相关的词向量的内积尽可能的小。

Word2Vec模型有两种:

  1. CBOW: 通过上下文预测中心词,即用\(w_{t-1}, w_{t-2}, w_{t+1}, w_{t+2}\)预测\(w_t\)
  2. Skip-gram: 通过中心词预测上下文,即用\(w_t\)预测\(w_{t-1}, w_{t-2}, w_{t+1}, w_{t+2}\)
图1:Word2Vec