昨天和师兄聊了一下对attention的理解
其实相似性矩阵本身并不是模型的参数,是参数的只是后面的dense layers;
看了好久才弄懂ABCNN的卷积过程。
其实卷积也还是就是Yoon Kim的方法。
协助理解的时候,这篇讲的还是很好的:
https://blog.csdn.net/liuchonge/article/details/69587681
后面这里提了一下,说把中间pooling层的输出也合并到最后的输出里,可以增强performance,但是实测效果却一般。感觉原因还是:
基于Yoon Kim的方法的话,第二层卷积的输入本身就是各个kernel输出的结果了,再卷积就没有提取局部特征的解释性了。
以下是ABCNN_1的过程:
输入的时候是两个句子
a=[a¯1,a¯2,...,a¯m]b=[b¯1,b¯2,...,b¯n]
a
=
[
a
¯
1
,
a
¯
2
,
.
.
.
,
a
¯
m
]
b
=
[
b
¯
1
,
b
¯
2
,
.
.
.
,
b
¯
n
]
首先计算一个相似度矩阵
Ai,j=matchscore(a¯i,b¯j)
A
i
,
j
=
m
a
t
c
h
s
c
o
r
e
(
a
¯
i
,
b
¯
j
)
a¯i,b¯j a ¯ i , b ¯ j 表示对应的词向量
matchscore m a t c h s c o r e 则是 1/(1+|x−y|) 1 / ( 1 + | x − y | ) , 其中 |x−y| | x − y | 是欧氏距离
那么其实现在
a∈R d∗mb∈R d∗nA∈R m∗n
a
∈
R
d
∗
m
b
∈
R
d
∗
n
A
∈
R
m
∗
n
接下来,我们可以得到
Fa=Wa˙ATFb=Wb˙A
F
a
=
W
a
˙
A
T
F
b
=
W
b
˙
A
其中:
Wa∈R d∗n; Fa∈R d∗mWb∈R d∗m; Fb∈R d∗n
W
a
∈
R
d
∗
n
;
F
a
∈
R
d
∗
m
W
b
∈
R
d
∗
m
;
F
b
∈
R
d
∗
n
然后将
a,Fa
a
,
F
a
看成句子的两个channels输入到CNN中,做卷积
channel的作用其实可以看这里:
https://blog.csdn.net/sscc_learning/article/details/79814146
这样其实就是卷积核的维度也要增加一维。