赞
踩
注意:它的编码器的输出会送入到所有的解码器模块,如下:
在transformer的结构图中,由一个“Positional Encoding”,即位置编码,查看了以下资料后,稍微有点儿理解了,记录于此。
由于transformer是并行化运算,所以输入的信息中没有位置信,而在语音文本中,绝大部分都是有语序的。例如:我爱你,要是翻译成’“You love me”,那意思就完全不一样了。于是,就有了位置编码,其作用就是让输入数据携带位置信息,是模型能够找出位置特点。
在transformer中的位置编码中,其编码公式如下:
P
E
(
p
o
s
,
2
i
)
=
s
i
n
(
p
o
s
1000
0
2
i
/
d
m
o
d
e
l
)
P
E
(
p
o
s
,
2
i
+
1
)
=
c
o
s
(
p
o
s
1000
0
2
i
/
d
m
o
d
e
l
)
PE(pos, 2i) = sin({pos \over 10000^{2i/d_{model}}}) \\ PE(pos, 2i+1) = cos({pos \over 10000^{2i/d_{model}}})
PE(pos,2i)=sin(100002i/dmodelpos)PE(pos,2i+1)=cos(100002i/dmodelpos)
其中,
P
E
表示位置编码,
p
o
s
表示当前字符在输入字母中的位置,
i
=
d
i
m
i
n
d
e
x
/
/
2
即改字符的维度下表对
2
求模,
d
m
o
d
e
l
表示该字符的维度。
PE表示位置编码,pos表示当前字符在输入字母中的位置,i=dim_index // 2即改字符的维度下表对2求模, d_{model}表示该字符的维度。
PE表示位置编码,pos表示当前字符在输入字母中的位置,i=dimindex//2即改字符的维度下表对2求模,dmodel表示该字符的维度。
。上面,表示偶数位置使用sin, 奇数位置使用cos。引入实例,如: 翻译"我爱你"。
Step1: embedding编码
假设embedding编码将每个词向量编程成512维,如图所示:
如上,如果有规定每次输入的x1, x2,…,xn的长度,那么不足就直接使用padding用0填充.其中的”喜欢“换成”爱“即可。
Step2: 位置编码
由上图知,其
d
m
o
d
e
l
=
512
,
p
o
s
爱
=
1
d_{model} = 512, pos_{爱} = 1
dmodel=512,pos爱=1 ,其编码示意图如下:
一步步计算可得,其具体的位置编码:
P
E
0
=
s
i
n
(
1
1000
0
2
∗
0
/
512
)
=
s
i
n
(
1
)
P
E
1
=
c
o
s
(
1
1000
0
2
∗
0
/
512
)
=
c
o
s
(
1
)
.
.
.
P
E
5
11
=
c
o
s
(
1
1000
0
2
∗
255
/
512
)
PE_0 = sin({1 \over 10000^{2*0/512}}) = sin(1) \\ PE_1= cos({1 \over 10000^{2*0/512}}) = cos(1) \\ ... \\ PE_511 = cos({1 \over 10000^{2*255/512}})
PE0=sin(100002∗0/5121)=sin(1)PE1=cos(100002∗0/5121)=cos(1)...PE511=cos(100002∗255/5121)
Step3: 位置编码与embedding编码进行相加
如图,
然后即可将其作为transtormer的输入进去Attention以及其他运算。
注:
文章有参考:https://wangguisen.blog.csdn.net/article/details/125074022?spm=1001.2014.3001.5502
该文写得非常赞,值得一看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。