论文阅读笔记(11):Adaptive Self-Paced Deep Clustering with Data Augmentation,用数据增强的自适应Self-Paced深度聚类
摘要
深度聚类通过联合执行特征学习和聚类分割,获得了比传统聚类更好的性能。尽管许多深度聚类算法已经出现在各种应用中,但大多数算法都无法学习到健壮的面向聚类的特征,这反过来又会影响最终的聚类性能。为了解决这个问题,我们提出了一种两阶段的深度聚类算法,该算法结合了数据增强和自步学习(self-paced learning)。
具体地说:
在第一阶段,我们通过使用随机位移和旋转给定干净示例来增强示例来训练自动编码器,从而学习稳健的特征;
在第二阶段,通过使用这些增强示例的fine-tunning编码器来更新干净例的聚类分配,鼓励学习到的特征是面向聚类的。
在调整编码器时,损失函数中每个增强示例的目标是聚类中心,干净示例被分配到该聚类。目标计算不正确的示例可能会误导编码器网络。为了稳定网络训练,我们在每次迭代中利用自适应自步学习选择最有说服力的示例。大量的实验验证了我们的算法在四个图像数据集上的性能优于现有的算法。
1 简介
聚类在数据挖掘和机器学习领域得到了广泛的研究。传统的聚类算法,如 k k k-means、高斯混合模型(GMM)和层次聚类通常根据内在相似性对手工特征上的数据进行分组。众所周知,这些功能是为一般目的而设计的,可能不适用于特定任务。一些聚类算法,包括谱聚类和核 k k k-means将数据转换为一个新的特征空间,在这个空间中聚类任务变得更加容易。然而,这些方法通常具有有限的转换能力或具有较高的计算复杂度。
深度神经网络(DNN)在高度非线性变换(或特征学习)方面表现出惊人的能力。最近,一些研究采用DNN进行聚类,聚类性能有了显著提高。其基本思想是,好的特征有助于产生好的聚类结果,而后者反过来又指导DNN学习更好的特征。这两个过程无缝连接以实现卓越的性能。这被称作深度聚类(Deep Clustering),即通过DNN联合执行特征学习和聚类。
大多数现有的深度聚类算法通过使用由聚类中心和分配定义的损失函数来调整DNN的参数,这通常是基于上次迭代中DNN的输出获得的。我们观察到这些方法没有明确地考虑边缘示例对网络训练的影响。由于DNN的目标是学习更适合聚类的特征,因此聚类边界附近的示例可能无法提供令人信服的指导信息。这与有监督学习不同,监督学习预先给出所有目标标签,因此所有示例都可以给出可信的监督信号。
实际上,监督学习中的边缘示例在搜索类边界方面起着更重要的作用。在深度聚类中,靠近聚类边界的不可靠示例可能会混淆甚至误导DNN的训练过程,导致令人不满意的性能。另一方面,这些聚类算法也忽略了在有监督深度学习模型中广泛应用的数据增强技术,以提高泛化能力。
在本文中,我们提出了ASPC-DA算法,该算法分为两个阶段:预训练和过滤。在预训练阶段,我们通过最小化重建损失来训练使用增强数据的自动编码器。如我们所知,自动编码器可以将数据从相对高维稀疏空间转换为低维紧凑表示空间。我们使用求值数据来增强学习表示所在流形的平滑度。然后在第二阶段,我们通过使用定义为类内平方和的聚类损失来调整编码器(特征提取器)。为了稳定训练过程,我们采用自适应自适应学习,选择“容易”(靠近聚类中心)的测试样本作为训练集,并逐步添加较难的示例。与典型的自定步调学习不同,我们的自适应变体没有超参数,并且总是将边缘示例排除在训练之外。我们还采用了与训练前阶段相同的数据扩充类型,以进一步促进特征学习。我们的实验表明,在各种数据集上,与最先进的聚类算法相比,我们具有巨大的竞争优势。本文的主要贡献如下:
- 我们提出了一个简单但有效的深度聚类模型,该模型结合了自步学习和数据增强。
- 我们推导并采用了一种无需额外超参数的、自适应的自步学习,用于消除特征学习过程中聚类边界附近示例的负面影响。
- 本研究揭示了自步学习和数据扩充对深度聚类算法的影响,并提供了扩展现有深度聚类算法的可能途径。
2 相关工作
我们将依次回顾现有的深度聚类算法、自步学习和数据增强技术。
2.1 深度聚类
深度聚类是一系列采用深度神经网络学习面向聚类特征的聚类算法。如图1所示,其损失函数通常由网络损失 L n L_n Ln和聚类损失 L c L_c Lc组成,其中网络损失用于学习可行特征,聚类损失鼓励特征点形成分组。网络损失可以是自动编码器(AE)的重建损失、变分自动编码器(VAE,variational autoencoder)的变分损失或一般对抗性网络(GAN)的对抗性损失。聚类损失可以是任何现有聚类算法的损失,如 k k k-means、高斯混合模型(GMM)和层次聚类。一些工作设计了一种新的、合并了网络损失的聚类损失,在这种情况下不再需要单独的网络损失。我们称之为聚类DNN(CDNN),即仅通过聚类损失 L c L_c Lc训练的网络。根据DNN的类型,现有的深度聚类算法可分为四类:基于AE的深度聚类、基于VAE的深度聚类、基于GAN的深度聚类和基于CDNN的深度聚类。
基于AE的深度聚类
它们直接将有助于执行聚类的先验知识合并到自动编码器的目标函数中。例如选择 k k k-means的目标函数作为聚类损失 L c L_c Lc。Jabi等人进一步提出了一种软正则化的深度 k k k-means算法。Peng等人将先验稀疏信息纳入自动编码器的隐藏表示中,以便同时适应局部和全局子空间结构。Dizaji和Guo等人都借用了深嵌入聚类(DEC)的目标函数作为聚类损失,但前者使用卷积自动编码器,后者使用全连接的自动编码器。Ji等人提议将子空间聚类的自表达特性合并到完全连接的自动编码器的中间层。基于AE的深度聚类的优点是,现有的浅层聚类算法和正则化可以很容易地用于自动编码器的训练。但是必须引入一个超参数来平衡重建损失和聚类损失。
基于VAE的聚类
该算法强制执行潜在代码,以遵循可以描述聚类结构的预定义分布。Jiang等人采用高斯混合模型对潜在代码进行建模。在最大化证据下界后,通过学习的GMM模型推断聚类分配。Dilokthanakul等人提出了一个类似的公式,但他们的结果在经验上比Jiang等人差。这种算法除了输出聚类结果外,还能够生成逼真的图像。然而,它们的计算复杂度很高。
基于GAN的聚类
与基于VAE的算法具有相同的思想。作为一个典型的例子,InfoGAN最大化了GAN噪声变量的固定小子集与从分类分布中采样噪声变量的观测值之间的互信息。ClusterGAN使用离散连续混合物对GAN的噪声变量进行采样,以使潜在空间中的聚类成为可能。DASC将子空间聚类的自扩展特性合并到对抗性变分自动编码器中,但无法扩展到大规模数据集。Yu和Zhou介绍了GAN混合模型(GANMM),旨在扩展高斯混合模型(GMM)。基于GAN的算法具有GAN本身就难以解决的问题,例如难以收敛和模式崩溃。
基于CDNN的聚类
基于CDNN的算法明确定义了一个损失,该损失被用作聚类模型和DNN的目标。Yang等人提出了一个循环框架,该框架采用单一加权三重损失,将聚类和特征学习过程集成到单个模型中。虽然该算法非常有效,但由于其循环过程非常耗时。Xie等人通过定义分布P和Q之间的KL散度 注 1 ^{注1} 注1,提出了一种深嵌入聚类(DEC)算法,其中Q是由Student的t-分布测量的软标签分布,P是由Q导出的目标分布。最小化KL散度可以同时获得面向聚类的特征和聚类分割。然后,Li等人通过合并卷积神经网络和正态化目标函数的分布来扩展DEC。Peng等人将聚类损失定义为成对样本中心分布之间的差异。他们假设给定示例和集群中心之间的分布对于流形上的不同距离度量是不变的。基于现有的深度聚类框架,Boots等人将单一CNN替换为多个预训练CNN以提取特征。Lin等人提出了一种基于预训练深度特征的密度聚类算法,用于对无约束人脸图像进行聚类。Caron等人直接使用 k k k-means的损失函数来训练卷积网络,并在大规模数据集上获得良好的聚类性能。这个种聚类方式有一个简单而优雅的目标,但需要仔细设计。
KL散度(相对熵):衡量不同策略之间的差异,使用KL散度来做模型分布的拟合损失。
2.2 自步学习
自步学习模拟了人类的学习过程:从简单到困难。给出一些新任务的示例,我们倾向于首先选择最简单的示例来学习基本知识。在对任务的知识有所提高之后,我们可以收集更难的例子,逐渐获得更多的知识。在这一进程结束时,我们可能会获得有关该任务的所有知识。这种学习策略被认为更有效。关键问题是如何定义“易用性”。根据我们现有的知识,我们给出的答案越接近真实答案,示例就应该越容易。
在机器学习问题中,损失函数的值作为“易用性”的度量。训练中应使用多简单的示例由阈值
λ
\lambda
λ控制。正式地说,给定训练示例
D
=
{
(
x
1
,
y
1
)
,
⋯
,
(
x
n
,
y
n
)
}
D=\{(x_1,y_1),\cdots ,(x_n,y_n)\}
D={(x1,y1),⋯,(xn,yn)}和参数为
w
\bf w
w的学习模型
f
f
f,传统的机器学习问题是:
即通过调整参数来最小化模型所有预测值和所有对应标签之间的loss之和。
而自步学习的问题变为:
其中
v
=
[
v
1
,
.
.
.
,
v
n
]
⊤
\textbf v=[v_1,...,v_n]^\top
v=[v1,...,vn]⊤为各个示例的权重,而这个
g
(
λ
,
v
i
)
g(\lambda,v_i)
g(λ,vi)被称作自步正则化项(self-paced regularization term)。这两个参数可以通过交替搜索策略(ASS)进行优化。对于简单硬加权自步学习,有
g
(
λ
,
v
i
)
=
−
λ
v
i
,
v
i
∈
{
0
,
1
}
g(\lambda,v_i)=-\lambda v_i,v_i\in\{0,1\}
g(λ,vi)=−λvi,vi∈{0,1}:
给定示例权重
v
\bf v
v,对
w
\bf w
w的最小化是一个加权损失最小化问题;给定参数
w
\bf w
w时,最佳
v
i
v_i
vi则具有如下闭式解:
自配学习算法无法避免搜索超参数
λ
\lambda
λ和步长
δ
\delta
δ的最佳值,该步长控制每次迭代中
λ
\lambda
λ的增加量。在无监督学习中,上述超参数很难设置,也许这就是为什么现有的工作中没有一项将自步学习纳入深度聚类框架的原因。我们通过提出一种自适应的自步学习变体来弥补这一差距,该变体无需超参数,且易用于深度聚类模型。
2.3 数据增强
略
3 数据增强的自适应自步深度聚类
Computer Society Digital Library at:
http://doi.ieeecomputersociety.org/10.1109/TKDE.2019.2911833.
基本的深度聚类模型
考虑n个示例的数据集
X
=
{
x
i
∈
R
D
}
i
=
1
n
X=\{x_i\in \mathbb R^D\}_{i=1}^n
X={xi∈RD}i=1n,编码器网络
f
w
(
⋅
)
f_{\textbf w}(\cdot)
fw(⋅)将每个示例
x
i
∈
R
D
x_i\in \mathbb R^D
xi∈RD到
z
i
∈
R
d
z_i\in \mathbb R^d
zi∈Rd,而解码器网络将
z
i
z_i
zi重建为
x
i
′
∈
R
D
x'_i\in \mathbb R^D
xi′∈RD。子空间的数目
K
K
K通过先验知识给出;第
j
j
j个聚类中心由潜在空间中的
m
j
∈
R
d
\textbf m_j\in \mathbb R^d
mj∈Rd表出。定义聚类矩阵
M
=
[
m
1
,
m
2
,
.
.
.
,
m
K
]
∈
R
d
×
K
\textbf M=[m1,m2,...,m_K]\in \mathbb R ^{d\times K}
M=[m1,m2,...,mK]∈Rd×K。令
s
i
∈
{
0
,
1
}
K
s_i\in \{0,1\}^K
si∈{0,1}K指示点
z
i
z_i
zi属于是否属于该类(共K类),那么:
y
i
=
M
s
i
y_i=\textbf M s_i
yi=Msi指示了示例
z
i
z_i
zi所属类的聚类中心。
这种模型希望得到一个好的神经网络 f w ( ⋅ ) f_\textbf w(\cdot) fw(⋅)作为特征提取器,使得变换后的示例 z i z_i zi更加适合聚类。为此本文的模型提出了2步的训练策略来训练 f w ( ⋅ ) f_\textbf w(\cdot) fw(⋅)。
预训练 pretraining
在第一步,我们在
f
w
(
⋅
)
f_\textbf w(\cdot)
fw(⋅)的顶部堆叠解码器网络
h
u
(
⋅
)
h_\textbf u (\cdot)
hu(⋅)来得到一个AE(autoencoder)。通过最小化重建损失:
变换后的点
z
i
z_i
zi在比
x
i
x_i
xi低得多的维数空间中。因此,编码器可以作为一种降维(DR)方法,并有望比主成分分析(PCA)、Isomap和局部线性嵌入(LLE)等其他降维方法更强大。也就是说,
z
i
z_i
zi是
x
i
x_i
xi的低维和紧凑的表示。在
z
i
z_i
zi上执行聚类更有效。但自动编码器的训练不是特定任务(或特定聚类),对此我们的解决方案是通过使用聚类损失进一步调整编码器。
微调 fine-tunning
使用以下目标函数进行微调:
其中
M
M
M是包含所有聚类中心的矩阵,
s
i
s_i
si是第
i
i
i个示例的聚类分。我们可以注意到,除了要优化的参数外,该目标与
k
k
k-means算法的目标相同。
k
k
k-means的目标是:
它通过交替地更新聚类中心 M M M和聚类分割 s i s_i si来分离数据点,即,通过逐渐调整决策边界,如图3a至3b。我们将使用k-means初始化集群中心M,然后优化(6)。初始化后在(6)中定义 M M M的主要原因是为了避免退化解,即所有示例都收敛到一个点,且目标为零。一旦 M M M确定,决策边界也将确定。因为决策边界是相邻簇中心的垂直平分线。然后,通过优化(6)将所有示例挤在一起是不可能的(参见图3b至3c)。我们将这种深度集群模型称为BasicDC。
图3.fine-tunning阶段的过程。圆圈表示示例而十字表示群集中心。使用不同的颜色渲染不同的簇。实线表示决策边界,它是相邻簇中心的垂直平分线
(a) 集群中心的随机初始化
(b) k-means的结果。它确定了集群中心的最佳位置以及决策边界
© 使用聚类中心(以及决策边界)训练编码器。同一类中的示例将拉近到特征空间中的聚类中心。但边界附近的示例很容易被分向错误的类(d)通过使用可靠示例(虚线圆圈中的示例)来训练编码器更有意义的特征。
我们可以交替优化(6)中的 w \bf w w和 s i s_i si。对于给定 s i s_i si,(7)退化为
其中
y
i
=
M
s
i
y_i=\textbf Ms_i
yi=Msi是特征空间中
x
i
x_i
xi所属类的聚类中心。这个目标可以解释为有监督的DNN学习目标。示例
x
i
x_i
xi的目标标签是它的聚类中心
y
i
y_i
yi。因此,最小化(8)会迫使特征空间中的示例分散在组中。注意,挤压同一类内的示例并不保证这些示例永远留在同一类中,因为神经网络
f
w
(
⋅
)
f_w(\cdot)
fw(⋅)必须对所有类的结构进行建模。
另一方面,示例 x i x_i xi的target y i y_i yi由上次迭代的对应的特征点 z i z_i zi决定。因此target y i y_i yi并非完全正确,特别是当示例 x i x_i xi靠近聚类边界时。这与监督学习形成对比,监督学习中给出了目标y和示例x。错误的target将误导神经网络的训练(如图3c中的 z 0 z_0 z0点)。更糟的是,由于 f w ( x i ) f_w(x_i) fw(xi)正比于 ∣ f w ( x i ) − y i ∣ |f_w(x_i)-y_i| ∣fw(xi)−yi∣,特征点离聚类中心越远反馈给网络的梯度越大。这显然不是我们想要的。我们宁愿只使用高信心的目标来调整我们的网络。为此,我们提出了一种自适应自步学习算法。
添加自适应自步学习
为了稳定(8)的优化,我们采用自步学习,逐步选择最可信的示例。将(8)加入(3)所示的自步学习便获得优化目标:
在我们的问题中,关于集群边界的示例的对应target并不可靠。因此,即使在训练结束时,我们也应防止自步学习在边界附近选择示例。传统自步学习的另一个缺点是引入了两个额外的超参数用于控制学习速度
λ
\lambda
λ和步长
δ
\delta
δ。通常,开始时
λ
\lambda
λ设置为损失中值。然后
λ
\lambda
λ每隔几次迭代根据
δ
\delta
δ增加一次。由于在训练过程中示例的损失也在减少,因此很难选择步长
δ
\delta
δ。
基于上述分析,我们建议根据训练期间的损失统计设置 λ \lambda λ:
式中,
L
t
L^t
Lt表示第t次迭代中的所有损失,T是最大迭代次数
μ
\mu
μ和
θ
\theta
θ是损失的平均值和标准差。由于T由深度学习模型决定,因此
λ
\lambda
λ现在可以适应所有示例的损失,不再是一个独立的超参数。图3d示出了在开始时通过使用自适应自步学习选择的示例。
最后,这种预训练+微调两步策略的目标如下:
添加数据增强
由于数据增强,如随机旋转、移位和裁剪,已经在有监督的深度学习社区中广泛应用,我们也将尝试在无监督学习中探索它。在本节中,我们将提供一种直接直观的方法,将数据扩充合并到所提出的深度聚类算法的两个阶段。为了方便起见,我们提出了一个映射 T \mathcal T T来表示数据增强函数,它可以是任意旋转、移位、剪切、扭曲等的组合,扩充的例子表示为 x ^ i = T ( x i ) \hat x_i=\mathcal T(x_i) x^i=T(xi)。
预训练 pretraining
用
x
^
i
\hat x_i
x^i进行直接替代
要注意一个事实,即增强示例与原始示例往往具有相同的流形。理想情况下,使用增广示例学习的流形应该比使用干净示例学习的流形更连续、更平滑。这就是说,合并数据增强可以帮助自动编码器学习更具代表性和鲁棒性的特征。
微调 fine-tunning
在(11)和(12)中,有三个参数,
w
,
v
,
s
\bf w,v,s
w,v,s 分别对应于特征学习、可靠示例选择和聚类分配。由于我们的最终目标是提高聚类性能,因此我们将为干净示例而不是增强示例计算
s
i
s_i
si。因此我们应当只在公式(11)中使用增广示例,在(12)中对示例的聚类指派仅限于干净示例。于是公式(11)改写为:
Optimization
预训练阶段可以使用简单的随机梯度下降和反向传播解决。我们主要关注在fine-tunning阶段交替进行的优化(12)和(14),如前所述,这涉及到特征学习、可靠示例选择和聚类分配: w , v , s \bf w,v,s w,v,s 。
预训练得到w,然后:
给定w,更新s
s具有如下闭式解:
其中,
s
i
j
s_{ij}
sij是
s
s
s的第i行第j列的条目,
m
k
m_k
mk是
M
M
M的第k列,即第k个类的聚类中心。毫不奇怪,该解与k-means的解完全相同。
给定w和s,更新v
如前所述,此时
v
\bf v
v具有闭式解:
其中
λ
\lambda
λ如公式(10)根据损失的分布自适应地给出。
给定v和s,更新w
也如前所述,公式退化了
这和有监督学习一致,可以用随机梯度下降和反向传播解决。
停止更新的标准
如果两次成功迭代之间预测的类标签的变化小于阈值 δ = 0.001 \delta=0.001 δ=0.001,我们将停止训练。形式上,停止标准是:
最后,整个算法总结如下:
附录1 一些实现的细节
源代码 https://github.com/XifengGuo/ASPC-DA.
在预训练阶段,自动编码器由八个的完全连接层组成,尺寸依次为D-500-500-2000-10-2000 500-500-D,其中D是输入示例的维度。除了输入、输出和嵌入层(10个神经元的降维到z_i)外,所有内部层都由ReLU激活。通过使用学习率为1.0,动量为0.9的SGD优化器,以端到端的方式对自动编码器进行500个epoch的训练。我们不采用繁琐的分层预训练或任何其他规范化技术,如dropout,batch norm。在微调过程中,编码器为前四个层:D-500-500-2000-10.最大迭代次数为T=100。在每次迭代中,我们使用初始学习率为0.0001的Adam优化器对编码器进行一个epoch的训练。批量大小固定为256。停止标准中的阈值为
δ
\delta
δ=0.001。用于数据增强的变换函数
T
\mathcal T
T是每个方向上随机旋转最多10度和随机移位最多
D
/
10
\sqrt{D}/10
D/10(即输入图像宽度或高度的10%)像素的组合。
输入示例图像为展平后的D维向量,该向量将被reshape为
D
×
D
\sqrt{D}\times \sqrt{D}
D×D的矩阵。然后我们可以使用
T
\mathcal T
T旋转和移动矩阵。最后将变换后的矩阵展平为D维向量,并将其反馈给自动编码器。表2中列出了这些超参数的摘要。我们按照上述设置调整了所有数据集,并避免了数据集特定的调整。