原文

Abstract

目前很多方法都是離線演算法,即使用整個資料集進行聚類,因此很難應用到大規模資料集線上學習。本文提出了一個一階段端到端線上聚類方法(one-stage and end-to-end online clustering method)被稱為Contrastive Clustering(CC),其顯式的展現了例項層次(instance-level)和叢集層次(cluster-level)的對比學習。

【Deep Clustering】Contrastive Clustering

具體來說,給定資料集,正/負樣本pair透過資料增強進行對比然後對映到特徵空間,其中行空間和列空間分別進行例項層次和叢集層次的對比學習,且如上圖所示,特徵矩陣的每行可以看做例項的softlabel(每個cluster分配的機率,即該例項屬於每個簇的機率),每列為聚類表示(每個cluster在例項上的分佈,即該簇包含哪些例項)

Method

【Deep Clustering】Contrastive Clustering

如上圖所示,模型包括三個主要部分:1。 pair construction backbone(PCB) 2。 instance-level contrastive head (ICH) 3。 cluster-level contrastive head (CCH)。簡單來說,PCB透過data pair進行對比並從增強樣本中提取特徵,之後ICH和CCH分別從行和列分別進行對比學習

PCB

給定一個樣本

x_i

,兩個資料增強方式

T^a,T^b

,則增強後樣本

x_i^a=T^a(x_i),x_i^b=T^b(x_i)

。本任務中可選擇的增強方式有:ResizedCrop(隨機裁剪圖片並resize到原圖大小),ColorJitter(改變亮度,對比度等), Grayscale(轉為灰度圖), HorizontalFlip(水平翻轉),GaussianBlur(高斯模糊)。像SimCLR一樣,每個增強方式都會分配一個機率使用

本文使用ResNet作為backbone提取增強資料的特徵

h_i^a=f(x_i^a),h_i^b=f(x_i^b)

ICH

本文使用兩個增強樣本組成正樣本對,其餘為負樣本對

形式化描述,給定一個mini-batch大小為

N

,每個樣本有兩個不同增強樣本因此得到

2N

個樣本集

\{x_1^a,...,x_N^a,x_1^b,...,x_N^b\}

,則對於

x_1^a

共能組成1對正樣本對和2N-2個負樣本對

作者並沒有直接使用特徵計算對比學習loss,而是構建兩層非線性MLP

g_I(\cdot)

將特徵矩陣對映到子空間

z_i^a=g_I(h_i^a),z_i^b=g_I(h_i^b)

,則關於

x_i^a

的loss可以定義為

l_i^a=-\log\frac{\exp(s(z_i^a,z_i^b)/\tau_I)}{\sum_{j=1}^N[\exp(s(z_i^a,z_j^a)/\tau_I)+\exp(s(z_i^a,z_j^b)/\tau_I)]}\\

其中

\tau_I

是例項層次的temperature變數,

s(z_i^{k_1},z_j^{k_2})

為cos距離

s(z_i^{k_1},z_j^{k_2})=\frac{(z_i^{k_1})(z_j^{k_2})^T}{||z_i^{k_1}||||z_j^{k_2}||}\\

則所有樣本的針對所有增強的例項層次總loss如下

\mathcal{L}_{ins}=\frac{1}{2N}\sum_{i=1}^N(l_i^a+l_i^b)\\

CCH

當資料樣本被對映到與cluster數量相同的空間時,資料特徵的每一維可以看作該樣本屬於該cluster的機率

形式化描述,定義

Y^a\in\mathcal{R}^{N\times M}

N

為batchsize,

M

為cluster數量)為一個mini-batch資料經歷

T^a

資料增強的CCH的輸出(

Y^b

T^b

資料增強的),

Y^a_{n,m}

表示樣本

n

屬於cluster

m

的機率。由於一個樣本只屬於一個cluster,因此

Y^a

的每一行趨向於one-hot,每一列代表每個cluster的分配結果,即每一列都需要儘量不同

類似ICH,構建兩層非線性MLP

g_C(\cdot)

將特徵矩陣對映到

M

維空間

y_i^a=g_C(h_i^a)

,則

y_i^a

表示

Y^a

的第

i

行(即

T^a

增強下

x_i^a

的soft label)。定義

\hat{y}_i^a

表示

Y^a

的第

i

列(即

T^a

增強下cluster

i

的分配結果)

作者將

\{\hat{y}_i^a,\hat{y}_i^b\}

看作正簇對(

\hat{y}_i^b

表示

T^b

增強下cluster

i

的分配結果),剩餘構成2M-2個負簇對,則關於

x_i^a

的loss可以定義為

\hat{l}_i^a=-\log\frac{\exp(s(\hat{y}_i^a,\hat{y}_i^b)/\tau_C)}{\sum_{j=1}^M[\exp(s(\hat{y}_i^a,\hat{y}_j^a)/\tau_C)+\exp(s(\hat{y}_i^a,\hat{y}_j^b)/\tau_C)]}\\

其中

\tau_C

是叢集層次的temperature變數,

s(\hat{y}_i^{k_1},\hat{y}_j^{k_2})

為cos距離

s(\hat{y}_i^{k_1},\hat{y}_j^{k_2})=\frac{(\hat{y}_i^{k_1})^T(\hat{y}_j^{k_2})}{||\hat{y}_i^{k_1}||||\hat{y}_j^{k_2}||}\\

則所有樣本的針對所有增強的叢集層次總loss如下

\mathcal{L}_{clu}=\frac{1}{2M}\sum_{i=1}^M(\hat{l}_i^a+\hat{l}_i^b)-H(Y)\\

其中

H(Y)

為cluster分配機率的資訊熵

H(Y)=-\sum_{i=1}^M[P(\hat{y}_i^a)\log P(\hat{y}_i^a)+P(\hat{y}_i^b)\log P(\hat{y}_i^b)]\\

P(\hat{y}_i^k)=\frac{\sum_{t=1}^N  Y_{ti}^k}{||Y^k||_1}\ ,\ k\in\{a,b\}\\

該項的目的是避免網路將所有例項都分配到一個cluster

【分析】從

P(\hat{y}_i^k)

的定義可以看出其計算的是每個cluster的整體機率,特別當

y_i^k

(即

Y^k

的第

i

行)為one-hot時該式子計算的就是每個cluster所包含的例項數量,則根據資訊熵定義很容易得出當所有例項都平均分配到每個cluster中時熵最大(即每個cluster包含的例項數量基本相同)

【疑問】雖然當

y_i^k

為one-hot時可以進行上述解釋,但是關於one-hot並沒有設計相關loss進行顯式約束,因此

P(\hat{y}_i^k)

目前還是透過每個例項屬於cluster

i

的機率進行計算,而假如出現所有例項對於每個cluster的機率都是

\frac{1}{M}

似乎也可以最大化

H(Y)

值。而網路避免該現象的發生個人認為可能是由於第一項保證每個例項都必須與其他例項儘量不同,因此一定程度上可以避免所有例項的

y_i^k=[\frac{1}{M},...,\frac{1}{M}]

,進而側面迫使

y_i^k

為one-hot?

最終模型loss如下

\mathcal{L}=\mathcal{L}_{ins}+\mathcal{L}_{clu}\\

CC的虛擬碼如下

【Deep Clustering】Contrastive Clustering

Experiment Result

【Deep Clustering】Contrastive Clustering