Deep Clustering via Joint Convolutional Autoencoder Embedding and RelativeEntropy Minimization论文笔记

论文链接

总结

这篇文章提出了deep embedded regularIzed clustering (DEPICT)的方法,从网络架构上来讲是很多种trick的集成体。

网络

在这里插入图片描述
整体还是autoencoder的思路,变化主要有以下几点:

  1. 因为是图像,所以将中间层从linear层换成了conv层;
  2. 加入了去噪机制;
  3. 对loss的形式有所优化;
  4. 重构误差从‘用常见的只用初始层和输出层计算’转变到了‘将中间每一层对称的输入输出都做一次计算’。

架构

首先从上面图片的网络结构说起。这幅图应该自顶向下来看。

1. Noisy Encoder

这一部分与普通的autoencoder无甚区别,只是将输入变成了加入了噪音的输入且中间层变为了卷积层而已。最后这一部分的输出就是

z

~

3

\tilde{z}^3

z~3(这里的上标代表着是第几层,如输入部分的

x

~

\tilde{x}

x~就是

z

~

0

\tilde{z}^0

z~0)。这个

z

~

3

\tilde{z}^3

z~3就是一般autoencoder的中间表达。然后这部分的末尾接了一个softmax层,这一部分的工作不仅仅是一个softmax,还包含了一个linear层,将

z

~

3

\tilde{z}^3

z~3的特征维度映射到

k

k

k维,

k

k

k是簇的数量。然后就得到了每一个输入对应的簇,在图中用

p

^

\hat{p}

p^表示。

2. Decoder

这一部分使用第一部分的

z

~

3

\tilde{z}^3

z~3作为输入,使用逆卷积层将

z

~

3

\tilde{z}^3

z~3重构。网络架构恰好与上一部分相反,与传统autoencoder的decoder部分也没有什么不同的。

3. Clean Encoder

这一部分使用未加入噪音的原始输入

x

x

x,直接使用Noisy Enocder部分训练出来的encoder,得到原始输入对应的

z

,

p

z,p

z,p

损失函数

这一部分作者提出了两种损失函数,第二种的形式相对较为简单,是第一种方式的‘化简’。下面将分别对它们进行介绍。

构成

文中提出的损失函数分为两个部分:聚类部分和重构部分。重构部分相同,所以先介绍重构部分。

重构损失

这一部分相对于传统的重构误差(只使用decoder的输出

x

^

\hat{x}

x^与原始的输入

x

x

x)有所不同,它是对decoder和clean encoder中间每一层(包括初始输入和最后的输出)的临时向量

z

^

l

z

l

(

l

=

0

,

1...

)

\hat{z}^l、z^l(l=0,1...)

z^lzl(l=0,1...)都计算一个重构误差,然后对它们求均值。数学表达式如下:
在这里插入图片描述

在图中的话就是红色的

L

2

L_2

L2

聚类误差

原始形式

在这里插入图片描述
(推导式第二行的后半部分疑似有误,从KL散度的定义和上下文来看,应该是不存在系数

1

N

\frac{1}{N}

N1的)
原始的聚类损失函数由两部分组成。
前半部分中q代表着Clean Encoder的输出

p

p

p,p代表着Noisy Encoder的输出

p

~

\tilde{p}

p~,这一部分的作用是让Noisy Encoder输出的分布尽可能接近Clean Encoder输出的分布。
后半部分中

u

u

u代表着均匀分布,它可以被替换为任意符合簇分布的先验分布。而

f

k

=

1

N

i

q

i

k

f_k = \frac{1}{N}\sum\limits_i q_{ik}

fk=N1iqik,这代表着每一簇的分配概率。这一部分的作用是使簇分布尽量接近于

u

u

u,使样本点不致全部落在一个簇里。

简化形式

在这里插入图片描述
原始形式的式子经化简后得到上图中的式子,与交叉熵数学表达式相同。(只有当N足够大的时候才能写成这种形式,而文中正是采用的这种形式)

数学推导(这部分不看不影响论文的阅读)

这一部分暂未完成,我没有推导出来。
有以下几个问题:

  1. 中间求偏导部分的第一个式子的分母,文中并没有

    u

    k

    u_k

    uk

  2. 并没有看出来

    q

    i

    k

    q_{ik}

    qik是怎么化简出来的。

首先,原始形式那部分的损失函数形式如下:

L

=

1

N

i

=

1

N

k

=

1

K

(

q

i

k

l

o

g

q

i

k

p

i

k

+

q

i

k

l

o

g

f

k

u

k

)

L=\frac{1}{N}\sum\limits^N_{i=1}\sum\limits^K_{k=1}(q_{ik}log\frac{q_{ik}}{p_{ik}} + q_{ik}log\frac{f_k}{u_k})

L=N1i=1Nk=1K(qiklogpikqik+qiklogukfk)
上式中log和ln的含义相同。
合并得:

L

=

1

N

i

=

1

N

k

=

1

K

q

i

k

l

o

g

q

i

k

f

k

p

i

k

u

k

L = \frac{1}{N}\sum\limits^N_{i=1}\sum\limits^K_{k=1}q_{ik}log\frac{q_{ik}f_k}{p_{ik}u_k}

L=N1i=1Nk=1Kqiklogpikukqikfk

q

i

k

q_{ik}

qik的loss则为:

L

q

i

k

=

q

i

k

l

o

g

q

i

k

f

k

p

i

k

u

k

L_{q_{ik}} = q_{ik}log\frac{q_{ik}f_k}{p_{ik}u_k}

Lqik=qiklogpikukqikfk
然后对

q

i

k

q_{ik}

qik求偏导(

q

i

k

q_{ik}

qik的梯度):

L

q

i

k

q

i

k

=

l

o

g

q

i

k

f

k

p

i

k

u

k

+

q

i

k

i

N

q

i

k

+

1

\frac{\partial L_{q_{ik}}}{\partial q_{ik}} = log\frac{q_{ik}f_k}{p_{ik}u_k} + \frac{q_{ik}}{\sum\limits_{i'}^Nq_{i'k}} + 1

qikLqik=logpikukqikfk+iNqikqik+1
当N足够大时,式子第二项的值就可以忽略不计。
令梯度(

L

q

i

k

L_{q_{ik}}

Lqik)为0(即达到局部最优解的时候),且忽略第二项,则可得到如下等式:
在这里插入图片描述
于是损失函数化为:
在这里插入图片描述

总损失函数

在这里插入图片描述
即简化版聚类损失加上重构损失。

BS3_1 11th

版权声明:本文为CSDN博主「吾道长存」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/eternal_city/article/details/121205283

吾道长存

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

Matlab实现Faster-RCNN目标检测

用Matlab自带的FastRcnnNetwork工具箱实现深度学习目标检测 一.搭建训练数据集和验证数据集 用的是Matlab2018a以上版本里的应用程序带的ImageLabeler来进行数据标记: 将标记好的数据以.gro