时间戳嵌入,
S
E
(
6
)
=
[
S
E
hour
(
6
)
,
S
E
minute
(
6
)
]
SE(6) = [SE_{\text{hour}}(6), SE_{\text{minute}}(6)]
SE(6)=[SEhour(6),SEminute(6)] 表示第6个位置的全局时间戳嵌入(Stamp Embedding),其中 SE
是可学习的嵌入向量。这些嵌入向量帮助模型捕捉序列数据中全局时间信息,如小时和分钟。
全局时间戳嵌入的详细解释
假设我们有两种全局时间戳类型:小时(hour)和分钟(minute)。对于位置 6 的元素:
- S E hour ( 6 ) SE_{\text{hour}}(6) SEhour(6) 表示与该位置关联的小时时间戳嵌入。
- S E minute ( 6 ) SE_{\text{minute}}(6) SEminute(6) 表示与该位置关联的分钟时间戳嵌入。
这些嵌入是可学习的,即在训练过程中,模型会根据数据调整这些嵌入向量的值。
在你给出的上下文中, S E SE SE(Stamp Embedding,全局时间戳嵌入)确实表示的是时间向量。这些时间向量用于捕捉和表示序列数据中的全局时间信息,如小时和分钟。具体来说, S E SE SE 是一种将时间戳信息编码成模型可以处理的向量表示的方式。
全局时间戳嵌入的详细说明
假设我们有两个全局时间戳类型:小时(hour)和分钟(minute)。每个时间戳类型都有一个对应的嵌入矩阵。对于序列中每个位置,我们都为其生成一个时间向量,这个向量是通过查找嵌入矩阵得到的。
嵌入矩阵和时间戳向量
-
嵌入矩阵:对于每个时间戳类型(如小时和分钟),我们有一个嵌入矩阵。这些矩阵的维度是 d model d_{\text{model}} dmodel,它是模型的特征维度。
- 小时嵌入矩阵: E hour ∈ R 24 × d model E_{\text{hour}} \in \mathbb{R}^{24 \times d_{\text{model}}} Ehour∈R24×dmodel,因为小时有 24 个不同的值(0 到 23)。
- 分钟嵌入矩阵: E minute ∈ R 60 × d model E_{\text{minute}} \in \mathbb{R}^{60 \times d_{\text{model}}} Eminute∈R60×dmodel,因为分钟有 60 个不同的值(0 到 59)。
-
时间戳向量:对于每个位置 pos \text{pos} pos,我们通过查找嵌入矩阵来得到对应的时间戳向量。例如,如果位置 pos \text{pos} pos 的时间戳是 3 小时 15 分钟,那么:
- 小时向量: S E hour ( pos ) = E hour [ 3 ] SE_{\text{hour}}(\text{pos}) = E_{\text{hour}}[3] SEhour(pos)=Ehour[3]
- 分钟向量: S E minute ( pos ) = E minute [ 15 ] SE_{\text{minute}}(\text{pos}) = E_{\text{minute}}[15] SEminute(pos)=Eminute[15]
时间戳嵌入公式
对于位置
pos
\text{pos}
pos,全局时间戳嵌入
S
E
(
pos
)
SE(\text{pos})
SE(pos) 可以表示为这些时间向量的组合:
S
E
(
pos
)
=
[
S
E
hour
(
pos
)
,
S
E
minute
(
pos
)
]
SE(\text{pos}) = [SE_{\text{hour}}(\text{pos}), SE_{\text{minute}}(\text{pos})]
SE(pos)=[SEhour(pos),SEminute(pos)]
示例说明1
假设我们有以下参数:
- 嵌入维度 d model = 4 d_{\text{model}} = 4 dmodel=4
- 时间戳类型 p = 2 p = 2 p=2(小时和分钟)
对于位置 pos = 6 \text{pos} = 6 pos=6,其时间戳为 3 小时 15 分钟:
-
小时嵌入向量:
S E hour ( 6 ) = E hour [ 3 ] SE_{\text{hour}}(6) = E_{\text{hour}}[3] SEhour(6)=Ehour[3]
如果 E hour [ 3 ] E_{\text{hour}}[3] Ehour[3] 是 [ 0.1 , 0.2 , 0.3 , 0.4 ] [0.1, 0.2, 0.3, 0.4] [0.1,0.2,0.3,0.4],那么 S E hour ( 6 ) = [ 0.1 , 0.2 , 0.3 , 0.4 ] SE_{\text{hour}}(6) = [0.1, 0.2, 0.3, 0.4] SEhour(6)=[0.1,0.2,0.3,0.4]。 -
分钟嵌入向量:
S E minute ( 6 ) = E minute [ 15 ] SE_{\text{minute}}(6) = E_{\text{minute}}[15] SEminute(6)=Eminute[15]
如果 E minute [ 15 ] E_{\text{minute}}[15] Eminute[15] 是 [ 0.5 , 0.6 , 0.7 , 0.8 ] [0.5, 0.6, 0.7, 0.8] [0.5,0.6,0.7,0.8],那么 S E minute ( 6 ) = [ 0.5 , 0.6 , 0.7 , 0.8 ] SE_{\text{minute}}(6) = [0.5, 0.6, 0.7, 0.8] SEminute(6)=[0.5,0.6,0.7,0.8]。
最终,位置
pos
=
6
\text{pos} = 6
pos=6 的全局时间戳嵌入向量为:
S
E
(
6
)
=
[
S
E
hour
(
6
)
,
S
E
minute
(
6
)
]
=
[
[
0.1
,
0.2
,
0.3
,
0.4
]
,
[
0.5
,
0.6
,
0.7
,
0.8
]
]
SE(6) = [SE_{\text{hour}}(6), SE_{\text{minute}}(6)] = [[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]
SE(6)=[SEhour(6),SEminute(6)]=[[0.1,0.2,0.3,0.4],[0.5,0.6,0.7,0.8]]
输入向量的整合
将这些嵌入向量整合到输入向量中,我们有:
X
t
feed
[
i
]
=
α
u
t
i
+
PE
(
L
x
×
(
t
−
1
)
+
i
)
+
∑
p
S
E
p
(
L
x
×
(
t
−
1
)
+
i
)
X_t^{\text{feed}}[i] = \alpha u_t^i + \text{PE}\left(L_x \times (t-1) + i\right) + \sum_{p} SE_p\left(L_x \times (t-1) + i\right)
Xtfeed[i]=αuti+PE(Lx×(t−1)+i)+p∑SEp(Lx×(t−1)+i)
具体到位置
pos
=
6
\text{pos} = 6
pos=6:
X
t
feed
[
6
]
=
α
u
t
,
6
+
PE
(
6
)
+
S
E
hour
(
6
)
+
S
E
minute
(
6
)
X_t^{\text{feed}}[6] = \alpha u_{t,6} + \text{PE}(6) + SE_{\text{hour}}(6) + SE_{\text{minute}}(6)
Xtfeed[6]=αut,6+PE(6)+SEhour(6)+SEminute(6)
通过这种方式,你可以将全局时间戳信息整合到模型的输入中,从而帮助模型更好地理解和利用序列数据中的时间特征。
示例说明2
假设我们有一个时间序列,每个位置的全局时间戳可以表示为小时和分钟。例如,对于位置 6,可能对应的时间戳是某一天的 3:15(即 3 小时 15 分钟)。
在这种情况下:
- S E hour ( 6 ) SE_{\text{hour}}(6) SEhour(6) 是一个可学习的向量,代表位置 6 的小时信息(3 小时)。
- S E minute ( 6 ) SE_{\text{minute}}(6) SEminute(6) 是另一个可学习的向量,代表位置 6 的分钟信息(15 分钟)。
如果嵌入维度是 d model d_{\text{model}} dmodel,那么每个时间戳嵌入向量的维度也是 d model d_{\text{model}} dmodel。
具体例子
假设嵌入维度 d model = 4 d_{\text{model}} = 4 dmodel=4,那么:
- S E hour ( 6 ) = [ h 1 , h 2 , h 3 , h 4 ] SE_{\text{hour}}(6) = [h_1, h_2, h_3, h_4] SEhour(6)=[h1,h2,h3,h4],这是与位置 6 关联的小时嵌入向量。
- S E minute ( 6 ) = [ m 1 , m 2 , m 3 , m 4 ] SE_{\text{minute}}(6) = [m_1, m_2, m_3, m_4] SEminute(6)=[m1,m2,m3,m4],这是与位置 6 关联的分钟嵌入向量。
将这些向量组合起来形成位置 6 的全局时间戳嵌入:
S E ( 6 ) = [ S E hour ( 6 ) , S E minute ( 6 ) ] = [ [ h 1 , h 2 , h 3 , h 4 ] , [ m 1 , m 2 , m 3 , m 4 ] ] SE(6) = [SE_{\text{hour}}(6), SE_{\text{minute}}(6)] = [[h_1, h_2, h_3, h_4], [m_1, m_2, m_3, m_4]] SE(6)=[SEhour(6),SEminute(6)]=[[h1,h2,h3,h4],[m1,m2,m3,m4]]
在输入向量中,结合这些全局时间戳嵌入可以表示为:
X t feed [ i ] = α u t i + PE ( L x × ( t − 1 ) + i , ) + ∑ p [ S E ( L x × ( t − 1 ) + i ) ] p X_t^{\text{feed}}[i] = \alpha u_t^i + \text{PE}\left(L_x \times (t-1) + i, \right) + \sum_{p} \left[ SE\left(L_x \times (t-1) + i\right) \right]_p Xtfeed[i]=αuti+PE(Lx×(t−1)+i,)+p∑[SE(Lx×(t−1)+i)]p
具体到位置 6 的输入向量:
X t feed [ 6 ] = α u t , 6 + PE ( 6 ) + S E hour ( 6 ) + S E minute ( 6 ) X_t^{\text{feed}}[6] = \alpha u_{t,6} + \text{PE}(6) + SE_{\text{hour}}(6) + SE_{\text{minute}}(6) Xtfeed[6]=αut,6+PE(6)+SEhour(6)+SEminute(6)
通过将位置嵌入、时间戳嵌入和标量上下文投射结合起来,模型能够更好地理解序列中的局部和全局上下文信息。这种方法特别适用于处理具有时间依赖性的序列数据,如时间序列分析和自然语言处理中的时序任务。