什么是 batch 模式主动学习?挑选一批样例,立刻标注用于训练。
本文的工作是,利用元学习来学习主动学习算法,在一个小训练集上,挑选一组最佳样例(未标注)来标注加入训练。
实验结果表明,本文提出的主动学习算法比传统的启发式方法更好。所构建的带标签训练集,能更好地改善分类器。
本文的缺点是没有提供源代码。
主动学习方法的主流方法是启发式方法,例如,挑选的样例应该具有信息性、多样性、代表性。根据启发式挑选策略,选取 batch 中的最佳样例,这种启发式方法可以扩展到 batch 模式。但是,这会明显导致模型性能不最优,而且会产生过多的冗余样例。虽然有一些针对 batch 模式主动学习算法的研究,但是这些方法的复杂度很高,难以用于大数据集。而且,对主动学习的大多数研究工作都假设未标注样例至少属于我们感兴趣的某个类别。但是,真实数据并不服从这些约束条件,未标注数据通常由干扰项组成,这些干扰项并不属于我们要考察的任何类别。启发式方法可能认为这些干扰项对模型很重要,其实不然。因此作者对 batch 模式主动学习方法的研究兴趣如下:
已有研究工作对主动学习的元学习方法进行了探索,但是还没有用于 batch 模式,也没有用于干扰项。
作者在小样本学习框架下,制定 batch 模式主动学习任务,目标是学到一个元学习模型来改善这个问题。作者在原型网络(Prototypical Networks )的基础上,增加了一个主动学习模型,用于挑选样例进行打标,来提高模型的分类准确率。实验表明,这种新方法比常用的启发式方法更好。
本文的另一个缺点是没有给出结构图。这张图是我根据自己的理解画的。
未标注数据集 U = { x ~ 1 , . . . , x ~ M } U=\{\tilde x_1, ..., \tilde x_M\} U={ x~1,...,x~M}
小样本学习任务参数 N-way,K-shot,B-batch
选出 U 的一个子集 A = { x ~ 1 , . . . , x ~ B } A=\{\tilde x_1, ..., \tilde x_B\} A={ x~1,...,x~B} 用于标注,然后添加到支持集 S,得到一个新的支持集 S ′ = S ⋃ A S'=S\bigcup A S′=S⋃A。
S 的元素个数是 N*K,主动学习挑选样例后,只给 S 中的部分类别添加样例?还是所有类别都添加?每个类别添加的样例数量是否相同?B 的数值应该怎么设定?
目标是用 S’ 最大限度地提高分类器在查询集 Q 上的性能。
样例挑选过程:
2.1 质量分布
对于每个未标注样例,使用其统计量,可以计算(根据其质量挑选该样例的)概率:
p q u a l i t y ( x ~ ) ∝ e x p ( q i ) , 其 中 q i = f q ( ∏ ( { c k } k = 1 K , x ~ i ) ) p_{quality}(\tilde x)∝exp(q_i),其中 q_i=f_q\left(\prod\left(\{c_k\}_{k=1}^K, \tilde x_i\right)\right) pquality(x~)∝exp(qi),其中qi=fq(∏({ ck}k=1K,x~i))
f q f_q fq 是一个具有参数 q 的多层感知机 MLP。
根据学到的样例分类统计量,预测该样例对于已存在的分类器的有用性(质量),进而得到挑选该样例的概率分布。
训练过程就是学习这个概率分布,让预测概率逼近真实概率。
2.2 多样性分布
对于每个未标注样例,其统计量也可用于计算特征向量来描述该未标注样例与分类器的关系:
ϕ i = f ϕ ( ∏ ( { c k } k = 1 K , x ~ i ) ) \phi_i=f_\phi\left(\prod\left(\{c_k\}_{k=1}^K, \tilde x_i\right)\right) ϕi=fϕ(∏({ ck}k=1K,x~i)),
其中 ϕ i ∈ R D ′ \phi_i\in R^{D'} ϕi∈RD′, f ϕ f_\phi fϕ 是一个具有参数 φ 的多层感知机 MLP。
多样性分布的目标是,使得挑选的未标注样例与 A 中的样例尽可能不同,根据每个样例的特征向量计算其相似度。根据未标注样例的多样性来计算其被选中的概率:
p d i v e r s i t y ( x ~ i ∣ A ) ∝ e x p ( v ( ϕ i ) / T ) , 其 中 v ( ϕ i ) = m i n x ~ j ∈ A { sin θ i j } p_{diversity}(\tilde x_i|A)∝exp(v(\phi_i)/T),其中 v(\phi_i)= min_{\tilde x_j\in A}\{\sin θ_{ij}\} pdiversity(x~i∣A)∝exp(v(ϕi)/T),其中v(ϕi)=minx~j∈A{ sinθij},
其中 θ i j θ_{ij} θij 是特征向量 ϕ i \phi_i ϕi 和 ϕ j \phi_j ϕj 的夹角,T 是一个学到的温度参数,通过 T 可以控制该分布的平面。如果某个样例的特征向量与 A 中样例的特征向量越趋向于正交,那么该样例被选中的概率就会越大。
2.3 专家的乘积 (Product of experts)
Product of experts (PoE) 是一种机器学习技术,是把多个简单分布的输出进行结合,对概率分布进行建模。
怎样结合?从字面看,应该是乘法。概率用乘法更合理。且看公式
未标注样例被选中的最终概率分布,是其质量分布和多样性分布的乘积。
p ( x ~ ∣ A ) ∝ p q u a l i t y ( x ~ ) ⋅ p d i v e r s i t y ( x ~ i ∣ A ) ⋅ l x ~ ∉ A p(\tilde x|A)∝p_{quality}(\tilde x)\cdot p_{diversity}(\tilde x_i|A)\cdot l_{\tilde x\notin A} p(x~∣A)∝pquality(x~)⋅pdiversity(x~i∣A)⋅lx~∈/A,
其中 l x ~ ∉ A l_{\tilde x\notin A} lx~∈/A 是指示变量,强制去除 A 中样例的支持。
2.4 训练
通过更新模型参数 θ ′ = { ϕ , q , T } \theta'=\{\phi, q, T\} θ′={ ϕ,q,T},使得对于任意给定的小样本学习任务(支持集 S,未标注数据集 U,查询集 Q),都能得到 p θ ′ ( x ~ ∣ A ) p_{\theta'}(\tilde x|A) pθ′(x~∣A) 用于构建子集 A ⊆ U A\subseteq U A⊆U 组成新的支持集 S ′ = S ⋃ A S'=S\bigcup A S′=S⋃A, 使得模型在查询集 Q 上取得更高的分类性能。采用梯度下降法来训练模型:
∇ θ ′ E p θ ′ ( A ) [ C ( Q ∣ S ⋃ A ) ] ≈ 1 T ∑ t = 1 T [ ( C ( Q ∣ S ⋃ A t ) − β − t ) ∇ θ ′ log p θ ′ ( A t ) ] , 其 中 A t 服 从 分 布 p θ ′ ( A ) \nabla_{\theta'}E_{p_{\theta'}(A)}[C(Q|S\bigcup A)]\approx\frac{1}{T}\sum_{t=1}^T[(C(Q|S\bigcup A_t)-\beta_{-t})\nabla_{\theta'}\log p_{\theta'}(A_t)],其中 A_t 服从分布 p_{\theta'}(A) ∇θ′Epθ′(A)[C(Q∣S⋃A)]≈T1∑t=1T[(C(Q∣S⋃At)−β−t)∇θ′logpθ′(At)],其中At服从分布pθ′(A)
其中 C ( Q ∣ S ⋃ A ) C(Q|S\bigcup A) C(Q∣S⋃A) 是支持集为 S ′ = S ⋃ A S'=S\bigcup A S′=S⋃A 时,模型在查询集 Q 上的准确率。
β − t = 1 T − 1 ∑ t ′ ≠ t T C θ ( Q ∣ S ⋃ A t ′ ) \beta_{-t}=\frac{1}{T-1}\sum_{t'\neq t}^TC_{\theta}(Q|S\bigcup A_{t'}) β−t=T−11∑t′=tTCθ(Q∣S⋃At′) 是基线。
由于训练时未标注样例已经有了标注,所以未标注数据集 U 上的分类准确率可用于增补查询集上的准确率。这种增补能给模型正确反馈,挑选的样例应该有助于区分未标注数据集中的其余样例,因此用 C ( Q ⋃ U ∣ S ⋃ A ) C(Q\bigcup U|S\bigcup A) C(Q⋃U∣S⋃A) 替代 C ( Q ∣ S ⋃ A ) C(Q|S\bigcup A) C(Q∣S⋃A)。
两个数据集:CIFAR-100 和 miniImageNet,都有 100 个类别,每个类别 600 个样例。
数据集拆分方式,都是训练集 64 个类别,验证集 16 类别,测试集 20 个类别。
初始分类器都是用 5-way,1-shot 任务训练原型网络,然后给支持集添加未标注样例(用不同的 batch 大小)评估性能。
与 3 种常用的启发式主动学习方法进行对比:
表1 miniImageNet 的实验结果。左半部分是没有干扰项的数据,右半部分是有干扰项的数据。查询集上准确率的提升百分比是1000个任务的平均值。B 表示挑选的子集大小,M 表示每个任务中未标注数据集的大小。
表2 CIFAR-100 的实验结果。左半部分是没有干扰项的数据,右半部分是有干扰项的数据。查询集上准确率的提升百分比是1000个任务的平均值。B 表示挑选的子集大小,M 表示每个任务中未标注数据集的大小。
原型网络采用 Vinyals et al. (2016) 定义的CNN架构。
f ϕ f_{\phi} fϕ 是一个单层 MLP,用于嵌入样例的分类统计量,维度是 40。
f q f_{q} fq 使用 3 层的 MLP,每层维度是 40,最后输出样例质量的 logit。在隐层,对未标注样例使用 batch-normalization。
每个原型是指什么?初始的支持样例?
基于哪些研究,提出了本文的方法。.