Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

使用三重损失网络学习位置嵌入:让位置数据也能进行算术运算

数据科学公司 Sentiance 近日刊文介绍了新机器学习算法平台,该平台能以自监督的方式学习位置数据并从中提取见解。机器之心对该文章进行了编译介绍。

引言

我们 Sentiance 开发了一款能接收加速度计、陀螺仪和位置信息等智能手机传感器数据并从中提取出行为见解的平台。我们的人工智能平台能学习用户的模式,并能预测和解释事情发生的原因和时间,这让我们的客户能够在正确的时间以合适的方式指导他们的用户。

场地映射算法(venue mapping algorithm)是我们的平台的一个重要组件。场地映射算法的目标是根据来自智能手机位置子系统的往往不准确的位置测量数据,搞清楚你将要到达的场地。

图 1:左图:场地映射的意思是估计用户实际正在前往的临近场地;右图:人类直觉能帮助我们快速排除不太可能的场地,比如一位用户正去往海滩时不太可能去救生站。

尽管场地映射总体上是一大难题,而且也是我们未来一篇博客文章的主要内容,但基于该地区周围地理情况的人类直觉却能轻松简单地处理。如图 1 所示,假设一位用户正前往圣莫尼卡海滩。只需看一眼周围的地理情况,我们就知道该用户实际正前往求生站的概率可能相当小。

事实上,只需要看一眼这个区域的地图,人类往往就能快速排除不太可能的场地并构建一个实际情况的预先信念。这个场地位于工业区、公园、靠近海滩、市中心还是公路旁边?

为了让我们的场地映射算法具备同样的直觉意识,我们开发了一种基于深度学习的解决方案,其可训练用于编码地理空间关系和描述位置周围情况的语义相似度的模型。图 2 是这一概念的图示。


图 2:给定位置周围的区域会被栅格化(rasterized),然后被传递给一个深度神经网络。这个网络用作编码器,输出一个能获取输入位置的高层语义的嵌入。

编码器会将位置转换成分布式的表征,这类似于 Word2Vec [1] 对自然语言所做的工作。这些嵌入位于一个度量空间中,因此遵循代数规则。比如,我们可以使用词嵌入推理词的相似度和类比关系。我们甚至可以直接在嵌入空间中执行「国王-男人+女人=女王」这样的算术运算。

在接下来的几段中,我们将会讨论我们如何设计了一种解决方案,可学习将位置坐标映射到度量空间中,这让我们可以执行一些类似于词嵌入的操作,如图 3 所示。

图 3:我们提出的解决方案可直接优化度量空间,这样就能使用基本的算术运算探索该嵌入空间了。

图像瓦片生成

栅格化 GIS 数据

给定一个位置坐标和一个半径,我们可以查询我们的 GIS 数据库以获取大量地理信息。我们的 GIS 数据库是一个存储在一个 PostGis 数据库中的 OpenStreetMap 的本地副本。PostGis 是一个很方便的 PostgreSQL 扩展,增加了对空间运算符、类型和索引的支持。

比如,我们可以使用一组查询轻松检查一个定位附近是否有河流、这里离最近的火车站有多远,这个位置附近是否存在道路。此外,实际道路本身可以以折线的形式被提取出来,同时火车站建筑的外形轮廓可被提取成一个多边形对象。

但是,我们不清楚如何将这样大量的非结构化数据有效地提供给神经网络进一步处理。考虑到我们训练神经网络的目标是理解距离、包含、遮挡和相离等形状和空间关系,所以我们决定在将位置的周边情况送入编码器之前首先将其栅格化处理成固定尺寸的图像。

幸运的是,我们正好有能做到这一点的有效工具。我们将 Mapnik 及其 Python 捆绑包与一个定制版本的 OpenStreetmap-Carto 样式表组合到了一起,得到了一个快速栅格化器(rasterizer),我们可以将其用于生成图像瓦片(image tile),如图 4 所示。

  • Mapnik:https://github.com/mapnik/mapnik

  • OpenStreetmap-Carto:https://github.com/gravitystorm/openstreetmap-carto 

图 4:Mapnik 被用于将从 PostGis 取出的 GIS 数据栅格化处理成图像

我们将我们的栅格化服务进行了参数化,以便在生成图像瓦片之前轻松地通过旋转和平移地图来执行数据增强。如图 5 所示,其中的图像块展示了同一个位置,只是有不同方向角和水平及垂直偏移值。

图 5:我们的图像瓦片生成器允许在生成图像瓦片之前通过旋转和平移地图来轻松执行数据增强

从图像到张量

尽管这些栅格化得到的图像瓦片让我们的编码器可以轻松学习获取空间结构和关系,但仍有大量信息在栅格化过程中丢失。事实上,栅格化会将道路、建筑、公园轮廓、河流等所有的多边形和折线段融合到一起。因为我们的 GIS 数据库包含每个结构单独的信息,所以让神经网络编码器来学习分割它们实在就没有必要了。

因此,我们不是将数据栅格化成三通道的 RGB 图像,而是如上图所示对该栅格化器进行了修改,让其生成一个 12 通道的张量,其中每个通道都包含了一种不同类型的栅格化后的信息。图 6 展示了这样一个 12 通道的张量,其坐标与图 5 的一样。

图 6:一个 12 通道张量被用于表示该区域。每个通道都包含一种特定信息,比如道路网络、土地(包含绿地、水域等)、便利设施等

为便于人眼观察,本文的后续内容基本都展示 RGB 栅格化版本,而非 12 通道的张量

表征学习

空间相似度

我们的目标是学习一个度量空间,其中语义相似的图像块对应于该空间中互相接近的嵌入向量。然后问题就变成了如何定义「语义相似」。

一种简单直接的获取相似度空间的方法是使用直方图表示每个图像块,使用 k-均值聚类,再使用一个词袋模型建模该空间。但是,我们仍然不清楚每个通道应该具有怎样的权重。比如,如果道路相似,但建筑不相似,那么两个图像块是否语义相似?

此外,即使两个图像块有相似的直方图,这也不能为我们提供任何有关该位置周边情况的空间结构信息。假设一个图像块中一半都被海洋覆盖,那么这个图像块是否与包含大量小池塘、湖泊或喷泉的图像块语义相似?图 7 给出了两个能得到几乎完全一样的直方图的图像块:

图 7:基于直方图的聚类不足以得到语义相似度和空间关系。这两张图像有几乎完全一样的直方图,但它们的语义含义差别相当大。

但是,这些图像块的语义并不一样。第一个图像块是一个交叉路口区域,第二个图像块则是某些可能通向居民房屋的小型道路。实际上在我们的嵌入空间中,我们发现这两个图像块的嵌入之间的欧几里德距离其实相当大,即使它们的直方图之间的卡方距离(Chi-Square distance)接近于零。

除了使用直方图,每个通道都可以通过一组特征来归纳总结以获取空间关系,比如有向梯度直方图(HoG)或者更传统的 SIFT 或 SURF 描述符。但是,我们没有试图人工指定哪些特征定义了语义相似度,我们决定使用深度学习的力量来学习自动检测有意义的特征。

为了做到这一点,我们将这种 12 通道张量输入到了一个用作我们的编码器的卷积神经网络中。该网络使用一个三重损失函数(triplet loss function)以自监督的形式进行训练,这意味着在训练过程中无需人工标注的数据。

监督学习:三重网络

三重损失概念的灵感源自孪生网络(siamese network)架构,这是 Ailon et al. [2] 为无监督特征学习执行深度度量学习而提出的一种方法。

三重网络是一种使用三元组 进行训练的神经网络架构,其中包括:

  • 一个锚实例 x

  • 一个与 x 语义近似的正实例 x+

  • 一个与 x 语义不同的负实例 x-

然后训练该网络,使其学习一个嵌入函数 f(.),使得,从而直接优化度量空间。如图 8 所示。

图 8:三重网络是使用一个三重损失训练的,这样在学习到的度量空间中,相似的实例彼此更为接近,不相似的实例则相距更远。

使用三重网络的度量学习因谷歌的 FaceNet [3] 而变得更为流行,其中使用了三重损失来学习人脸图像的嵌入空间,这样相似人脸的嵌入就更为接近,不同人脸的嵌入则距离更远。

人脸识别而言,正例图像是来自锚图像中同一人的图像,而负例图像则是从 mini-batch 中随机选择的人的图像。但是,我们这个案例却没有能轻松选择正实例和负实例的分类。

为了定义语义相似度,我们可以使用托伯勒提出的「地理学第一定律」:「在地表空间中,所有事物是相互联系的,但是距离近的事物比距离远的事物间的联系更密切。」

下面,设 I(.) 是从位置坐标到栅格化图像块的映射。对于位置 X,给定一个在栅格化图像块之前执行的旋转和平移变换 T(.),再给定一个随机位置 Y,且 X≠Y,那么我们可以得到我们的三元组:

  • x=I(X)

  • x^+=I(T(x))

  • x^-=I(Y)

因此,我们假设两个地理上邻近且存在部分重叠的图像块在语义上比两个完全不同的图像块更相关。图 9 给出了两个三元组示例,这两个三元组的锚图像是一样的。

图 9:由一张锚图像、一张正例图像和一张负例图像构成的三元组

为了防止神经网络只学习到简单的变换,我们还在训练过程中为每个正实例随机启动或禁用了 12 个通道中的某些通道。这会迫使网络认为正例图像块与锚图像是近似的,即使该信息的某个随机子集是不同的(比如没有建筑、没有道路等)。

SoftPN 三重损失函数

图 10 展示了我们的三重网络的一般结构。

图 10:这个三重损失直接优化「锚嵌入和正例嵌入之间的距离」与「锚嵌入和负例嵌入之间的距离」的比

这个损失函数定义为,这样优化网络就对应于最小化向量 相比于向量 (0,1) 的均方误差(MSE)。

我们为什么这样定义损失函数?考虑到我们希望 Δ(a,p) 尽可能地接近于零,同时我们又希望 Δ(a,n) 尽可能大。为了优化这个比值,我们在这两个距离上都应用了一个 SoftMax,以得到这个域的有界相似度:

这种三重损失的定义往往被称为 SoftMax 比,并且最早是由 Ailon et al. [2] 提出的。

这个定义的主要问题是网络很容易快速学习到一个 d_ 接近于 1 的嵌入空间,这是因为大多数随机负例图像与锚图像有非常大的差异。因此,大多数 (a,n) 对都对优化过程中的梯度作用不大,这会导致网络很快停止学习。

有不同的方法可以解决这个问题,其中之一是高难负例挖掘(hard-negative mining)[3],即仔细选择 (a,n) 对以确保网络保持学习。但是,在我们的情况中,我们并不清楚如何有效选择高难负例,同时又不向学习过程引入偏差。使用 Balntas et al [4] 提出的 SoftPN 三重损失函数是一种更简单的解决方案。

这种 SoftPN 损失会使用 min(Δ(a,n),Δ(p,n)) 替代上述 SoftMax 计算中的 Δ(a,n)。其效果是,在优化过程中,该网络会尝试学习一个度量空间,其中锚嵌入和正例嵌入都离负例嵌入尽可能地远。相对而言,原来的 SoftMax 比值损失仅考虑了锚嵌入和负例嵌入之间的距离。图 11 展示了这两者的差异。

图 11:SoftPN 损失优化这个更困难问题的方式是最大化负例嵌入与锚嵌入和正例嵌入两者之间的最小距离

神经网络架构

我们使用了一个相当传统的卷积神经网络架构作为编码器,其中包含 5 个过滤器大小为 3×3 的卷积层,之后是两层 1D 卷积和一个密集连接层。使用一维卷积的目的是通过跨通道参数池化(cross-channel parametric pooling)[5] 降低通向网络顶部的维度。

而嵌入层本身也是由另一个带有线性激活函数的密集层构成的,这样,经过其前一层的非线性之后,其输出就不会一直被局限在正例域内。图 12 给出了其完整的网络架构。

图 12:这个编码器包含一个卷积神经网络,后面跟着一个全连接层。最后的嵌入层是一个带有线性激活函数的密集层

我们积极使用了 dropout 和批归一化,并使用了 Leaky ReLU 激活函数以避免在初始测试运行中观察到的 ReLU 死亡问题。

此外,我们还在输入上直接应用了空间 dropout。这会导致一个随机选出的输入通道被完全丢弃,这能迫使网络通过关注不同的通道来学习区分图像。

完整网络是用 Keras 实现的,仅包含 305 040 个参数,并且使用 Adam 优化器在 p3.2xlarge AWS 机器上训练了两周时间。

训练数据

为了生成我们的训练数据,我们在我们的平台上取出了用户去过的 100 万个位置,并且添加了大约 50 万个用户在交通工具中的位置定位。

对于这 150 万个位置,每一个我们都栅格化得到了一个尺寸为 128x128x12 的图像瓦片,代表该位置周围半径 100 米的区域。这些张量用作锚图像。

对于每个位置,我们还栅格化了 20 张随机平移和旋转的图像瓦片,这些用作正例图像。偏移量是在 0 到 80 米之间均匀采样的,而且水平和垂直方向都有。这样,每个位置会得到 20 对(锚图像,正例图像),总共就是 3000 万张图像。

三元组在网络训练过程中生成,同时生成 mini-batch。每个 mini-batch 包含 20 个位置。对于每个位置,我们随机选出 5 对(锚图像,正例图像)来得到锚-正例距离的有意义表征。负例图像在每个 mini-batch 内随机选择,这样每个 mini-batch 的大小即为 100。

在训练过程中同时生成三元组 mini-batch 实际上就能得到近乎无限大的不同三元组数据集,这能让网络不断学习很多个 epoch。

可视化过滤器和激活

因为这个嵌入空间是以一种自监督的方式学习到的,没有标注数据,所以难以在训练过程中监控网络是否真正学到了什么东西。

可视化网络学习到的过滤器是一种不充分但仍然有用的方法。实际上,我们希望可视化最大化网络中不同层的激活的输入图像。为了做到这一点,我们可以从一张随机生成的图像开始,并且将每个像素都看作是一个有待优化的参数。然后我们使用梯度上升更新图像像素,这样它就能最大化所选择的层的输出。

根据这个卷积层的平均输出激活计算输入图像的梯度并迭代运行梯度上升几次,就能得到突出该层中最相关的结构的图像。

因为我们的输入是一个 12 通道的张量,不是 RGB 图像,所以我们只选择其中 3 个有最高平均像素幅度的通道并将它们排列成 RGB 图像。我们对每个通道应用了直方图均衡化(histogram equalization),以进一步增强视觉细节。

图 13 展示了网络的一个底层的 32 个过滤器中每一个的结果。很显然,这一层看起来关注的是道路和小块结构等低级细节。

图 13:网络的底层学习的是检测道路和小块结构等低级细节

图 14 可视化了一个更高层的 64 个过滤器。这些过滤器显然会被更平滑且更复杂的结构激活,这说明网络确实可能正在学习其输入的一种分层的特征分解

图 14:网络的更上层往往能通过组合来自更低层的低级特征而学习更复杂的结构

尽管这些可视化的用途不应被高估,但它们看起来很有意思,尤其是在很多研究迭代过程中时。比如,早期的版本很快就为我们指出了正确的方向,让我们发现了我们网络中的一堆死掉的 ReLU。后面我们通过用 Leaky ReLU 激活函数来替换而解决了这个问题。

探索度量空间

可视化嵌入

在调试网络时,可视化网络学习到的过滤器确实很有意思,但在评价所学习到的嵌入空间的质量方面用处不大。

为了搞清楚嵌入空间看起来如何,图 15 展示了使用 PCA 将维度降至三维之后的嵌入空间。为便于理解,每一个位置嵌入都在图中用其栅格化图像瓦片表示。

图 15:通过 PCA 得到的嵌入空间的 3D 图

这清楚地表明,即使只有前三个主成分,也能得到大量相关信息。公园等绿色区域、公路和主干道等不同道路类型、以及图中右下角的城市中心等区域有明显区别。

为了更清楚地展示这些局部结构,图 16 给出了该嵌入空间的三维 t-SNE 动画。

图 16:通过 t-SNE 得到的嵌入空间的 3D 图

尽管场地映射是这些嵌入的一大明显用例,但它们也可被我们交通方式分类器使用。图 17 展示了从我们的交通方式分类训练集(https://goo.gl/VhwuwS)提取出的定位的嵌入的散点图。在这个案例中,我们使用了线性判别分析(LDA:Linear Discriminant Analysis)将 16 维的嵌入空间投射成了 2 维。

图 17:在乘坐交通工具期间收集的航路点的嵌入空间的 2D LDA

这张图表明不同的交通模式通常出现在不同的地区。比如,我们的嵌入得到了有关火车轨道或电车站的信息。

为了展示被编码的地理区域的差异有多大,我们使用 PCA 将这个 16 维嵌入降维到了 3 维,这在比例调整之后被直接用作了 RGB 颜色值,从而可将我们的测试数据集绘制到一张地图上。图 18 给出了结果,这是在英国伦敦。可以清楚地看到,市中心、公路、水域、旅游区和居民区的编码都不一样。

图 18:在英国伦敦随机采样的位置的嵌入。这里的颜色是使用 PCA 将 16D 嵌入向量降维至 3D RGB 三元组而得到的。

我们也对英国伯明翰执行了类似的操作,可以看到伯明翰的郊区比伦敦更大,而伦敦周围的区域包含多得多的建筑。如图 19 所示。

图 19:在英国伯明翰随机采样的位置的嵌入。这里的颜色是使用 PCA 将 16D 嵌入向量降维至 3D RGB 三元组而得到的。

在空间中随机游走

为了进一步检查该嵌入空间的平滑性,我们可以从一个随机种子点(seed point)开始执行随机游走。在每次跳跃时,我们都随机选择一个当前嵌入的 k-最近邻并可视化对应的图像块。

图 20 展示了几个这种随机游走的结果。注意,大多数情况下,在该嵌入空间中的最近邻在地理位置上都远离彼此数百或数千公里,但它们有很高的语义相似度。

图 20:在该嵌入空间中的 6 次随机游走结果,每一次都从一个不同的种子点开始。

使用位置进行计算

尽管上述可视化结果表明所学习到的嵌入空间是平滑的且学会了获取语义相似性,但它不能证明我们实际上学习到了一个欧几里德度量空间。在一个欧几里德度量空间中,我们应该可以在嵌入之间进行插值并执行基本的算术运算,同时得到有意义的结果。

图 21 从左到右展示了在两个嵌入之间的插值结果。在插值的每一步,所得到的嵌入都被映射到了其在我们的测试数据中的最近邻嵌入;这里展示了其对应的图像瓦片。

图 21:从一个嵌入(左)到另一个嵌入(右)的插值,其中展示了每个中间步骤的来自我们的测试数据的最近邻图像。

最后,图 22 展示了我们对嵌入进行加减运算所得到的结果,同样,这些图像结果是来自测试数据的对应最近邻图像。

图 22:使用嵌入进行计算,并将结果映射回我们测试数据中的最近邻图像

这些结果表明我们的嵌入空间表示的度量空间中的距离实际上具有含义以及基本算术规则

因为这个度量空间是以一种自监督的方式训练的,所以可以使用大量无标注数据来强制网络学习获取有意义的关系。因此,使用这些嵌入作为我们后续分类器中的特征向量,就对应于一种形式的迁移学习,这让我们可以使用非常有限量的有标注数据训练强大的分类器。

总结

在这篇文章中,我们展示了可以如何使用三重网络来学习能获取不同地理位置坐标之间的语义相似度的度量空间。

我们训练了一个卷积神经网络来学习提取定义这个语义相似度的特征,并使用度量学习的方法得到了一个嵌入空间。

所得到的嵌入空间可被直接用于场地映射或交通方式分类等任务,并能通过迁移学习的方式帮助我们极大提升我们的分类器准确度和泛化能力。

此外,这些嵌入还能为我们的分类器增加一定的直觉,因此不正确的分类结果仍具有直觉意义。比如,场地映射器可以快速学习将白天和夜晚的活动与工业区、市中心、公园、火车站等特定区域联系起来。

如果你想了解有关我们平台的更多信息并自己动手尝试,可联系我们或下载我们的演示应用 Journeys:http://www.sentiance.com/demo 

参考文献

  • [1] Mikolov, Tomas, et al.「Efficient estimation of word representations in vector space.」arXiv preprint arXiv:1301.3781 (2013).

  • [2] Hoffer, Elad, and Nir Ailon.「Deep metric learning using triplet network.」International Workshop on Similarity-Based Pattern Recognition. Springer, Cham, 2015.

  • [3] Schroff, Florian, Dmitry Kalenichenko, and James Philbin.「Facenet: A unified embedding for face recognition and clustering.」Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.

  • [4] Balntas, Vassileios, et al.「PN-Net: Conjoined triple deep network for learning local image descriptors.」arXiv preprint arXiv:1601.05030 (2016).

  • [5] Lin, Min, Qiang Chen, and Shuicheng Yan.「Network in network.」arXiv preprint arXiv:1312.4400 (2013).

原文连接:http://www.sentiance.com/2018/05/03/loc2vec-learning-location-embeddings-w-triplet-loss-networks

工程自监督学习向量建模
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

词嵌入技术

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

人脸识别技术

广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。

模式识别技术

模式识别(英语:Pattern recognition),就是通过计算机用数学技术方法来研究模式的自动处理和判读。 我们把环境与客体统称为“模式”。 随着计算机技术的发展,人类有可能研究复杂的信息处理过程。 信息处理过程的一个重要形式是生命体对环境及客体的识别。其概念与数据挖掘、机器学习类似。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

直方图均衡化技术

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

表征学习技术

在机器学习领域,表征学习(或特征学习)是一种将原始数据转换成为能够被机器学习有效开发的一种技术的集合。在特征学习算法出现之前,机器学习研究人员需要利用手动特征工程(manual feature learning)等技术从原始数据的领域知识(domain knowledge)建立特征,然后再部署相关的机器学习算法。虽然手动特征工程对于应用机器学习很有效,但它同时也是很困难、很昂贵、很耗时、并依赖于强大专业知识。特征学习弥补了这一点,它使得机器不仅能学习到数据的特征,并能利用这些特征来完成一个具体的任务。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

特征分解技术

线性代数中,特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。需要注意只有对可对角化矩阵才可以施以特征分解。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

度量学习技术

即学习一个度量空间,在该空间中的学习异常高效,这种方法多用于小样本分类。直观来看,如果我们的目标是从少量样本图像中学习,那么一个简单的方法就是对比你想进行分类的图像和已有的样本图像。但是,正如你可能想到的那样,在像素空间里进行图像对比的效果并不好。不过,你可以训练一个 Siamese 网络或在学习的度量空间里进行图像对比。与前一个方法类似,元学习通过梯度下降(或者其他神经网络优化器)来进行,而学习者对应对比机制,即在元学习度量空间里对比最近邻。这些方法用于小样本分类时效果很好,不过度量学习方法的效果尚未在回归或强化学习等其他元学习领域中验证。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

词袋模型技术

词袋模型(英语:Bag-of-words model)是个在自然语言处理和信息检索(IR)下被简化的表达模型。此模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。最近词袋模型也被应用在电脑视觉领域。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

线性判别分析技术

线性判别分析 是对费舍尔的线性鉴别方法的归纳,这种方法使用统计学,模式识别和机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可用来作为一个线性分类器,或者,更常见的是,为后续的分类做降维处理。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

t分布随机邻嵌入技术

t分布随机邻嵌入(t-SNE)是由Geoffrey Hinton和Laurens van der Maaten 开发的一种降维的机器学习算法。 这是一种非线性降维技术,特别适合将高维数据嵌入到二维或三维空间,然后可以在散点图中将其可视化。 具体来说,它通过二维或三维点对每个高维对象进行建模,使得类似的对象由附近的点建模,不相似的对象由远点建模。

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

卡方技术

卡方常常与卡方分布和卡方检验联系在一起: 卡方分布(chi-square distribution)是常用于概率论和统计检验中的一种概率分布;卡方检验是(chi-square test)是一种基于卡方分布的常用的统计检验,其统计量在原假设(null hypothesis)成立时服从卡方分布。

降维技术

降维算法是将 p+1 个系数的问题简化为 M+1 个系数的问题,其中 M<p。算法执行包括计算变量的 M 个不同线性组合或投射(projection)。然后这 M 个投射作为预测器通过最小二乘法拟合一个线性回归模型。两个主要的方法是主成分回归(principal component regression)和偏最小二乘法(partial least squares)。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

暂无评论
暂无评论~