专栏首页机器学习与推荐算法从图嵌入算法到图神经网络

从图嵌入算法到图神经网络

作者 | luv_dusk

来源 | CSDN

引言

近几年来,伴随着计算机算力的急剧提升,神经网络从历史的尘埃中走出,横扫各大领域,完成一次次颠覆性的创新。依托高度弹性的参数结构,线性与非线性的矩阵变换,神经网络能适用于各式各样的数学场景,在各个类别的应用上我们都能看到神经网络的影子。其中著名的应用方向,包括自然语言处理、计算机视觉、机器学习、生物医疗、推荐系统、自动驾驶等等。图神经网络,广泛应用于社交关系、知识图谱、推荐系统、蛋白质分子建模,同样源自于对传统领域的创新,它的前身是图嵌入算法;而图嵌入算法又以图数据作为载体。这一关系,将贯穿本文始末,成为我们的展开线索。

在进入图嵌入算法前,本节将详细介绍该领域下的基础知识,包括各类图的概念以及路径相关算法。希望直入主题的读者可直接跳到下一节。

1

相关概念

图 (Graph) 是最基础的几种计算机数据结构之一,由若干个节点 (Node, or Vertex) 构成;节点与节点相连,构成 边 (Edge),代表了两者之间的依赖关系。根据图中边的方向,概念上可将图分为两种:有向图 (Directed Graph, or Digraph) 和 无向图 (Undirected Graph, or Undigraph),如下所示,左侧为无向图,右侧为有向图:

当边被赋予权重,则图可称为权重图 (Weighted Graph):

一个形象的例子是城市地图,每一个交叉路口是一个节点,道路是一条边,而权重指的则是道路的长度。但如果我们希望用权重大小代表拥挤程度,在地图上看到每条道路的拥堵情况,那么一条边显然不足以满足我们的要求。这时就引申出了多重图 (Multigraph):

概念上,多重图必然是有向图和权重图;但需要注意的是,多重图中两个节点之间的边,既可以单向,也可以双向,i.e. 节点 A和B之间可以有两条或以上A→B的边;两条或两条以上的单向边成为平行边(Parallel Edges),而平行边的数量称为重数(Multiplicity)。

此外,还有一些其他类型图的定义,包括混合图(Mixed Graph),指的是既包含无向边也包含有向边的图;连通图(Connected Graph),指的是任意两个节点都有路径 (一个或多个边相连) 相连的无向图;强连通图(Strongly-connected Graph),指的是任意两个节点都有路径相连的有向图;循环图(Cyclic Graph),指的是存在首尾相连的路径,可以串起所有节点的图;以及最后的完全图(Complete Graph),指的是所有节点之间都有边相连的无向图。

清楚这些图的概念,是我们理解算法、熟悉算法应用场景的前提。

2

路径相关算法

伴随着图一起诞生的,是与路径相关的算法,其中部分算法可以帮助我们从图中提取更多的特征信息融入到节点中,从而丰富图的架构,在图嵌入或图神经网络算法中达到更好的效果。

  • 拓扑排序 (Topological Sorting)

应用于有向非循环图,是对图中的所有节点 Vi (i=1,...,n)进行统一排序,使得对于任意边 (Va→Vb),满足a<b。经过拓扑排序的图,能加速目标检索的效率,同时能够快速获取两个节点间的上下游位置,应用场景包括学位课程之间的先修关系、面对对象程序类之间的继承,以及工程项目之间的调度等。需要注意的是,一个有向非循环图可能存在不止一种拓扑排序的结果。算法原理在于通过迭代,将无入度的节点从原图中抽出放入排序序列中,直至所有节点全部抽出。

  • 深度优先搜索 (DFS):

通过遍历检测两个节点是否连通,或检测一个图是否为连通图。其过程类似于牵着绳子走入迷宫,每一个拐角是一个节点,当走到死角时,记录来过这里,沿着绳子的路线返回寻找下一个拐角;这将用到两个栈,分别记录走访过的节点,以及绳子沿路的拐角。实际应用中,全程只用一根绳子无疑是低效的,因此常常引入递归的思想,每到一个拐点切出多个绳头分头搜索。

  • 广度优先搜索 (BFS):

依据从源点出发,路径上的节点数量,将全图分为不同的层级,逐层向下检查。相对于深度优先搜索,广度优先搜索能够保证在边的数量上两个节点间检索到的路径最短。

  • Dijkstra 算法:

算法思想在于从源点出发,构建一个逐步扩张的“云”,每次迭代将云外离源点最近的节点拉入到云内来,使云逐渐遍布全图,从而检索到两个节点间的最短路径。时间复杂度为O(n^2),是贪心算法应用在路径问题上的绝佳案例。

  • Floyd-Warshall 算法:

假如我们不希望每次检索两个节点是否连通,或计算最短路径时,都从头开始遍历,可以使用该算法生成传递闭包 (Transitive Closure),以加速后续检索,一劳永逸。该算法的原理在于每次迭代时,将所有满足连通要求的 Vk−1→Vk→Vk+1的 Vk−1和Vk+1单独建立联系,构建新的边 Vk−1→Vk+1。如此一来,多次迭代过后,所有可连通的节点对 (Va,Vb) 都将拥有直接关系。需要注意的是,该算法的时间复杂度为 O(kn^3),k为迭代次数,为保证所有可达节点配对存在直接相连的边,算法的运算消耗最高可接近O(n^4)。显而易见,当节点的数量 n逐渐增加时,算法运行的时间消耗将呈灾难性地增加。

  • Prim-Jarnik 算法

归属于最小生成树 (MST, abbr. Minimum-Spanning-Tree) 一类的算法,旨在求解连通所有节点的最短路径。由 Dijkstra 算法调整而来,以所有零入度节点作为云的初始状态,不断找寻离云内节点最近的邻点拉入到云内来,以此迭代,直至所有节点访问完毕。如果不存在零入度点,则随机挑选一个加入到云中。

3 图嵌入算法

Graph Embedding Algorithms,目的在于学习图的结构或节点之间的邻接关系,对节点进行编码 (或对固有特征进行降维),将所有节点映射为等维度的向量,使其能够方便地应用于下游的聚类、分类、关联分析或可视化任务。因此,在实际应用中,图嵌入属于预处理工作,绝大多数图嵌入算法皆为无监督学习算法。

1

相关概念

  • (Graph):G(V,E)G(V,E)G(V,E)
  • 节点(Node, or Vertex):V={v1,...,vn},包含全部节点
  • (Degree):D={deg1,...,degn}包含每个节点的入度数量
  • (Edge):E={eij}ni,j=1,包含所有的边;如果边是双向的,则分别表达为两条,e.g. vi↔vj 关系将对应 eij 与 eji ;如果边 vi→vj 不存在,则不会出现在 E 里面
  • 邻点(Neighbors):N(vi),包含节点 vi的所有邻点
  • 邻接矩阵(Adjacency Matrix):A={wij∣wij≥0}ni,j=1∈Rn×n ,记录图中边的权重信息;对于无向图,wij=wji;要求所有的边权重不得小于 0;对于不相邻的节点,wij=wji=0
  • 一阶相似度(First-order Proximity):边的权重 wij ,代表两个节点的直接依赖关系
  • 二阶相似度(Second-order Proximity):对于节点 vi和 vj,从邻接矩阵分别获取相应的一阶相似性wi=[wi1,...,win], sj=[wj1,...,wjn];wi与 wj的相似度即为二阶相似度,代表两个节点的邻居相似性
  • 图嵌入(Graph Embedding):映射关系 f:vi→zi∈Rd,∀i∈[1,n],∀i∈[1,n],d 为超参数,决定最终的编码长度
  • 特征表示(Feature Representation):Xi∈Rd0,对节点 vi的固有特征 (不包含边及其他节点信息) 进行简单编码后形成的向量,因此又称为特征向量

2

演变历程

图嵌入算法初步诞生于21世纪初,彼时的模型将更多的焦点放在降维上,嵌入的同时使得相邻的节点在最终的向量空间上更为接近,代表性的包括 Locally Linear Embedding (2000) 和 Laplacian Eigenmaps (2001) ,这一类算法充分利用所有的样本间权重,时间复杂度通常较高,最高可达 O(n^2),因此并不适合大规模图数据。2010 年以后,新诞生的图嵌入算法逐渐在时间复杂度上得到优化,转而应对现实生活中广泛存在的特征稀疏性问题,这其中的翘楚便是 Graph Factorization (2013),该算法旨在于邻接矩阵以及正则项之间寻求一个平衡点,使得生成的向量保留邻接矩阵的绝大多数信息;LINE (2015) 将该思想延续下去,并努力在嵌入向量中维持节点的一阶和二阶相似度;HOPE (2016) 更是引入了更高阶的相似度矩阵,通过广义奇异值分解保留高阶相似性。以上所有算法皆可归类于矩阵分解,又称为因子分解,其中心思想在于生成相似度矩阵,通过数学方法将矩阵中包含的邻接信息融入节点向量中。

另一个知名的流派是基于随机游走,以 DeepWalk (2014) 和 node2vec (2016) 作为代表。前者在节点的上下游随机走动,生成长度为 2k+1 的等长序列,作为节点的邻接特征导入 skip-gram 模型训练;后者在前者的基础上对随机游走在 DFS 和 BFS 的方向上施加权重,使生成的序列更为真实地体现节点的结构信息。

在这之后,图嵌入算法逐渐过渡到神经网络时代,涌现出一大批优质的图神经网络模型,包括 SDNE (2016) 与 GraphSAGE (2017) 等等,在工业界大放异彩。从此,基于神经网络的图嵌入算法不再仅仅局限于节点的邻接信息,而开始将节点本身的特征纳入模型考量,并逐渐从静态的直推式 (transductive) 学习向动态的归纳式 (inductive) 学习演变,无论是拟合能力还是泛化能力,都大大提升;部分图神经网络直接针对下游任务进行建模,已不再属于图嵌入的范畴。依据 Wu et. al (2019) 的定义,图神经网络可分为五大类:

  • 图卷积网络(Graph Convolution Networks):简称为 GCN,是目前最主流的图神经网络算法,其余四种图神经网络皆由 GCN 演化而来。依据建模过程中是否应用到傅里叶变换,可将其分为基于谱 (Spectral-based) 和基于空间 (Spatial-based) 两个流派。
  • 图注意力网络(Graph Attention Networks):引入注意力机制,将图网络整合为端到端的模型;具体的做法,是在 GCN 的聚合函数中加入可训练的权重参数,使得训练后的模型将更多的重心放在关键的邻点上。
  • 图自编码器(Graph Auto-encoders):由一个编码器 (encoder) 和一个解码器 (decorder) 构成;在应对无固有特征的图时,编码器对邻接矩阵进行一定的预处理,包括融入更丰富的邻接信息 (e.g. 高阶相似度) 或是将邻接矩阵输入一套神经网络;在应对包含固有特征的图时,则直接使用 GCN 作为编码器对邻接矩阵进行编码;解码器对编码结果进行后续处理获得一阶及二阶相似度,通过计算损失函数对模型参数进行更新。
  • 图生成网络(Graph Generative Networks):2018 年以后出现的新的研究方向,目的是在图的节点和边经验分布的基础上,生成新的图,进行对抗式训练。
  • 图时空网络(Graph Spatial-Temporal Network):旨在于时空图中学习模式 (pattern),应用在分类或是对未来特征的预测。

GNNPapers(https://github.com/thunlp/GNNPapers)详细列示了图神经网络诞生以来里程碑式的优秀模型,以及其在具体场景中的应用。

图卷积网络

Graph Convolution Networks。在节点嵌入这一下游任务上,基于空间的 GCNs 从彼时大热的卷积神经网络中汲取思想,直接在原图的拓扑序列上进行卷积操作;而考虑到图结构的不稳定性,基于谱的 GCNs 则将所有节点映射到傅里叶域后进行卷积乘积,再经由傅里叶逆变换得到空间域下的嵌入向量。以下是 Wu et. al (2019) 对近年来图卷积网络的总结:

1

GNN

地址:https://ieeexplore.ieee.org/document/4700287

这篇论文首次提出图神经网络 (Graph Neural Network) 的概念,并将模型设计为有目的的监督学习模型,分为转换 (Transition) 和 输出 (Output) 两个部分。转换部分为每一个节点提取邻点信息,生成向量表示的 状态 (state);输出则将该状态映射至等维的向量表示,通过 softmax 归一化进行多分类预测。相关公式如下:

相关的数学定理 Banach's Theorm 证实,经过扩散机制后,对于满足 ∣∣fw(x,l)−fw(y,l)∣∣≤μ∣∣x−y∣∣, 0≤μ≤1的 w,有仅有唯一的解。因而在训练完成后,我们可以提取 fw(x,l)作为节点的嵌入表示。

该模型除了可用于节点级别的分类,同样可用于图的级别,只需要为每张输入的图添加一个代表全局的特殊节点即可。由于模型应用到了在节点级别进行邻点采样作为输入的思想,与后来的图卷积神经网络不谋而合,论文作者虽没有自行提出卷积的概念,但本篇论文后来被认为是第一个图卷积网络的提出者。模型采用顺时针的方式为每个节点提取固定长度的邻点列表,对相对位置上空缺的邻点采取统一的无意义填充策略;这样的做法将算法的应用场景限制在了 2D 空间,且需要使用者进行更为繁琐的数据预处理,因而成为饱受诟病的之处,也为后续优化指引了方向。

2

GraphSAGE

论文链接:https://arxiv.org/abs/1706.02216

初代 GNN 中邻点采样的思想一直保留了下来,但 GraphSAGE 并不将采样信息局限在节点的拓扑结构里,而是使用节点的固有特征取而代之,对造成庞大参数量的扩散机制也选择了摒弃处理。根据下游任务的不同,GraphSAGE 采用不同的训练策略:应用于图嵌入时,使用负采样技术计算二阶相似度实现参数收敛;应用于分类任务时,使用 softmax 进行有监督学习。其中,无监督学习的表达式如下:

模型的特别之处,在于每一次迭代时,都重新对邻点进行采样,前馈公式如下:

邻点采样的方法为设置固定的窗口大小,不足或过剩都采用随机的方式进行选取;采样完毕后使用聚合函数将邻点的隐藏向量聚合为一个等长的向量表示。论文中提出了三种聚合策略:

  • 均值聚合 (MeanAggregator):直接对所有邻点 (包括自身) 的隐藏向量求均值;
  • LSTM 聚合 (LSTMAggregator):利用 LSTM 在时序信息处理上的优势,将采样得到的邻点序列打乱后依次输入 LSTM 中,取隐藏状态与节点本身的隐藏向量进行纵向合并;
  • 池化聚合 (PoolingAggregator):引入包含可训练参数的全连接层对每一个邻点的向量进行处理,将最后的输出进行最大池化;

GraphSAGE 第一次提出使用 归纳式 (inductive) 的图神经网络代替 直推式 (transductive) 的旧模型,以提高其在实际应用中的效率;然而,其虽能够通过推理直接得出训练样本外节点的输出,但本质上无法在推理的同时进行参数的更新。这一问题引发了动态图的研究工作,至今依然是最为热门的方向。

3

Spectral CNN

论文地址:https://arxiv.org/abs/1312.6203

在有向图中,由于每个节点的邻点数目并不固定,因而直接在空间上对节点进行卷积操作难免与真实的分布形成差异,导致模型效果受阻。基于谱的图卷积网络能有效解决这一类问题。模型的思路在于仿照 CNN,分为多层进行前馈;每一层使用不同的卷积核在傅里叶域进行卷积,同时在得到空间域的表达后对其使用 max pooling 进行聚合。图的拉普拉斯矩阵可以通过两种常见的方式计算:未标准化的 L=D−W,以及标准化的

。在对 L 进行特征分解后,第 k个卷积层的公式定义如下:

4

ChebNet

论文链接:https://arxiv.org/abs/1609.02907

泛化至节点的分类和嵌入任务上,该论文提出的半监督式 GCN 在许多下游任务榜单中实现了最优成绩,并因此迅速蹿红。卷积层的前馈公式如下:

其中 A˜∈R N×N 为添加了自连接关系的邻接矩阵,D˜ 为度矩阵,W 为可训练参数,H 为卷积层的输出。为了在模型参数中引入无标签节点的信息,模型在损失函数中引入了正则项:

其中L0为监督学习损失,Δ=D−A 为未标准化的拉普拉斯矩阵。

模型的一大贡献在于通过设定感受野宽度为 1,并增加模型深度,来对前代基于切比雪夫多项式的谱卷积进行进一步优化;其余优点自不用再提,缺陷在于训练时并未对原始输入进行压缩,端对端地对整张图进行处理。尽管模型已进行优化,但层数的增加依然使其耗时过长。为此,后续的优化主要以加速训练为主,e.g. 在每一层进行采样计算。

其他

1

注意力网络

abbr. Graph Attention Networks。Attention 机制自 Google 于 2014 年提出后便广泛应用于序列建模任务中,尤其在自然语言处理领域。应用于图神经网络,Attention 机制有两种用法,第一种是用在邻点序列的生成上,第二种是用在邻点向量的聚合上;两种方法都使得模型将更多的焦点放在有重要相似度的两个邻点上。由于 Attention 机制的思想在各个领域都是共通的,在展开论文之前我们先对其进行一定的介绍。Attention 机制的核心在于三个要素:Query, Key 和 Value,公式如下,

其中分母的 dk 为缩放的维度,默认为 1。通过点积计算 Query 和 Key 的相似度,将相似度结果作为权重对 Value 进行加总,这便是最常见的 Attention 形式。在此基础上进行变形,将 Query, Key, Value 经过多组线性变换后分别进行独立的 Attention 计算,对得出的结果进行合并,这样的 Attention 机制称为 Multi-Head Attention:

除以上两者之外,Attention 还有诸多不同的变形方式,包括拼接后导入感知机代替点积进行相似度计算,以及以加权平均的方式代替 Attention 输出特征与 Query 的纵向合并;由于图神经网络中涉及不多,在这里不进行赘述。于 2017 年至 2018 年先后诞生的几个图注意力网络中,GAT (2017) 将 Multi-head Attention 机制用在邻点的聚合上,相似的邻点获得更大的聚合权重;

GAAN (2018) 将 GAT 中多个注意力头的输出从拼接改为加权平均;

其中 ϕ为全连接前馈层;Attention Walks (2018) 将 Attention 思想应用于 DeepWalks,为共现矩阵附加权重,影响随机游走的方向。由于 Attention 组块无法自行训练,在模型流程中引入 Attention 机制后,必须将其设置为端到端的模型,因而图注意力网络的训练通常是有监督的。

2

图自编码器

abbr. Graph Auto-encoders,在 GCNs 的基础上,将任务专注于图嵌入,不再进行特定的分类任务。GAE 的共性在于使用 encoder 得到潜在向量,并以 decoder 判断潜在向量中包含的相似度信息是否与相似度矩阵保持一致。decoder 通常为全连接层;而 encoder 则以 MLP 或 GCN 为主流,一些变形包括接入 Attention 机制,或直接以 LSTM+Attention 作为编码器。以第一代图自编码器 GAE (2016) 为例,GAE 应用 GCN 作为编码器,通过重构邻接矩阵,在一阶相似度的层面拟合模型:

但基于一阶相似度的模型无法应对现实生活中广泛存在的高度稀疏的数据,因而 SDNE (2017) 在有监督的一阶相似度基础上,在损失函数中引入二阶相似度,以期完整地保留图的结构信息:

3

图生成网络

Graph Generative Networks。相对于其他分支而言,图生成网络的应用场景较少,主要包括生物医药和工程学等领域。目前存在的 GGNs 差异较大,鲜有继承关系,但根据模型特质可分为两类:一类基于构建生成器 (generator) 和判别器 (discriminator) 进行对抗式训练,这里的思路和计算机视觉领域的 GAN 是保持一致的;另一类则在于得到既有的图数据分布,而后给定一定信息,在满足该分布的前提下交替式地生成节点和边,逐渐扩展至全图。

GraphRNN(2018) 则遵循第二类思路,采用双层循环神经网络设计,第一层基于图的级别处理隐藏状态,为节点序列添加新的节点;第二层则基于边的级别生成布尔值列表,判断新生成的节点与原序列中的节点是否存在邻接关系。训练前通过广度优先搜索,将图数据平铺为节点序列导入模型中,相关表达式为

4

图时空网络

Graph Spatial-temporal Networks,专门用于处理时空图数据。时空图与我们常说的图主要区别在于,时空图的节点和边的特征处在实时变化中,e.g. 城市的交通路况。而图时空网络主要应用在两种下游任务中:分类以及预测未来特征。在建模过程中,图时空网络将节点与节点的依赖关系分为空间依赖关系 (spatial dependencies) 和临时依赖关系 (temporal dependencies)。

预测未来特征的端到端模型 DCRNN (2017) 使用扩散卷积 (diffusion convolution) 来捕捉空间依赖关系,而使用基于 GRU (Gated Recurrent Unit) 的 seq2seq 架构捕捉临时依赖关系。更为直观的表达方式是,在同一个时空的内部节点之间进行卷积,而在同一个节点的不同时空状态使用 seq2seq。

总结

图神经网络相对于传统的卷积神经网络和循环神经网络的不同之处,在于其高度的可塑性和多样性。例如,有不同的卷积策略、不同的采样策略、不同的相似度矩阵/邻接矩阵计算方式,任何一个环节的改变都会对最终的模型效果产生质的区别,因而难有适用于大面积场景的高泛化性明星模型的出现。在实践中,应当依据明确的场景需求来设计网络。以下呈现笔者总结的模型择优策略,供读者参考:

  • 【1】任务目的:图分类【2】、节点分类【3】、节点嵌入【4】、关系预测【15】
  • 【2】数据规模:大型【9】、小型【10】
  • 【3】数据规模:大型【5】、小型【7】
  • 【4】使用邻接矩阵或是使用节点的固有特征:邻接矩阵【14】、节点特征【13】 【5】使用邻接矩阵或是使用节点的固有特征:邻接矩阵【6】、节点特征【13】
  • 【6】邻接矩阵是否稀疏:是【11】、否【12】
  • 【7】使用邻接矩阵或是使用节点的固有特征:邻接矩阵【8】、节点特征【13】
  • 【8】使用能进行节点级别分类任务的 <基于谱的图卷积网络>, e.g. 1stChebNet
  • 【9】使用能进行图级别分类任务的 <基于空间的图卷积网络>,e.g. PATCHY-SAN, DCNN
  • 【10】使用能进行图级别分类任务的 <基于谱的图卷积网络>,e.g. Spectral CNN, ChebNet【3】数据规模:大型【5】、小型【7】
  • 【11】使用 SDNE 等高效应对稀疏数据的 <基于空间的图自编码器> 对节点进行编码后进入【13】
  • 【12】使用能进行节点级别分类任务的 <基于空间的图卷积网络>,e.g. DCNN
  • 【13】使用 GraphSAGE
  • 【14】数据规模:大型【15】、小型【16】
  • 【15】使用 SDNE
  • 【16】使用 <传统图嵌入算法>,e.g. HOPE, node2vec

出于 GraphSAGE 和 SDNE 的一些优秀特性,笔者在部分场景里优先推荐使用;此处没有提到图注意力网络,是由于注意力机制作为一种建模思想,几乎可以应用于任何以分类作为下游任务的图神经网络,而并非现在既有的应用了注意力机制的示范模型;没有提到图生成网络和图时空网络是由于其应用场景较为局限,目的也更为明确。

前沿探索

本文呈现的皆为 2018 年及以前,经受住实践考验的经典图神经网络。依据 2019 年以后发布的论文,前沿研究主要关注以下几个方面:

  • 动态图 (dynamic graph):目前绝大多数图嵌入算法和图神经网络都是静态的、直推式的,当我们引入新的节点,希望预测节点的分类或为其进行嵌入时,e.g. 新注册用户的加入,需要将整张图重新进行训练,这无疑相当低效。针对动态图的研究期望能解决这一类问题。
  • 异质图 (heterogeneous graph):将图神经网络应用在知识图谱等领域时需要面对的问题 —— 节点和边可能不只一类。如何为这样的图进行节点嵌入,HAN (2019) 提供的解决方案是将隐藏向量的聚合分为两步进行。
  • 边的特征:传统图嵌入算法仅利用了边的权重信息,GraphSAGE 引入了节点的固定特征,下一步有研究者将注意力放在如何将前两者与边的特征结合上。

References

[1] Palash Goyal, E. F. (2017). Graph Embedding Techniques, Applications, and Performance: A Survey. Retrieved from https://arxiv.org/abs/1705.02801 [2] Zonghan Wu, S. P. (2019). A Comprehensive Survey on Graph Neural Networks. Retrieved from https://arxiv.org/abs/1901.00596

本文分享自微信公众号 - 机器学习与推荐算法(ML_RSer),作者:luv_dusk

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一文搞懂反向传

    这是一场以误差(Error)为主导的反向传播(Back Propagation)运动,旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去。

    张小磊
  • 美团机器学习算法岗实习四面面经(推荐系统方向)

    “ 本篇内容为师妹在美团面试时的相关记录,希望对目前学习推荐系统方向的朋友们一些方向指引,同时也希望对寻找推荐系统相关工作的朋友们一些借鉴意义。如有相关问题,请...

    张小磊
  • 推荐算法三视角: 矩阵, 图, 时间线

    关于推荐系统,如果在忘掉所有的公式和代码,忘记所有的语言描述,脑海里就剩下几张图景,会是什么?一张二维表格,一个拓扑图,一条时间线。这三幅图景,是我看待推荐算法...

    张小磊
  • 【深入学习MySQL】MySQL的索引结构为什么使用B+树?

    在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决...

    Java_老男孩
  • 分布式初探——分布式事务与两阶段提交协议

    今天的文章咱们聊的是分布式原理当中的原子性,也称为分布式事务。不知道会不会有人觉得奇怪,分布式系统CAP原则当中并没有原子性,这个原子性是从哪里冒出来的?

    TechFlow-承志
  • 红黑树,超强动静图详解,简单易懂

    红黑树,对很多童鞋来说,是既熟悉又陌生。学校中学过,只了解大概;工作中不怎么使用,但面试又是重点。每次需要查看红黑树内容时都很难以更生动形象的方式来理解其内容。...

    Java团长
  • SQL学习笔记之B+树的几点总结

    本文主要以列表形式将B+树的特点以及注意点等列出来,主要参考《算法导论》、维基百科、各大博客的内容,结合自己的理解写的,如内容有不当之处,请各位雅正。

    Jetpropelledsnake21
  • 红黑树,超强动静图详解,简单易懂

    红黑树,对很多童鞋来说,是既熟悉又陌生。学校中学过,只了解大概;工作中不怎么使用,但面试又是重点。每次需要查看红黑树内容时都很难以更生动形象的方式来理解其内容。...

    乱敲代码
  • 一分钟掌握MySQL的InnoDB引擎B+树索引

    MySQL的InnoDB索引结构采用B+树,B+树什么概念呢,二叉树大家都知道,我们都清楚随着叶子结点的不断增加,二叉树的高度不断增加,查找某一个节点耗时就会增...

    阿伟
  • 【GNN】JK-Net:深层 GNN 架构

    今天学习的是 MIT 同学 2018 年的论文《Representation Learning on Graphs with Jumping Knowledge...

    阿泽 Crz

扫码关注云+社区

领取腾讯云代金券