写点什么

从 3/4 层拓展到 56 层,如何训练超级深层的图卷积神经网络?

2019 年 10 月 17 日

从3/4层拓展到56层,如何训练超级深层的图卷积神经网络?

本文来自“深度推荐系统”专栏,这个系列将介绍在深度学习的强力驱动下,给推荐系统工业界所带来的最前沿的变化。本文主要介绍一篇 ICCV 2019 Oral 上的论文[1],在 CNN 结构的启发下成功将 GCN 的可训练深度从 3/4 层拓展到了 56 层,大幅度提高了图卷积网络的性能,并开源了源代码。


摘要

卷积神经网络(CNN)在各种领域取得了令人瞩目的成果。他们的成功得益于能够训练非常深的 CNN 模型的巨大推动力。尽管取得了积极的成果,但 CNN 未能正确解决非欧几里德数据的问题。


为了克服这一挑战,利用图卷积网络(GCN)构建图来表示非欧几里德数据,并借用 CNN 的相关概念并应用它们来训练这些模型。GCN 显示出不错的结果,但由于梯度消失问题,它们仅限于非常浅的模型。因此,大多数最新型的 GCN 算法都不会超过 3 或 4 层。


作者提出了成功训练非常深层的 GCN 的新方法。他们借用 CNN 的概念,主要是 residual / dense connections(残差、密集连接) 和 dilated convolutions(膨胀卷积、扩张卷积、空洞卷积) ,使它们能够适应 GCN 架构。


  • residual / dense connections:解决由网络加深导致的梯度消失问题

  • dilated convolutions:解决由于 pooling 而导致的空间信息丢失,把卷积核膨胀了,增大了感受野,但没有增加参数数量


作者通过大量实验,展示了这些深层 GCN 框架的积极的效果。最后,使用这些新概念构建一个非常深的 56 层的 GCN,并展示它如何在点云语义分割任务中显著地提升了效果(相当于最先进的 3.7%mIoU|均交并比)。


背景介绍

GCN 网络在近几年发展迅猛。目前用于预测社交网络中的个体关系、提高推荐引擎的预测、有效分割大规模点云等领域。CNN 的成功的一个关键因素是能够设计和训练非常深层的网络模型。但是,现在还不清楚如何恰当地设计非常深层的 GCN 结构。


有一些研究工作研究了深度 GCN 的限制因素,堆叠多层图卷积会导致常见的梯度消失的问题。这意味着通过这些网络的反向传播会导致过度平滑(over-smoothing),最终导致顶点的特征收敛到相同的值。由于这些限制,大多数最先进的 GCN 不超过 4 层。


梯度消失在 CNNs 中并不是一个陌生的现象。它们也对此类网络的深度增长提出了限制。


  • ResNet 在追求非常深的 CNN 方面向前迈出了一大步,因为它引入了输入层和输出层之间的残差连接(residual connection。这些连接大大减轻了消失梯度问题。今天,ResNet 可以达到 152 层及以上。

  • DenseNet 提供了一个扩展,引入了 across layers。更多的层可能意味着由于 pooling 而导致更多的空间信息丢失。这一问题也通过 Dilated Convolutions(扩张/膨胀卷积)来解决。


这些关键概念的引入对 CNN 的发展产生了实质性的影响,相信如果能很好地适应 GCN,它们也会有类似的效果。


方法论

Residual Learning for GCNs


在最初的图形学习框架中,底层映射 H(以图形为输入并输出一个新的图形表示)是需要学习的。受 ResNet 启发,作者提出了一个图的残差学习框架,通过拟合另一个残差映射 F 来学习所需的底层映射 H 。在



通过残差映射 F 变换了后,进行逐点加法得到



。残差映射 F 把一个图作为输入并为下一层输出一个残差图的表示



。在实验中,作者将这个残差模型称为 ResGCN



Dense Connections in GCNs


DenseNet 中提出了一种更有效的方法,通过密集的连接来改进信息流并重用层之间的特征。在 DenseNet 的启发下,文中采用了类似的思想到 GCN 中,以利用来自不同 GCN 层的信息流。也就是说,



包含了来自



以及之前的所有 GCN 层的转换。在实验中,作者称之为 DenseGCN


Dilated Aggregation in GCNs


为了减轻由池化聚集操作造成的空间信息损失,扩展卷积(dilated convolutions)被提出作为一种对连续池化层的替代选择。为 dilation 扩大感受野的同时没有失去分辨率。作者认为 dilation 也有助于 GCN 的感受野。


因此,他们将扩张聚合(dilated aggregation)引入到 GCN 中。有许多可能的方法来构建一个扩张的邻居。他们在每一个 GCN 层后使用一个 Dilated k-NN 去寻找扩张邻居并构建了一个扩张图(Dilated Graph)。为了得到更好的推广,作者在实践中还使用了随机扩张(stochastic dilation)。


实验

论文中提出了 ResGCN DenseGCN 来处理 GCN 的梯度消失问题。为了获得一个大的感受野,他们还定义了一个扩张的 GCN 图卷积(dilated graph convolution)。为了验证作者的框架,他们对大规模点云分割任务进行了大量的实验,并证明他们的方法显著提高了性能和效果。


作者设计了一个包含上述所有成分的深度 GCN 来研究它们的实用性。他们选择三维点云的语义分割作为一个应用,并在 Stanford Large-Scale 3D Indoor Spaces Dataset (S3DIS,斯坦福大规模三维室内空间数据集)上显示了结果,该数据集包含来自三个不同建筑的六个区域的三维点云。这个数据集在 6000 平方米的区域内总共包含 695878620 个点,并用 13 个语义类进行注释。


网络结构

如下图所示,实验中的所有网络结构都有三个块(a GCN backbone block, a fusion block and an MLP prediction block)。GCN backbone block 是实验中唯一不同的部分。例如,PlainGCN 和 ResGCN 之间的唯一区别是,作者向 ResGCN 中的所有 GCN 层添加了 residual skip connections。PlainGCN 和 ResGCN 具有相同数量的参数。同样,DenseGCN 是通过在 PlainGCN 中添加稠密的图连接和 dynamic dilated k-NN 来构建的。


而 fusion block 和 MLP prediction block 保持一致,以便所有架构进行比较。fusion block 用于融合全局和多尺度局部特征。它将从每个 GCN 层的 GCN backbone block 中提取的顶点特征作为输入,并连接这些特征,然后将它们通过 1×1 卷积层和最大池化层。最大池化层将整个图的顶点特征聚合为全局特征向量。然后重复全局特征向量,并将其与所有先前 GCN 层的所有顶点特征连接起来,以融合全局和局部信息。


MLP prediction block 以融合特征作为输入,应用三个 MLP 层对各点进行分类预测。在实践中,MLP 层实现为 1×1 卷积层。



实验结果

作者将重点放在残差图连接(residual graph connections)上进行分析,因为 ResGCN-28 更易于训练,速度更快。该网络包含了方法论章节中提出的想法,作者将此网络(ResGCN-28)与下表中的几个最新 baseline 进行了比较。实验结果表明:ResGCN-28 比最先进的高出近 4%,而且,文中的网络在 13 个类中有 9 个类超过了所有 baseline,显示的指标是总体精度(OA)和平均 IoU(MIoU)。



小结

作者研究了如何将已证实的有用概念(residual connections, dense connections 和 dilated convolutions)从 CNN 引入 GCN,并回答了以下问题:如何使 GCN 更深?


大量实验表明,在 GCN 中加入 skip connections,可以减轻训练难度,这是阻碍 GCN 进一步发展的主要问题。此外,dilated graph convolutions 有助于在不损失分辨率的情况下获得更大的感受野。即使只有少量的近邻,深度 GCN 也能在点云分割上获得较高的性能。尽管 ResGCN-56 只使用 8 个最近的邻居,而 ResGCN-28 使用 16 个邻居,但它在这项任务中的表现非常出色。


实验表明,能够在 80 个 epochs 内训练 151 层的 GCN;网络融合得很好,取得了与 ResGCN-28 和 ResGCN-56 相似的结果,但只有 3 个最近的邻居。由于计算上的限制,无法详细研究如此深入的体系结构,并将其留给将来的工作。


最后附上论文一作李国豪在知乎上的回答[2]:


目前常见的图卷积神经网络一般都是 3、4 层,我们关注的问题是图卷积神经网络 GCN/GNN 是否也能和一般的卷积神经网络 CNN 一样加深到 50+层而不会有 Vanishing Gradient 问题,我们提出了 ResGCNs,DenseGCNs 和 Dilated GCN,MRGCN 等结构,甚至能训练收敛 152 层 GCN,并在点云分割任务上取得了比较好的效果。


以及论文开源代码:


TensorFlow:https://github.com/lightaime/deep_gcns


PyTorch:https://github.com/lightaime/deep_gcns_torch


参考

1. Deep GCNs: Can GCNs Go as Deep as CNNs?


2. 论文原作者知乎楼层:https://www.zhihu.com/question/336194144/answer/761770679


本文授权转载自知乎专栏“深度推荐系统”。原文链接:https://zhuanlan.zhihu.com/p/86352650


2019 年 10 月 17 日 07:081084

评论

发布
暂无评论
发现更多内容

JAVA小抄-000-初始

NoNoGirl

Java

内存对齐

程序喵大人

c c++ C#

C++线程池的实现

程序喵大人

c++ C# 线程池

《TCP/IP详解》概述

网瘾少年SEC

TCP 网络协议 IP

当我们谈到ThreadLocal的时候,我们在谈什么?

Jason

Java 多线程 ThreadLocal

关于GDB你需要知道的技巧

程序喵大人

c c++ C#

瞎琢磨先生の常用的 linux 命令

瞎琢磨先生

Linux Shell

习惯与惯性

伯薇

个人成长 习惯 习惯养成 提升能力

如何利用数据异构实现多级缓存或者数据迁移

松花皮蛋me

缓存 分布式 分库分表

翻译和产品本地化的区别是什么?

葛仲君

翻译 本地化 全球化 产品开发

重新认识Go语言中的slice

麻瓜镇

golang

DDD 实践手册(4. Aggregate — 聚合)

Joshua

设计模式 领域驱动设计 架构模式

Service Worker in Action

xgqfrms

Service Worker Web Worker

准备重读测试驱动开发

escray

学习 CSD 认证实战营

婚姻就是合伙开公司,各自做好自己的工作很重要

鼎玉谷

管理 婚姻 公司 付出 人情

笔记:《如何系统思考》之如何做到系统思考

wiflish

思维方式

Clickhouse 性能测试

久吾尔岂

C++定时器的实现

程序喵大人

c c++ C#

对你来说,阅读是另一种生活的方式吗?

叶小鍵

金融「中台」十宗罪

fino星君

中台 企业中台 业务中台

写作的意义到底是什么

七镜花园-董一凡

写作

开始每周写作计划

M1racle

各大公司面试题分类整理

是小毛吖

后端 面试题

瞎琢磨先生の好物推荐(软件/网站)

瞎琢磨先生

如何对Code Review的评论进行分级

宝玉

代码审查 Code Review

面试指南 | 终于要跟大家见面了,我有点紧张。

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

centos7 maven私服自动启动

kcnf

浅谈SpringCloud之服务注册中心Eureka

北漂码农有话说

Redis学习笔记(基础命令)

编程随想曲

redis

读懂才会用 : Redis的多线程

小眼睛聊技术

Java redis 学习 程序员 编程语言 后端

机会是留给不停寻找他们的人,而不是原地等待的人

非著名程序员

程序员 提升认知 机会 行动派

打造 VUCA 时代的 10 倍速 IT 团队

打造 VUCA 时代的 10 倍速 IT 团队

从3/4层拓展到56层,如何训练超级深层的图卷积神经网络?-InfoQ