DEC

DEC算法利用深度自动编码器进行数据聚类,通过深度神经网络学习特征空间和聚类中心。算法分为初始化和优化两阶段,采用KL散度最小化辅助目标分布,通过软分配和目标分布的匹配逐步优化聚类效果。实验中,DEC借助堆叠自动编码器初始化参数,并通过迭代优化提升聚类质量。

算法(DEC)通过同时学习特征空间Z中的k个聚类中心{μj∈Z} j = 1 … k和将数据点映射到Z的DNN参数θ来对数据进行聚类。两个阶段:(1)使用深度自动编码器进行参数初始化和(2)参数优化(即,聚类),在此过程中,我们在计算辅助目标分布与最小化Kullback-Leibler(KL)差异之间进行迭代。我们从描述阶段(2)参数优化/聚类开始,给定θ的初始估计值,且{µj} j = 1,… k。
KL聚类
给定非线性映射fθ的初始估计和初始聚类质心{μj} kj = 1,我们建议使用在两步之间交替的无监督算法来改善聚类。第一步,我们计算嵌入点和聚类质心之间的软分配。在第二步中,我们通过使用辅助目标分布从当前的高置信度分配中学习来更新深度映射fθ并优化聚类质心。重复该过程,直到满足收敛标准为止。
软分配
我们使用学生的t分布作为核来衡量嵌入点zi和质心µj之间的相似度:
公式

其中zi =fθ(xi)∈Z对应于嵌入后的xi∈X,其中α是学生t分布的自由度,而qij可解释为将样本i分配给聚类j的概率(即软分配)。 由于我们无法在无人监督的设置中对验证集上的α进行交叉验证,并且得知它是多余的,因此对于所有实验,我们让α= 1。
KL分流最小化
在辅助目标分布的帮助下,通过从集群的高可信度分配中学习来迭代地优化集群。具体来说,通过将软分配与目标分布匹配来训练我们的模型。为此,我们将目标定义为软分配qi和辅助分布pi之间的KL散度损失,如下所示:

目标分布P的选择对于DEC的性能至关重要。一种方法是将每个pi设置为高于置信度阈值的数据点的delta分布(至最接近的质心),并忽略其余部分。但是,由于qi是软分配,因此使用较软的概率目标更为自然和灵活。
具体来说,我们希望我们的目标分布具有以下属性:
(1)加强预测(即提高簇纯度),
(2)更加注重以高置信度分配的数据点
(3)归一化每个质心的损耗贡献,以防止大型聚类扭曲隐藏的特征空间。
在我们的实验中,我们通过先将qi升至第二次幂,然后通过每个群集的频率进行归一化来计算pi:

fj为软簇频率。培训策略可以看作是一种自我培训的形式。与自训练中一样,我们采用初始分类器和未标记的数据集,然后使用分类器标记数据集,以便对其自身的高置信度预测进行训练。实际上,在实验中,我们观察到DEC通过学习高置信度预测来提高每次迭代中的初始估计,从而有助于改善低置信度预测。
优化
我们使用带有动量的随机梯度下降(SGD)联合优化聚类中心{µj}和DNN参数θ。关于每个数据点zi和每个聚类质心µj的特征空间嵌入的L梯度计算如下:

然后将梯度∂L/∂zi向下传递到DNN,并在标准反向传播中用于计算DNN的参数梯度∂L/∂θ。在两次连续的迭代中,当有少于tol%的点会更改聚类簇的时候,停止执行该过程。
参数初始化
已经讨论了在给定DNN参数θ和簇质心{μj}的初始估计后DEC如何进行。现在我们讨论如何初始化参数和质心。我们使用堆叠式自动编码器(SAE)初始化DEC,因为最近的研究表明,它们在真实数据集上始终产生语义上有意义且分隔良好的表示形式。因此,SAE学习的无监督表示自然促进了DEC聚类表示的学习。我们逐层初始化SAE网络,每一层都是经过降噪处理的自动编码器,经过训练可以在随机破坏后重建上一层的输出。去噪自动编码器是一个两层神经网络,定义为:

其中Dropout(·)是随机映射,它随机地将其一部分输入维设置为0,g1和g2分别是用于编码和解码层的激活函数,θ= {W1,b1,W2,b2}是模型参数。 通过最小化最小二乘损失

进行训练。 训练完一层后,我们将其输出h作为输入来训练下一层。 我们在所有编码器/解码器对中都使用整流线性单位(ReLU),除了第一对中的g2(它需要重建可能具有正值和负值的输入数据,例如零均值图像)和最后一对中的g1 (因此最终的数据嵌入会保留完整的信息)。
经过贪婪的逐层训练后,我们以反向逐层训练顺序将所有编码器层与所有解码器层连接起来,形成一个深层的自动编码器,然后对其进行微调,以最大程度地减少重建损失。最终结果是多层深层自动编码器,中间有一个瓶颈编码层。然后,我们丢弃解码器层,并将编码器层用作数据空间和特征空间之间的初始映射,如图1所示。
为了初始化聚类中心,我们通过初始化的DNN传递数据以获取嵌入的数据点,然后在特征空间Z中执行标准k均值聚类以获得k个初始质心{µj} kj = 1。
ACC
对于所有算法,我们将簇的数量设置为真实类别的数量,并以无监督的簇精度(ACC)评估性能:

其中li是真实标签,ci是算法产生的聚类分配。
调整
我们将常用参数用于DNN,并尽可能避免特定于数据集的调整。具体而言,受van der Maaten(2009)的启发,我们将所有数据集的网络维度都设置为d–500–500–2000–10,其中d是数据空间维度,在数据集之间会有所不同。所有层都紧密(完全)连接。在贪婪的逐层预训练过程中,我们将权重初始化为从零均值高斯分布(标准差为0.01)得出的随机数。每层都进行了50000次迭代的预训练,辍学率为20%。整个深度自动编码器可进一步微调100000次迭代而不会丢失。对于自动编码器的逐层预训练和端到端微调,最小批量大小设置为256,起始学习率设置为0.1,每20000次迭代除以10,权重衰减设置为0。全部设置以上参数中的一个以实现合理的重建损失,并在所有数据集中保持恒定。这些参数的特定于数据集的设置可能会提高每个数据集的性能,但是我们避免这种类型的不切实际的参数调整。为了初始化质心,我们使用20次重启来运行k-means并选择最佳解决方案。在KL散度最小化阶段,我们以0.01的恒定学习率进行训练。收敛阈值设置为to1 = 0.1%。
对于所有基线算法,我们在初始化质心时执行20次随机重启,并选择具有最佳目标值的结果。
假设与目标
DEC的基本假设是,初始分类器的高置信度预测大部分是正确的。
迭代优化的贡献
集群之间的隔离度越来越高。
自动编码器初始化的贡献
深度嵌入的强大功能以及通过提出的KL散度目标进行微调的好处。
最佳聚类数
需要一种确定最佳簇数的方法。 为此,我们定义了两个度量:
(1)标准度量,归一化互信息(NMI):

其中I是互信息量度,而H是熵
(2)可概括性(G),其定义为训练与验证损失之间的比率:

当训练损失低于验证损失时,G很小,这表明过度拟合的程度很高。
结论
DEC-一种在联合优化的特征空间中将一组数据点聚类的算法。 DEC通过使用自训练目标分布迭代地优化基于KL散度的聚类目标来工作。 我们的方法可以看作是半监督自我训练的无监督扩展。

03-20
<think>好的,我现在需要解决用户的问题:“请问dec在编程上下文中是什么意思?”首先,我需要明确用户的问题指向。用户可能是在编程中遇到了“dec”这个缩写,想知道它的具体含义。 首先,我应该回忆常见的编程术语缩写。DEC通常有几个可能的解释,比如Decrement(递减)、Decimal(十进制)、或者可能是某个特定的库或框架的缩写。另外,用户提到可能与解码或加密相关,所以需要考虑到这方面的可能性。 接下来,我需要逐一分析每个可能的含义。首先是Decrement,即递减操作,这在很多编程语言中都是基础操作符,比如C、Java中的“--”。例如,i--就是将变量i减1。这时候需要举例子说明,比如代码片段: int i = 5; i--; // i becomes 4 然后是Decimal,十进制。在编程中,处理数字时常常需要转换进制,比如在Python中使用int()函数转换字符串为十进制数。例如: num = int("A", 16) # 将十六进制的A转换为十进制的10 另外,可能涉及数据类型的名称,如SQL中的DECIMAL类型,用于精确数值计算,避免浮点误差。例如: CREATE TABLE products (price DECIMAL(10, 2)); 接下来是Decoding(解码),尤其是在数据传输或加密中,将编码后的数据转换回原始形式。例如Base64解码: import base64 decoded_data = base64.b64decode("SGVsbG8gV29ybGQh") 然后,考虑到用户提到可能与加密相关,这里需要提到解密(Decryption),比如使用AES解密: from Crypto.Cipher import AES cipher = AES.new(key, AES.MODE_ECB) decrypted_data = cipher.decrypt(encrypted_data) 此外,可能还有其他上下文中的DEC,比如公司名Digital Equipment Corporation,但编程中较少直接相关。或者DEC作为某个库的缩写,但需要具体上下文。 接下来,用户可能遇到的错误或代码中的用法,比如变量名或函数名包含dec,这时候需要结合上下文判断。例如,用户可能在代码中看到decrypt()函数被缩写为dec,或者处理十进制转换的函数。 最后,总结可能的含义,并根据常见程度排序,给出清晰的解释和示例,帮助用户理解不同场景下的dec含义。同时,生成相关问题,帮助用户进一步探索可能的相关疑问。 现在需要确保回答结构清晰,分点说明每个可能的含义,并附上代码示例。同时检查是否有遗漏的情况,比如DEC作为某个特定框架的缩写,但考虑到通用性,可能不需要涉及,除非用户提供更多上下文。</think>在编程上下文中,“dec”通常有以下几种含义: --- ### 1. **递减(Decrement)** 表示对变量进行减1操作,常见于循环或计数器场景。 **示例代码:** ```python i = 5 i -= 1 # 显式递减(等价于 i = i - 1) print(i) # 输出 4 ``` 在C语言中: ```c int i = 5; i--; // 等价于 i = i - 1 ``` --- ### 2. **十进制(Decimal)** 表示十进制数值系统,或用于进制转换。 **示例代码:** ```python hex_num = "A" dec_num = int(hex_num, 16) # 将十六进制"A"转换为十进制的10 print(dec_num) # 输出 10 ``` 在SQL中定义精确数值类型: ```sql CREATE TABLE account (balance DECIMAL(10, 2)); -- 存储精确到小数点后两位的数值 ``` --- ### 3. **解码(Decode)** 将编码后的数据还原为原始格式,常用于数据传输或加密。 **示例(Base64解码):** ```python import base64 encoded_str = "SGVsbG8=" decoded_bytes = base64.b64decode(encoded_str) # 解码为 b'Hello' print(decoded_bytes.decode('utf-8')) # 输出 "Hello" ``` --- ### 4. **解密(Decryption)** 将加密数据还原为明文,与加密(encryption)相对。 **示例(AES解密):** ```python from Crypto.Cipher import AES key = b'abcdefghijklmnop' cipher = AES.new(key, AES.MODE_ECB) encrypted_data = b'\x1b\xa3...' # 假设为加密后的字节流 decrypted_data = cipher.decrypt(encrypted_data) # 解密操作 ``` --- ### 5. **其他场景** - **函数/变量名缩写**:如`decrypt()`简写为`dec()`。 - **历史术语**:DEC(Digital Equipment Corporation)是早期计算机公司,但现代编程中较少直接关联[^2]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值