# Chapter8. Graph Neural Networks

## Intro

### Node Embeddings

* Intuition : Input으로 들어온 그래프를 d 차원으로 Mapping을 하는데 그래프 안의 비슷한 노드끼리 더 가깝게 임베딩을 하는 함수 F를 배웁니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CEGjTFpb2nBuvAoLO%2F-M5CG5cPtFs3EyVUCjnT%2Fimage.png?alt=media\&token=04bbbc59-03af-4ef9-96ce-9398efde2b12)

* 따라서 목표는 **임베딩에서의 유사도가 네트워크 내에서의 유사도가 되도록 노드를 매핑하는 것**입니다. 아래 그림에서는 코사인 유사도가 됩니다.&#x20;

![네트워크 상에서의 유사도와 인코딩은 정의되어야 합니다.](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CEGjTFpb2nBuvAoLO%2F-M5CGbHgdrY2dQIwV3i-%2Fimage.png?alt=media\&token=b0b206c1-5c70-4bbe-b1cc-0b4cd953da18)

### Two key components

* `Encoder` : 노드를 저 차원의 벡터로 매핑합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CEGjTFpb2nBuvAoLO%2F-M5CGvv7DMW6f1BwHvIx%2Fimage.png?alt=media\&token=8ce610bb-25c9-4e7e-b1bc-c262b3c05953)

* `Similarity function` 은 Input 네트워크에서의 관계를 임베딩 공간에서의 관계로 매핑하는 것을 정의합니다. 즉 u, v 노드가 유사할 수록 임베딩 공간에서의 u, z의 코사인 유사도는 증가합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CEGjTFpb2nBuvAoLO%2F-M5CHGbQOwwuOXL2v4fI%2Fimage.png?alt=media\&token=b5ecdd43-c49c-4768-afe3-136118bf4bfb)

### From "Shallow" to "Deep"

* Embedding을 시각화하면 아래와 같습니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CEGjTFpb2nBuvAoLO%2F-M5CHbDV9z3_H1XeW0VR%2Fimage.png?alt=media\&token=6806b8cb-5f0b-4a18-9870-3339a6b03fd3)

### Shallow Encoders

* 데이터 변환의 한 Layer로 구성되어 있습니다.
* 이 Single hidden Layer 는 node u를 임베딩하여 z로 매핑합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CIBHlTi0RgRsm_CIa%2Fimage.png?alt=media\&token=8b34163f-5dcb-4297-ae27-ccab33773412)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CIGAnz4ZkqA6RX8Ao%2Fimage.png?alt=media\&token=17431810-57c6-4aa3-8fcb-a2d66a34e958)

* 이 알고리즘의 한계는 다음과 같습니다.
  * 우리가 추정하려는 파라미터의 개수는 네트워크 내의 점의 개수, O(|V|)와 똑같습니다. 그리고 노드 사이의 어떤 파라미터도 공유하지 않으며 모든 노드는 자신만의 유일한 임베딩을 가집니다.
  * 학습 과정에서 보지 못한 노드의 임베딩을 만들 수 없습니다. (=transductive)
  * 노드 피처들을 통합하지 못합니다.&#x20;

### Deep Graph Encoders

* Graph Neural Network에 기반한 Deep Encoder를 배우게 됩니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CIoB7jgm7QDm28Ykp%2Fimage.png?alt=media\&token=eaa97683-5e3d-46fb-a893-5be778f43b2d)

* 이러한 딥 인코더들은 전 강의의 노드 유사도 함수와 결합가능합니다!

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CJ3oIYis_kZoqkLCQ%2Fimage.png?alt=media\&token=1fad5a62-0658-4104-a31f-043936653ca3)

### Modern ML Toolbox

* 간단한 형태의 데이터에 특화되어 있습니다. (=Boring Graph ? ㅜ)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CJC8EhVsRvwe1pJkA%2Fimage.png?alt=media\&token=0d6a8057-9632-4a10-8138-74371ae9067a)

### Why is it Hard?

Network들은 더 복잡하기 때문입니다.&#x20;

* 그리드와는 다르게 위상학적으로 복잡한 구조를 가집니다.
* 이미지, 텍스트와는 다르게 고정된 노드, 참조할 수  있 노드가 없습니다.
* 또한 그래프를 Resize? 하긴 어렵습니다.
* 동적이고 Multimodal한 피처들을 가집니다.

### Idea : Convolutional Networks

이미지에서 CNN의 목표는 노드들의 피처나 특징들을 남겨 합성곱, 필터를 일반화하는것입니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CJsrQKsIXTjy7TCJa%2Fimage.png?alt=media\&token=0e7f110d-3a7f-4eee-9621-92ad80b77048)

### From Images to Graphs

아래 Graph 그림에서 가운데 점을 i라고 하면 주위 점들로부터 정보를 모으고 합치는 과정을 거치게 됩니다. 아래 그림은 3x3 필터를 가지고 있을 때 이미지, 그래프에 적용하는 방법입니다. 이미지는 필터에 합성곱을 해서 1개의 피처에 압축하는 반면, Graph 인접한 점들로부터 정보를 모으게 됩니다.&#x20;

&#x20;

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CKOb9OJNXU-Z6FGwv%2Fimage.png?alt=media\&token=30970730-548b-4f18-b1a5-f4d22b206354)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CKBguJOXsPr7cQFNs%2Fimage.png?alt=media\&token=4856574b-5574-409c-9ba2-7d56d1595146)

### Real-World Graphs

실제 세계에는 더 많은 종류의 그래프가 있습니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CKbIvy2JEL024yQVZ%2Fimage.png?alt=media\&token=b2c141b3-9218-49ad-a9b3-813b2d79374a)

### A Naive Approach

* 인접행렬과 피처들을 결합, concat한뒤에 이를 뉴럴 네트워크에 넣는 방식입니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CTAXBDjp5vqcCI9ev%2Fimage.png?alt=media\&token=cd4dfaf8-e8b5-4428-8dae-a32c334fd95c)

* 아이디어의 한계점
  * 파라미터가 N개, 데이터의 개수만큼 필요합니다.
  * 그래프의 크기가 다르면 사용할 수 없습니다.
  * 노드 순서가 바뀌면 또 이상해집니다..임베딩 벡터의 의미가 바뀌게 되는 단점이 생깁니다.
  * Q. 휴리스틱하게 학습시킬 수 있지 않을까?
    * Ans : 가능은 하지만 일반적이진 않습니다.&#x20;

## Basics of Deep Learning for Graphs

### Content

* Local network neighborhoods
  * Describe aggregation strategies&#x20;
  * Define computation graphs
* Stacking multiple layers
  * Describe the model, parameters, training
  * How to fit the model?
  * Simple example for unsupervised and supervised training

### Setup

* 그래프 G가 주여졌을 때
  * V는 정점들의 집합입니.
  * A는 인접행렬이며, 0 또는 1이라고 가정합니다.
  * X는 node 피처들의 행렬입니다. R(m \* V)
  * Node features:
    * Social networks : User profile, User image
    * Biological networks: Gene expression profiles, gene functional information
    * No features

### Graph Convolutional Networks

Computation Graph를 정의해서 노드가 주어졌을 때 노드에 대한 예측을 만드는것이 목표입니다. 노드들의 이웃들을 계산 그래프로 정의합니다. 아래 그림을 예로 들면 노드 i가 주어졌을 때 주위 노드로부터 어떻게 정보를 모으는지 배웁니다.

*Learn how to propagate information across graph to compute node features*

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CU_XATRd718Xm6Cof%2Fimage.png?alt=media\&token=de361e21-9d1a-465b-a9e8-8f5918a71608)

### Idea : Aggregate Neighbors

* Key idea : 부분 네트워크 이웃들로부터 노드 임베딩을 생성합니다. node A는 node B, C, D로부터 정보를 얻습니다. node B 는 node A, C와 연결되어 있으므로 또다시 이로부터 정보를 얻습니다.&#x20;
* Q. 언제 학습을 멈출지 알 수 있을까요?
  * Ans : Depth는 그리 크지 않습니다. 케빈 베이컨 게임을 떠올리면 그 답을 쉽게 알 수 있습니다.
* 박스는 우리가 정보를 모을 신경망의 일종입니다. 단 이때 노드의 번호순서는 고정되어야 합니다. 그 이유는 정보를 모으는 과정에서 뒤죽박죽이 될 수 있습니다.&#x20;

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CUonBOKMLdkKH3VhM%2Fimage.png?alt=media\&token=b5fbea4f-7d46-4f3c-bbc0-8087d38422cb)

* Intuition : 뉴럴넷을 이용해서 이웃 노드들로부터 정보를 모읍니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CV1Z_cxE9oM63vU7m%2Fimage.png?alt=media\&token=cdb56d92-413a-4cfa-ad35-5e6c8d5edb97)

* 네트워크 Neighborhood가 computation graph을 정의합니다. 노드마다 다른 신경망 구조를 가지는 것이 특징입니다. 색깔별로 구조가 다릅니다.&#x20;

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CVDOnN7NN4D34KNtF%2Fimage.png?alt=media\&token=839c7caa-049a-46d1-a631-ee02ff8e7e0a)

### Deep Model : Many Layers

* Model은 자유로운 깊이를 가질 수 있습니다.
  * 노드들은 각 layer에서 임베딩을 가집니다.
  * node u에서의 layer-0 임베딩은 feature Xu입니다.
  * Layer-K에서는 K만큼 떨어진 노드로부터 정보를 얻습니다.
* 예를 들면 Layer-0에서 A, C로부터 피처를 Aggregation 하여 비선형 변환 후 노드 B에 전달합니다.&#x20;

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CVbyIOIqU72yDbMb-%2Fimage.png?alt=media\&token=6b54273e-3445-4d11-b219-7de5d776839e)

### Neighborhood Aggregation

* Basic approach : 이웃 노드로부터 정보들을 모아서 뉴럴넷을 적용합니다. Aggregation 할 때의 합, 평균 등은 노드의 순서가 중요하지 않는 것이 특징입니다.&#x20;

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CWHSo8sQ9fMSOoa_N%2Fimage.png?alt=media\&token=36f3a73e-d4ec-4a3c-87a1-57e4252ec6c2)

### The Math : Deep Encoder

k-1번째 iteration의 주위 노드들의 정보를 평균내고 이를 현재 자기 자신의 임베딩으로 Weight sum하는 과정을 거쳐 k번째 자기자신의 임베딩을 얻습니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CWTmDE9EpdHdM-H5E%2Fimage.png?alt=media\&token=f544f9dd-27cf-46da-9d93-2ef396a51063)

### Model Parameters

W 행렬과 B행렬을 우리가 loss function, 확률적 경사 하강법을 통해 학습을 할 수 있습니다. 이를 vector 형식으로 쓰면 다음과 같습니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CXCgVjijQPFAS-yRU%2Fimage.png?alt=media\&token=1fcc2866-27bd-41b8-a099-855433e3f765)

### Unsupervised Training

* 비지도 학습을 할 시에는
  * 그래프 구조만을 사용하게 됩니다.
  * 비슷한 노드들이 비슷한 임베딩을 가지게 니다.
* 비지도 학습의 손실함수는 아래와 같습니다.
  * `Random walks`
  * `Graph factorization`
  * `Node proximity in the graph`

### Supervised Training

지도학습을 위해 직접적으로 학습합니다. (node classification)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CXqfvn3qS_Zdfx-wJ%2Fimage.png?alt=media\&token=56355608-1a6a-406e-b572-867ed46174cb)

정점 v의 노드 임베딩과 v의 라벨을 통해 지도학습이 가능합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CXxbeYAnrX_KOJEI8%2Fimage.png?alt=media\&token=1f33f55c-345e-4908-b51d-1f4de8ad07e6)

### Model Design : Overview

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CYH__Po5KO10R5lW-%2Fimage.png?alt=media\&token=8dbe4e3e-1bb5-4618-b4e5-22da280084a3)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CYKSF9P6rYBVdQGqh%2Fimage.png?alt=media\&token=1e427e2a-2e1a-4028-b6a8-d838737102af)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CYOtlloTlnDOOGeu8%2Fimage.png?alt=media\&token=757c7d05-3693-4ef5-b3d9-bca0bc9b1a98)

### Inductive Capability

* 모든 노드들에 대한 같은 Aggregation 파라미터가 적용됩니다.
  * 모델의 파라미터 수는 V보다 조금 작기 때문에 보지 않은 노드들에 대해서도 일반화가 가능합니다.(sublinear)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CZZ0yZONBWOe71YCx%2Fimage.png?alt=media\&token=ee4fcb42-be54-4c90-aaf7-3e141009fb73)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CZjckSyL2KMIPtTWs%2Fimage.png?alt=media\&token=f27950c8-6116-40dc-96c7-666110dd2dbf)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CHiDCshmDv5qTvkbd%2F-M5CZnPbsirzCWG64ONV%2Fimage.png?alt=media\&token=52bf29f4-8623-4830-bd50-a968ff26ff36)

## Graph Convolutional Networks and GraphSAGE

### GraphSAGE Idea

어떻게 하면 비슷한 것 끼리 더 잘 Aggregation , 모을 수 있을까요? 첫번째 방법은 L2 Normalization을 Aggregation function에 적용하는 것입니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5C_hu1ZaBqK6m5OtPE%2Fimage.png?alt=media\&token=52801174-9acc-48f8-9eb3-faf570323289)

### Neighborhood Aggregation

* `Simple neighborhood aggregation`:

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5C_r6CrZvE9Bs_t12U%2Fimage.png?alt=media\&token=a7488d91-988d-4c27-83b2-62f2714b17f2)

* `GraphSAGE` : Aggregation 한 것과 자기자신을 임베딩한것을 더하는게 아니라 concat 합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Ca55-yrWDeE2Ee7QQ%2Fimage.png?alt=media\&token=261f6052-7f57-40f8-af4e-3df6bbae3437)

### Neighbor Aggregation : Variants

* `Mean` : 이웃 노드들로부터 정보를 얻은 후 평균을 냅니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CakPsYSYNtkiZdG9d%2Fimage.png?alt=media\&token=d4cbcedf-6cea-486c-a9aa-936c0ecd01da)

* `Pool` : 이웃 노드들의 임베딩을 바꾸고 symmetric 벡터를 용합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CaxJWQuI3CXiJaOib%2Fimage.png?alt=media\&token=9bafdaa0-ae21-4315-95d8-cabfe59e4ea0)

* `LSTM` : 이웃노드들 섞어서 LSTM을 적용합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cb4gX8HPSCdi7u6Xq%2Fimage.png?alt=media\&token=2c30b749-3a10-4219-9854-7d35f70bb1ff)

### Recap : GCN, GraphSAGE

GCN, GraphSAGE는 모두 이웃 노드들로부터 임베딩을 새로 만드는 것입니다. 노드들은 뉴럴넷을 사용하여 그들의 이웃들로부터 정보를 모읍니다.

* `Graph convolutional networks`
  * 정보를 모으고 뉴럴넷에 쌓습니다. - Average neighborhood information
* `GraphSAGE`
  * Aggregation 함수를 일반화합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CbcNSf8E5ml_OFjaK%2Fimage.png?alt=media\&token=5b4e5616-18c3-414f-b45c-2448784aea42)

### Efficient Implementation

* `GCN, GraphSAGE`는 희소행렬에 대하여 효율적으로 연산이 가능합니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cbrwa5x_uco9aXPPr%2Fimage.png?alt=media\&token=d22d5fee-1be4-4fd0-af6d-0fc7665c3566)

### More on Graph Neural Networks

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cc18yMIAmOrPjIeJN%2Fimage.png?alt=media\&token=81c0a63f-b5c3-4d4a-886d-76e5847b15fc)

## Graph Attention Networks

### Simple Neighborhood Aggregation

* Graph convolutional operator:
  * 이웃 노드들로부터 정보, 메시지를 모읍니다. N(v)
  * 1/N(v) 는 노드 u에서 v로가는 중요도, `weighting factor(importance)`를 나타냅니다.
  * 이는 그래프의 구조적인 특징을 명확히 정의합니다. 하지만 모든 노드가 이 중요도가 같다고 볼수는 없습니다.&#x20;

### Graph Attention Networks

* 그래프의 각 노드의 다른 이웃 노드들의 중요도를  다르게 표현합니다.
* 노드의 임베딩을 Attention 전략에 따라 계산합니다.

### Attention Mechanism

* `attention coefficients` e(vu) 를 통해서 노드 u, v사이의 정보 중요도를 계산합니다. e(vu)는 노드 u에서 노드 v로 가는 메시지, 정보의 중요도를 가리킵니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cp6Jkk_z8bCuARn7Y%2Fimage.png?alt=media\&token=c4c7ba6b-e96d-463d-805c-b60220a1a3e9)

* `Normalize coefficients` 를 이용해서 다른 이웃들간 정보량을 계산할 수 있습니다.

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CpWaoZRg6R2uH3Fon%2Fimage.png?alt=media\&token=730dd4e8-2ff8-40f5-990f-825a51089726)

* &#x20;`Attention mechanism` a
  * The approach is agnostic to the choice of a, 정하기 나름입니다.&#x20;
  * Parameters of a are trained jointly, 파라미터들은 서로 독립이 닙니다.&#x20;
* `Multi-head attention` : Stabilize the learning process of attention mechanism
  * Attention operations in a given layer are independently replicated R times
  * Outputs are aggregated

### Properties of Attentional Mechanism

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cq5hk8wIPHvzD7wav%2Fimage.png?alt=media\&token=0019bbd9-a71b-4dd1-b781-8df0ed94705c)

### GAT Example : Cora Citation Net

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqE0at_vrCGXtnt3_%2Fimage.png?alt=media\&token=75331997-87c0-4bdc-bfc1-3d282113dc44)

## Example Application

### Application : Pinterest

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqT1WE8j-5K_aeQb9%2Fimage.png?alt=media\&token=c4b90e4d-209b-4f8a-941e-b561bb72a84b)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqY_ffMiaBqoUrLN0%2Fimage.png?alt=media\&token=af172e2f-7fb0-4780-8946-82175f75c505)

### Pinterest Graph

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqgtcXeecUxLJFfHc%2Fimage.png?alt=media\&token=9d9cfb8a-799b-4a9d-90de-cad7c7a4a64b)

### Pinsage: Overview

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqmtPjfmtnbqeQqbz%2Fimage.png?alt=media\&token=120f80f7-4128-453d-9c8b-7de3fd443460)

### Embedding Nodes

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqrclELfQKRgBLVxM%2Fimage.png?alt=media\&token=1275ed99-cfd3-4a4d-9d77-a8424e2b6e65)

### Task Overview

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CqzAwi4P-rFqxcuGZ%2Fimage.png?alt=media\&token=85a4046c-6cce-4ecc-86a1-4558c87df4fa)

### PinSAGE Training

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cr3IkhUxVh8AsPWYg%2Fimage.png?alt=media\&token=e42b5a31-ae0d-4fb1-a2ee-4273af2ab86e)

### PinSAGE Efficiency

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CrCgclZ6SfUJiHQdD%2Fimage.png?alt=media\&token=45c14ad0-16bb-4574-bd8e-1be08074bfb9)

### PinSage : Key Innovations

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CrKBZfxWx4mNHuGT1%2Fimage.png?alt=media\&token=6647c2d7-0164-4d7f-8fb2-1e6dea51ee83)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CrN2laOgPBUvI04to%2Fimage.png?alt=media\&token=c780adab-5610-461d-a491-fa094592e8a3)

### PinSage : Experiments

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CrTRCCo66xtqG9ejg%2Fimage.png?alt=media\&token=07b7a07a-cfca-4156-8a70-b3f6c6aa84d9)

### Example Pin Recommendations

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cr_od7wady9ZE1GJZ%2Fimage.png?alt=media\&token=9d07d01e-f912-428f-8613-f494e61a78a2)

### PinSAGE Recommendations

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CrfkXXJZ0yZtaaaDm%2Fimage.png?alt=media\&token=5e655e9a-ac0c-4bf7-9c87-ba39acb921a2)

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CriGcUBPPpWlILmAs%2Fimage.png?alt=media\&token=924076a2-e4dc-4787-824d-cf5f368232fc)

## General Tips and Practical Demos

### General Tips

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5CrqYIHEvcI59M8Odb%2Fimage.png?alt=media\&token=96785c7c-cdee-4cdd-bd73-598ffa0a1fd5)

### Debugging Deep Networks

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cryu1XqoYFglgQZ7T%2Fimage.png?alt=media\&token=7f124d70-1eb6-41c1-9634-5165724ebabe)

### Demo : Human Disease Network

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cs3togfgowFicGz9W%2Fimage.png?alt=media\&token=318f3cdf-ee14-4fa6-9f5c-0174a2c44f31)

### Demo : Protein Interation Prediction

![](https://3892657537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2xLeAqFxBlU6u7AkUh%2F-M5CZtjURnmU4tHYcXZU%2F-M5Cs9qQ6FYVzFsnBegs%2Fimage.png?alt=media\&token=ae8b2b85-9e2a-48f4-b64f-4294009a0f07)
