注意力机制背后的最初想法是取代简单的平均输出 简单的平均输出:
y
?
=
n
?
1
∑
i
=
1
n
y
i
y^*=n^{-1}\sum\limits_{i=1}^{n}y_i
y?=n?1i=1∑n?yi? 引入回归模型后对
x
x
x的标签的预测值为:
y
?
=
∑
i
=
1
n
α
(
x
,
x
i
)
y
i
y^*=\sum\limits_{i=1}^{n}\alpha(x,x_i)y_i
y?=i=1∑n?α(x,xi?)yi? 其中的加权为:
α
(
x
,
x
i
)
\alpha(x,x_i)
α(x,xi?)表示
x
i
x_i
xi?和
x
x
x的相关性,
x
i
x_i
xi?属于训练集的向量,
y
i
y_i
yi?表示训练向量的对应标签。
权重的原始形式之一是由核K定义的,它可以被视为一个得分函数,估计向量
x
i
x_i
xi?和
x
x
x的相关性。权重公式如下:
α
(
x
,
x
i
)
=
K
(
x
,
x
i
)
∑
j
=
1
n
K
(
x
,
x
j
)
\alpha(x,x_i)=\frac{K(x,x_i)}{\sum_{j=1}^{n} K(x,x_j)}
α(x,xi?)=∑j=1n?K(x,xj?)K(x,xi?)?
符号 | 含义 |
---|
X
X
X | 包 |
I
I
I | 实例 |
N
N
N | 包个数 |
m
k
m_k
mk? | 第
k
k
k个包中实例的个数 |
(
x
i
,
y
i
)
(x_i,y_i)
(xi?,yi?) | 第
i
i
i个实例在包中的坐标 |
N
i
?
M
\mathcal{N}_i\subset\mathcal{M}
Ni??M | 第
i
i
i个小块的邻居的索引集 |
P
=
P
1
,
…
,
P
C
\mathcal{P}={P_1,\dots,P_C}
P=P1?,…,PC? | 模板的集合 |
开局一张图
-
最左边的图片表示一个包,其中的每一个小块表示包中的每一个实例,假设其中有
m
m
m个实例,使用两个不同颜色的高亮色块表示第
i
i
i个实例
I
i
I_i
Ii?和第
j
j
j个实例
I
j
I_j
Ij?。 -
所有小块(实例)都被输入经过训练的神经网络,使用一维卷积计算其嵌入
F
i
F_i
Fi?,目的是降低实例
I
i
I_i
Ii?的维度:
F
i
=
C
o
n
v
(
I
i
)
,
i
=
1
,
…
,
m
.
F_i=Conv(I_i),i=1,\dots,m.
Fi?=Conv(Ii?),i=1,…,m. -
我们使用
(
x
i
,
y
i
)
(x_i,y_i)
(xi?,yi?)表示在整个图像中第
i
i
i个小块的坐标。 使用
M
=
{
1
,
…
,
m
}
\mathcal{M}=\{1,\dots,m\}
M={1,…,m}表示整幅图像中所有小块的索引集。 第
i
i
i个小块的邻居的索引集
N
i
?
M
\mathcal{N}_i\subset\mathcal{M}
Ni??M为:
N
=
{
j
∈
M
∣
0
<
max
?
(
∣
x
i
?
x
j
∣
,
∣
y
i
?
y
j
∣
)
≤
d
}
\mathcal{N}=\{j\in \mathcal{M}|0<\max(|x_i-x_j|,|y_i-y_j|)\leq d\}
N={j∈M∣0<max(∣xi??xj?∣,∣yi??yj?∣)≤d}
d
d
d可以是任意值,在本实验中
d
d
d的取值为1。并且值得注意的是,邻居是在包内找的。 -
邻居的使用可以改善分类结果,这里我们引入注意机制,计算
I
i
I_i
Ii?的邻居联合嵌入
B
i
B_i
Bi?为:
B
i
=
∑
j
∈
N
i
α
j
(
i
)
F
j
B_i = \sum\limits_{j\in\mathcal{N}_i}\alpha^{(i)}_{j}F_j
Bi?=j∈Ni?∑?αj(i)?Fj? -
根据第实例
I
i
I_i
Ii?的第
j
j
j个邻居的权重
α
j
(
i
)
\alpha_j^{(i)}
αj(i)?
α
j
(
i
)
=
s
o
f
t
m
a
x
(
s
(
i
)
)
=
e
x
p
(
s
j
(
i
)
)
∑
t
e
x
p
(
s
t
(
i
)
)
\alpha_j^{(i)}=\mathbf{softmax}(s^{(i)})=\frac{exp(s_j^{(i)})}{\sum_texp(s_t^{(i)})}
αj(i)?=softmax(s(i))=∑t?exp(st(i)?)exp(sj(i)?)? 其中
s
j
(
i
)
s_j^{(i)}
sj(i)?是将两个向量
F
i
F_i
Fi?和
F
j
F_j
Fj?映射到标量的注意力评分函数:
s
j
(
i
)
=
s
c
o
r
e
n
b
(
F
i
,
F
j
)
=
F
T
t
a
n
h
(
V
n
b
F
j
)
s_j^{(i)}=\mathbf{score}_{nb}(F_i,F_j)=F^Ttanh(V_{nb}F_j)
sj(i)?=scorenb?(Fi?,Fj?)=FTtanh(Vnb?Fj?) 其中
V
V
V是可学习参数的矩阵 -
总之,我们为每个
F
i
F_i
Fi?得到一个嵌入
B
i
B_i
Bi?,
B
i
B_i
Bi?中包含了关于邻居的信息。将第
i
i
i个实例的嵌入与邻域
B
i
B_i
Bi?的联合嵌入串联起来,得到嵌入
T
i
T_i
Ti?:
T
i
=
(
F
i
,
B
j
)
T_i=(F_i,B_j)
Ti?=(Fi?,Bj?) 串联操作在图中用符号⊕表示. 现在每个包都由一组嵌入向量
T
i
T_i
Ti?表示。
该算法提出的另一个重要概念是一组嵌入模板,这些模板被视为可学习向量。此外,模板数量是
C
C
C,其值决定分类质量。模板可以被视为应用于嵌入
T
i
T_i
Ti?集的多重关注的实现。由于神经网络的初始化规则不同,它们是不同的网络。???? 使用
P
=
P
1
,
…
,
P
C
\mathcal{P}={P_1,\dots,P_C}
P=P1?,…,PC?表示模板的集合,然后,每个模板产生相应的聚合嵌入
E
k
E_k
Ek?:
E
k
=
∑
i
=
1
m
β
k
(
k
)
T
i
,
k
=
1
,
…
,
C
E_k=\sum\limits_{i=1}^{m}\beta_k^{(k)}T_i,k=1,\dots,C
Ek?=i=1∑m?βk(k)?Ti?,k=1,…,C
其中:这个公式不懂没有说score是怎么算的
β
k
(
k
)
=
s
o
f
t
m
a
x
(
?
s
c
o
r
e
(
P
k
,
T
i
)
?
i
)
\beta_k^{(k)}=\mathbf{softmax}(\langle score(P_k,T_i)\rangle_i)
βk(k)?=softmax(?score(Pk?,Ti?)?i?)
这里引入softmax进行归一化操作,第
k
k
k个聚合嵌入
E
k
E_k
Ek?是图像中具有邻域的所有小块(实例)嵌入的加权平均值,其权重由第
k
k
k个模板定义。换句话说,第
k
k
k个聚集嵌入相对于第
k
k
k个模板对整个图像或包进行特征化。有关所有面片及其相邻面片的信息包含在
C
C
C个向量
E
1
,
…
,
E
C
E_1,\dots,E_C
E1?,…,EC?中。
- 与所有
C
C
C个模板相对应的聚合嵌入
E
k
E_k
Ek?被分组到与整个图像或袋子和所有模板相对应的总向量
Z
Z
Z中,
Z
Z
Z是包最后被映射为的向量。
Z
=
∑
k
=
1
C
γ
k
E
k
Z=\sum\limits_{k=1}^{C}\gamma_kE_k
Z=k=1∑C?γk?Ek? 其中:
γ
k
=
s
o
f
t
m
a
x
(
?
s
c
o
r
e
(
G
,
E
k
)
?
k
)
\gamma_k=\mathbf{softmax}(\langle score(G,E_k)\rangle_k)
γk?=softmax(?score(G,Ek?)?k?)
G
G
G是训练向量的全局模板。 ,模板
G
G
G和相应的最终注意 final attention决定了哪些聚合嵌入
E
k
E_k
Ek?和模板
P
k
P_k
Pk?是重要的,并且,在分类器之前使用注意机制可以使得模型具有可解释性。
建议使用带有参数
θ
\theta
θ的分类层
g
θ
(
Z
)
g_\theta(Z)
gθ?(Z),该参数定义了包级别(整个图像级别)上分类标签为1的概率。
上述描述了处理
I
i
I_i
Ii?的步骤,真正的实现假设以相同的方式处理包的所有
I
I
I。
整个神经网络使用随机梯度下降和Adam优化器进行端到端的训练。在每个步骤中,从训练集中选择一个图像(一个包),然后将其划分为多个面片。这些面片被用作神经网络的输入。使用神经网络的结果是对一类概率的估计,例如,这意味着图像是否包含恶性细胞。根据得到的估计和整个图像标签确定损失函数。为了更新神经网络权重,使用自动微分算法为每个训练参数确定损失函数的偏导数值。然后以标准方式更新训练参数值。
损失函数:
L
=
1
N
∑
k
=
1
N
B
C
E
(
Y
k
,
f
(
X
k
)
)
+
2
C
(
C
?
1
)
∑
i
<
j
(
P
i
T
?
P
j
)
2
L=\frac{1}{ N}\sum\limits_{k=1}^{N}BCE(Y_k,f(X_k))+\frac{2}{C(C-1)}\sum\limits_{i<j}(P_{i}^{T}\cdot P_j)^2
L=N1?k=1∑N?BCE(Yk?,f(Xk?))+C(C?1)2?i<j∑?(PiT??Pj?)2
这里的第一项是标准二分类交叉熵(BCE)损失函数;
f
(
X
k
)
f(X_k)
f(Xk?)是整个神经网络的输出。
Y
k
Y_k
Yk?是真实标签
BCE损失函数:
l
o
s
s
(
x
,
y
)
=
?
[
y
log
?
x
+
(
1
?
y
)
log
?
(
1
?
x
)
]
loss(x,y)=-[y\log x+(1-y)\log(1-x)]
loss(x,y)=?[ylogx+(1?y)log(1?x)] 其中
x
x
x是模型输出,
y
y
y是真实标签。
在第二项中,当
P
i
P_i
Pi?和
P
j
P_j
Pj?的差距越大时,损失就越小,因此损失函数中的第二项旨在使得
P
i
P_i
Pi?和
P
j
P_j
Pj?尽可能不同。
计算包中实例的重要性
根据上述的步骤,一个包最终被映射成了一个向量的表示:
Z
=
∑
k
=
1
C
γ
k
E
k
Z=\sum\limits_{k=1}^{C}\gamma_kE_k
Z=k=1∑C?γk?Ek? 可以通过如下公式推导出: 在这里可以把
w
i
=
∑
k
=
1
C
γ
k
β
i
(
k
)
w_i=\sum_{k=1}^C\gamma_k\beta_i^{(k)}
wi?=∑k=1C?γk?βi(k)?看作是实例
I
i
I_i
Ii?在它的邻居中的重要性。并且
∑
i
=
1
m
w
i
=
1
\sum_{i=1}^{m}w_i=1
∑i=1m?wi?=1,包中所有的实例的重要性之和为
1
1
1。
注意!前面已经提到过,第实例
I
i
I_i
Ii?的第
j
j
j个邻居的重要性为
α
j
(
i
)
\alpha_j^{(i)}
αj(i)?。因此我们可以考虑将实例邻居的重要性和实例本身的重要性联系起来。 如果我们假设向量
T
i
T_i
Ti?的所有元素都是等价的,那么它的两部分的重要性度量是相等的。但是,如果指数为
i
i
i和
j
j
j的图像小块是相邻的,则
B
i
B_i
Bi?的值可能会与
T
j
T_j
Tj?有关联。因此我们定义第
i
i
i个图像小块的最终重要性
v
i
v_i
vi?为:
v
i
=
w
i
+
∑
j
∈
N
i
α
j
(
i
)
w
j
v_i=w_i+\sum\limits_{j\in N_i}\alpha_{j}^{(i)}w_j
vi?=wi?+j∈Ni?∑?αj(i)?wj?
|