Kang M., Park J. Contrastive Generative Adversarial Networks. arXiv preprint arXiv 2006.12681, 2020.
概
如何将对比损失和GAN结合在一起呢?
主要内容
还是老问题, 结合对比学习就是如何构造正负样本的问题.
首先看图c, 本文ContraGAN提取特征的方式为
D
ϕ
1
(
x
)
D_{\phi_1}(x)
Dϕ1(x), 这部分是判别器的encoder部分, 即除最后一个全连接层的部分. 之后再经过projection (h)(这个是从SimCLR中启发得来的东西)得到最后的用于计算对比损失的特征
l
(
x
)
=
h
(
G
ϕ
1
(
x
)
)
l(x)=h(G_{\phi_1}(x))
l(x)=h(Gϕ1(x)). 另一部分的特征是直接通过样本标签得来的, 通过一个class embedding (e), 获得对应的特征
e
(
y
)
e(y)
e(y).
于是第一阶段的"对比损失"就出炉了
ℓ
(
x
i
,
y
i
;
τ
)
=
−
log
exp
(
l
(
x
i
)
T
e
(
y
i
)
/
τ
)
exp
(
l
(
x
i
)
T
e
(
y
i
)
/
τ
)
+
∑
k
≠
i
m
exp
(
l
(
x
i
)
T
l
(
x
k
)
/
τ
)
,
(7)
\tag{7} \ell(x_i,y_i;\tau) =-\log \frac{\exp(l(x_i)^Te(y_i)/\tau)}{\exp(l(x_i)^Te(y_i)/\tau)+ \sum_{k\not= i}^m \exp(l(x_i)^Tl(x_k)/\tau)},
ℓ(xi,yi;τ)=−logexp(l(xi)Te(yi)/τ)+∑k=imexp(l(xi)Tl(xk)/τ)exp(l(xi)Te(yi)/τ),(7)
其中
x
i
,
x
k
x_i, x_k
xi,xk来自于一个batch的数据
{
x
1
,
…
,
x
m
}
\{x_1, \ldots, x_m\}
{x1,…,xm},
τ
\tau
τ代表temperature. 此对比损失与SimCLR中的差别仅在正样本对上, SimCLR中构造正样本对是
l
(
T
(
x
i
)
)
l(\mathcal{T}(x_i))
l(T(xi)),
l
(
T
′
(
x
i
)
)
l(\mathcal{T}'(x_i))
l(T′(xi)), 即通过augmentation来构造正样本对. 这里的话是通过标签来构造正样本对. 显然最小化(7)式需要使得
x
i
x_i
xi的特征靠近
e
(
y
i
)
e(y_i)
e(yi), 以及不同样本特征远离彼此. 这就造成了一个问题, 实际上作者是希望同一类的样本的特征是靠近的, 但(7)是的分母部分是背离这一点的(虽然分子是符合这一点的), 为此, 作者又在分子上加了他们的cosine相似度:
ℓ
2
C
(
x
i
,
y
i
;
τ
)
=
−
log
exp
(
l
(
x
i
)
T
e
(
y
i
)
/
τ
)
+
∑
k
=
1
m
1
y
k
=
y
i
exp
(
l
(
x
i
)
T
l
(
x
k
)
/
τ
)
exp
(
l
(
x
i
)
T
e
(
y
i
)
/
τ
)
+
∑
k
≠
i
m
exp
(
l
(
x
i
)
T
l
(
x
k
)
/
τ
)
.
(8)
\tag{8} \ell_{2C}(x_i,y_i;\tau) =-\log \frac{\exp(l(x_i)^Te(y_i)/\tau)+ \sum_{k=1}^m 1_{y_k=y_i} \exp(l(x_i)^Tl(x_k)/\tau)}{\exp(l(x_i)^Te(y_i)/\tau)+ \sum_{k\not= i}^m \exp(l(x_i)^Tl(x_k)/\tau)}.
ℓ2C(xi,yi;τ)=−logexp(l(xi)Te(yi)/τ)+∑k=imexp(l(xi)Tl(xk)/τ)exp(l(xi)Te(yi)/τ)+∑k=1m1yk=yiexp(l(xi)Tl(xk)/τ).(8)
说白了, 这不就是彻彻底底的希望最大化类间距离, 最小化类内距离, 连类内中心都选好了( e ( y i ) e(y_i) e(yi), 虽然这个中心是可学习的).
作者说是这个idea受到一个互信息理论下界的启发, 但是我感觉没啥特别的意义, 这里就不贴了.
注: 总感觉没有体现出contrastive的特点, 从算法中可以看到, 计算训练损失, 真实的样本和伪造的样本是独立的. 但是仔细想想, 我们的目的不是训练一个好的生成器, 使其构造的图片和真实图片相近, 所以怎么也应该是真实图片和构造图片之间的对比. 当然, 困难在于我们不知道生成器所生成的图片所对应的真实的图片是怎样的, 不过我始终觉得这种处理方法没有发挥出contrastive的作用.
代码
作者整理了许多GAN模型.