(1)假设z1是(batchsize,sequencelength,featuredimension),假设一个(4,3,5)的维度,也就是batchsize是4,序列长度是3,特征维度是5。
(2)
到了这一步之后,z就是(2 x batchsize,sequencelength,featuredimension)的了。
然后transpose一下,变成了(sequencelength,2 x batchsize,featuredimension)。
如下图,就是(8,3,5)
再transpose之后,就变成了。
(3,8,5)
也就是变成了这样的了。这只是(3,4,5)
(3)然后做相乘,sim的尺寸应该是
(sequencelength,2 x batchsize,featuredimension)
x
(sequencelength,featuredimension,2 x batchsize)
->
(sequencelength,2 x batchsize,2 x batchsize)
也就是好比原来是(4,3,5)的(batchsize,sequencelength,featuredimension),
变成了(3,8,5)x(3,5,8) ->(3,8,8)
也就是以序列为单位做微观的乘法就是
(1,8,5)x(1,5,8)乘 3次。也就是以序列长度拆分后,做乘法。
也就是,(8,5)x(5,8)
再微观就是,(1,5)x(5,1)
举个例子,我们定义一个序列长度为3,每个序列点feature_dimension为5的序列,也就是说一个序列是(3,5)的维度,然后他的batch_size是4。然后我们定义这个序列点为
X1=[x1,x2,x3,x4,x5],那么也就是说一个序列是[X1,X2,X3]的维度的。其中每个X都是一个(1,5)的子序列。
那么一个batch也就是,一个(4,3,5)也就是。
X1,X2,X3
Y1,Y2,Y3
Z1,Z2,Z3
Q1,Q2,Q3
也就是4行3列的。我们做了cat之后就是。
X1,X2,X3
Y1,Y2,Y3
Z1,Z2,Z3
Q1,Q2,Q3
X1,X2,X3
Y1,Y2,Y3
Z1,Z2,Z3
Q1,Q2,Q3
也就是batchsize=8,8行。
序列长度是3,然后其中每个点X1,又包含一个五维的。
然后transpose之后,是(8,3,5)-》(3,8,5),也就是
X1 Y1 Z1 Q1 X1 Y1 Z1 Q1
X2 Y2 Z2 Q2 X2 Y2 Z2 Q2
X3 Y3 Z3 Q3 X3 Y3 Z3 Q3
也就是说,到了上面这一步是(3,8,5)的维度的,请记住,一个序列(3,5)是[X1, Y1, Z1]。
然后我们的sim是再trnaspose(1,2)的。也就是变成了(3,5,8)的
下面,我们改变思路。因为之前定义的X1X2X3是这样的,
a1 a2 a3 a4 a5
b1 b2 b3 b4 b5
c1 c2 c3 c4 c5,也就是说从序列长度来看是X1包含a1 a2 a3 a4 a5。如果我们从featuredimension的维度来看的话,那么就是F1,F2,F3,F4,F5。那么我们的F1就包含a1,b1,c1.也就是从序列点来看的同一位置的三个值。那么我们的一条序列就是,(4,5,3)的是怎么样的,回顾一下(4,3,5)的,那么这个就是4个 batch_size 也就是4个序列条。 一个[X123],也就是序列条。
那么四个,也就是四条了。
X1,X2,X3
Y1,Y2,Y3
Z1,Z2,Z3
Q1,Q2,Q3
如果是(4,5,3)的话,那么就是
F1,F2, F3, F4, F5
G1,G2,G3,G4,G5
H1,H2, H3,H4,H5
I1, I2, I3, I4, I5