方法论
有监督的分类任务实现
- 给定一个将数据I映射至特征向量 x ∈ R D x ∈ R^D x∈RD 的深度神经网络 Φ Φ Φ ,即 x = Φ ( I ) x = Φ ( I ) x=Φ(I)。
- 使用有N个样本 I 1 , … , I N I_1 , … , I_N I1,…,IN, 且具有标签 y 1 , … , y N ∈ { 1 , … , K } y_1 , … , y_N ∈ \{ 1 , … , K \} y1,…,yN∈{1,…,K}的数据集训练该模型。
- 分类头 h : R D → R K h : R^D → R^K h:RD→RK 将特征向量转化为一个类别分数向量。
- 最后通过softmax将类别分数映射为类别概率 p ( y = ⋅ ∣ x i ) = s o f t m a x ( h ∘ Φ ( x i ) ) p ( y = ⋅ ∣ x i ) = softmax ( h ∘ Φ ( x i ) ) p(y=⋅∣xi)=softmax(h∘Φ(xi))。
- 模型通过最小化平均交叉熵来学习。
E ( p ∣ y 1 , … , y N ) = − 1 N ∑ i = 1 N log p ( y i ∣ x i ) (1) E(p|y_1,\dots,y_N)=-\frac{1}{N}\sum_{i=1}^N\text{log}\;p(y_i|\textbf{x}_i) \tag{1} E(p∣y1,…,yN)=−N1i=1∑Nlogp(yi∣xi)(1)
今天求佛x_i =1,明天中彩票的概率和明天不中彩票的概率
半监督方法
- 计算机视觉中的半监督学习
- https://amitness.com/2020/07/semi-supervised-learning/
Self-training 是最简单的半监督方法之一,其主要思想是找到一种方法,用未标记的数据集来扩充已标记的数据集。算法流程如下:
- 首先,利用已标记的数据来训练一个好的模型,然后使用这个模型对未标记的数据进行标记。
- 然后,进行伪标签的生成,因为已训练好的模型对未标记数据的所有预测都不可能都是完全正确的,因此对于经典的 Self-training,通常是使用分数阈值(confidence score)过滤部分预测,以选择出未标记数据的预测标签的一个子集。
- 其次,将生成的伪标签与原始的标记数据相结合,并在合并后数据上进行联合训练。
- 整个过程可以重复 n 次,直到达到收敛。
Self-training 最大的问题在就在于伪标签非常的 noisy,会使得模型朝着错误的方向发展。以下文章大多数都是为了解决这个问题
退化解
- 如果能够获取一部分的标签,那么该方法就可以使用。但是,在无监督分类中,该方法会导致退化解。也就是,可以通过将数据数据样本分配到同一个标签来实现等式(1)的最小化。
E ( p , q ) = − 1 N ∑ i = 1 N ∑ y = 1 K q ( y ∣ x i ) log p ( y ∣ x i ) (2) E(p,q)=-\frac{1}{N}\sum_{i=1}^N\sum_{y=1}^K q(y|\textbf{x}_i)\text{log}\;p(y|\textbf{x}_i) \tag{2} E(p,q)=−N1i=1∑Ny=1∑Kq(y∣xi)logp(y∣xi)(2)
-
若后验概率分布(密度函数) q ( y ∣ x i ) = δ ( y − y i ) q(y∣x i)=δ(y−y_i) q(y∣xi)=δ(y−yi)是确定的,那么等式(1)和等式(2)就是等价的,即
-
E ( p , q ) = E ( p ∣ y 1 , … , y N ) E ( p , q ) = E ( p ∣ y_1 , … , y_N ) E(p,q)=E(p∣y1,…,yN)
-
在本方法中,优化分布q就等价于重写分配标签,这会导致退化解。
-
为了避免退化解问题,该方法为标签的重新分配添加了均等划分约束。
-
一开始以为这是贝叶斯公式
P(A|B) = P(B|A) * P(A) / P(B)
,后来发现这有点类似”任意信号都可以用冲激信号的组合表示”。
min p , q E ( p , q ) subject to ∀ y : q ( y ∣ x i ) ∈ { 0 , 1 } and ∑ i = 1 N q ( y ∣ x i ) = N K (3) \mathop{\text{min}}_{p,q}\; E(p,q)\quad\text{subject to}\quad\forall y:q(y|\textbf{x}_i)\in\{0,1\}\; \text{and}\sum_{i=1}^N q(y|\textbf{x}_i)=\frac{N}{K} \tag{3} minp,qE(p,q)subject to∀y:q(y∣xi)∈{0,1}andi=1∑Nq(y∣xi)=KN(3)
该约束意味着每个样本 x i x_i xi 都会被均等的分配至每个标签上,也就是整体N个样本被均匀分配到K个类别上。
transportation polytope求解满足条件的q
优化以上目标函数中的q是一个难以优化的组合优化问题。但是,其可以看做是一个相对容易求解的最优运输问题的实例。
最优传输
Transportation polytope 是一个数学概念,用于描述运输问题的解空间。在运输问题中,需要确定如何将一组货物从供应地点运送到需求地点,以最小化总运输成本。
一个例子:考虑一个运沙子的问题,第一堆沙子的分布为r=(0.6,0.4),第二堆沙子的分布为c=(0.2,0.6,0.2)。下表就描述了一种搬运方式: 即把0.6的第一堆沙子全搬到第二堆, 把0.4的第二堆沙子平均搬到的第一堆和第三堆.
0.2 | 0.6 | 0.2 | |
---|---|---|---|
0.6 | 0 | 0.6 | 0 |
0.4 | 0.2 | 0 | 0.2 |
给定2 × 3的代价矩阵M,如果求最小cost就成了最优化问题。从r映射到c的代价可以用传输矩阵(transport matrix)(或联合概率)量化为:
d M ( r , c ) : = m i n Q ∈ U ( r , c ) ∑ i , j Q i , j M i , j = ⟨ Q , M ⟩ d_{\color{red}M}(r,c):=min _{Q ∈ U ( r , c )} \sum_{i,j}Q_{i,j}{\color{red}M}_{i,j}= ⟨ Q, M ⟩ dM(r,c):=minQ∈U(r,c) i,j∑Qi,jMi,j=⟨Q,M⟩
因此在分布 r 、c 约束下,问题解空间可以做如下定义:
U ( r , c ) : = { Q ∈ R + K × N ∣ Q 1 = r , Q ⊤ 1 = c } U(r,c):=\{Q\in\mathbb{R}_+^{K\times N}|Q\textbf{1}=r,Q^\top\textbf{1}=c\} U(r,c):={Q∈R+K×N∣Q1=r,Q⊤1=c}
特殊化到本文
- 令 P y i = q ( y ∣ x i ) 1 N P_{y_i}=q(y|\textbf{x}_i)\frac{1}{N} Pyi=q(y∣xi)N1 表示由
模型估计的
、大小为K × N 的联合概率矩阵(N个样本得到的分布)。 - 类似地,令 Q y i = p ( y ∣ x i ) 1 N Q_{y_i}=p(y|\textbf{x}_i)\frac{1}{N} Qyi=p(y∣xi)N1表示分配后的联合概率矩阵。
这里放松矩阵Q为transportation polytope上的元素,即
U ( r , c ) : = { Q ∈ R + K × N ∣ Q 1 = r , Q ⊤ 1 = c } (4) U(r,c):=\{Q\in\mathbb{R}_+^{K\times N}|Q\textbf{1}=r,Q^\top\textbf{1}=c\} \tag{4} U(r,c):={Q∈R+K×N∣Q1=r,Q⊤1=c}(4)
其中, 1 \textbf{1} 1表示具有合适维度的全1向量,所以r和c是矩阵Q在行和列上的投影。在本方法的例子中,需要Q是均等划分数据的条件概率分布矩阵,即需要满足
r = 1 K 类别数 ⋅ 1 , c = 1 N 样本数 ⋅ 1 r=\frac{1}{K类别数}\cdot\textbf{1},\quad c=\frac{1}{N样本数}\cdot\textbf{1} r=K类别数1⋅1,c=N样本数1⋅1
使用新的符号重写等式(3)的目标函数为
E ( p , q ) + l o g N = ⟨ Q , − l o g P ⟩ ( 5 ) (5) E ( p , q ) + log N = ⟨ Q , − log P ⟩ (5) \tag{5} E(p,q)+log N=⟨Q,−log P⟩(5)(5)
其中,⟨ ⋅ ⟩ 是两个矩阵的Frobenius点积,log应用在每个元素上。
因此,基于目标函数(3)来优化Q等价于求解下面的问题
m i n Q ∈ U ( r , c ) ⟨ Q , − l o g P ⟩ ( 6 ) min Q ∈ U ( r , c ) ⟨ Q , − log P ⟩ (6) minQ∈U(r,c) ⟨Q,−log P⟩(6)
这是一个线性规划问题,其可以在多项式时间内求解。在实际求解中,该线性规划可能涉及数百万个样本和上千个类别。传统求解运输问题的算法很难求解这种规模的问题,本文采用了一种称为Sinkhorn-Knopp的快速求解方法。这相当于引入正则化项
min Q ∈ U ( r , c ) ⟨ Q , − log P ⟩ + 1 λ KL ( Q ∥ r c ⊤ ) (7) \mathop{\text{min}}_{Q\in U(r,c)}\;\langle Q,-\text{log}\; P\rangle+\frac{1}{\lambda}\text{KL}(Q\parallel rc^\top) \tag{7} minQ∈U(r,c)⟨Q,−logP⟩+λ1KL(Q∥rc⊤)(7)
其中,KL 是Kullback-Leibler 散度, r c ⊤ r c^⊤ rc⊤能够被看作是K × N的概率矩阵。添加这个正则化项的好处是,最小化等式(7)能够被重写为,推导过程添加链接描述
Q = d i a g ( α ) P λ d i a g ( β ) (8) Q = diag ( α ) P ^λ diag ( β ) \tag{8} Q=diag(α)Pλdiag(β)(8)
- 其中,指数操作是元素级别,α 和β是选择的缩放稀疏向量,因此得到的矩阵Q仍然是一个概率矩阵。通过简单的矩阵缩放迭代就能够获得向量α和β。
当λ非常大时,目标函数(7)等价于目标函数(6)。但是,即使只使用适度的λ,两个目标函数也往往具有类似的优化目标。λ的选择是收敛速度和运输问题求解精确度的一个折中。在本文中,使用一个固定的λ是合理的,因此本文感兴趣的是最终聚类和表示学习的结果,而不是准确的求解运输问题。
最终的算法描述
通过求解等式(6)来学习模型 h ∘ Φ h ∘ Φ h∘Φ 和标签分配Q,其中Q是概率矩阵,而模型 h ∘ Φ h ∘ Φ h∘Φ决定了预测结果 P y i = softmax y ( h ∘ Φ ( x i ) ) P_{y_i}=\text{softmax}_y(h\circ\Phi(\textbf{x}_i)) Pyi=softmaxy(h∘Φ(xi)) 。交替执行两面的两个步骤
步骤1:表示学习
给定一个当前的标签分配Q,通过最小化等式(6)来更新h ∘ Φ 的参数。这相当于普通分类问题的交叉熵损失函数。
步骤2:自标注
给定当前的模型h ∘ Φ ,计算对数概率P PP。然后通过使用等式(8)进行迭代更新来寻找Q
∀ y : α ← [ P λ β ] y − 1 ∀ i : β i ← [ α ⊤ P λ ] i − 1 \forall y:\alpha\leftarrow[P^\lambda\beta]_y^{-1}\quad\forall i:\beta_i\leftarrow[\alpha^\top P^\lambda]_i^-1 ∀y:α←[Pλβ]y−1∀i:βi←[α⊤Pλ]i−1
每次迭代更新都涉及到O ( N K )复杂度的矩阵乘法。所以,在数百万样本和上千个标签的情况下,速度也很快。在实际训练中,在ImageNet上使用GPU的话,可以在2分钟内达到收敛。
需要类似Deep一样的对所有样本数据的操作吗?是的
模型解释
如果将数据的索引i ii看作是概率为p ( i ) = 1 / N p(i)=1/Np(i)=1/N的均匀分布随机变量,且后验概率重
最坏情况中最好的
code
- https://paperswithcode.com/paper/self-labelling-via-simultaneous-clustering-1
CG
-
https://www.youtube.com/watch?v=d64KBkTOV_Q
-
https://papertalk.org/papertalks/4148
-
https://arxiv.org/pdf/1911.05371v3.pdf
-
https://medium.com/machine-intelligence-and-deep-learning-lab/self-labeling-via-simultaneous-clustering-and-representation-learning-6383dbf6f65e
-
https://blog.csdn.net/bqw18744018044/article/details/124218207