模块化深度学习网络

作者:Badih Ghazi、Joshua R. Wang
编译:泛福轩

经典机器学习(ML)都在关注如何利用可获得的数据来给出更精确的预测。 然而最近,研究者们开始考虑其它一些重要的东西,比如如何将算法设计得 小巧 高效 和具有 鲁棒性

匹配这一目标的一个自然的研究课题就是,关于一个高效存储信息的神经网络的顶层系统的设计——换句话说,是一个机制,用于获取复杂深度网络如何处理输入的简洁概括(抽象)。

抽象是一个具有丰富内容的研究领域,这可以追溯到Alon,Matias和Szegedy等的基础性工作,他们使神经网络能够从输入中高效提炼信息。

举个例子: 想象进入一个房间并大致观察房间内的物体。

现代机器学习在回答短期问题上会表现很出色,例如: 房间里是否有一只猫? 那只猫有多大?

现在,假如我们在一年的时间范围里,每天来这个房间一次,那么我们可以根据回忆来回答: 房间里有猫的情况是否频繁? 通常是在早上还是晚上房间里有猫?

因此,我们能否设计一个即便我们不知道时长多少,仍然能够回答如上基于记忆的问题的系统呢?

在今年 ICML 2019(第36届机器学习国际会议) 上出现的一篇文章 Recursive Sketches for Modular Deep Learning”(《模块化深度学习的递归抽象》) 中,谷歌的研究人员对机器学习模型如何理解输入信息进行了简要总结的探索尝试。

他们在一个已经训练好的机器学习模型中加入它计算过程的简要信息,利用它们做到了高效地回答基于记忆的问题——例如,图与图的相似与统计问题——尽管内存的使用率远小于把整个原始计算过程存储下来。

AI科技评论编译如下:

    基本抽象算法

一般来说,抽象算法把一个输入矢量 输出为一个行为与 相似的抽象矢量,但是维度小很多使得存储代价低得多。 事实上存储代价的大幅减小使得概括地保存网络信息成为可能,也是能够高效回答记忆相关问题的关键。

在最简单的情况中,x的一个线性抽象由矩阵与矢量的乘积给出Ax。 这种方法衍生出各种针对大规模数据集的 高效算法 ,例如基本统计量的估计(像直方图、 分位数 四分位间距 ), 高频元素 的寻找,以及不同元素的数目的估计(称为 支持规模 和与 范数 熵估计 相关的任务。

抽象化矢量的一个简单方法是乘以一个宽矩阵A产生一个低维矢量y

这种简单方法在 线性回归 这样相对简单的情形下运行地很好。 因为在每个维度有相同的方差这样的一般假设下,权重的大小直接就能反映出数据的哪些维度是重要的。

然而,现在很多机器学习模型实际上是 深度神经网络 和基于高维嵌入( Word2Vec Image Embedding Glove DeepWalk BERT )的情况,这使得抽象化模型输入变得困难起来。

不过幸运的是,这些复杂网络中的一大部分是模块化网络,允许我们针对每个模块进行抽象化处理从而能够不去管整个网络的复杂性。

    神经网络模块化

一个 模块化深度网络 由几部分独立的神经网络(模块)组成。 这些模块的输入(输出)来自(作为)其它模块的输出(输入),且为模块间交流的唯一方式。

在这个概念的启发下,已经出现了多个实践系统,包括 Neural Modular Networks Capsule Neural Networks PathNet 也可以把其它正则系统分解为模块网络的组合并应用我们的方法。

举个例子,按传统方式理解的  CNNs  就具有模块化的行为方式。 它们会在较低层级侦测基本的概念和属性并在较高层级侦测更复杂的对象。 在这种观点下, convolution kernels 就对应模块。 下图生动地描写了一个模块化网络。

这是一个处理图像的模块化网络的示意图。数据从图像的底部通过蓝色方块表示的模块流向顶部。注意到较低层的模块对应基础的对象,如图中的边,而上面的层对应更复杂的对象,像人或猫。同时也注意到这个想象的模块网络中,脸部模块的输出足够一般化使其同时适用于人和猫两个模块。

    抽象化条件

为了对我们的方法进行优化,我们要求对一个网络的抽象化需要满足几个性质:

  • 相似性: 相近的网络操作的抽象化也应该保持相近,不相关的操作的抽象化应明显不同

  • 属性复现性: 图中任意节点的激活都能通过顶层的抽象中实现。

  • 统计性: 如果有多个相似的对象,需要能够重现关于它们的一些统计结果。 例如,如果有一幅图中有多只猫,我们可以数出具体有几只。 值得注意的是我们不需要提前想好这个问题。

  • 可擦除性: 弱化顶层的抽象仍然能够保持上面提到的性质,只是会连续地增加误差。

  • 网络复现性: 获得足够多的(输入,抽象)对后,网络的连接结构和抽象化函数都能粗略地重现。

这是一个体现相似性的二维示意图。每个矢量代表一个抽象化,有关联的抽象更可能聚集在一起。

    抽象化机制

我们提出的抽象化机制可以应用到预训练的模块化网络上。 它生成了一个单一的顶层抽象,总结了这个网络的操作信息,同时满足上面提到的所有性质。 为了理解它如何做到这一点,首先考虑一个一层网络会给我们一些帮助。

此时,我们确保针对某个节点的所有预训练得到的信息都被“打包”进了两个分离的子空间中,一个代表节点自身另一个代表所属的模块网络。 通过合合适的投影操作,第一个子空间能复现节点的属性,第二个子空间加快对概括性统计量的快速估计。 两个子空间都能帮助加强之前提到的相似性。 我们展示了所有这些性质都能得到如果所有涉及到的子空间都是被独立且随机的选择的。

当然,当遇到超过一层的网络时,为了得到可拓展性需要额外的考量——这就引导到了本文提出的递归抽象机制。 因为递归的关系,这些抽象能够被“展开“到识别出每个子组件,刻画复杂的网络结构。 最终,我们用定制的 dictionary learning(字典学习) 算法证明了组成抽象机制的随机子空间和网络结构能从充分多的(输入,抽象)对的数据中得到恢复。

  未来方向

简要的概括网络是如何运行的这个问题看上去与 模型可解释性 非常相关。 研究来自于抽象化的想法是否能被应用到这个领域会是一件很有意思的事情。 我们获得抽象信息也可被重新组织形成一个 知识图谱 ,允许模式的识别和快速检索。

更进一步,我们的抽象化机制允许无缝添加新的模块——探索这一特性能否应用到 architecture search(体系结构搜索) 和不断发展的网络拓扑会非常有趣。

最后,我们的抽象化信息可以被视为一种方法,用于组织记忆中的信息,如共享同一个模块或属性的图片也将共享对应抽象化后的同一个子成分。 不夸张地说,这和人类使用经验知识来识别物体和应对未知情形的方式非常相似。

via https://ai.googleblog.com/2019/09/recursive-sketches-for-modular-deep.html

更多内容

点击  阅读原文  加入  深度强化学习小组