图神经网络
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231430987-717795232.png)
node embedding
回顾了之前node2vec的例子以及深度学习卷积的一些基础
浅层encoder的局限性:
参数数量O(v):节点间没有共享参数,每个节点有自己的embedding
不能表征未见过的节点
没有综合考虑节点特征
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231431344-702018310.png)
本节学习图神经网络,多层的非线性的
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231431702-1492769383.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231432092-147985338.png)
那么,在图中,如何做卷积?
如果输入是邻接矩阵,那么模型不能适配各种规模的网络;对节点的顺序也没有敏感性
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231432633-1069387604.png)
图的深度学习基础
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231432933-1529146851.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231433206-1558180762.png)
起初,对于一个图G
V:节点集合
A:邻接矩阵
X:节点的特征向量
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231433513-361941276.png)
图卷机网络
思路:图的邻居定义计算图
信息传播→计算节点特征
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231433889-2078398508.png)
邻居聚合:局部网络邻居
intuition:节点通过神经网络,从邻居聚合信息
深度模型:多层结构
模型可以是任意深度的:
节点在每一层都有embedding
第0层的embedding是输入特征x
第k层的embedding得到的信息是通过经过k跳的节点而得
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231435287-80170053.png)
关键的区分在于信息通过不同的层是如何聚合的?
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231435658-1265414235.png)
基础的方法:平均+神经网络
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231436004-280340693.png)
第0层初始化为节点的特征
公式如下
相似的节点有相似的embedding
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231437347-2108135830.png)
监督学习:训练模型用于节点分类
例如,药品是否有毒
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231437720-1322857201.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231438051-2011895777.png)
模型设计:
定义邻居聚合函数;定义loss函数;训练:生成节点的embedding
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231438691-44912349.png)
聚合参数是所有节点共享的
因此可为未见过的节点生成embedding;甚至是为相近的全新网络生成embedding
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231439327-600141229.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231439756-1950413891.png)
图卷积网络和GraphSAGE
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231440515-1253803348.png)
有比平均更好的聚合方法吗?
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231440908-379240507.png)
对每一层的embedding进行L2正则化
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231441499-1351574597.png)
不相加而是拼接
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231441878-1903517943.png)
3中聚合方法:平均;池化;LSTM
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231442272-1929295550.png)
小结:
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231442630-1327878343.png)
高效的实现
通过对稀疏矩阵的操作
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231442988-2120659137.png)
更多的图卷积网络
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231443405-1940142770.png)
Graph Attention Network (GAT)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231443686-525958023.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231444003-654643281.png)
每个节点的贡献力是否可以使用权重来区分
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231444427-465074332.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231444778-413659717.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231445144-2014850604.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231445526-368894490.png)
例子:
引用网络
应用例子
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231446365-261358798.png)
拼趣:Pinterest采用的是瀑布流的形式展现图片内容,无需用户翻页,新的图片不断自动加载在页面底端,让用户不断的发现新的图片。
Pinterest堪称图片版的Twitter,网民可以将感兴趣的图片在Pinterest保存,其他网友可以关注,也可以转发图片。索尼等许多公司也在Pinterest建立了主页,用图片营销旗下的产品和服务。
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231446815-779736271.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231447451-1459426180.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231447901-1108975907.png)
为每个节点生成一个embedding
从相邻的节点借用信息
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231448322-1850818394.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231448707-2114143118.png)
给用户推荐相关的pins
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231450127-2076442016.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231450481-661169244.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231450884-222663287.png)
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231451315-950867338.png)
使用小贴士
数据预处理是非常重要的:正则化;变量规模的初始化;网络数据的清洗
训练优化器
relu可以获得较好的成效
输出层不需要激活函数
每一层需要偏置
GCN的层在64或128已经很好了,不需要过深
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231452170-111064332.png)
模型:
在训练集上需要过拟合!!
仔细检查loss函数
仔细检查可视化
![](https://img2018.cnblogs.com/blog/985935/202002/985935-20200206231452557-1080287255.png)