摘要:表示学习(Representation Learning)是人工智能领域一直在探讨的话题,也是走向强人工智能的路上必需要解决的一道难题。目前为止,大多数表示学习方法停留在了欧式空间(Euclidean Space),但事实上除了简单的欧式空间,还存在不少其余的非欧式空间能够用来构建AI模型,而且咱们也发现了近两年愈来愈多的学者也开始在这个领域作出了一些有意思的工做。在本文中,咱们通俗易懂地讲解了欧式空间与其余非欧式空间好比双曲空间(Hyperbolic Space)的区别,以及使用这类空间来建模的背后的动机。阅读本文不须要双曲空间相关知识。html
1. 什么是好的表示(Good Representation)?git
表示学习(Representation Learning)是当今机器学习领域常常被讨论的话题,尤为深度学习的崛起,让不少学者加入到了表示学习的研究当中。那什么是表示学习? 通俗易懂的解释就是用数字(向量、矩阵...)来表达现实世界中的物体(object),并且这种表达方式有利于后续的分类或者其余决策问题。跟表示学习有紧密关联的是特征工程(feature engineering),但工业界的特征工程更多的是利用人为的经验去设计一套适合某个特定领域特征的过程,整个时间成本很高,并且一个领域的特征一般很难去解决其余相似的问题。相反,在表示学习中,咱们但愿经过算法自动从给定的数据中学出合理的特征或者表示。github
好比在下面这幅图中,给定一个输入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能够用来控制是否带眼镜,以此类推。ide
那这样的结果是,假设咱们知道哪部分表示针对的是图片中的人物,则只须要在这部分表示中添加分类算法则能够达到分类人物的目的。其实,这种思惟方式跟人类去看世界是相似的,人类是有能力从复杂的信息中把每个独立的信号抽取出来。好比一个美食爱好者,每次去新的城市可能只会关注当地的美食,而不是其余不须要关注的信息。 函数
另外,具备相似层次结构(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