【学习笔记】不完备数据下的多模态学习问题(更新中)


序言

解决什么问题?

本文主要是我在对非完备数据集场景下的多模态检索任务方法的学习。不完备特征表示(Incomplete feature representation)是在当今多模态场景下更常见的数据收集形式。
包括因数据传感器损坏而导致的数据收集失败、网络通信导致的数据损坏、数据隐私政策等。
例如,在文档/图像表示的网页分类中,文档和图像是两种模式,但有些网页只有文档或图像信息; 在跨网络的用户识别中,用户个体拥有多模态信息如档案特征、内容信息或链接信息,而有些用户由于个人偏好或隐私问题只有一种或部分模态信息。这些都会导致不完备特征表示情况的出现。

It is notable that the mainstream multi-modal learning approaches assume that training examples are with complete modalities.
Nevertheless, the assumption mentioned above is excessive, since there are many reasons for insufficiencies or incompleteness, including data collection failures from the damage of data sensors, data corruption by network communication, data privacy policies, etc.

这里提到说大部分的多模态学习方法的数据都基于了一个完备的假设,这些假设较为理想化。如果遇到不完备数据集的情况,可以采取一些直接策略,如删除数据或者对数据集采取填充缺失信息方法等,但这都会导致丢失信息以及引入额外的噪声

一些基本的方法

利用内在信息

Multiview clustering with incomplete views (2010): 提出了一个部分模态的方法,将一个模态的核矩阵作为相似矩阵,将另一个模态的核特征通过拉普拉斯正则化计算出来。

OMVC - Online multi-view clustering with incomplete views (2016): 学习每个个体不完全模态的潜在特征矩阵,然后将其推向共同的潜在空间(pushes them towards a common consensus)

Incomplete multi-modal visual data grouping (2016): 提出了一种无监督的方法,通过将原始的不完全数据转化为潜在空间中的新的完全表示,很好地处理了不完全的多模态数据。这些方法主要侧重于充分利用内在信息,即多种模式之间的一致性。

利用外部信息

SMGI - Multiple graph label propagation by sparse integration (2013): 集成多个图进行标签传播,利用图权重的稀疏性,可以很容易地淘汰不相关的图

SLIM(ICJAI '18)

优化函数构建

该方法不仅考虑的利用内在信息,还利用了外部的信息,是个综合的方法。本文考虑的不仅仅是某模态数据整体的不完备,还有局部的不完备。

举一个具体的例子,比如一个文本模态的新闻,假设用报道源来刻画其特征,报道源有BBC, 路透社,和卫报,则分别对应一个特征内容。如果这个新闻只有某一家或两家报道,那么这个新闻在该模态上是不完备的。如果全部报道了该新闻,则新闻是完备的,文中用这样一幅图来表示并且定义了 X c X_c Xc X k X_k Xk
模态完整性表示

SLIM的定义式是 min ⁡ W k , b k , F ∑ k = 1 K ( L ^ k ( F k , F ) + λ 2 2 L ~ k ( X ^ k , F ) ) \min_{W_k,b_k,F}\sum_{k=1}^K(\hat L_k(F_k,F)+\frac{\lambda_2}2\tilde L_k(\hat X_k, F)) Wk,bk,Fmink=1K(L^k(Fk,F)+2λ2L~k(X^k,F))

其中前式代表第k模态的分类损失。后式同时考虑缺失模态的内外部信息。建立了一个联合变换矩阵分解的问题(joint transformed matrix factorization problem X k ∈ R N × d k X_k\in\mathbb R^{N\times d_k} XkRN×dk代表用0填充后的包含缺失列的第k模态数据。 b k , P k ∈ R N × C b_k,P_k\in\mathbb R^{N\times C} bkPkRN×C分别代表偏置和指示矩阵,指示矩阵中若某一行对应的实例在该模态是非完备的,则整行为0,否则为1(也就是说每个模态都有一个这样的P矩阵,总共有K个。)

min ⁡ F k L ^ k ( F k , F ) = ℓ ( F k , F ) + λ 1 2 r ( F k ) = min ⁡ W k , b k 1 2 η k ∥ X ^ k W k + 1b k T ⊙ P k − F ⊙ P k ∥ F 2 + λ 1 2 ∥ W k ∥ F 2 \min_{F_k}\hat L_k(F_k,F) = \ell(F_k,F)+\frac{\lambda_1}2r(F_k)\\=\min_{W_k,b_k}\frac1{2\eta_k}\Vert\hat X_kW_k+\textbf {1b}_k^T\odot P_k-F\odot P_k \Vert_F^2+\frac{\lambda_1}2\Vert W_k\Vert _F^2 FkminL^k(Fk,F)=(Fk,F)+2λ1r(Fk)=Wk,bkmin2ηk1X^kWk+1bkTPkFPkF2+2λ1WkF2

其中 F F F代表对所有要学习的实例的预测值、 η k \eta_k ηk第k个模态中的完备的实例数。
第二个分式的损失函数可以表示为
min ⁡ F 1 η k 2 ∥ R Ω ( M k ) − R Ω ( F F T ) ∥ F 2 s . t . F Θ l = Y , 0 ≤ F ≤ 1 \min_F\frac1{\eta_k^2}\Vert\mathcal R_\Omega(M_k)-\mathcal R_\Omega(FF^T)\Vert_F^2\\s.t.\quad F^{\Theta_l}=Y,0\leq F\leq 1 Fminηk21RΩ(Mk)RΩ(FFT)F2s.t.FΘl=Y,0F1

其中 M k ∈ R N × N M_k\in\mathbb R^{N\times N} MkRN×N表示实例的标签相似矩阵
R ( . ) R(.) R(.)的定义:如果第i和j个实例在模态k上是完整的,则表示为括号内的对应位置的值(第i行第j列),否则表示为0。在本文中,运用了半监督学习的方法,将有标签的,无标签的数据均同等的处理为F。F有约束 F Θ l = Y F^{\Theta_l}=Y FΘl=Y,其中 Θ l \Theta_l Θl为已标注的数据的索引,即F中包含了Y的数据。F整体有标签的约束[0,1]。而本文采用了平方根误差(square-root loss)而非F范数刻画的最小二乘误差。根据Multivariate regression with calibration(2014)。本文提出了上述损失函数的平方根版本 min ⁡ F 1 η k ∥ R Ω ( M k ) − R Ω ( F F T ) ∥ F s . t . F Θ l = Y , 0 ≤ F ≤ 1 \min_F\frac1{\eta_k}\Vert\mathcal R_\Omega(M_k)-\mathcal R_\Omega(FF^T)\Vert_F\\s.t.\quad F^{\Theta_l}=Y,0\leq F\leq 1 Fminηk1RΩ(Mk)RΩ(FFT)Fs.t.FΘl=Y,0F1

这种修改可以通过考虑所有模态的不同噪声水平来校准每种模态,并增加 SLIM 中第二项的鲁棒性(本质上让第二项的影响变小,因为优化)。综合上面两个分量的公式有综合的优化目标函数: min ⁡ W k , b k ( 1 2 η k ∥ X ^ k W k + 1b k T ⊙ P k − F ⊙ P k ∥ F 2 + λ 1 2 ∥ W k ∥ F 2 )   + λ 2 2 ∑ k = 1 K 1 η k ∥ R Ω ( M k ) − R Ω ( F F T ) ∥ F   s . t . F Θ l = Y , 0 ≤ F ≤ 1 \min_{W_k,b_k}(\frac1{2\eta_k}\Vert\hat X_kW_k+\textbf {1b}_k^T\odot P_k-F\odot P_k \Vert_F^2+\frac{\lambda_1}2\Vert W_k\Vert _F^2)\\ \space \\+\frac{\lambda_2}2\sum_{k=1}^K\frac1{\eta_k}\Vert\mathcal R_\Omega(M_k)-\mathcal R_\Omega(FF^T)\Vert_F\\\space\\s.t.\quad F^{\Theta_l}=Y,0\leq F\leq 1 Wk,bkmin(2ηk1X^kWk+1bkTPkFPkF2+2λ1WkF2) +2λ2k=1Kηk1RΩ(Mk)RΩ(FFT)F s.t.FΘl=Y,0F1

优化过程

SLIM的优化不是对所有分量都是凸优化的,具体的讲,对于 W x b k W_x\textbf b_k Wxbk是凸的,但不是联合凸优化。


b i \textbf b_i bi的优化:
向量b有闭式解:
b k = 1 η k ( F ⊙ P k − X ~ k W k ) T 1 \textbf b_k = \frac 1{\eta_k}(F\odot P_k-\tilde X_kW_k)^T\bf1 bk=ηk1(FPkX~kWk)T1

why?令优化的第一个term接近0,则 P k P_k Pk的每一列都乘以同一个偏置值。使总体的F范数最小,注意到 P k P_k Pk其实是一个indicator,表示该行对应的实例是否为完备数据,所以每一列的和都是 η k \eta_k ηk个对应位置的1。所以第i列全部乘以 b i \textbf b_i bi的值,体现出来的就是每一列的总和是 η k \eta_k ηk倍的 b i \textbf b_i bi。使F范数最小就要反推b的值,当b为每列的均值(仅考虑完备列)最小,即有上述闭式解


W k W_k Wk的优化:
将上式闭式解代入(模拟一次迭代内的操作),则可得到新的目标函数为(7)从而求得闭式解(8)并改写为9
在这里插入图片描述

在这里插入图片描述

why(8)? 可以在Matrix Calculus上求解,就是一个简单的F范数求导问题。
在这里插入图片描述


如上文所述,当确定了 b k \textbf b_k bk W k W_k Wk的闭式解后,原方程可化简成 min ⁡ F t r ( F T H F ) + λ 2 ∑ k = 1 K 1 2 η k ∥ R Ω ( M k ) − R Ω ( F F T ) ∥ F \min_F tr(F^THF)+\lambda_2\sum_{k=1}^K\frac 1{2\eta_k}\Vert \mathcal R_\Omega(M_k)-\mathcal R_\Omega(FF^T)\Vert_F Fmintr(FTHF)+λ2k=1K2ηk1RΩ(Mk)RΩ(FFT)F

SLIM给出的方法是采用投影次梯度优化的方法。

SLIM-K(TKDE 21’)——SLIM的进一步完善

本文作者在19年重投了一遍SLIM方法的文章,并且提出了核化的SLIM方法SLIM-K。名为Semi-Supervised Multi-Modal Clustering and Classification with Incomplete Modalities该文章更详细更具体的对SLIM进行了描述。(SLIM方法在上文的描述中讲到“投影次梯度优化的方法”的时候就结束了,就是因为文章几乎一笔带过了这一部分。在这一篇SLIM的拓展中,对于该算法部分有了一个更具体的描述)


优化函数的构建和SLIM是类似的,将F换了个表述(早该换换了):
SLIM in SLIM-K
而提出了SLIM-K有
SLIM-K
此处在 M v M_v Mv Y ^ Y ^ T \hat Y\hat Y^T Y^Y^T之间多了一个 [ K v ] i , j = ϕ ( x i v ) ϕ ( x j v ) [K_v]_{i,j}=\phi(\textbf x_{i^v})\phi(\textbf x_{j^v}) [Kv]i,j=ϕ(xiv)ϕ(xjv)
对于投影次梯度法,SLIMK给出了算法的流程:
投影次梯度法


实验部分

【还没做这个实验TT,先读了方法看后面DAVAE去了,因为找不到源码和数据集所以还没做相关的复现】

NCH

一些概念

GAT

Graph Attention Network(GAT)是一种用于处理图数据的神经网络模型,它可以对节点进行分类、聚类、链接预测等任务。

GAT是基于注意力机制(Attention Mechanism)的一种图神经网络模型。在传统的图神经网络中,每个节点的表示是通过对所有相邻节点的表示进行加权平均得到的。而在GAT中,每个节点的表示是通过对其相邻节点的表示进行加权求和,其中权重是通过注意力机制计算得到的。这种方式可以更好地捕捉节点之间的关系,提高模型的性能。

具体来说,GAT包含多个注意力头(Attention Head),每个头都是一个单独的注意力机制,用于计算相邻节点之间的注意力权重。每个头独立地学习不同的权重,然后将所有头的输出进行拼接,得到每个节点的最终表示。

GAT的优点在于可以处理具有不同大小和结构的图,并且可以自适应地学习不同节点之间的权重。它已经在图分类、节点分类、链接预测和图生成等任务中取得了很好的表现。

下面是一个简单的GAT的代码实现:

import torch
import torch.nn as nn
import torch.nn.functional as F
class GATLayer(nn.Module):
    def __init__(self, in_features, out_features, dropout=0.5, alpha=0.2):
        super(GATLayer, self).__init__()
        self.dropout = nn.Dropout(dropout)
        self.alpha = alpha
        self.attention = nn.Linear(in_features, out_features)
        self.a = nn.Linear(2*out_features, 1)

	def forward(self, x, adj):
        h = self.attention(x)
        N = h.size()[0]
		a_input = torch.cat([h.repeat(1, N).view(N*N, -1), h.repeat(N, 1)], dim=1).view(N, -1,2 * h.size()[-1])
	    e = F.leaky_relu(self.a(a_input).squeeze(2))
	
	    zero_vec = -9e15 * torch.ones_like(e)
	    attention = torch.where(adj > 0, e, zero_vec)
	    attention = F.softmax(attention, dim=1)
	    attention = self.dropout(attention)
	
	    h_prime = torch.matmul(attention, h)
	    h_prime = F.elu(h_prime)
	
	    return h_prime
	    
class GAT(nn.Module): 
	def __init__(self, nfeat, nhid, nclass, dropout=0.5, alpha=0.2, nheads=8): 
		super(GAT, self).init() 
		self.dropout = nn.Dropout(p=dropout) 
		self.attentions = [GATLayer(nfeat, nhid, dropout=dropout, alpha=alpha)for _ in range(nheads)] 
		for i, attention in enumerate(self.attentions): 
			self.add_module('attention_{}'.format(i), attention) 
			self.out_att = GATLayer(nhid*nheads, nclass, dropout=dropout, alpha=alpha)
	def forward(self, x, adj):
	    x = self.dropout(x)
	    x = torch.cat([att(x, adj) for att in self.attentions], dim=1)
	    x = self.out_att(x, adj)
	    return F.log_softmax(x, dim=1)

本文中对于近邻信息的处理分为三类:KNN,GAT以及TEs,但主要是围绕着TEs展开的。

Transformer Encoder

也是看了这篇文章才开始学习Self-Attention,Encoder Decoder和Transformer等内容的。这篇文章用了Self-Attention的方法,但是 Q K V QKV QKV的确定和一般的自注意力机制的work比其实差别还挺大的(我不确定是不是多模态的工作都是这么做的)
以下是我对这部分的个人理解:
我们从两个包含缺失的模态补齐来看,这样的话,将数据拆开其实包括了两类以及每类中有两个部分:完整模态的data - textual complete data & visual complete data;缺失模态的data - incomplete data of one modality & complete data of the other modality
我们可以用两个模态的数据以及缺失模态数据中的完整部分来推理出缺失模态的缺失部分,这个思想是很基础的,在GAT包括KNN的方法里,其实本质上都是这样一个三推一的过程。

但是这篇的Transformer还是很有意思,他的q是缺失模态(文本模态)的非缺失部分(好像本文仅讨论了图像模态缺失的情况)去乘以参数矩阵 W q W_q Wq,K是文本模态的Anchor去乘以参数矩阵 W k W_k Wk正好能够跟q进行对齐,V则是anchor对应的图像信息乘以参数 W v W_v Wv
这样正好满足了self-Attention中这三个参数的意义,最后产生经过Attention加权后的每个自己的意义(图像的特征)从而生成了相应的补全图像特征。

但NCH提出,这还不够。

NCH正文

framework

NCH是为数不多的基于非完备信息的跨模态哈希方法,这篇2023年的文章提出当前的非完备跨模态哈希中能够处理信息部分缺失的只有SAPMH,也就是说和我(就是这个ALOKA)所关注方向完全相同的哈希方法里仅有这两篇,所以这两篇都会着重讲一下,实验里也用的是SAPMH的baseline进行对比,效果有明显的提升。
首先看一下NCH的完整框架图
NCH框架
这里除了模态信息的图例外,还有一些生成器(编码器)的定义在正文中,在这里大致讲一下整个流程:

  1. 模态信息读取分类,然后根据机器学习方法,产生一个由近邻数据推断出来的补充数据集合(completed feature),这种近邻的学习表示为N(Neighbour learning)
  2. 获取了近邻信息推断出的缺失模态数据后,还不足以用其表示整体的缺失数据,因为根据所用的图学习方法或Attention机制,生成的近邻数据和锚点的选择关系很大,所以作者用了一个更加泛化的全连接网络(多层感知机)来作为实际的模态补全的编码器。
  3. 将N生成的补全模态作为监督信息,监督多层感知机的训练监督信息。在实验中,这部分训练分为了两个阶段:一是训练transformer的warm-up阶段,由于目的是训练G,所以warm-up的epoch不是很多(注意,transformer的训练用的是完备数据);二是根据训练好的transformer生成的监督信息来相应的对多层感知机进行监督,训练基于多层感知机的特征生成器。
  4. 哈希函数学习(H)仅仅用了一层FC层来实现(确实是一层线性变换就行,不会过拟合,无论是传统机器学习方法还是深度方法,无论是联合学习还是两阶段学习,都会使用线性的生成器)最终哈希码的评估,依靠哈希码的余弦相似度和标签负对数放缩相似度之间的相似度作为损失函数来实现
  5. fusion model(F)来实现模态聚合,把两个模态的特征相加然后聚合成共同的哈希码(为什么可以这么做?因为每一个模态的特征其实每个维度都对应的一个anchor,所以生成的feature每个维度其实也是相对应的,这里其实可以有一个调控的融合参数(一些fusion相关的跨模态方法提出了将权重变为一个可以学习的参数,因为不同模态的信息承载能力不同))
  6. 用sign函数来生成二进制码,quantization loss用来监督生成二进制码的效果。(这里是否真的有必要,我不是很清楚应该如何去避免其中较大的量化损失,浅层方法中会用**旋转矩阵(参考ITQ)**来对特征进行一定的偏移来提高效果,但深度方法中旋转矩阵没办法高效的被学习)

N \mathcal N N-step近邻学习

非完备多模态方法的模态补全的思想,是根据邻居推测内容,而邻居是根据完整模态信息和锚点(图文数据均完整)的相应模态信息来计算出来的。一个最朴素的方法是KNN的方法,最后将k-nearest的数据来直接平均计算,这是快但很粗糙的方法,当数据种类很多的时候,对anchor的要求相应的会高很多;文中还提到了GAT的方法,就是上文提到的图注意力网络,计算方法为 x i t ~ = s i X a W g   s . t . s i j = e x p ( L e a k y R e L U ( [ y i t W 1 ] [ y j a W 2 ] ) α T ∑ k e x p ( L e a k y R e L U ( [ y i t W 1 ] [ y j a W 2 ] ) α T \tilde { \textbf x_i^t}=\textbf s_i\textbf X^a\textbf W_g\\\space\\s.t.\quad s_{ij}=\frac{exp(LeakyReLU([\textbf y_i^t\textbf W_1][\textbf y_j^a\textbf W_2])\alpha^T}{\sum_k exp(LeakyReLU([\textbf y_i^t\textbf W_1][\textbf y_j^a\textbf W_2])\alpha^T} xit~=siXaWg s.t.sij=kexp(LeakyReLU([yitW1][yjaW2])αTexp(LeakyReLU([yitW1][yjaW2])αT
其中x为缺失模态,W为学习的矩阵参数
随着Transformer近年来的突飞猛进,本文的核心内容——基于Transformer的模态补全策略。QKV生成策略如下,现在完整模态信息对应的内容下(即q&K)做self-attention,获得到一个权重的编码,权重再加到V上面,即加到缺失模态下锚点所拥有的缺失模态信息(eg.文本模态缺失,则是锚点的文本模态信息,因为锚点是模态完整的所以维度一致)
QKV in NCH

CLAM(TIP '19)

问题分析

partial cross-modal hashing有哪些challenge?

  1. 信息不完整
  2. 无法保证的的模态间一致性:如果我们分别学习特定模态的表征,那么由缺失样本引起的不利影响就会被削弱,因为学习过程是在每个模态上独立进行的。但是,对于出现在两种模态中的对象,如何确保上述相似性关系或散列代码的模态间一致性仍然不清楚

做了什么?

  1. 提出CALM:包含了三个模块,collective affinity reconstruction, adaptive affinity fusion 以及 neighborhood information feedback。
  2. 将信息不完整的问题通过协同亲和重构解决。
  3. 融合了不同模态的近邻信息。用自适应的affinity fusion的方法(我实在不知道这个affinity应该怎么翻译)实现了线性复杂度,快速收敛。
  4. 用近邻信息来作为“feedback”,对CALM的训练采用自我引导的机制的训练。

Motivation & framework

本文启发于Collective Learning,这是一个教育学的概念,是一个知识产生的过程。具体内容如下例:

假设有n个人,他们有不同的专业背景。对于一个新的概念,他们的观点可能是不同的,互补的。基于此,每个人都可以通过CL获得到新的知识,并且修正其原本的知识。
三个key component:

  1. 学习过程的目的是让每个人在最后拥有完整的知识。因此,CL应该是所有人的综合化的总成的知识。
  2. 每个人更倾向于听与自己志同道合的人,因此,邻居对于学到的知识的影响是很大的。
  3. 学习过程以及邻居信息都是动态的。

作者认为,不完全性和互补性是伴随出现的,所以采用CL策略。学习效果可以随着个体的信息被传播,扩散并分享而增强。
CALM framework
上图为CALM的framework,将整个方法分为了三个部分:

  1. affinity reconstruction. 缺失的样本的亲和性重构。具体地,在上图虚线(代表对应关系)的监督下进行缺失模态的集体重建。(对应总成知识学习
  2. adaptive anchor graph learning. 为了融合计算好的不同模态中数据到锚点的亲和性,引入了锚点图。(对应近邻学习
  3. feedback. 通过邻居信息作为反馈,是CALM自指导地学习。(对应学习和近邻信息动态变化

论文及本博客均按照顺序对这些方法进行介绍。

Model construction

Collective Affinity Reconstruction

公式定义:
T c = { ( x i ( 1 ) , x i ( 2 ) ) } \mathcal T_c=\{(\textbf x_i^{(1)},\textbf x_i^{(2)})\} Tc={(xi(1),xi(2))}: 表示 n c n_c nc个实例对,包含两种模态的完整数据
T 1 = { x i + n c ( 1 ) } i = 1 n 1 \mathcal T _1=\{\textbf x_{i+n_c}^{(1)}\}_{i=1}^{n_{_1}} T1={xi+nc(1)}i=1n1: 表示 n 1 n_1 n1个实例对,仅包含模态1的数据
T 2 = { x i + n c + n 1 ( 2 ) } i = 1 n 2 \mathcal T _2=\{\textbf x_{i+n_c+n_1}^{(2)}\}_{i=1}^{n_{_2}} T2={xi+nc+n1(2)}i=1n2: 表示 n 2 n_2 n2个实例对,仅包含模态2的数据


亲和锚点图
本工作借鉴了锚点图的思想[71-73]。首先从完整数据中选择m组锚点 { ( u j ( 1 ) , u j ( 2 ) ) } j = 1 m \{(\textbf u_j^{(1)},\textbf u_j^{(2)})\}_{j=1}^m {(uj(1),uj(2))}j=1m,从而定义了矩阵 Z ( l ) \textbf Z^{(l)} Z(l)来描述第 l l l模态的数据-锚点亲和性:
data-anchor affinity
这里实际上对许多锚点方法中进行了一个再简化,上公式中 N i ( l ) \mathcal N_i^{(l)} Ni(l)表示第 l l l模态上对样本点 i 的一个k近邻。也正因此,构建出来的 Z ( l ) \textbf Z^{(l)} Z(l)矩阵是一个稀疏矩阵,同时由于是表示样本和anchors之间的关系,这也是一个二部图的表示。这个矩阵中的 i i i是取自所有实例的,也就是说缺失模态的样本也应该能够有一个相应的值。如何去填补这个空缺就是关键问题。


稳定随机游走
Stationary Markov random walks可以被用在二部图上。亲和力的值可以被看作为单步过渡概率。如果某个实例的模态缺失,则无法直接计算获得其过渡概率 p ⟨ 1 ⟩ ( x i ( 1 ) ∣ u j ( 1 ) ) p^{\langle 1\rangle}(\textbf x_i^{(1)}|\textbf u_j^{(1)}) p1(xi(1)uj(1))“幸运的是” x i ( 2 ) \textbf x_i^{(2)} xi(2)可以计算出 p ⟨ 1 ⟩ ( x i ( 2 ) ∣ u j ( 2 ) ) p^{\langle 1\rangle}(\textbf x_i^{(2)}|\textbf u_j^{(2)}) p1(xi(2)uj(2))原因如下。
why can be estimated?

p ⟨ 1 ⟩ ( x ∣ y ) p^{\langle 1\rangle}(x|y) p1(xy) 表示从节点 y y y 转移到节点 x x x 的概率。其中,上标 ⟨ 1 ⟩ \langle 1\rangle 1 表示这是一阶(first-order)转移概率,即只考虑当前节点和它的一阶邻居节点之间的转移概率。在 SMRW 中,一阶转移概率是最常用的转移概率,因此通常会在符号上标注 ⟨ 1 ⟩ \langle 1\rangle 1,以区别于更高阶的转移概率。
之前那个图其实有一些不完整的地方,他没有详细说明,就是不同模态的x之间和不同模态的u之间也会有一个二部图,而这个是一个平凡的一对一的单射关系,这也是为什么它可以向公式(2)、(3)那样做近似。
可以参考Learning_of_Multimodal_Representations_With_Random_Walks_on_the_Click_Graph

Adaptive Affinity Fusion

remark1
主要做的是将两个 Z ( l ) \textbf Z^{(l)} Z(l)矩阵进行融合,采用的也是基于概率的策略。
首先根据原本的近邻关系很容易可以按照[0,1]空间内取反来获取一个对应的距离矩阵(距离越近越相关,也就是说近邻的1代表距离的0),定义 D i j ( l ) = 1 − Z i j ( l ) \textbf D_{ij}^{(l)}=1-\textbf Z_{ij}^{(l)} Dij(l)=1Zij(l),则可以用一个朴素的思想转换为如下优化问题:
AAF优化问题
w是不同模态刻画相似的一个非负的参数。这个地方的损失函数是否太随意了点呢?我的理解每个模态用F范数来算可能效果会好一些。。
和Z类似的,定义了 D = ∑ l w ( l ) D ( l ) \textbf D = \sum_lw^{(l)}\textbf D^{(l)} D=lw(l)D(l),目标函数变为 ∑ i , j D i j Z i j \sum_{i,j}\textbf D_{ij}\textbf Z_{ij} i,jDijZij
作者又提出,这个优化函数也有一个平凡的有化解,对于每一列都是一个one-hot向量,在D每一行最小的对应位置上取1,其他位置取0。但是这违反了k近邻选锚点的意图(why?)所以作者的设计是设计对应的k个非0项。但是如何避免one-hot的出现呢?答案是增加一个正则项来约束。
又一次“幸运的”,作注意到这么一个新的优化问题:
opt2inAAF
有解 Z i j = 1 m , ∀ i , ∀ j \textbf Z_{ij}=\frac 1 m,\forall i,\forall j Zij=m1,i,j
上面结论根据基本不等式得到。作者认为这就是上述问题的理想化正则项的样子(反正就是往平均的拉呗)于是乎获得了带有正则项的优化函数。
objfunc


remark2
对于无监督的任务,需要调整的参数越少,模型将拥有强大的鲁棒性。由于参数可以在大范围内搜索,在各种w (l)上追求良好的性能可能是难以实现的。
6,作者决定直接把这个参数删了
然后添了个根号,称其为weight-adaptive model,具体怎么做到了“自适应权重”在后文提到。(section IV-A )
weightadaptivemodel

在第IV-A节中,我们将揭示我们对模型(8)的优化在迭代过程中自动学习权重,这在无监督任务中具有明显的优势。同时,第IV-A节将讨论如何通过为每个物体选择适当数量的最近的锚点对来确定参数α的值。

Neighborhood Information Feedbac

为什么要这么做?注意到选锚点的时候,是不同模态单独去进行选择,所以可能出现一个实例在不同模态上选择的锚点不一致的情况。解决这个额问题,本文把 Z i j ( l ) \textbf Z_{ij}^{(l)} Zij(l)的定义进行了修改,是其不再选择近邻k个锚点而是选择所有锚点,即改写成这样:
NIF
具体如何做feedback在后文提到

优化(摆烂警告)

优化过程

对于数学基础较弱的我来说,这个优化是震撼的,逆天的,模糊的,抽象的。。。由于主要是研究思想,优化部分这里不详细描述。这里讲一下如何feedback以及如何自适应学习:

自适应 依靠共轭函数的引入而再次引入(详细见原文Lemma1)。(为什么不直接在优化部分里做这个处理,我还以为真不要这个w了)
feedback 通过公式12可以算出一个非稀疏的Z矩阵来。这个矩阵可以对原本的每个数据的近邻锚点集合进行修改。然后根据这个再重新学习新的Z矩阵

其实CALM方法主要还是基于AGH方法(这个应该在我的综述里面提到过)整体基于锚点图来进行哈希码的学习。学到的Z是个基于概率表示的,两个模态融合的锚点图。直接喂给AGH模型再进行Hash function learning(线性回归)就可以得到最终的结果。
= =害挺麻烦

双对齐变分自编码器DAVAE(MM '20)

我先看的NCH这篇,但是提到了DAVAE并且之前看了一点点DAVAE的东西,在这里先挖个坑。
DAVAE是基于差异自动编码器(VAE)实现的,通过VAE来学习不同模态的一个共同的潜在语义表示,然后进行双对齐——不同模态的分布情况对齐与语义信息对齐

一些基本知识

VAE

VAE(Variational Autoencoder)是一种生成模型,它是一种基于神经网络的自编码器(Autoencoder)的扩展。VAE 的主要作用是学习数据的潜在表示,并通过这个潜在表示生成新的数据,例如图像、音频等等。

与传统的自编码器不同,VAE 不仅学习数据的压缩表示,还学习数据的分布信息。具体来说,VAE 假设数据是由一个隐变量和一个可观测变量组成的联合分布,然后通过最大化这个联合分布的对数似然来训练模型。在训练过程中,VAE 的目标是学习一个编码器和一个解码器,编码器将数据映射到一个潜在空间中的分布,解码器则将潜在空间中的样本映射回原始数据空间中。在生成新的数据时,VAE 从潜在空间中采样,然后使用解码器将样本映射回原始数据空间中,从而生成新的数据。

在实际应用中,VAE 被广泛用于图像生成、图像重构、数据降维等任务中。它的优点是能够学习数据的分布信息,并能够生成具有多样性的新数据。同时,在训练过程中,VAE 还能够在一定程度上避免过拟合的问题。

当谈及VAE的实现时,它通常被分为两个部分:编码器和解码器。下面将分别讨论编码器和解码器的实现以及VAE的实现:

编码器实现
编码器的作用是将输入数据 x 映射到潜在空间中的分布 q(z|x)。在VAE中,通常使用神经网络作为编码器,例如多层感知器(MLP)或卷积神经网络(CNN)。编码器的输出通常是潜在空间中的均值和方差,可以通过以下公式计算:
z_mean, z_log_var = encoder(x)
其中,z_mean 和 z_log_var 分别表示潜在空间中的均值和方差。
解码器实现
解码器的作用是将潜在空间中的样本 z 映射回原始数据空间中,从而生成新的数据。在VAE中,通常使用神经网络作为解码器,例如MLP或CNN。解码器的输出通常是生成的数据 x_hat,可以通过以下公式计算:
x ^ = d e c o d e r ( z ) \hat x = decoder(z) x^=decoder(z)
其中,z 表示潜在空间中的样本。

VAE实现
VAE的实现基于最大化联合分布的对数似然,可以通过以下公式计算:
l o g p ( x ) > = E [ l o g p ( x ∣ z ) ] − K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) log p(x) >= E[log p(x|z)] - KL(q(z|x) || p(z)) logp(x)>=E[logp(xz)]KL(q(zx)∣∣p(z))
其中, E [ l o g p ( x ∣ z ) ] E[log p(x|z)] E[logp(xz)] 表示重构误差,$KL(q(z|x) || p(z)) $表示正则化项,用于约束潜在变量的分布与先验分布 p ( z ) p(z) p(z) 的差异。这个公式中的重构误差可以由解码器产生,而KL散度则可以由编码器和先验分布产生。

在VAE的训练过程中,我们需要最大化上面这个公式的下界,也就是最小化以下损失函数:

L ( x , x h a t , z m e a n , z l o g v a r ) = − E [ l o g p ( x ∣ z ) ] + K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) L(x, x_hat, z_mean, z_log_var) = - E[log p(x|z)] + KL(q(z|x) || p(z)) L(x,xhat,zmean,zlogvar)=E[logp(xz)]+KL(q(zx)∣∣p(z))
其中,x 表示输入数据,x_hat 表示解码器生成的数据,z_mean 和 z_log_var 表示编码器输出的潜在空间中的均值和方差。

在实际实现过程中,我们可以通过以下步骤来训练VAE模型:

  1. 定义编码器和解码器的网络结构,以及潜在变量的维度大小。
  2. 定义损失函数,包括重构误差和KL散度。
  3. 通过随机采样的方式从编码器的输出中生成潜在变量 z。
  4. 使用解码器将潜在变量 z 映射回原始数据空间中,从而生成新的数据 x_hat。
  5. 计算损失函数,并通过反向传播算法更新编码器和解码器的参数。

    重复步骤 3-5,直到达到预设的训练轮数或者损失函数收敛。

需要注意的是,在实现VAE模型时,我们还需要对潜在变量的分布进行一些限制,例如将其限制为标准正态分布或者均匀分布。这样可以保证模型在生成新的数据时,具有一定的多样性和可控性。
总的来说,VAE模型在深度学习中具有广泛的应用,在图像生成、图像重构、数据降维等任务中取得了很好的效果。
当然现在,我们就把他当做一个生成模型来看待,进入DAVAE的学习8

概述

显然,不完整的CMR必须解决两个问题:不同模态之间的异质性和训练实例的不完整性。在本文中,我们提出了一个统一的框架来同时挑战这两种情况。
一方面,我们训练多个自动编码器,每个模态一个,以学习模态不变的表征。具体来说,我们鼓励每个模态的编码器将原始模态特定的表征编码到一个共同的潜在空间,该空间由所有模态共享。
鉴于共同的潜在表征,我们在分布层面和语义层面进一步对齐它们。具体来说,我们最大限度地提高不同模态的联合分布的门槛,使它们在潜空间中的分布一致,这有助于减少模态的差距。
此外,我们使用标签信息来监督潜在表征的学习,并增强它们的可辨别性。这样的双重对齐保证了所学的表征是模式不变的,从而解决了异质性的挑战
另一方面,我们利用生成模型来完成不完全性。具体来说,我们部署了变分自编码器(VAEs)来生成缺失模态的表示。可用模式的潜在表征和其生成的对应物之间的差异被最小化,以提高它们的相似性。部署VAE至少有两个好处。其一是它遵循我们用来处理异质性的编码器-解码器范式。另一个原因是,与GANs相比,VAEs是稳定的,易于训练的。通过部署VAE,我们将不完全CMR转换为一个有监督的CMR问题,也解决了不完全性问题。

综合下来DAVAE的核心有三点

  1. 自动编码器
  2. 分布语义双对齐
  3. 标签信息监督

之后也会根据这三个内容进行建模。
首先来看一下整个DAVAE的framework
DAVAE
解释一下这个框架。每个模态的样本都被编码到一个共同的潜在空间中(最小化语义鸿沟)。学习到的 z a , z b \text z^a, \text z^b za,zb是模态不变的表征,然后对这两个表征进行强制的双对齐的操作。此外,还为缺失的模态生成了潜在的表征。(这不应该是重点吗为什么是“此外”?)

本文在讲创新点时,拿CALM进行了对比。作者提出其中有三点不同:一是DAVAE是有监督的方法,增加了监督信息;二是DAVAE是直接用变分编码器来生成潜在表示,而不是想CALM来构建二部图来形成补充的锚点图(会造成对存储空间的巨大需求)

模型构建

Notations

在这里插入图片描述
这不赘述了。

Method Overview

总体的目标函数有 L = L V A E + L S A + L D A + L G \mathcal L=\mathcal L_{VAE}+\mathcal L_{SA}+\mathcal L_{DA}+\mathcal L_G L=LVAE+LSA+LDA+LG(最小化损失函数)
其中有 L V A E \mathcal L_{VAE} LVAE表示所有VAE的损失, L S A \mathcal L_{SA} LSA表示semantic alignment的损失, L D A \mathcal L_{DA} LDA表示distribution alignment的损失, L G \mathcal L_{G} LG表示generation的损失。其中前三个损失是为了减少不同模态的异质性,而最后一个损失是减少实例的不完整性。(前三个注重于模态间,第四个注重于生成实例

VAE(差分自编码器)

用来产生一个较为模糊的样本补全表示。(这篇文章后面看了看感觉incomplete的部分并没有怎么体现出来,代码没开源的情况下不想在这个上面去做实验,可能直接忽略掉VAE部也能够有比较好的效果)


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值