<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>图神经网络 on bitJoy</title><link>https://bitjoy.net/tags/%E5%9B%BE%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/</link><description>Recent content in 图神经网络 on bitJoy</description><generator>Hugo -- 0.148.2</generator><language>en</language><lastBuildDate>Wed, 27 Apr 2022 14:36:06 +0800</lastBuildDate><atom:link href="https://bitjoy.net/tags/%E5%9B%BE%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>CS224W（1.12）Lecture 1. Introduction; Machine Learning for Graphs</title><link>https://bitjoy.net/posts/2022-04-27-cs224w-0112-lecture-1-introduction-machine-learning-for-graphs/</link><pubDate>Wed, 27 Apr 2022 14:36:06 +0800</pubDate><guid>https://bitjoy.net/posts/2022-04-27-cs224w-0112-lecture-1-introduction-machine-learning-for-graphs/</guid><description>&lt;h1 id="前言">前言&lt;/h1>
&lt;p>最近的工作涉及到图神经网络，打算系统学习下这方面的内容。首先搜集了相关的教材，发现市面上的教材大多数是罗列论文的形式，不太适合初学者入门。后来找到了斯坦福CS224W这门公开课，打算入坑，一是之前学习过&lt;a href="https://bitjoy.net/categories/stanford-cs224n-nlp-with-deep-learning/">斯坦福CS224N&lt;/a>，感觉不错；二是CS224W这门课的老师是GraphSAGE的作者Jure Leskovec，有大佬背书错不了。&lt;/p>
&lt;ul>
&lt;li>CS224W主页：&lt;a href="http://web.stanford.edu/class/cs224w/">http://web.stanford.edu/class/cs224w/&lt;/a>&lt;/li>
&lt;li>Winter 2021版主页：&lt;a href="http://snap.stanford.edu/class/cs224w-2020/">http://snap.stanford.edu/class/cs224w-2020/&lt;/a>&lt;/li>
&lt;li>Winter 2021版视频：&lt;a href="https://www.youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn">https://www.youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn&lt;/a>，Jure Leskovec是斯洛文尼亚人，英语不是很标准，建议打开YouTube的字幕。&lt;/li>
&lt;/ul>
&lt;h1 id="背景介绍">背景介绍&lt;/h1>
&lt;p>图（Graph）是描述实体（entity）和关系（relation）的一种通用语言形式，它由节点（vertex或node）和连接节点的边组成，很多数据类型都可以用图的形式来描述。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-04-27-cs224w-0112-lecture-1-introduction-machine-learning-for-graphs/cs224w-graph-demo.png">
图1 图及其应用实例&lt;/p>
&lt;p>目前常见的图有两类：&lt;/p>
&lt;ul>
&lt;li>第一类是网络（network），也称为自然图，例如：
&lt;ul>
&lt;li>社交网络，全球70亿人形成一个大网络&lt;/li>
&lt;li>通信网络，例如通过电话、邮件、交易等形成的网络&lt;/li>
&lt;li>生物医药网络，例如基因、蛋白质之间形成的网络&lt;/li>
&lt;li>大脑中的成千上万的神经元形成的网络&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>第二类是通过抽象表示形成的图，例如
&lt;ul>
&lt;li>人工组织形成的信息网络、知识网络&lt;/li>
&lt;li>软件中的代码调用形成的网络&lt;/li>
&lt;li>分子网络、场景图、基于粒子的物理模拟等&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>现有的机器学习工具箱主要针对图像、文本和语音，对图的机器学习处理工具相对较少，因为图是不规则的数据，难以处理。对图的处理主要有以下难点：&lt;/p>
&lt;ul>
&lt;li>图不是欧几里得数据结构，没有固定的大小和拓扑结构&lt;/li>
&lt;li>图上的节点没有固定的顺序，也没有参考点，是去中心化的&lt;/li>
&lt;li>图会随着时间动态变化，并且图中常常会融合多模态信息&lt;/li>
&lt;/ul>
&lt;p>本课程的两个重点：&lt;/p>
&lt;ul>
&lt;li>Deep learning in graphs，即图上的深度学习算法&lt;/li>
&lt;li>Representation learning，即图表示学习，将图中的节点嵌入到一个低维稠密向量中，使得网络中相似节点的embedding距离接近&lt;/li>
&lt;/ul>
&lt;p>本课程的主要内容包括：&lt;/p>
&lt;ul>
&lt;li>传统方法：Graphlets，Graph Kernels&lt;/li>
&lt;li>节点嵌入方法：DeepWalk，Node2Vec&lt;/li>
&lt;li>图神经网络：GCN，GraphSAGE，GAT，Theory of GNNs&lt;/li>
&lt;li>知识图谱：TransE，BetaE&lt;/li>
&lt;li>图上的深度生成网络&lt;/li>
&lt;li>图在生物医药，科学和工业上的应用&lt;/li>
&lt;/ul>
&lt;h1 id="图机器学习应用">图机器学习应用&lt;/h1>
&lt;p>图可以有很多应用场景，这些应用可以分为节点水平的（nodel level）、边水平的（edge level）、子图水平的（subgraph level）和图水平的（graph level）。下面逐一举例：&lt;/p>
&lt;ul>
&lt;li>Node-level：节点分类（node classification），例如预测节点的属性。节点回归？例如AlphaFolde使用GNN预测每个氨基酸在三维空间中的位置坐标，从而预测蛋白质的结构。感觉和GNN关系不太大吧？具体得看论文了。&lt;/li>
&lt;li>Edge-level：链接预测（link prediction），预测两个节点之间是否存在边。例如在推荐系统中，预测user是否会购买item等。另外还可以用于预测药物的副作用，例如任意两种药组合吃，是否会产生副作用，产生哪种副作用，都是针对边的任务。&lt;/li>
&lt;li>Sub-graph level：地图导航，预测预期到达时间（ETA）。DeepMind和Google Maps合作的一个工作，很有意思：&lt;a href="https://www.deepmind.com/blog/traffic-prediction-with-advanced-graph-neural-networks">https://www.deepmind.com/blog/traffic-prediction-with-advanced-graph-neural-networks&lt;/a>。简单来说，把每条路分段（supersegment），每段表示成一个点，一条路的相邻段（点）连边，交叉路口的段（点）连边。通过GNN的消息传递，一条路的拥堵信息，可以传递到相邻的路。很自然的想法，也符合实际情况，比如在这条路拥堵了，司机可能就会走相邻的路，进而会影响相邻的路的ETA。问题是，GNN对图很敏感，不同地区、地段的路网图差异很大，有的路网小，有的路网大，因此不同training run之间的方差很大。一开始想到用lr decay来缓解。后来使用MetaGradients让模型自动调整学习率。使用多个loss，多目标学习防止过拟合。&lt;/li>
&lt;li>Graph-level：例如新药发现：节点是原子、边是各种键，生成一个graph，就是一种新的复合物。物理模拟：动态图，节点表示粒子，有属性比如速度、动量，然后下一个时刻有新的位置，不断进化变化，类似RNN，可以模拟出粒子的动态变化过程。&lt;/li>
&lt;/ul>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-04-27-cs224w-0112-lecture-1-introduction-machine-learning-for-graphs/cs224w-graph-applications.png">
图2 图机器学习应用场景&lt;/p>
&lt;h1 id="图的表示方法">图的表示方法&lt;/h1>
&lt;p>构成图的基本要素包括顶点集合&lt;em>&lt;strong>N&lt;/strong>&lt;/em>和边集合&lt;em>&lt;strong>E&lt;/strong>&lt;/em>，可以用\(G(N,E)\)来表示一张图。&lt;/p>
&lt;p>根据边是否有方向，可以将图分为无向图和有向图，无向图即图中的边没有方向，有向图即图中的边有方向。&lt;/p>
&lt;p>对于无向图G，每个顶点的度就是该顶点所连边的数目，由于一条边连接了两个顶点，贡献了2个度，所以所有顶点的平均度数=2E/N。&lt;/p>
&lt;p>对于有向图，顶点的度可分为入度和出度，如图3所示，顶点C的入度为2，出度为1。所有顶点的平均入度=平均出度=E/N。如果某个顶点的入度为0，则称该顶点为源点，例如顶点G；如果某个顶点的出度为0，则称该顶点为槽点（sink），就像水槽一样，只进不出；如果某个顶点的入度和出度都为0，则称该顶点为孤立点。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-04-27-cs224w-0112-lecture-1-introduction-machine-learning-for-graphs/cs224w-graph-degrees.png">
图3 图的表示方法和顶点的度&lt;/p></description></item></channel></rss>