▐ 摘要

欧氏空间由于其直观的几何特性及简单有效的公式而被应用于几乎所有的深度学习模型。然而,近年来的研究发现,复杂结构数据(如社交网络、电商数据等)的建模精度往往会受到“平坦”的欧氏空间的制约,“弯曲”的曲率空间(如双曲空间和球形空间)由于具备更强的表征能力成为一种更佳的选择。

本文介绍的曲率学习框架(Curvature Learning Framework,以下简称 CurvLearn) 由阿里妈妈技术团队自研,旨在实现曲率空间下任意深度模型的训练与优化。基于 Tensorflow,CurvLearn 提供了丰富的流形实现,封装了完整的向量算子和高层 API,具备大规模分布式训练能力。目前该框架已在阿里广告关键业务场景落地,并取得了比欧氏空间更好的效果。

本文将对 CurvLearn 的相关背景、适用场景及实现逻辑做简要介绍,希望给大家带来一点启发与帮助,欢迎试用与交流讨论!

CurvLearn 开源地址:

https://github.com/alibaba/Curvature-Learning-Framework

▐ 框架背景

什么是曲率空间

曲率空间,也即微分流形,是三维欧氏空间中曲线和曲面概念的推广,呈现为局部平坦而整体“弯曲”的空间。

衡量空间“弯曲”程度的量即是曲率,曲率约接近于 ,空间越平坦,如欧氏空间曲率处处为 ;反之曲率绝对数值越大,空间畸变程度越高。根据空间各处曲率的不同,可以将曲率空间划分为常曲率空间及混合曲率空间两种。

常曲率空间指空间中各点截面曲率相等,即空间各处“弯曲”程度相同。根据曲率数值正负划分为双曲空间、欧氏空间及球面空间三种,各空间几何性质如下图所示。

图1:常曲率空间

混合曲率空间指空间各处曲率不同,整体呈现多样化的几何特性。实际上绝大部分常见的非欧空间都呈现出混合曲率特性,如下图展示了一个常见例子:环面空间。

图2:混合曲率空间示例:环面

曲率空间的特性

实际上不同空间暗涵了对数据分布的不同假设,一个常见例子是地图,在欧氏空间中计算真实城市距离会带来误差。因此不考虑真实数据分布而不假思索使用欧氏空间往往会带来模型精度上的损失。为此本文分别对不同空间适合的数据分布做出简要分析。

欧氏空间

  • 欧氏空间各处均匀且平坦,具备各向同性及平移不变性,因此适合建模网格数据如图像等[1]。

图3:网格数据

双曲空间

  • 双曲空间具备指数级体积容量 ,同存储量下样本间距更大,因此适合建模超大规模数据[2]。

  • 双曲空间距离度规等价于幂律分布,互相导出,作为对数据分布的先验认知适合建模无尺度网络[3]。

  • 双曲空间无损嵌入树结构,而欧氏空间无法避免表征损失,因此适合建模层次结构[4]。

图4:大规模数据/无尺度网络/层次结构

球面空间

  • 球面空间距离度规等价于角度度规,具备旋转不变性,因此适合建模环状数据[4]。

图5:环状数据

混合曲率空间

  • 混合曲率空间整体分布不均,各处呈现出不同的几何特性,因此适合建模多种结构特性并存的数据,如树环等[5]。

图6:复杂结构数据示例:树环

曲率空间的形式化定义

曲率空间 由流形 和度规 严格定义。 指定了空间可行域,度规 定义了各点处的坐标尺度,用来导出各点曲率 及测地线距离,欧氏空间下 即为单位矩阵 。对于流形上的每个点 ,切空间 为 点附近的一阶近似,属于欧氏空间。通过指数映射 可以将切空间上的点 映射至流形上:;与之可逆通过对数映射 可以将流形的点 映射至切空间上:。

常曲率空间拥有多种模型定义,如双曲空间包含洛伦兹模型(Lorentz Model)、克莱因模型(Klein Model)等。然而部分模型在曲率 时并不会收敛至欧氏空间,造成优化困难。幸运的是空间的球极平面投影( Stereographic Projection)模型[4]可以避免这个问题,即庞加莱球模型(Poincare ́ball)以及投影球面模型(Projected Sphere)。这里给出三种空间模型的形式化定义:

  • 双曲空间以 表示,曲率 ,定义为,黎曼度量为 ;

  • 欧氏空间以 表示,曲率 ,定义为 ,黎曼度规为 ;

  • 球形空间以 表示,曲率 ,定义为 ,黎曼度量为 。

其中 为向量维度, 为单位矩阵,。

注意到上述三种模型的形式化定义存在相似之处,为了使得空间学习更为灵活,一种统一的非欧空间表示为 ,它是双曲空间、欧氏空间以及球形空间的一体化实现,分别对应 , 以及 这三种情况。

混合曲率空间具备复杂多变的空间曲率,模型自由度极高。其中积空间(Product Space)具备可分解及独立优化的特性,通常作为混合曲率空间的典型模型[5]。积空间定义为 ,其中 代表笛卡尔积, 代表第 个空间的维度, 为第 个空间的曲率。

▐ 曲率学习框架

框架概览

曲率学习是一个开源的基于 Tensorflow 的非欧深度学习框架。它实现了多种非欧流形、非欧算子和黎曼优化器,基于与 Tensorflow 相似的底层接口,用户可以便捷的将模型从欧氏空间迁移至非欧空间。曲率学习整体架构如下图所示,自下而上分别包含流形(Manifolds)、算子(Operations)、模型(Models)、优化器(Optimizers)及应用(Applications)五大模块:

图7:曲率学习架构

Manifolds

非欧空间中向量操作需要满足流形约束,与欧氏空间不同,它们通常在陀螺矢量空间(Gyrovector Space)中进行定义[6],其表达形式与流形特性相关联。框架实现了如下五大类基本流形:

  • Euclidean:欧几里得空间,曲率恒零。

  • Stereographic:使用球极平面投影的常曲率空间,曲率可以是任意实数值。

  • PoincareBall:双曲几何中的庞加莱球模型,曲率恒负。

  • ProjectedSphere:球面几何中的球极平面投影模型,曲率恒正。

  • Product:多种流形笛卡尔积构成的积流形,曲率具备各向异性。

以球极平面投影模型 作为示例,框架实现了如下向量操作:

  • 指数映射:将 的切空间向量 投影到对应流形上。

  • 对数映射:将对应流形向量 投影到 的切空间上。

  • 向量加法:流形向量 与 相加。

  • 向量乘法:流形向量 扩充 倍。

  • 平行移动:将 的切空间向量 移到 的切空间中发生的尺度变化。

Connect Host Timeout #608

  • 测地线距离:流形上 和 的最短距离。

  • Trigonometric函数

Operations

模型中的向量操作远不止上述定义的几种。实际上诸如向量平均,向量拼接等不是良定义的,需要自行推导其形式,在满足合适的向量变换逻辑上,使得该操作尽可能高效易优化。通常而言,绝大部分非欧算子都遵循转移到切空间的运算流程:

  • 向量 通过对数映射投影至切空间

  • 切空间向量 通过欧氏算子进行变换

  • 通过指数映射投影回非欧流形

由此框架导出了其余算子,如向量拼接,激活函数等。值得注意的是向量平均我们使用了爱因斯坦中值(Einstein Midpoint),因为相比于上述切空间变换,该方法精度能提高约200%[7]。

Models

基于非欧算子的堆叠组合可以自然的构建非欧模型,如非线性变换可以定义为:

另一种构建模型的方式为转移计算到切空间,即投影流形向量至切空间,在切空间中实现复杂模型变换,投影回流形。HGCN[8]实现的非欧图卷积神经网络正是一个典型的例子:

由于不同模型实现及侧重点不一致,这里不做进一步细节阐述。

Optimizers

由于底层向量定义在非欧流形上,直接优化向量需要使用黎曼优化器[9]。以 RSGD(Riemannian SGD)为例,基本思想为先计算欧氏空间下的梯度,接着投影至切空间,最后执行非欧空间下的梯度下降。其具体参数更新过程为:

其中 位于切空间,为 的黎曼梯度, 是欧氏梯度,通常有 , 是学习率。出于性能方面的考虑,目前非欧优化更多的采用间接优化非欧向量的手段,即将底层向量定义在欧氏空间中,然后投影至非欧流形上,由此使用欧氏优化器间接优化非欧模型。

Applications

近年来,非欧表征学习得到了越来越多的关注,在理论方面也得到了持续的完善,在各个领域也有相应的应用,包括推荐系统[10]、图学习[11]、自然语言处理[12]等。在阿里妈妈搜索直通车场景中,框架在图学习召回和类目预测应用上进行了落地,并取得了不错的离线在线效果。

在接下来的文章中以图学习召回为例,我们会详细描述如何使用曲率学习框架提高表征效果,欢迎持续关注。

▐ 曲率学习训练技巧

无论是在业界,还是我们自己的实践经验,都发现曲率模型训练可能存在着数值不稳定性的问题,主要包括如下两个原因:

  • 节点Embedding容易超出曲率空间定义域。例如双曲空间的定义域为一个有限半径的球体,在训练的过程中,节点的 Embedding 容易靠近空间边缘,由于数值精度问题容易导致向量操作不合法。

  • 梯度爆炸或弥散。由于曲率空间引入了复杂的计算逻辑,例如大量的 以及 函数等,位于这些函数的极值区域较难被优化。

为了解决这些问题,我们经过大量尝试总结了一些比较有效的训练优化手段:

  • 参数初始化。曲率空间训练对参数初始化比较敏感,我们发现维持任意节点初始距离为较小的常值对提高训练稳定性很有帮助。一种可行的方案是使用小方差的正态分布初始化向量,同时使用 Xavier 初始化模型参数。

  • 曲率 Embedding 正则。为了让节点 Embedding 尽量远离空间边缘等极值区域,直观的想法是通过正则项约束向量分布。作为 的扩展,正则项被定义为:

  • 学习率及梯度处理。模型分布式优化往往涉及到梯度累加的过程,使用Warm-up及梯度裁剪有助于在训练初期维持梯度数值稳定性。

▐ 曲率ANN检索工具

由于曲率空间距离不是简单的内积、Cosine 或 L2,传统的 ANN 检索工具已经不再适用,为此我们开发了支持一系列非欧空间距离的 ANN 检索工具,包括双曲距离、球形距离以及混合空间距离,为了弥补距离公式复杂度提高带来的性能损失,工程上做了一系列的优化措施,包括分布式、数据及指令并行化,使得检索性能大为提高,相较于欧氏检索性能损耗被缩小至一个可以接受的范围内。目前我们正在进行工具的完善,计划于近期在 Github 进行开源发布。

▐ 展望

曲率空间作为一个全新领域,可以视作欧氏空间的扩展,天然适合建模复杂网络,在大规模场景下具有很大的应用潜力。

曲率空间独立于模型,理论上可以推广到任意的模型结构。越来越多的学术工作着眼于探索新的非欧流形表征及特性应用,并取得了亮眼的效果。

希望我们的曲率学习框架能为非欧空间在工业场景的落地添砖加瓦,铺平道路。

CurvLearn 开源地址:

https://github.com/alibaba/Curvature-Learning-Framework

参考文献

[1] Bronstein, Michael M. et al. “Geometric Deep Learning: Going beyond Euclidean data.” IEEE Signal Processing Magazine 34 (2017): 18-42.

[2] Nickel, Maximilian and Douwe Kiela. “Poincaré Embeddings for Learning Hierarchical Representations.” NIPS (2017).

[3] Krioukov, Dmitri V. et al. “Hyperbolic Geometry of Complex Networks.” Physical review. E, Statistical, nonlinear, and soft matter physics 82 3 Pt 2 (2010): 036106.

[4] Bachmann, Gregor et al. “Constant Curvature Graph Convolutional Networks.” ICML (2020).

[5] Gu, Albert et al. “Learning Mixed-Curvature Representations in Product Spaces.” ICLR (2019).

[6] Ganea, Octavian-Eugen et al. “Hyperbolic Neural Networks.” NIPS (2018).

[7] Lou, Aaron et al. “Differentiating through the Fréchet Mean.” ICML (2020).

[8] Chami, Ines et al. “Hyperbolic Graph Convolutional Neural Networks.” NIPS (2019).

[9] Bécigneul, Gary and Octavian-Eugen Ganea. “Riemannian Adaptive Optimization Methods.” ICLR (2019).

[10] Vinh Tran, Lucas et al. “HyperML: A Boosting Metric Learning Approach in Hyperbolic Space for Recommender Systems.” WSDM (2020).

[11] Zhu, Shichao et al. “Graph Geometry Interaction Learning.” NIPS (2020).

[12] Chen, Boli et al. “Probing BERT in Hyperbolic Spaces.” ICLR (2021).

END

欢迎关注「阿里妈妈技术」

疯狂暗示↓↓↓↓↓↓↓

CurvLearn开源 | 阿里妈妈曲率学习框架详解相关推荐

  1. EFLS开源 | 阿里妈妈联邦学习解决方案详解

    ▐ 项目背景 移动互联网时代出于隐私保护和数据安全,APP 之间的开放与互联越来越少,使大量的信息孤岛逐渐形成,限制了信息技术更好地服务广大用户的能力.2016年 Google 提出了以保护终端隐私为 ...

  2. 搜索推荐项目EFLS开源 | 阿里妈妈联邦学习解决方案详解

    猜你喜欢 0.京东推荐算法精排技术实践 1.如何搭建一套个性化推荐系统? 2.从零开始搭建创业公司后台技术栈 3.[万字干货]某视频APP推荐详解 4.微博推荐算法实践与机器学习平台演进 5.腾讯PC ...

  3. 高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...

    1)如何设计如何扩展 2)什么是高并发 (1)任务:完成某个功能的一个一个目标任务,服务器程序也是不例外的. (2)CPU核心:完成具体任务的,是CPU核心 + 周围的外设(读写磁盘IO.网络IO) ...

  4. 大数据早报:百度开源移动端深度学习框架 中国联通成立大数据公司(9.26)

    数据早知道,上36dsj看早报! 来源36大数据,作者:奥兰多 『深度学习』百度开源移动端深度学习框架mobile-deep-learning 2017 年 9 月 25 日,百度在 GitHub 开 ...

  5. 清华「计图」、旷视「天元」纷纷重磅开源,国产深度学习框架迎来高光时刻...

    来源:CSDN 本文约3141字,建议阅读7分钟. 本文介绍清华开源的深度学习框架 Jittor(计图) 引起了广泛关注,支撑旷视诸多业务和战绩的深度学习框架 MegEngine(天元) 也将在近日开 ...

  6. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  7. shiro放行_Shiro框架详解 tagline

    部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...

  8. Django REST FRAMEWORK swagger(一)框架详解

    Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST  SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...

  9. java编译器源码详解_已更新至第8章 | LLVM 编译框架详解

    LLVM是什么? 我又不做编译器研究,干嘛要管它? 这是一些朋友想要对LLVM发起的提问,那么今天我们就来看看那款据说很酷炫的编译器--LLVM. LLVM是什么? LLVM是一个自由软件项目,它是一 ...

最新文章

  1. CSS布局基础之二认识Viewport
  2. 鸟哥的Linux私房菜(服务器)- 第五章、 Linux 常用网络指令
  3. 如何评审功能测试用例?
  4. P4389 付公主的背包(生成函数/多项式)
  5. 网络延长器分为哪几类?其应用领域有哪些?
  6. 前端学习(606):计算机基础
  7. Android 应用开发---6.ViewPager+Fragment的基本使用
  8. Virtio: An I/O virtualization framework for Linux
  9. freecplus框架-目录操作
  10. 小白白红队初成长(7)win权限提升
  11. 什么是javabean及其用法(转)
  12. MOOC单片机原理及应用题库大全
  13. 《网络是怎样连接的》-----户根勤,读书笔记
  14. Tomcat网站服务
  15. 计算机科学导论专业理解,浅析计算机专业_计算机科学导论_课程的现状及思考.doc...
  16. js 操作字符串,
  17. 想敲代码又怕女朋友找?那就让她去玩桌面图标贪吃蛇,再也不用担心打扰自己敲代码了
  18. USACO 2008 Jan Gold 3.Cell Phone Network 树形dp
  19. Gopher China 2019 讲师专访-腾讯/TARS开源团队核心成员陈明杰
  20. 2020-mac-东芝的移动硬盘插入到我的macbook pro系统上没反应,只是等在闪烁

热门文章

  1. CNN卷积神经网络:权值更新公式推导
  2. java中IOUtil.readLong_使用io/ioutil进行读写文件
  3. 渗透测试报告标准编写
  4. 文件查找工具everything的下载使用
  5. Linux登录界面消失解决办法
  6. 删除链表重复节点 python_python无序链表删除重复项的方法
  7. 如何修改textarea中placeholder的字体
  8. python基础有哪些内容_Python基础练习
  9. HTML与CSS基础之子元素的伪类(七)
  10. 将mysql从服务器永远变为只读_将mysql从服务器永远变为只读