论文阅读学习 - Deep Representation Learning with Target Coding

本文介绍了深度学习中一种新颖的目标编码方法,通过使用Hadamard编码来增强模型的纠错能力和特征表示,有效提升图像分类任务的表现。文中详细阐述了1-of-K编码与Hadamard编码的原理,并探讨了其在卷积神经网络(CNN)中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Deep Representation Learning with Target Coding

[Project HomePage]

[Paper - AAAI2015]

[Supplementary Doc]

[Code-cuda-convnet]

1-of-K code:长度为 K K 的向量,第 k 个元素为 1,其它的为 0. [分类任务]

Target code:multi-label 预测问题.

图像分类一般采用单个类别标签作为 label,可以看做是 1-of-K 编码,类别标签所在位置的编码值为 1,其它非标签位置的编码值为0.

Taget code 的方式,是将一个 class 类别表示为一个0-1向量,长度为 2 的乘方(幂)(如 23=8 2 3 = 8 , 24=16 2 4 = 16 , 25=32 2 5 = 32 , 26=32 2 6 = 32 , 作者代码给出的范围是 3-14),可能有多个位置的编码值为 1,而不仅仅是类别标签位置的编码值为 1. 假如数据集有 10 类(如 MNIST,Cifar10),则 class 类别的label向量长度至少为 24=16 2 4 = 16 . 假如数据集有 1000 类(如 ImageNet),其Hadamard 矩阵至少为 210×210=1024 2 10 × 2 10 = 1024 ,每 class 类别的label向量长度为 210=1024 2 10 = 1024 .

1. Target Coding 定义

假设 T T 为整数集,记为 字符集(alphabet set) T T 内的一个元素记为 符号(symbol). 如, T={0,1} T = { 0 , 1 } 是一个二值字符集.

目标编码(target code) S S 是一个矩阵, STn×l S ∈ T n × l . 目标编码矩阵的每一行记为 码字(codeword). l l 为每个码字(codeword)中的符号(symbols)数;n 为码字数(codewords).

对于目标编码 S S ,记 A={αi}ni=1 A = { α i } i = 1 n 为目标编码矩阵 S S 行元素的符号(symbols) 的经验分布集,如,当 i=1,2,...,n i = 1 , 2 , . . . , n 时, αi α i 是长度为 |T| | T | 的向量, αi α i 的第 t t 个元素是第 t 个符号(symbol) 在目标编码矩阵 S S 的第 i i 行出现的频数.

同样地,记 B={βj}j=1l 为目标编码矩阵 S S 列元素的符号(symbols) 的经验分布集.

假设给定两个不同的行索引(row indices) i i i,目标编码矩阵 S S i i 行和 i 行的 Hamming distance 为: |{j:SijSij}| | { j : S i j ≠ S i ′ j } | ,即,Hamming 距离计算了两个向量中对应符号(symbol) 不相等的列索引数(column indices). 简便起见,将之记为 成对 Hamming 距离(pairwise Hamming distance).


这里写图片描述

Table 1 中给除了一种一对多(1-of-K)的二值目标编码,深度学习中一般用于表示 K K 类 classes. K 个符号(symbols) 中的每一个元素是 0 或 1,分别表示特定 class 的概率. 此时,可以看做是目标编码矩阵的一种特殊形式,即 S=I S = I . ITK×K I ∈ T K × K 的单位矩阵.

可以简单直接的的到 1-of-K 编码的某些属性. 如,

αit α i t 为矩阵 S S i i 行中第 t 个符号(symbol) 的数目, i=1,2,...,K i = 1 , 2 , . . . , K ,这里 t=1,symbol=0t=2,symbol=1 t = 1 , s y m b o l = 0 ; t = 2 , s y m b o l = 1 . 由于每个码字(codeword) 只有一个符号(symbol),能够得出 αi1=K1K α i 1 = K − 1 K αi2=1K α i 2 = 1 K .

相似地,可以得到 βj1=K1K β j 1 = K − 1 K βj2=1K β j 2 = 1 K . 成对 Hamming 距离为 2.

2. 基于 Hadamard Code 构建 Class label

目标编码(target coding) 不仅对于目标预测具有纠错(error-correcting)作用,还有助于学习更好的特征表示.

采用普遍使用的错误纠正编码(error-correcting code) 方法 —— Hadamard Code,其可以由 Hadamard 矩阵生成.

假设矩阵 H{+1,1}m×m H ∈ { + 1 , − 1 } m × m ​ ,其元素是 +1 或 -1,如果 HHT=mI H H T = m I ​ ,则记该矩阵为 Hadamard 矩阵. 其中, I I ​ 为单位矩阵. Hadamard 矩阵要求任意两个不同的行和列分别都是正交的.

Hadamard 矩阵采用 Sylvester(Hedayat and Wallis 1978) 方法生成. 如,

给定 Hadamard 矩阵 H2=[++;+] H 2 = [ + + ; + − ] ,采用 Kronecker 乘积,有: H4=H2H2 H 4 = H 2 ⊗ H 2 ;类似地, H8=H4H2 H 8 = H 4 ⊗ H 2 . 可以看出,Hadamard 矩阵的尺寸是 2 的幂(乘方)关系.
这里写图片描述

针对 Hadamard 矩阵的任意两个不同的行(或列),其长度为 m m ,则有 m/2 对元素的符号彼此相同, m/2 m / 2 对元素的符号相反. 因此,任意两行的距离是常数,值等于 m/2 m / 2 .

现在,基于 Hadamard 矩阵,则可以构建目标编码矩阵 S S .

假设 Hadamard 矩阵 H{+1,1}m×m H ∈ { + 1 , − 1 } m × m ,则去除 H H 的第一行和第一列,并将 +1 变成 0,-1 变成 1,即可的到目标编码矩阵 ST(m1)×(m1) S ∈ T ( m − 1 ) × ( m − 1 ) . 根据 H H 的定义可知,矩阵 S S 的每一行和每一列都有 m/2 m / 2 个 1. 由于 Hadamard 矩阵的任意两行都是正交的,则矩阵 S S 的成对 Hamming 距离等于 m/2 m / 2 .

Tabel 1 给出了一个由 H8 H 8 得到的 7×7 7 × 7 目标编码矩阵 S S .

实际上,由于 Hadamard 矩阵的长度 m m 是 2 的幂(乘方),很难精确的到包含 K 个 classes 的 K K 个码字(codewords). 故,记矩阵 CTK×(m1) K K 个 classes labels 的矩阵,i=1,2,...,K,第 i i 个 class 是由矩阵 C 的第 i i 行标注的(labeled). 因此,矩阵 C 是从目标编码矩阵 ST(m1)×(m1) S ∈ T ( m − 1 ) × ( m − 1 ) 中选取 K K 个码字(codewords) 来构建的.

3. Target Coding 的属性

  • 属性1. 目标编码矩阵 S 每一行具有一致性.

    Hadamard 编码的每一行都有 m2 m 2 个符号(symbols) 等于 1.

    矩阵行元素的一致性对于目标预测(target prediction) 会引入冗余(redundancy). 矩阵 S S 的每一行表示一个 class 类别标签.

    与 1-of-K 编码不同的是,1-of-K 编码仅使用单个符号 ‘1’ 来表示 class 类别;

    而 Hadamard 编码的每个码字(codeword) 都有相同数量的等于 ‘1’ 的冗余符号(symbols). 这种属性是错误纠正属性. 如果符号(symbols) 的有限数量的部分被损坏,仍更可能正确识别 object 类别.

    符号 ‘1’ 的数量越多,则错误纠正能力越强,使得目标层(target layer)的响应能够直接用于最近邻分类.

    • 属性2. 目标编码矩阵 S S 每一列具有一致性.

      类似地,Hadamard 编码的每一列都有 m2 m 2 个符号(symbols) 等于 1.

      矩阵列元素的一致性也是特征表示学习需要的.

      目标编码矩阵 S S 的每一列可以看做是一个决策函数(decision function),将输入空间分成两个平衡区域,如,近一般的 classes 类别在一个区域,剩下的 classes 类别被分组到另一个区域.

      给定多个列,可以得到不同的划分区域,结合不同区域可能在输入空间产生指数个区域交叉(region intersections). 基于这样的属性,目标编码矩阵有助于产生更能区分数据的特征,的到数据的判别性和鲁棒性的特征描述.

    • 属性3. 目标编码矩阵 S S 的成对 Hamming 距离值为常数.

      因为 Hadamard 编码的行和列都具有一致性,成对 Hamming 距离也是 m2 m 2 .

      也就是说,任意两个码字(codewords) 间的 Hamming 距离都是码字(codewords) 长度的一半.

      这种属性确保了,每一 class 类有其唯一的码字(codeword),并与其它 classes 类有相同的远离距离. 从同一 class 类采样的数据,被强制映射到相同的码字(codeword). 有助于特征不变性表示.

    • 如前面说的,假设,Class 类别标签 CTK×(m1) C ∈ T K × ( m − 1 ) 是通过从目标编码矩阵 ST(m1)×(m1) S ∈ T ( m − 1 ) × ( m − 1 ) 中选取 K K 个码字(codewords) 构建的.

      然而, 由于 m 是 2 的乘方, 当 class 类别数小于 m1 m − 1 时, K<m1 K < m − 1 CTK×(m1) C ∈ T K × ( m − 1 ) 违背了属性2.

      因此,提出一种贪婪搜索(greedy search)方法 来从矩阵 S S 中选取 C C ,以逼近 属性2.

      从目标编码矩阵 S S 选取一个码字(codeword),当且仅当该码字(codeword)不破坏矩阵 C C 每一列的一致性时,才将该码字(codeword) 添加到矩阵 C C .

      例如,当 K=10,m=128m=256 K = 10 , m = 128 或 m = 256 时,采用贪婪搜索和随机选取来构建矩阵 C C . 如图:
      这里写图片描述

      矩阵列中符号(symbol) ‘1’ 的数量分布情况如 Figure 2. 可以看出,贪婪搜索方法能够更好的体现矩阵列元素的一致性(理想情况,所有的列都包含 5 个符号(symbols) ‘1’. 采用贪婪搜索算法,当 m=256 m = 256 时, 95% 的列都包含了 4-6 个符号(symbols) ‘1’). 随机选取会导致列元素一致性不够好.

      4. CNN 中 Target Code 的应用

      给定数据集 {xi,yi}Ni=1 { x i , y i } i = 1 N xi x i 为第 i i 个样本,yiC 为对应的 class 类别标签, N N 为样本总数. 采用CNN 来学习特征表示,损失函数采用 Euclidean loss:
      这里写图片描述

      Wl bl b l 分别为第 l l 层的权重和偏置.

      由于 Hadamard 编码与网络结构是独立的,因此,任何网络结构都可以. 例如图:
      这里写图片描述
      这里写图片描述
      这里写图片描述

      5. Results

      这里写图片描述
      这里写图片描述

### 关于深度强化学习中的状态-动作表示学习 在深度强化学习(DRL)领域,状态-动作表示学习是一个核心主题。该过程旨在使代理能够有效地从环境中提取有用特征并构建有意义的状态和动作表征。 #### 表示学习的重要性 有效的状态-动作表示对于提高策略性能至关重要。当代理能够在高维输入空间中识别出重要的模式时,可以更高效地探索环境,并更快收敛至最优解。这种能力尤其体现在视觉输入的任务上,例如游戏或机器人导航,在这些场景下原始像素数据通常作为观测的一部分[^1]。 #### 方法论概述 为了实现高质量的状态-动作表示,研究者们提出了多种方法: - **自监督预训练**:利用未标记的数据预先训练模型以捕捉潜在结构,之后再针对特定任务微调参数。 - **对比学习**:通过最大化正样本对之间的一致性和最小化负样本间的相似度来增强区分不同情境的能力。 - **基于预测的方法**:鼓励网络学会对未来事件做出准确预报,从而间接促进良好内部表达的发展。 ```python import torch.nn as nn class StateActionRepresentation(nn.Module): def __init__(self, input_dim, hidden_dims, output_dim): super(StateActionRepresentation, self).__init__() layers = [] dims = [input_dim] + hidden_dims for i in range(len(dims)-1): layers.append(nn.Linear(dims[i], dims[i+1])) layers.append(nn.ReLU()) layers.append(nn.Linear(hidden_dims[-1], output_dim)) self.model = nn.Sequential(*layers) def forward(self, x): return self.model(x) ``` 此代码片段展示了一个简单的神经网络架构用于创建状态-动作表示的例子。实际应用中可能会更加复杂,涉及卷积层或其他类型的模块取决于具体的应用需求。 #### 结合速率失真理论优化表示质量 考虑到有限的信息传递能力和存储资源,速率失真理论为理解如何平衡信息量与决策准确性提供了框架。这有助于设计更好的算法来获得既紧凑又具有表现力的状态-动作编码方案[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值