【2018/ESWC】Modeling Relational Data with Graph Convolutional Networks
文章链接:https://arxiv.org/pdf/1703.06103.pdf TL;DR 由于知识图谱中知识的不完整性,文中提出了Relational Graph Convolutional Networks (R-GCNs) 来预测图谱中缺少的实体类别(entity classification)和实体之间的关系(link prediction)。 Algorithm/Model 简单的知识图谱如下所示,主要的任务就是预测出红色字体表示的实体的类别和实体之间的关系: 一般的GNN模型如下所示: hi(l+1)=σ(∑m∈Migm(hi(l),hj(l)))h_{i}^{(l+1)}=\sigma\left(\sum_{m \in \mathcal{M}_{i}} g_{m}\left(h_{i}^{(l)}, h_{j}^{(l)}\right)\right) hi(l+1)=σ(m∈Mi∑gm(hi(l),hj(l))) 其中 Mi\mathcal{M}_{i}Mi 表示入边。 文中基于知识图谱构造的R-GCN如下所示: hi(l+1)=σ(∑r∈R∑j∈ ...
KDD 2016 | node2vec:可扩展的网络特征学习模型
论文标题 | node2vec:Scalable Feature Learning for Networks 论文来源 | KDD 2016 论文链接 | node2vec: Scalable Feature Learning for Networks 源码链接 | https://github.com/aditya-grover/node2vec TL; DR 前面介绍过基于 DFS 邻域的 DeepWalk 和基于 BFS 邻域的 LINE。node2vec 是一种综合考虑 DFS 邻域和 BFS 邻域的 graph embedding 方法。简单来说,可以看作是 deepwalk 的一种扩展,是结合了 DFS 和 BFS 随机游走的 deepwalk。 Model/Algorithm 优化目标 设 f(u)f(u)f(u) 是将顶点 uuu 映射为 embedding 向量的映射函数,对于图中每个顶点 uuu,定义 NS(u)N_S(u)NS(u) 为通过采样策略 SSS 采样出的顶点 uuu 的近邻顶点集合。 node2vec 优化的目标是给定每个顶点条件下,令其近邻顶点( ...
概率论基础知识
本文介绍机器学习中的相关概率论知识 本文中主要涉及到的知识点如下: 机器学习中为什么要使用概率 频率学派概率和贝叶斯学派概率 何为随机变量和何为概率分布 条件概率,联合概率,全概率公式 边缘概率 独立性和条件独立性 期望, 方差,协方差和相关系数 贝叶斯及其应用 中心极限定理 极大似然估计 概率论中的独立同分布 机器学习中为什么要用到概率 我们借助概率论来解释分析机器学习为什么是这样的,有什么依据,同时反过来借助概率论来推导出更多机器学习算法。很多人说机器学习是星座学,最主要的原因是机器学习的很多不可解释性,我们应用概率知识可以解释一部分,但还是很多值得我们去解释理解的东西。 这是因为机器学习通常必须处理不确定量,有时也可能需要处理随机 (非确定性的) 量。不确定性和随机性可能来自多个方面。总结如下: 被建模系统内在的随机性:例如一个假想的纸牌游戏,在这个游戏中我们假设纸牌被真正混洗成了随机顺序。假如这个时候你要对这个这个游戏建模(例如预测抽的牌点数),虽然牌的数量和所有牌有什么是确定的,但是若我们随机抽一张,这个牌是什么是随机的。这个时候就要使用概率去建模了。 不完全观测 ...
有向图中的随机游走方法
目前基于随机游走的 graph embedding 方法都是针对无向图进行随机游走,但是在有向图中如何进行随机游走?本文介绍下有向图中的随机游走资料。 有向图随机游走 基于 PageRank 的思路进行有向图的随机游走。 定义1 (有向图) 有向图(directed graph)记作 G=(V,E)G=(V, E)G=(V,E) ,其中 VVV 和 EEE 分别表示结点和有向边的集合。 比如,互联网就可以看作是一个有向图,每个网页是有向图的一个结点,网页之间的每一条超链接是有向图的一条边。 从一个结点出发到达另一个结点,所经过的边的一个序列称为一条路径(path), 路径上边的个数称为路径的长度。 如果一个有向图从其中任何一个结点出发可以到达其他任何一个结点,就称这个有向图是强连通图(strongly connected graph)。 假设 kkk 是一个大于 1 的自然数,如果从有向图的一个结点出发返回到这个结点的路径的长度都是 kkk 的倍数,那么称这个结点为周期性结点。 如果一个有向图不含有周期性结点,则称这个有向图为非周期性图 (aperiodic graph),否则为 ...
PyTorch 常用函数解析
detach() 和 .data PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data 返回和 x 的相同数据 tensor, 但不会加入到x的计算历史里,且require s_grad = False, 这样有些时候是不安全的, 因为 x.data 不能被 autograd 追踪求微分 。 .detach() 返回相同数据的 tensor ,且 requires_grad=False ,但能通过 in-place 操作报告给 autograd 在进行反向传播的时候. 举例: tensor.data 123456789101112>>> a = torch.tensor([1,2,3.], requires_grad =True)>>> out = a.sigmoid()>>> c = out.data>>> c.zero_()tensor([ 0., 0., 0.])>>> out # out的数值被c.zero ...
机器学习中的 KL 散度及其 Python 实现
KL 散度定义 相对熵,又称KL散度,如果我们对于同一个随机变量 xxx 有两个单独的概率分布 p(x)p(x)p(x) 和 q(x)q(x)q(x),可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异,如果两个分布越接近,那么KL散度越小,如果越远,KL散度就会越大。 在机器学习中,ppp 通常用来表示样本的真实分布,qqq用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss损失值。计算公式如下: 离散概率分布: KL(p∥q)=∑p(x)logp(x)q(x)K L(p \| q)=\sum p(x) \log \frac{p(x)}{q(x)} KL(p∥q)=∑p(x)logq(x)p(x) 连续概率分布: KL(p∥q)=∫p(x)logp(x)q(x)dxK L(p \| q)=\int p(x) \log \frac{p(x)}{q(x)} d x KL(p∥q)=∫p(x)logq(x)p(x)dx 1维高斯分布 假设我们有两个随机变量x1x_1x1,x2x_2x2 ...
Python Neovim 开发环境配置
本文记录下 Neovim 安装配置过程,最终的显示效果如下: Neovim 安装 MacOS 1brew install neovim Linux 1sudo apt install neovim Python 支持 为了打造 Python IDE. 我们需要安装 Neovim Python 模块: 1pip3/python2 install neovim 查看是否安装成功 :Checkhealth,出现以下结果即安装成功; 配置 创建配置文件: 12mkdir ~/.config/nvimnvim ~/.config/nvim/init.vim 基于 Neovim 安装插件管理器,参考:junegunn/vim-plug: 12sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegun ...
机器学习中的激活函数与损失函数总结
激活函数 不可以不使用激活函数。 激活函数的主要作用是提供网络的非线性建模能力,如果没有激活函数,隐藏层数量再多与单层神经网络等价。必须满足以下性质: 可微性:基于梯度优化必须可微(可导)。 单调性:单层网络保证是凸函数。 输出值范围:当激活函数输出值有限时,基于梯度的优化方法可以更加稳定,因为特征的表示受有限权值的影响更加显著。当输出值时无限时,模型的训练更加高效,在这种情况下需要更小的learning rate. sigmoid f(x)=11+e−xf(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1 sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。 sigmoid自身的缺陷: 最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0:lim_x→∞f′(x)=0\lim \_{x \rightarrow \infty} f^{\prime}(x)=0 lim_x→∞f′(x)=0 具有这种 ...
朴素贝叶斯分类器详解
算法参考: https://wizardforcel.gitbooks.io/dm-algo-top10/content/naive-bayes.html 分类问题定义 已知集合:C={y1,y2,...,yn}C=\{y_1, y_2, ..., y_n\}C={y1,y2,...,yn}和I={x1,x2,...,xm}I=\{x_1, x_2, ..., x_m\}I={x1,x2,...,xm},确定映射规则y=f(x)y=f(x)y=f(x), 使得任意xi∈Ix_i\in Ixi∈I 有且仅有一个yj∈Cy_j\in Cyj∈C使得yj=f(xi)y_j=f(x_i)yj=f(xi)成立。 贝叶斯定理 条件概率:P(A∣B)P(A|B)P(A∣B)表示事件B发生的前提下事件A发生的概率——条件概率。计算方式:P(A∣B)=P(AB)P(B)P(A|B)=\frac{P(AB)}{P(B)}P(A∣B)=P(B)P(AB) 贝叶斯定理定义如下: P(B∣A)=P(A∣B)P(B)P(A)P(B|A)=\frac{P(A|B)P(B)}{P(A)} ...
Vim 命令指南
插入 在普通模式下按以下按键可进入插入模式,执行插入操作,具体包括: 从光标当前所在位置的【前】一个字符处开始插入:i 从光标当前所在位置的【后】一个字符处开始插入:a 从光标当前所在行的【行首】处开始插入:I 从光标当前所在行的【行尾】处开始插入:A 从光标当前所在行的【下一行】处开始插入:o 从光标当前所在行的【上一行】处开始插入:O 删除 在普通模式下按以下按键可执行删除操作,具体包括: 删除光标位置的【一个】字符:x 删除当前光标所在【行】:dd 删除从光标所在位置到当前【行首】的内容:d0 删除从光标所在位置到当前【行尾】的内容:d$ 删除从光标所在位置到当前【单词结束】部分的内容并进入插入模式:cw、cW 删除从光标所在位置到当前【单词开始】部分的内容并进入插入模式:cb、cB 删除从光标所在位置到当前【单词结束】部分的内容但不进入插入模式:dw、dW 删除从光标所在位置到当前【单词开始】部分的内容但不进入插入模式:db、dB 注: (1) Vim的命令中,0 表示行首,$ 表示行尾,更多内容可参考Vim教程网上的Vim操作范围、文件范围介绍。 (2) w (wor ...
【2018/AAAI】Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning
文章链接: https://arxiv.org/pdf/1801.07606.pdf TL;DR 文章中对于GCN进行了进一步思考, 解释了GCN在semi-supervised learning中有效的原因(Laplacian smoothing). 指出了GCN的优点和缺点, 对于GCN中需要大量labeled validation set 来停止训练和挑选模型的问题, 文中提出了co-training和self-training的方法, 效果有所提升. Dataset/Algorithm/Model/Experiment Detail 文章中先通过一系列的推导, 证明GCN就是一种特殊形式的Laplacian smoothing. Laplacian smoothing 就是当前顶点的feature是其neighbors feature的加权求和. 比较了GCN layer和FCN layer性能的提升程度, 结果如下图所示, 证明GCN确实非常有效: 但是多个layers的GCN容易产生over-smoothing的问题, 如下图所示, 所以目前使用的GCN比较shall ...
线性代数基础知识
本文主要介绍机器学习中的线性代数知识。 本文主要包括以下内容: 标量、向量、矩阵、张量 矩阵向量的运算 单位矩阵和逆矩阵 行列式 方差、标准差、协方差矩阵 范数 特殊类型的矩阵和向量 特征分解及其意义 奇异值分解及其意义 Moore-Penrose伪逆 迹运算 标量、向量、矩阵、张量 标量 一个标量就是一个单独的数值,一般用小写的变量名表示。在定义标量时要说明标量所属的数据类型,如“另n∈Nn\in Nn∈N表示社团的数量”。 向量 可以简单理解为一列数,可以通过索引确定每个单独的数,通常使用粗体的小写表示。当我们需要明确表示向量中的元素是,一般都是表示成为列向量如下: x=[x1x2…xn]x= \left[ \begin{array}{ccc} x_1 \\\\ x_2 \\\\ \dots \\\\ x_n \end{array} \right] x=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x1x2…xn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ 矩阵 矩阵是二维数组,其中每一个元素被两个索引所确定,通常赋予矩阵粗体的大写变量名称表示。如定义矩阵A∈Rm×nA\in R^{m\times ...
【2018/AAAI】An End-to-End Deep Learning Architecture for Graph Classification
文章链接:https://www.cse.wustl.edu/~muhan/papers/AAAI_2018_DGCNN.pdf 源码链接:https://github.com/muhanzhang/pytorch_DGCNN TL;DR 文章中对于图分类的问题提出了一个新的神经网络模型,能够处理任意结构的图。存在两个问题:1)如何有效的提取图中的特征?2)如何有意义的顺序读取图中节点?对于第一个问题,文中提出了一个局部图卷积模型并比较graph kernel。对于第二种问题,文中设计了一个SortPooling layer将顶点进行排序。在图分类数据集上结果比基于graph kernel 和其它dl方法稍微好一点。两点是可以直接end2end训练。 Algorithm/Model 文章提出的模型如下所示: 主要包含三个阶段: graph convolution layers extract vertices’ local substructure features and define a consistent vertex ordering; 卷积层定义如下: Zt+1= ...
Jupyter 常用快捷键介绍
其它设置 Jupyter notebook 导入自定义模块:在当前环境变量中加入自定义模块地址,无需将 notebook 文件与自定义文件放在同一文件夹下,如下所示: 12import syssys.path.append('..') Jupyter 快捷键 命令模式 按键 Esc 开启 Ctrl-Enter : 运行本单元 y : 单元转入代码状态 m : 单元转入 markdown 状态 a : 在上方插入新单元 b : 在下方插入新单元 dd : 删除选中的单元 shift + tab: 查看方法参数 魔法命令 %matplotlib inline 代表使用 inline 作为后端,直接在 Notebook 中内嵌图片,并且可以省略掉 plt.show() 这一步骤。 %timeit 检查任何 Python 语句的执行时间。 %run 你可以使用 %run 命令,在 Notebook 中运行任意的 Python 文件。 func? 查看方法参数与介绍。等同于快捷键shift + tab。
【2018/NeurIPS】Structure-Aware Convolutional Neural Networks
论文链接:http://papers.nips.cc/paper/7287-structure-aware-convolutional-neural-networks.pdf TL;DR 文章中提出了一种新的卷积方式:structure-aware convolution, 这种方式能够同时处理Euclidean和non-Euclidean结构的数据. Dataset/Algorithm/Model 作者利用单变量函数filters(univariate functions)来代替传统的filters, 因此能够对局部不同结构的数据进行卷积运算. 至于单变量函数, 根据函数近似理论, 能够通过切比雪夫多项式来近似. 传统的filter运算: yˉi=wTxi=∑i−m<j<i+mwj−i+m⋅xj,i∈{1,2,⋯ ,n}\bar{y}_{i}=\mathbf{w}^{\mathrm{T}} \mathbf{x}_{i}=\sum_{i-m<j<i+m} w_{j-i+m} \cdot x_{j}, \quad i \in\{1,2, \cdots, n\} ...