引入
很久没有看论文和写博客,现在把最近看的一篇多示例学习(MIL)的论文解读一下,希望有所收获。
前言
该篇论文提出了一种由神经网络参数化的双流最大自注意的MIL模型(DSMIL);
主要步骤:1)第一流部署了一个简单的 MIL max-pooling,并确定了top激活的嵌入实例;2)在第二个流中,通过仅将顶部激活的查询与包中的实例相关联,跨实例计算注意力得分。
特点:基于相同的实例嵌入来训练一个实例分类器和包分类器。
方法
问题表述
包:
B
=
(
x
1
,
y
1
)
,
⋯
,
(
x
n
,
y
n
)
B=(x_1,y_1), \cdots, (x_n,y_n)
B=(x1,y1),⋯,(xn,yn);实例:
x
i
∈
X
x_i \in X
xi∈X;实例标签:
y
i
∈
0
,
1
y_i\in 0,1
yi∈0,1
包的标签:
c
(
B
)
=
1
−
∏
i
=
1
n
(
1
−
y
i
)
c(B)=1-\prod \limits_{i=1}^n{(1-y_i)}
c(B)=1−i=1∏n(1−yi);
假设有一些合适的变换
f
f
f和
g
g
g,则
c
(
B
)
=
g
(
f
(
x
0
)
,
⋯
,
f
(
x
n
)
)
c(B)=g(f(x_0),\cdots,f(x_n))
c(B)=g(f(x0),⋯,f(xn))。
关于函数
f
f
f 和
g
g
g,MIL有两种模型处理方式:1) 基于实例的方法:
f
f
f 是实例级别的分类器,它为每个实例生成一个类别评分,
g
g
g 是一个池化运算符,用于汇总实例评分以生成袋评分;2) 基于嵌入的方法:
f
f
f 是实例级特征提取器,将每个实例映射到一个嵌入,
g
g
g 是一个聚合函数,它首先将所有实例嵌入映射到一个包嵌入,并根据该包嵌入生成一个包得分。
双流MIL聚合
H
=
[
h
0
,
…
,
h
N
−
1
]
∈
R
L
×
N
\mathbf{H}=\left[\mathbf{h}_{0}, \ldots, \mathbf{h}_{N-1}\right] \in \mathbb{R}^{L \times N}
H=[h0,…,hN−1]∈RL×N 是嵌入实例的包,其中
h
i
\mathbf{h}_i
hi 是第
i
i
i 个实例的嵌入。
第一个流是一个具有 MIL max-pooling 的实例级别分类器:
c
m
=
max
{
W
0
h
0
,
…
,
W
0
h
N
−
1
}
\mathbf{c}_{m}=\max \left\{\mathbf{W}_{0} \mathbf{h}_{0}, \ldots, \mathbf{W}_{0} \mathbf{h}_{N-1}\right\}
cm=max{W0h0,…,W0hN−1}其中,
W
0
\mathbf{W}_0
W0是一个全连接层的权值矩阵。
第二个流从嵌入实例学习到嵌入包,并且学习包分类器给嵌入包打分。
步骤1):通过第一流得到最优激活嵌入实例
h
m
\mathbf{h}_m
hm,然后将嵌入实例转换成两个向量 :查询向量
q
i
∈
R
L
×
1
\mathbf{q}_i\in \mathbb{R}^{L \times 1}
qi∈RL×1 和 信息向量
v
i
∈
R
L
×
1
\mathbf{v}_i \in \mathbb{R}^{L \times 1}
vi∈RL×1,
q
i
=
W
q
h
i
,
v
i
=
W
v
h
i
,
i
=
0
,
…
,
N
−
1
\mathbf{q}_{i}=\mathbf{W}_{q} \mathbf{h}_{i}, \quad \mathbf{v}_{i}=\mathbf{W}_{v} \mathbf{h}_{i}, \quad i=0, \ldots, N-1
qi=Wqhi,vi=Wvhi,i=0,…,N−1, 其中
W
q
\mathbf{W}_q
Wq 和
W
v
\mathbf{W}_v
Wv是两个全连接层的权值矩阵。
步骤2):最大自注意力向量的每一个属性
a
i
a_i
ai :
a
i
=
exp
(
s
i
)
∑
i
=
0
N
−
1
exp
(
s
i
)
,
s
i
=
⟨
q
i
,
q
m
⟩
,
i
=
0
,
…
,
N
−
1
a_{i}=\frac{\exp \left(\mathrm{s}_{i}\right)}{\sum_{i=0}^{N-1} \exp \left(\mathrm{s}_{i}\right)}, \quad s_{i}=\left\langle\mathbf{q}_{i}, \mathbf{q}_{m}\right\rangle, \quad i=0, \ldots, N-1
ai=∑i=0N−1exp(si)exp(si),si=⟨qi,qm⟩,i=0,…,N−1
步骤3):嵌入包
b
∈
R
L
×
1
\mathbf{b} \in \mathbb{R}^{L \times 1}
b∈RL×1:
b
=
∑
i
a
i
v
i
\mathbf{b}=\sum_{i} a_{i} \mathbf{v}_{i}
b=i∑aivi其中,求和的操作是对每个元素都求和。
步骤4):包的得分
c
∈
R
L
×
1
\mathbf{c}\in \mathbb{R}^{L \times 1}
c∈RL×1:
c
b
=
W
1
b
\mathbf{c}_{b}=\mathbf{W}_{1} \mathbf{b}
cb=W1b,
W
1
\mathbf{W}_1
W1 是一个全连接层的权值矩阵。
步骤5):最后包的得分是两个流得分的权值和:
c
^
=
(
1
−
λ
)
c
m
+
λ
c
b
,
λ
∈
[
0
,
1
]
\hat{\mathbf{c}}=(1-\lambda) \mathbf{c}_{m}+\lambda \mathbf{c}_{b}, \quad \lambda \in[0,1]
c^=(1−λ)cm+λcb,λ∈[0,1]