欧式空间到双曲空间

摘要:表示学习(Representation Learning)是人工智能领域一直在探讨的话题,也是走向强人工智能的路上必须要解决的一道难题。目前为止,大多数表示学习方法停留在了欧式空间(Euclidean Space),但事实上除了简单的欧式空间,还存在很多其他的非欧式空间可以用来构建AI模型,并且我们也发现了近两年越来越多的学者也开始在这个领域做出了一些有意思的工作。在本文中,我们通俗易懂地讲解了欧式空间与其他非欧式空间比如双曲空间(Hyperbolic Space)的区别,以及使用这类空间来建模的背后的动机。阅读本文不需要双曲空间相关知识。

 

 

1. 什么是好的表示(Good Representation)?

 

表示学习(Representation Learning)是当今机器学习领域经常被讨论的话题,尤其深度学习的崛起,让很多学者加入到了表示学习的研究当中。那什么是表示学习? 通俗易懂的解释就是用数字(向量、矩阵...)来表达现实世界中的物体(object),而且这种表达方式有利于后续的分类或者其他决策问题。跟表示学习有紧密关联的是特征工程(feature engineering),但工业界的特征工程更多的是利用人为的经验去设计一套适合某个特定领域特征的过程,整个时间成本很高,而且一个领域的特征通常很难去解决其他类似的问题。相反,在表示学习中,我们希望通过算法自动从给定的数据中学出合理的特征或者表示。

 

比如在下面这幅图中,给定一个输入input, 我们希望通过一层层的模型参数来学出一个表示,并且这个表示可以很好地支持上层应用 A,B,C。 

 

   图片来自于[1] 

 

在图像识别领域,CNN已经成为最主流的算法,通过一层层的卷积层,Pooling层来对原始的图片数据(看成是像素)做非线性转换,整个过程其实可以看做是表示学习的过程,我们希望通过这样一层层的转换,能够学出代表每个图像的“最好的表达方法”,同时这种表达有利于后续的分类或者其他的任务。类似的,在自然语言处理领域,词嵌入(word embedding)必然是近几年最重要的成果之一,通俗来讲就是用一个低维的向量来表达每一个单词,也称作分布式表示法(distributed representation)[2]。在单词的表示学习过程中我们经常会用到 Skip-Gram[4], CBOW[3], Glove[5]等算法,找到能够用来表达每一个单词的最合理的向量。最后,在语音识别领域,端到端的模型也逐渐成为主流,通过原始语音信号的表示学习,是否能够学习出比传统语音特征(比如MFCCs),更加有效的表示也是很多人研究的话题。

 

说到这里,给定一个问题,我们可以尝试着用各类算法来去学习不同的表示方法,那这里的关键问题是我们怎么去判断哪些表示是好的,哪些表示是不好的? 比如我们设计了一套CNN架构,怎么判断从图片里学出来的表示(representation)是好是坏的? 最简单的评估标准,也是很多人目前使用的是,针对于一个任务(task)的准确率-这种“终极”指标,所以很多人会误认为准确率高的就是好的表示,或者根本不去关心除了准确率之外的事情。包括在学术界,这种缺乏本质思考的研究也导致了近几年低质量论文的“泛滥”,形成了比拼准确率的“竞赛”,但在本质层面上并没有给科学的发展带来了较大的影响。

 

事实上,准确率仅仅是其中一个方面,其实还有很多其他的因素需要考虑进去。Bengio等学者在[1] 提出了好的表示所需要具备的一些特性。首先, 一个好的表示可以学出Disentangle Factors,而且这些factor可以泛化(generalize)到其他类似的任务中。比如给定一个有人物的图片,我们可以想象每一张图片由 “图片中的人物”,“人物的角度”, “表情”, “有没有带眼镜” 这些不同因素来组成,而且可以看作这些因素是具有相互独立性的。

 

比如在下面的图片中,有些图片主要用来描述角度、有些主要用来描述发型和表情。举个简单的例子,假设我们用神经网络对图片进行了学习,而且最后用一个四维的向量来表达这幅图片。那这时候,我们希望第一个hidden unit可用来控制角度、第二个unit可以用来控制是否带眼镜,以此类推。

 


那这样的结果是,假设我们知道哪部分表示针对的是图片中的人物,则只需要在这部分表示中添加分类算法则可以达到分类人物的目的。其实,这种思维方式跟人类去看世界是类似的,人类是有能力从复杂的信息中把每一个独立的信号抽取出来。比如一个美食爱好者,每次去新的城市可能只会关注当地的美食,而不是其他不需要关注的信息。 

 

另外,具有类似层次结构(hierachical representation)的表示也是我们重要的关注点。在现实世界的很多场景下,物体是有层次结构的。比如对于上面提到的单词的表示,“苹果”,“葡萄”和“水果”并不是平行的关系,而是具有“属于”这种关系。类似的,“北京”,“上海” 均属于 “城市”。那我们的问题是,通过词嵌入算法(word embedding)学出来的表示是否能够复现这种层次关系? 我们都知道类似于Skip-gram这些算法更多的是依赖单词之间语义的相似度,但不一定是这些单词之间的层次关系。 另外,很多网络也是具有层次结构的,比如网络中的意见领袖通常位于层次结构中的最顶层。那对于网络中的节点来说,什么样的表示能够还原原始数据中应有的层次结构呢?

 

除了这两个特性,Bengio在[1]中也提到了其他需要考虑的特性,感兴趣的读者可以查阅相关文档。到此为止,都是一些背景知识,只是用来说明为什么有时候需要考虑双曲空间的一个动机(motivation)。

 

2. 目前绝大多数表示学习方法论依赖于欧式空间

 

欧式空间是大家最熟悉不过的概念,从小学开始学的数学里面基本都是在跟欧式空间打交道。比如我们很清楚“给定两个点,只能找到一条直线通过这两个点”, “给定一个点和一条直线,我们只能找到一个平行的直线”。而且我们知道怎么做两个向量的加法、减法,甚至向量的线性变换。对于欧式空间,一个最简单的理解就是它是“平”的,比如二维空间就是一个平面。相反,那是否存在一些空间是“弯”的?这是接下来我们讨论的重点。 

 

在机器学习领域,我们目前所讨论的绝大部分模型都是依赖于欧式空间中的运算。从我们所熟悉的线性回归、逻辑回归到深度学习中的CNN, RNN, LSTM, Word2Vec 这些都依赖于欧式空间。实际上,除了欧式空间这种“平”的空间,在有些问题上我们也会去面对其他“弯”的空间,比如这篇文章要讨论的双曲空间(hyperbolic space)。举个例子,假设给定了两个城市的坐标,我们都知道在一个2D地图上计算出这两个城市之间的距离,其实就是欧式距离。但如果我们考虑“地球是圆的”,那计算两个城市之间的距离不再是直线距离了,而是类似于一个曲线的距离。所以对这类问题,欧式距离公式不再直接适合。类似的,宇宙空间也是弯曲的,所以也需要依赖于非欧式空间的性质。

 

本文章主要讨论非欧式空间家族中的一个重要空间,叫做双曲空间(hyperbolic space),以及它在常见机器学习建模中的应用。 双曲空间可以看做是一个空间,但它的曲率是负的(constant negative curvature),也是常曲率黎曼空间(Riemannian space of constant curvature)的特例(当然,欧式空间也属于常曲率黎曼空间,但曲率是0)。本文主要围绕2017年NIPS一篇Spotlight论文“Poincaré Embeddings for Learning Hierarchical Representations”来展开讨论。据我的了解,这应该算是第一篇在计算机领域出现的聚焦于应用场景的、讨论双曲空间的文章,预测会带来一定的影响力。美国东北大学的Dmitri等学者也尝试过把双曲空间的理论应用到复杂网络分析上,但局限于二维空间[6]。

 

具体了解细节之前,我们先来看一个Demo,来理解双曲空间具体做了什么样的工作。在这里我们使用了WordNet数据集,它包含了很多概念以及概念之间的层次关系,如下图所示。

 

 

   WordNet数据集[7]

 

下面的Demo展示的是当我们把双曲空间模型应用到此类数据集时表示变化的过程。可以看到,一开始每个点均匀分散在整个空间里,但随着学习过程的进行,这些点的分布在空间里明显呈现出一种类似于树状结构,也就是层次结构。

 

  
Demo 来自于 [8]

 

通过一段时间的学习过程,最终可以生成类似如下图的表示。这是二维空间中的可视化结果。我们可以看到一个有趣的现象,比如WordNet里面“Entity”这种位于偏向于Root的概念在双曲空间里位于离中心比较近的地方。相反,很细节性的概念比如“tiger”就会位于空间中边缘的地方,而且具有类似含义的概念也位于相邻的位置上。                                        

 

    图片来自于 [9]

 

所以,从图中我们可以看出学出来的表示具有一定的层次结构(hierarhical structure)。这就是跟欧式空间的很大的区别,在欧式空间里学出来的表示,只包含相似的信息,但不具备类似的层次结构。

 

 

3. 双曲空间的特点

 

双曲空间具有几个比较明显的特点,而且这些特点是欧式空间不具备的。第一个特点是,它具有表达层次结构的能力(如上面我们所讨论的例子一样)。比如我们的数据本身具有一定的层次结构,它则可以在双曲空间里面复原这种层次结构(当然数据稀疏的时候是很难)。第二个重要特点是它本身具备的空间大小(capacity)跟欧式空间很不一样。在生活中,比如我们买一个1升大小的桶,则可以用来装1升的水,当然这是发生在欧式空间的例子。假设我们拥有同样大小的桶,但考虑的是双曲空间则会有什么不一样?

 

左边的图代表一个双曲空间的可视化,里面包含了很多具有同样文理的图片,每个图片形状相同,但大小不一样(至少在欧式空间里)。但是,一个有趣的现象是,在双曲空间里面,其实这些图片的大小都是一样的,而且随着它们的位置更靠近球的边缘,肉眼看到的图片大小会越来越小,但实际在空间中的大小是一样的。这说明什么现象呢? 也就说,随着往球的边缘走,空间所承载的大小会指数级增大,所以可容纳指数级多的纹理图片。这其实说明,双曲空间的capacity要远远大于欧式空间。比如我们回到一开始的例子,假设同样大小的水桶,在双曲空间里有可能可以装上几万升或者几千万升的水。当然,从数学角度这种例子不算严谨,但至少便于理解。右边的图表示的意思是:在双曲空间里,经过一个点并且跟一个给定的直线平行的直线有无数个。这是从空间特性角度来看,跟欧式空间最大的不同。


空间大小对于表示学习有什么影响呢? 在深度学习里面,我们经常会讨论隐式层(hidden layer),而且每个hidden layer都有一定数量的hidden units,比如64, 128等。一个具有64的hidden units能表示的空间大小有多大呢? 这个问题其实很重要,相当于我们需要对模型的复杂度有个提前认识。假如每一个hidden unit的取值是0或者1(像RBM),那很容易计算出来64个hidden units能表示的所有组合个数是2的64次方,也可以理解成容量或者空间大小(capacity)。类似的,如果在双曲空间考虑这个问题,多少个hidden units可以带来2的64方空间大小呢? 不严谨的答案可能是远远少于64位。所以我们的假设是:我们在双曲空间可以利用更少的参数来表达具有在欧式空间中同样容量(capacity)的模型。

 

 

4. 双曲空间的不同表示方法

 

为了在双曲空间做运算,我们需要基于一些标准化的模型来计算。有几个模型适合用来表达双曲空间比如 Beltrami-Klein  model,  the  hyperboloid  model,   and  the Poincare half-plane  model [1]。其中Pointcare ball model模型是比较适合大数据的场景,因为很多优化理论只需要通过简单的修改就可以用在Pointcare模型上。比如欧式空间里的随机梯度下降法(SGD),通过简单的修改即可以用来优化双曲空间中的优化问题。

 

 

5. 例子:利用双曲空间来学习网络的表示

 

利用这个案例来详细地阐述整个建模的过程,类似的过程可以直接应用到其他的场景。详细的推导过程可以先关注“贪心科技”公众号(本公众号),回复关键词“表示学习”来获得。

 

5.1 问题定义: 

给定一个网络,我们希望学习出每一个网络节点的表示。其实这个问题也叫做网络嵌入(network embedding)。假设网络中有N个节点,以及我们知道所有相连的边。我们用y=1表示两个边相连,y=0表示没有相连。

 

5.2 目标函数的构建:

对于每一条边(相连或者不相连),我们可以定义一个条件概率:

其中d_ij代表节点i 和 j在双曲空间中的距离,所以d_ij越小,则两个节点相连接的概率越大。r, h是模型的超参数(hyperparameter)。hi, hj 代表节点i, j在双曲空间中的向量表示(vector representation),通常需要经过调参的过程。当我们有了针对于每一条边的条件概率,我们就可以很容易写出整个目标函数:

也就是把所有的边(相连或者不相连)考虑了进去。这种目标函数也称作entropy loss, 在逻辑回归中也会经常提到。

 

这里面有几个运算需要重新定义,一个是针对于每一个节点在双曲空间的表示,另外是在这里刻画距离的d()函数。因为这些运算我们都需要在双曲空间中重新定义。

 

5.3 运算符的定义

 

首先,对于每个节点的表示来说,在pointcare模型下我们定义它必须在半径为1的圆形之内,不能超出这个范围。利用数学,我们可以定义成:

其中||x||<1表示向量x的norm要小于1. 如果在更新过程中发现norm不满足此条件,则可以通过projection方式把它映射到满足的区域里面。 其次,对于两个节点在pointcare模型下的距离是这样定义的:

其中||.||代表欧式空间中的norm。arcosh是inverse hyperbolic cosine function。我们很容易观测到,随着hi,hj的norm趋向于1, 也就是靠近圆形的边缘,arcosh里面的值会不断地变大,而且这种变化是指数级的。这也从另一个层面解释,为什么双曲空间的容量会随着靠近边缘变得越来越大。

 

到此,我们已经定义好目标函数以及所需要的运算符,接下来就是通过一些优化算法去找到目标函数的最优解(通常局部最优)。

 

5.4 找出最优解

 

利用Pointcare模型的一个重要好处是可以把欧式空间中像随机梯度下降法通过简单修改即可以拿来使用。整体的思路就是首先在欧式空间中计算梯度,然后通过一些简单的转换得到双曲空间中的梯度,从而在双曲空间中做随机梯度下降。那这里所提到的转换怎么做呢? 通过所谓的metric tensor我们很容易把计算出来的梯度转换成双曲空间所需的梯度。比如在如下图,表示一个梯度更新的过程,唯一跟常规梯度更新算法的区别在于前面多了一个项,其实就是inverse of metric tensor。

 

6.  总结

 

在本文我们只给出了非常基础的描述,目的是让读者能够直观上理解双曲空间的优势以及什么时候需要用双曲空间来建模。当然,这方面的研究目前还处于比较初级的阶段,但相信未来会有更多相关的工作会呈现出来。

 

很多人认为神经网络是用来模拟大脑的。这句话最多在描述卡通版的大脑,其实即使神经科学家也未必对大脑的机制有很清晰的了解。目前的神经网络大多运行在2D平面,但大脑本身存在三维空间里,而且神经元之间具有一定的几何特性,那会不会结合非欧式空间的神经网络更适合来模拟其内在运行机制呢?只有更多地探索才能给出正确答案。

 

 

参考:

[1] Bengio, Yoshua, Aaron Courville, and Pascal Vincent. "Representation learning: A review and new perspectives." IEEE transactions on pattern analysis and machine intelligence 35, no. 8 (2013): 1798-1828.

 

[2] Hinton, Geoffrey E., James L. McClelland, and David E. Rumelhart. Distributed representations. Pittsburgh, PA: Carnegie-Mellon University, 1984.

 

[3] Mikolov, Tomas, Kai Chen, Greg Corrado, and Jeffrey Dean. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013).

 

[4] Mikolov, Tomas, Ilya Sutskever, Kai Chen, Greg S. Corrado, and Jeff Dean. "Distributed representations of words and phrases and their compositionality." In Advances in neural information processing systems, pp. 3111-3119. 2013.

 

[5] Pennington, Jeffrey, Richard Socher, and Christopher Manning. "Glove: Global vectors for word representation." In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP), pp. 1532-1543. 2014.

 

[6] Krioukov, Dmitri, Fragkiskos Papadopoulos, Maksim Kitsak, Amin Vahdat, and Marián Boguná. "Hyperbolic geometry of complex networks." Physical Review E 82, no. 3 (2010): 036106.

 

[7] Miller, George A., Richard Beckwith, Christiane Fellbaum, Derek Gross, and Katherine J. Miller. "Introduction to WordNet: An on-line lexical database." International journal of lexicography 3, no. 4 (1990): 235-244.

 

[8] https://www.facebook.com/ceobillionairetv/posts/1599234793466757 

 

[9] https://github.com/facebookresearch/poincare-embeddings

转自:https://www.itcodemonkey.com/article/8616.html,感谢分享

posted @ 2019-06-11 21:53  白婷  阅读(5612)  评论(0编辑  收藏  举报