来源:挪威北极大学&清华&中山& MIT &中科院自动化所 & CMU, arxiv-2018,paper,code
来自:论文浅尝 | 当知识图谱遇上零样本学习——零样本学习综述
本文在 Zero-shot Recognition via Semantic Embeddings and Knowledge Graphs [1] 的基础上进行了改进,包括:
主要是通过在语义空间构建seen class和unseen class之间的关系,来实现知识迁移
GCN使得神经网络可以应用在非欧式空间中,表现出一种消息传递的作用。GCN 表现出一种拉普拉斯平滑的作用,特征表示会跟随深度的增加变得更加相似使得分类变得更加容易 (?,特征变得相似难道不会增加分类难度吗)。比如,一个连通图中,当网络层数 n → ∞ n\to\infty n→∞,特征会收敛到相同的表示使得所有的信息丢失 (?,这难道不是和参数有关吗,还是说神经网络变得无法训练?)
- 所以这个 GCN 中有没有参数?
- 预测参数有怎样的好处?(这是从seen到unseen迁移的关键)
图卷积是一类图神经网络,基于局部化图算子。优势在于图结构使其可以共享类之间的统计优势,使其有高度的抽样效率。通过引入切比雪夫多项式,其运算效率有了很大的提高。
此前的方法:
本文借鉴的是其中 model-of-models的思想,即通过一个模型来预测另一个模型中使用的参数。
使用 C \mathcal{C} C 表示所有类的集合, C t e \mathcal{C}_{te} Cte 和 C t r \mathcal{C}_{tr} Ctr 分别为测试集和训练集中的类别,要求 C t e ∩ C t r = ∅ \mathcal{C}_{te}\cap\mathcal{C}_{tr}=\empty Cte∩Ctr=∅。使用 S S S 维的语义表征向量 z ∈ R S z\in\mathbb{R}^{S} z∈RS 表示所有的类别,以及 D t r = { ( X ⃗ i , c i ) , i = 1 , . . . , N } \mathcal{D}_{tr}=\{(\vec{X}_{i},c_{i}),i=1,...,N\} Dtr={(Xi,ci),i=1,...,N} 表示训练集中的样本(图像及标签)。
使用类别标签的 word embedding以及知识图谱来对未知的类进行预测。
DGP中考虑了所有的 seen 和 unseen 特征,使用词嵌入向量的方式。对于 zero-shot 的任务,目标就是通过预测一组新的参数来扩展CNN,使得这组参数能够适应 unseen classes 的分类。训练过程中,DGP使用了一种半监督的方法来预测 CNN 最后一层的参数(对于所有 seen 和 unseen 的类),这样就使得我们能够利用知识图谱提供的类别的语义描述之间关系的信息来扩展原有的 CNN 分类器,使之能够适应 unseen 的类。
这样的描述符合逻辑,将 CNN 按照功能分离——特征提取+线性分类器。
然后假设特征提取不带有类别特异性(实际上作者似乎排除了这个假设,通过fine-tune),通过影响分类器就能影响最终的分类结果。实际上作者应该是认为两部分都能影响最终的判断,但分类器更加直接,因此使用了 DGP 来预测并固定,前面的应用finetune调整。
具体描述:给定一个有 N N N 个节点的图,每个节点使用 S S S 维输入特征表示, X ∈ R N × S X\in\mathbb{R}^{N\times{S}} X∈RN×S 就表示特征矩阵。这里每一个节点表示一个不同的概念/类。类之间的链接使用对称的邻接矩阵表示 A ∈ R N × N A\in\mathbb{R}^{N\times{N}} A∈RN×N,其中包括自环。传播法则表示为:
(1) H ( l + 1 ) = σ ( D − 1 A H ( l ) Θ ( l ) ) H^{(l+1)}=\sigma(D^{-1}AH^{(l)}\Theta^{(l)})\tag{1} H(l+1)=σ(D−1AH(l)Θ(l))(1)
其中 H ( l ) H^{(l)} H(l) 表示第 l l l 层的激活结果, Θ ∈ R S × F \Theta\in\mathbb{R}^{S\times{F}} Θ∈RS×F 表示第 l l l 层的可学习参数, F F F 表示其中的过滤器数量。对于第一层, H 0 = X H^{0}=X H0=X, σ ( ⋅ ) \sigma(\cdot) σ(⋅) 这里使用Leaky ReLU, D i i = ∑ j A i j D_{ii}=\sum_{j}A_{ij} Dii=∑jAij 是节点度矩阵, D ∈ R N × N D\in\mathbb{R}^{N\times{N}} D∈RN×N,这和此前的图卷积工作是相似的。Semi-supervised classification with graph convolutional networks
通过优化
(2) L = 1 2 M ∑ i = 1 M ∑ j = 1 P ( W i , j − W ~ i , j ) 2 \mathcal{L}=\frac{1}{2M}\sum_{i=1}^{M}\sum_{j=1}^{P}(W_{i,j}-\tilde{W}_{i,j})^{2}\tag{2} L=2M1i=1∑Mj=1∑P(Wi,j−W~i,j)2(2)
来训练 GCN 预测参数的能力。 M M M 表示训练时类别数目, P P P 表示权重向量的维度。ground truth 权重通过抽取预训练的 CNN 分类器得到。
讲道理这样做的话性能最好也不会超过 CNN 分类网络的性能。
图卷积的拉普拉斯算子可以写作 ( I − γ D − 1 L ) H (I-\gamma{D}^{-1}L)H (I−γD−1L)H,使用 γ = 1 \gamma=1 γ=1,再结合 L = D − A L=D-A L=D−A 得到 D − 1 A H D^{-1}AH D−1AH,表示只考虑一阶邻居节点之间的关系。这样使用多层图卷积就能够稀释信息。
使用 descendant propagation 和 ancestor propagation 来实现目标并避免问题。
使用两个邻接矩阵, A a ∈ R N × N A_{a}\in\mathbb{R}^{N\times{N}} Aa∈RN×N 表示节点和其 ancestor 的关联, A d A_{d} Ad 表示节点和其后代的关联,满足 A d = A a T A_{d}=A_{a}^{T} Ad=AaT。应用的传播公式为:
(3) H = σ ( D a − 1 A a σ ( D d − 1 A d X Θ d ) Θ a ) . H=\sigma\Big(D_{a}^{-1}A_{a}\sigma(D_{d}^{-1}A_{d}X\Theta_{d})\Theta_{a}\Big).\tag{3} H=σ(Da−1Aaσ(Dd−1AdXΘd)Θa).(3)
这里因为打破了原有的连接关系,因此只使用一层网络表示。
为了使得 DGP 能够更好地衡量不同的“邻居”之间的权重关系,作者提出了新的加权计算框架,通过节点之间距离来计算权重。需要注意的是,权重在原始的知识图谱上计算而不是 dense graph (符合预期)。使用 w a = { w i a } i = 0 K \mathcal{w}^{a}=\{\mathcal{w}_{i}^{a}\}_{i=0}^{K} wa={wia}i=0K 和 $ w d = { w i d } i = 0 K \mathcal{w}^{d}=\{\mathcal{w}_{i}^{d}\}_{i=0}^{K} wd={wid}i=0K 来表示学习到的对于祖先和后代的传播权重,其中 i i i 表示节点之间有 i i i 跳, w 0 \mathcal{w}_{0} w0 表示自环, w K \mathcal{w}_{K} wK 表示距离大于 K − 1 K-1 K−1 的节点之间的权重关系。使用 α k a = s o f t m a x ( w k a ) = exp ( w k a ) ∑ i = 0 K exp w i a \alpha_{k}^{a}=softmax(\mathcal{w}_{k}^{a})=\frac{\exp(\mathcal{w}_{k}^{a})}{\sum_{i=0}^{K}\exp{\mathcal{w}_{i}^{a}}} αka=softmax(wka)=∑i=0Kexpwiaexp(wka) 来归一化权重。
看起来这个公式是和节点无关的,只是单纯通过距离衡量,具体加权参数可学习
作者的实验中 K = 4 K=4 K=4。
作者认为这里的想法是和 attention 机制类似的,但不同的地方在于作者只对有相连关系的节点之间考虑了 attention。实验中作者发现使用完全的 attention 会导致性能下降,作者假设这是由于在给定的信息较少的情况下(稀疏的label graph),更多的复杂探测会使得模型过拟合。
训练过程分两步:
21K ImageNet dataset 将不同类别的数据按照距离划分为难易程度不同的集合。并且评价数据集和预训练ResNet-50的数据集中的数据都不相同。
ablation study
TPO-5结果展示
作者对比了按照距离加权模块最终得到的权重,证明距离越近权重越大。
而且远距离的节点产生的影响很小
感觉作者列一个表格更清楚
后面总结
这里作者对比的是使用完成的邻接矩阵进行两次更新
直观来看变化也不是很大,差异基本在0.5,感觉可以认为这并不是主要的作用模块,考虑到作者为了对比用同一个矩阵传播了两次,不知道如果真的单纯使用一个矩阵做结果会怎样。
思考点:
- 为什么通过叠加层次没有效果? 如果作者的结论是正确的,那么不应该是单纯的在这里失效,应该是 GCN 本质上的传播方法失效。不管是什么任务都不想得到一个 over smooth 的结果。作者对于这一点并没有详细证明,只是放上了实验。
- 加权的操作有效的原因 看起来加权的方式只是运用了知识图谱这个先验知识,根据距离得到加权结果。这个效果和直接加权(也就是直接使用attention)的结果相比如何呢?
- Finetune过程 作者使用的finetune过程比较繁琐,而且其实不够直观,有没有 end-to-end 的训练方法呢?单单就预测参数这件事应该是有的,但不能使用现有的loss函数了(因为作者将 pre-train 的 weight 作为了 gt,感觉这也是无奈之举)
- 学习预测参数过程的设计 现在很多 meta 方法都能设计出直接预测参数的端到端监督,可以想象作者这个方法是依赖于 pre-train 效果的,再怎么好也不可能超越 pre-train,而且不排除结果收到 pre-train 影响的可能性(似乎没法证明最后一层的 pre-train 参数就是对当前任务最有效的)