Graph Neural Network 설명 | 개쉬운 그래프 뉴럴 네트워크 Graph Neural Network 답을 믿으세요

당신은 주제를 찾고 있습니까 “graph neural network 설명 – 개쉬운 그래프 뉴럴 네트워크 Graph Neural Network“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://th.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 엔자이너TV 이(가) 작성한 기사에는 조회수 2,298회 및 좋아요 88개 개의 좋아요가 있습니다.

Table of Contents

graph neural network 설명 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 개쉬운 그래프 뉴럴 네트워크 Graph Neural Network – graph neural network 설명 주제에 대한 세부정보를 참조하세요

더 좋은 영상 제작을 위해 후원해 주시면 감사하겠습니다.
https://toss.me/ensigner
최근 딥러닝 분야에서 아직도 많은 연구가 필요하고 실제로 많은 연구가 진행되고 있는 그래프 뉴럴 네트워크입니다.
#GraphNeuralNetwork #DeepLearning #ComputerVision #AI #MachineLearning #ConvolutionNeuralNetwork #CNN #GNN #graphneural

graph neural network 설명 주제에 대한 자세한 내용은 여기를 참조하세요.

GNN 소개 — 기초부터 논문까지 – Medium

Graph Neural Network … GNN은 이름에서도 알 수 있듯이 그래프에 직접 적용할 수 있는 신경망이다. 점 레벨에서, 선 레벨에서, 그래프 레벨에서의 예측 …

+ 여기를 클릭

Source: medium.com

Date Published: 10/21/2022

View: 257

2탄 GNN 기본 개념 알아보기 – 분석뉴비 – Tistory

이번 글에서는 GNN에 대한 기본적인 설명을 적어보려고 한다 … Recurrent Graph Neural Network; Spatial Convolutional Network …

+ 여기에 표시

Source: data-newbie.tistory.com

Date Published: 9/6/2022

View: 1654

Graph Neural Network 설명 – Introduction to GNN – simpling

Graph Neural Network 설명 – Introduction to GNN. Like_Me 2022. 2. 25. 23:06. 이 글은 graph neural network의 원리를 이해하고 앞으로 공부해나가는데 도움을 …

+ 여기를 클릭

Source: simpling.tistory.com

Date Published: 11/3/2022

View: 3018

Graph Neural Network – Samsung Software Membership

Graph Neural Network GNN (Graph Neural Network)는 그래프 구조에서 사용하는 인공 신경망을 말합니다. 우리가 흔히 알고 있는 인공 신경망에는 …

+ 여기를 클릭

Source: www.secmem.org

Date Published: 3/11/2022

View: 3938

Graph Neural Network(GNN) 란? – 1 – 매일 한걸음씩

GNN(Graph Neural Network)은 단어 그대로 그래프의 형태를 가진 데이터에서 사용되는 뉴럴 네트워크다. GNN의 활용 예시로는 대표적으로 Node …

+ 여기에 더 보기

Source: simonezz.tistory.com

Date Published: 12/5/2022

View: 5947

Graph Neural Network 찍어먹기 – TooTouch

ConvGNNs에는 크게 spectral과 spatial로 나뉘는데 이에 대한 설명은 아래에서 이어하기로 한다. GAEs는 기존 AE와 같이 graph data를 embedding하거나 …

+ 여기에 더 보기

Source: tootouch.github.io

Date Published: 6/19/2022

View: 8231

[CS224W] 8. Graph Neural Networks – 지니티토리

Graph Neural Network는 이웃 정보를 집계해서 노드에 대한 embedding을 하는 방법입니다. 학습 진행 후에 추가 임베딩이 가능하고, 속성 정보를 저장해서 …

+ 여기에 더 보기

Source: jxnjxn.tistory.com

Date Published: 12/21/2021

View: 1258

Graph Neural Networks 개념정리 1 – 개요 – THEJB.AI

하지만 논문을 그대로 해석하는 것이 아니라 GNN에 대한 이해 측면에 중점을 두어 나름대로 주관적인 해석과 설명을 붙이고, 내용들을 참고하여 여러가지 …

+ 여기에 자세히 보기

Source: thejb.ai

Date Published: 6/6/2021

View: 855

Graph Neural Networks (GNN) / 그래프 뉴럴 네트워크 기초 …

그래프 G는 방향성이 있거나(directed) 없는(undirected) 엣지(edge)로 연결된 노드(nodes=verticles)들의 집합이다. 여기서 노드와 엣지는 일반적으로 …

+ 여기를 클릭

Source: littlefoxdiary.tistory.com

Date Published: 10/6/2022

View: 3031

GNN(Graph Neural Network) 계열 모델과 추천 시스템 – 지그시

GNN은 그래프 데이터에 적용 가능한 신경망이며, 그래프를 구성하는 각 노드를 잘 표현하는 임베딩을 만든다. 즉, 이웃 노드들 간의 정보를 이용해서 특정 …

+ 여기에 보기

Source: glanceyes.tistory.com

Date Published: 7/10/2021

View: 6151

주제와 관련된 이미지 graph neural network 설명

주제와 관련된 더 많은 사진을 참조하십시오 개쉬운 그래프 뉴럴 네트워크 Graph Neural Network. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

개쉬운 그래프 뉴럴 네트워크 Graph Neural Network
개쉬운 그래프 뉴럴 네트워크 Graph Neural Network

주제에 대한 기사 평가 graph neural network 설명

  • Author: 엔자이너TV
  • Views: 조회수 2,298회
  • Likes: 좋아요 88개
  • Date Published: 2022. 3. 6.
  • Video Url link: https://www.youtube.com/watch?v=9eMbvfRM9_8

2탄 GNN 기본 개념 알아보기

728×90

2021.03.13 – [관심있는 주제] – GNN- 1탄 Graph 기본 개념 알아보기

2021.03.13 – [관심있는 주제] – GNN – 2탄 GNN 기본 개념 알아보기

앞 글에서는 GNN을 하는데 있어 Graph가 먼지 어디에 적용하고, 현재 왜 적용하고 싶어 하는지에 대해서 알아봤다.

이번 글에서는 GNN에 대한 기본적인 설명을 적어보려고 한다

GNN은 이름에서도 알 수 있듯이 그래프에 직접 적용할 수 있는 신경망이다.

점 레벨에서, 선 레벨에서, 그래프 레벨에서의 예측 작업에 쓰인다.

여기서 나온 글에서는 3개의 큰 개념 알고리즘이 있다.

Recurrent Graph Neural Network Spatial Convolutional Network Spectral Convolutional Network

다른 적용 관련 페이퍼들은 아래 링크를 참고하시면 된다.

github.com/thunlp/GNNPapers

GNN의 핵심은 점이 이웃과의 연결에 의해 정의된다는 것이다.

만약 어떤 점의 이웃과 연결을 다 끊으면 그 점은 고립되고 아무 의미를 갖지 않게 된다.

따라서 노드의 이웃과 이웃에 대한 연결이 노드의 개념을 정의합니다.

이를 염두하고, 모든 점(node)이 각각의 특징을 설명하는 어떤 상태(state)로 표현되어 있다고 생각해보자.

우리는 output(o)를 만들기 위해서 node state(x)를 사용한다.

다른 글에서 좋은 예시가 있어서 그대로 차용했다.

예를 들어, 점이 영화고 이 영화는 로맨스,범죄,공포 중에 로맨스, 범죄에 해당한다면 (1,1,0)의 상태를 가지고 있다고 생각할 수 있다. GNN은 주로 연결관계와 이웃들의 상태를 이용하여 각 점의 상태를 업데이트(학습)하고 마지막 상태를 통해 예측 업무를 수행한다. 일반적으로 마지막 상태를 ‘node embedding’이라고 부른다.

즉 노드 상태 (x)를 사용하여 출력 (o), 즉 개념에 대한 결정을 생성 할 수 있습니다.

노드의 최종 상태 ($x_n$)는 일반적으로 “node embedding”이라고합니다.

모든 GNN의 task는 인접 노드에 대한 정보를 보고 각 노드의 “node embedding”을 결정하는 것입니다.

Recurrent Graph Neural Network

original GNN Paper에서 도입된 것 처럼, RecGNN은 Banach Fixed-Point Theorem의 가정을 기반으로 한다.

BanachFixed-Point Theorem은 다음과 같다.

이 글을 읽어야 도움이 될 것 같다…

simcho999.blogspot.com/2020/11/numerical-analysis-banach-fixed-point.html

k가 크면, x에 매핑 T를 k번 적용한 값과 k+1번 적용한 값이 거의 같다는 의미로 이해하면 된다.

RecGNN defines a parameterized function $f_w$:

여기에서, l_{n}는 점 n의 feature, l_{co [n]}은 점 n과 연결된 선들의 feature, l_{ne [n]}은 점 n과 연결된 점들의 feature, x_{ne [n]}은 점 n과 연결된 점들의 상태를 의미한다.

$f_w$ 와 $g_w$ 에 대한 설명은 다음과 같음.

Spatial Convolutional Network

Spatial Convolutional Network의 아이디어는 이미지 분류와 이미지 영역 구분에 많이 쓰이는 Convolutional Neural Network(CNN)의 아이디어와 비슷하다.

간단히 말하면, 이미지에서 convolution의 아이디어는 학습 가능한 필터를 통해 중심 픽셀의 주변 픽셀을 합치는 것이다. Spatial Convolution Network의 핵심 아이디어는 이 아이디어에서 주변 픽셀 대신 연결된 점의 특징을 적용한 것이다.

http://dmqm.korea.ac.kr/activity/seminar/267

자세한 GCN 내부 작동은 아래 설명을 참고하면 될 듯 합니다.

ganghee-lee.tistory.com/27

Spectral Convolutional Network

Spectral Convolutional Network는 그래프 신호 처리 이론을 기반으로 고안됐으며 위에 설명한 것들보다 더 수학적 기반을 가지고 있다. 이 글에서는 최대한 쉽고 간략하게 느낌적인 느낌을 설명하도록 하겠다.

‘Semi-Supervised Classification with Graph Convolutional Networks’(논문 링크, 블로그 링크)에서 두 층으로 된 신경망을 제안하는데 아래 식으로 정리할 수 있다.

By Chebyshev polynomial approximation (Hammond et al. 2011), graph convolution can be simplified to below form:

여기에서 Â 는 인접 행렬 A를 약간 변형한 것이라고 생각하면 된다. (물론, Â의 정의는 중요하고 ‘spectral’을 붙인 이유이긴 한데 논문에서 각자 읽도록 하자.)

위 식의 형태는 머신러닝에 익숙하다면 본 적이 있을 것이다. fully-connected layer 두 개를 연결한 식에선 학습 가능한 행렬 W만 있는데 위 식엔 Â 이 붙어있다. 자세한 내용은 논문을 보면 알 수 있고, 여기에선 인접 행렬의 변형과 feature matrix를 곱하는 것인지 확인해보자.

노드가 4개인 간단한 그래프를 생각해보자.

위의 그림처럼 연결되어있고 점 옆에 있는 수들은 그래프의 feature를 나타낸다.

아래처럼 대각선을 1로 채운 인접 행렬과 feature matrix를 쉽게 얻을 수 있다.

adjacency matrix의 대각선은 일부러 1을 넣는다. 왜냐하면 각각의 노드에 self loop를 추가해야 하기 때문이다.

이것은 feature aggregation 수행할 때, 각 노드들의 각정의 피처를 포함시키려고 하는 것입니다.

AxX를 수행하다.

가장 오른쪽에 있는 행렬이 곱한 결과이다.

곱한 후 [점 1]의 feature를 보자. [점 1] 자신과 이웃인 [점 2], [점 3]의 feature를 합한 값임을 알 수 있다. [점 4]는 [점 1]의 이웃이 아니므로 [점 4]의 feature는 더해지지 않았다. 인접 행렬의 성질에 의해 곱한 결과가 자신과 이웃의 feature 합이 되었다. (이 부분은 애매하다)

따라서, Spectral Convolutional Network와 Spatial Convolutional Network는 다른 내용을 기초로 하고 있지만 비슷한 연산 과정을 거친다.

현재 대부분의 Convolutional GNN이 이런 식이다. 점(node)의 정보를 공유하고 업데이트를 하는데 어떻게 전달할 것인지에 대한 연구가 많이 진행되고 있다.

GNN은 message-passing 함수와 함께 Message Passing Neural Network로 표현된다.

‘Neural Message Passing for Quantum Chemistry’에서 아래 세 가지 함수를 정의하여 GNN을 Quantum Chemistry에 적용하는 연구를 했다. 자세한 정의는 생략하지만 첨자와 기호를 보면 대략 어떤 식인지 추측할 수 있다.

What Can GNN do?

GNN은 크게 3가지로 나눌 수 있다.

Node Classification Link Prediction Graph Classification

In node classification,

Node embedding을 통해 점들을 분류하는 문제다. 일반적으로 그래프의 일부만 레이블 된 상황에서 semi-supervised learning을 한다.

대표적인 응용 영역으로는 citation networks, Reddit posts, Youtube videos, and Facebook friends relationships.이다.

In link prediction,

그래프의 점들 사이의 관계를 파악하고 두 점 사이에 얼마나 연관성이 있을지 예측하는 문제다.

대표적인 응용 영역으로는 페이스북 친구 추천, 왓챠 플레이(유튜브, 넷플릭스) 영상 추천 등이 있다.

예를 들어, 추천 시스템은 모델이 서로 다른 제품에 대한 사용자 리뷰 세트를 제공하는 링크 예측 문제로 취급될 수 있으며, 작업은 사용자의 선호도를 예측하고 사용자에 따라 더 관련성 있는 제품을 푸시하도록 추천 시스템을 조정하는 것입니다.

In graph classification,

그래프 전체를 여러 가지 카테고리로 분류하는 문제이다.

이미지 분류와 비슷하지만 대상이 그래프라고 생각하면 된다. 분자 구조가 그래프의 형태로 제공되어 그걸 분류하는 산업 문제에 광범위하게 적용할 수 있다.

대표적인 응용 영역으로는 화학, 생의학, 물리학 연구자들과 활발히 협업을 하고 있다.

참조 :

paperswithcode.com/area/graphs

towardsdatascience.com/spectral-graph-convolution-explained-and-implemented-step-by-step-2e495b57f801

www.groundai.com/project/graph-convolutional-networks-with-eigenpooling/1

dmqm.korea.ac.kr/activity/seminar/267

https://littlefoxdiary.tistory.com/16#:~:text=%EA%B7%B8%EB%9E%98%ED%94%84%20%EB%89%B4%EB%9F%B4%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%8A%94%20%EA%B7%B8%EB%9E%98%ED%94%84, %EC%B5%9C%EA%B7%BC%20%EC%9D%B8%EA%B8%B0%EA%B0%80%20%EB%86%92%EC%95%84%EC%A7%80%EA%B3%A0%20%EC%9E%88%EB%8B%A4.

towardsdatascience.com/an-introduction-to-graph-neural-network-gnn-for-analysing-structured-data-afce79f4cfdc

www.youtube.com/watch?v=zCEYiCxrL_0

www.ee.iitb.ac.in/~eestudentrg/presentations/Deconvoluting_Graph_Convolutional_Networks.pdf

sailab.diism.unisi.it/gnn/auto_examples/PyTorch_Subgraph/main_subgraph.html

courses.cs.washington.edu/courses/cse326/00wi/handouts/lecture21/sld014.html

medium.com/watcha/gnn-%EC%86%8C%EA%B0%9C-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EB%85%BC%EB%AC%B8%EA%B9%8C%EC%A7%80-96567b783479

www.slideshare.net/JungwonKim10/graph-neural-network

728×90

Graph Neural Network 설명 – Introduction to GNN

이 글은 graph neural network의 원리를 이해하고 앞으로 공부해나가는데 도움을 주기 위한 목적으로 작성되었습니다. 그러므로 너무 상세한 내용은 제거하고 전체적인 구조를 이해하는데 초점을 뒀습니다.

Graph

그래프는 많은 데이터가 가지고 있는 구조이다. 대표적으로 social graph, molecular graph 등이 있다. figure 1처럼 여러 개의 node(혹은 vertex)와 edge가 연결되어 있는 구조를 말한다. social graph 라면 node가 한 명의 사람이 될 수 있을 것이고 edge는 그 사이의 관계가 될 수 있다.

figure 1. molecular graph. Image from dreamstime

사람들은 각자의 개성을 가지고 있고 다르므로 node에 이런 정보를 담을 수 있으며 다른 사람과의 관계 또한 직장 동료, 친구, 가족, 원수지간까지 다양할 것이다. 이러한 정보는 edge에 담을 수 있다. 이렇게 정보를 담은 graph는 어떻게 나타내며 neural network에서는 어떻게 쓸까? 이에 대한 내용을 알아볼 것이다.

Adjacency Matrix & Feature Matrix

figure 2. simple graph structure

Figure 2와 같은 간단한 그래프 구조가 있다고 생각해 본다. 이런 구조를 matrix로 표현할 때 node 간의 관계(edge)를 표현하는 adjacency matrix와 node에 담긴 정보를 나타내는 feature matrix가 필요하다.

$$ Adjacency \; matrix \; A = \left [ \begin {matrix} 0&1&0&0 \\ 1&0&1&1 \\ 0&1&0&0 \\ 0&1&0&0 \\ \end {matrix} \right] $$

$$ Feature \; matrix \; F = \left [ \begin {matrix} 0&1&1 \\ 1&0&1 \\ 1&0&1 \\ 0&1&1 \end {matrix} \right] $$

Adjacency matrix A의 각 성분 $A_{i, j}$는 i번째 node와 j번째 node가 연결되어 있는지를 보여준다. 연결되어 있다면 1, 아니라면 0으로 숫자를 가진다. 따라서 A는 node 개수만큼의 row(행)과 column(열)을 가지는 matrix이다.

– 위와 같은 graph는 edge에 방향이 있지 않아서 undirected graph라고 하며 adjacency matrix는 symmetric 하다.

– edge에 방향이 있는 경우는 directed graph라고 하며 adjacency matrix가 symmetric 하지 않은 형태다. (예를 들어 1->2로 연결된 edge라면 1행 2열은 1의 값을 갖지만 2행 1열은 0의 값을 갖도록 표시해준다.)

Feature matrix F의 각 성분 $F_{i, j}$는 i번째 node의 j번째 feature는 무엇인지 보여준다. 여기서는 1번 node와 4번 node가 같은 색이고 2번 node와 3번 node가 같은 색이므로 같은 feature를 가졌다고 생각하여 행렬을 표현하였다. 각 node는 feature를 3개 가지고 있다고 가정하여 column(열)은 3개이며 node는 총 4개이므로 row(행)가 4개인 구조의 matrix를 가진다.

Graph Convolution Network (GCN)

figure 3. Image from [1]

Graph structure를 matrix로 표현하는 방법을 간단히 알아보았다. Graph는 edge가 node 간의 연결을 이루는 구조이므로 edge로 연결된 node끼리의 정보 교환이 중요하다 할 수 있다. 예를 들어 social graph의 경우 서로 연결된 가족이라면 비슷한 정보를 가지고 있을 수 있고 어떤 예측을 하는데 서로 도움이 될 수 있다. 이를 위해 graph structure를 고려하여 연산을 하는 방법이 필요한데 그중 하나가 convolution을 이용한 방법이다. Figure 3 (a)를 보면 정배열된 node 간의 정보를 spatial 하게 얻어서 사용하는 방법이 convolution이고 이런 특성 때문에 Image 계열에서 많이 사용된다. 대표적인 특징으로 3가지가 있다.

– Spatial feature extraction : 주변 node의 정보를 가져와 feature를 추출한다.

– Weight Sharing : weight를 각 영역별로 따로 사용하는 게 아니라 공유하여 사용한다.

– Translation invariance : image의 경우 그림을 조금 shift 하더라도 같은 결과를 가져오게 한다.

이런 특성을 가져와 figure 3 (b)처럼 그래프에서도 주변 node의 정보를 spatial 하게 얻어 정보를 업데이트하는 방법을 고안한 것이 graph convolution network다. Figure 1의 경우에 대입해서 생각해보면 2번 node를 업데이트할 때는 1,3,4 node를 사용하지만 다른 node는 2번 node만을 사용하는 것이다. (실제로는 자기 자신의 정보도 중요하므로 자신의 정보도 함께 사용하여 업데이트한다. 즉 adjacency matrix의 대각 성분은 1이 된다.) 실제 연산은 $AFW$ matrix 연산으로 이루어진다. A는 adjacency matrix이며 F는 feature matrix, W는 weight matrix이다.

$$ F_{2}^{l+1} = \sigma(F_{1}^{l} W^{l} + F_{2} W^{l} + F_{3}^{l} W^{l} + F_{4}^{l} W^{l}) $$

위의 식은 l+1 번째 layer를 통과한 2번째 row(node)의 vector를 나타낸 것이다. $\sigma$는 activation funciton을 나타낸다. Weight matrix는 sharing 하여 모든 feature vector 연산에서 똑같이 적용된다. 예시에서는 2번째 node를 업데이트하므로 1,2,3,4 node를 모두 이용하여 업데이트하게 된다. 1번째 node였다면 1,2 node만을 이용해서 업데이트를 해야 한다. F와 W만을 이용해서는 이런 spatial 한 feature를 뽑지는 못하여 adjacency matrix A를 사용한다. Weight sharing을 사용해 업데이트된 matrix와 adjacency matrix를 연산하게 되면 각 node에 연결된 node의 feature 만을 이용하여 다음 업데이트를 하게 된다.

figure 4. matrix 연산 과정

예를 들어 figure 2의 graph를 업데이트한다 했을 때 figure 4와 같이 matrix가 연산된다. A는 $4 \times 4$, F는 $4 \times 3$, W는 $3 \times 64$ 의 matrix를 가진다고 하겠다. $FW$를 연산하면 $4 \times 64$의 matrix가 되고 이는 각 node의 feature가 64 dimension으로 커져 고차원의 정보를 가지고 있다고 생각할 수 있다. 이 matrix와 A를 연산하면 $4 \times 64$의 matix가 되고 이 과정에서 연결된 node의 정보만을 가져와서 다시 업데이트하는 과정을 거치는 것이다. 마지막으로 graph structure로 연산을 끝낸 값을 node-wise summation을 해도 permutation invariance 하다고 한다. GCN은 convolution이 가지고 있는 특징들을 가지고 있어 graph 연산에서 강력한 이점을 가지고 있다.

추가로 adjacency matrix와 weight matrix를 여러 번 반복해서 사용하게 되면 직접 연결된 node의 정보뿐 아니라 건너 건너 연결된 node의 정보까지 이용할 수 있다. 예를 들어 figure 2의 graph 구조를 연산할 때, 첫 번째 연산에서 2번 node는 1,2,3,4 node를 이용하여 정보를 업데이트했을 것이다. 그다음 연산을 한번 더할 때 1번 node를 업데이트하기 위해 2번 node의 정보를 가져와서 사용한다면 그 node의 정보에는 기존에 업데이트된 1,2,3,4 node의 정보가 담겨 있을 것이기 때문에 1번 node와 직접 연결되지 않은 node의 정보도 이용할 수 있게 된다. 이런 식으로 여러 번 반복하면 convolution처럼 receptive field가 커지는 효과를 얻을 수 있다.

Graph pooling & message passing

Graph neural network에도 정보를 업데이트하기 위한 다양한 방법이 있다. 그중 pooling과 message passing을 간단히 알아보겠다.

Graph pooling

Pooing은 convolution neural network에서도 많이 쓰이는 방법이다. 보통 max pooling이나 average pooling을 많이 사용한다. 이름처럼 뽑은 feature에서 max값만 뽑거나 평균을 내어서 low dimension으로 만드는 방법이다. Graph pooling도 비슷하다. Figure 5의 그림과 같이 복잡한 구조의 graph structure를 단순하게 만드는 데 사용할 수 있다. CNN처럼 max값을 추출하거나 average 값을 추출할 수 있다.

figure 5. graph pooling.([3])

한편 graph pooling은 edge나 node의 정보를 서로 전달하고자 할 때도 사용할 수 있다([2]). Social graph를 예로 들어 보겠다. 각각의 사람들에 대한 정보가 node에 담겨 있고 edge로 node가 연결되어 있다고 할 때, 사람들의 정보를 보고 관계가 좋은지 나쁜지 binary classification (edge prediction)을 하고 싶다고 해보겠다. 이때 pooling을 이용하여 다음의 단계로 prediction을 수행할 수 있다.

1. Edge별로 연결된 node의 정보(features)를 모은다.

2. 정보(features)를 합쳐서 edge로 보낸다. (pooling)

3. Parameter를 이용해서 classification을 수행한다.

이렇게 edge prediction 뿐 아니라 node prediction, global prediction도 가능하다.

Message passing

Message passing은 node 혹은 edge 간의 연관성을 고려하면서 feature를 업데이트하기 위한 방법이다([2], [4]). 예를 들어 node를 주변 node 정보를 이용해서 업데이트하고 싶을 때 message passing은 다음과 같이 이루어진다.

1. Edge로 연결되어 있는 node의 정보(features, messages)를 모은다.

2. 모든 정보를 aggregate function (sum, average 등)을 이용하여 합친다.

3. Update function(parameter)을 이용해서 새로운 정보로 업데이트한다.

Message passing을 여러 번 반복하여 receptive field를 넓힐 수 있고 더 좋은 representation을 얻을 수 있다.

간단히 graph neural network에 대한 기초 내용들을 정리해보았다. GNN은 추천 시스템, 분자구조 예측 등에서 사용된다고 알고 있다. 그 외에도 graph로 이루어진 데이터는 무수히 많고 다양한 영역에서 사용될 수 있는 잠재력이 많은 방법이라고 생각한다.

Reference

[1] https://arxiv.org/abs/1901.00596

[2] https://distill.pub/2021/gnn-intro/

[3] https://arxiv.org/abs/2012.05716

[4] https://arxiv.org/pdf/1704.01212.pdf

반응형

Graph Neural Network

for v in V: h_{v}^{0} = (v의 feature vector) for i in range(1, k+1): for v in V: a = AGGREGATE({h_{u}^{i-1} | {u, v} in E}) h_{v}^{i} = CONCAT(h_{v}^{i-1}, a)

Graph Neural Network(GNN) 란? – 1

Graph Neural Networks — An overview

Over the past decade, we’ve seen that Neural Networks can perform tremendously well in structured data like images and text. Most of the…

towardsdatascience.com

Graph Neural Network 찍어먹기

긴 글에 앞서 survey paper를 보고 정리하는 데 도움을 주신 DSBA 윤훈상 선배님께 무한한 감사의 말을 전합니다.

찍어먹기란? 제목과 같이 해당 포스팅은 말그대로 ‘찍어먹기’다. 그동안 graph를 공부만 해야지 생각했다가 드디어 시간이 생겨서! 는 아니지만 드디어 공부하기 시작했다. 먼저 cs224w 수업을 듣다가 아무래도 전반적인 개론과 같은 내용이 머리 속에 그려져야 할 거 같아서 survey paper를 보았다. 깊이 공부하기에는 너무 많고 그렇다고 안보기에는 아쉽고해서 survey paper를 통해 GNN의 발전 과정과 여러 접근 방법들을 전반적으로 보기로 했다.

Introduction

내가 본 survey paper는 “A comprehensive survey on graph neural networks.” 이다. 작년 3월에 IEEE transactions on neural networks and learning systems에 출판되었고 현재는 벌써 인용 수가 1000회를 넘었다. 이 survey paper에서는 왜 graph neural network (GNN)에 관련된 내용이고 그래프는 다른 데이터와 어떤점이 다른지 그리고 적용된 neural network를 크게 4가지로 나누어 설명한다. 그 안에서도 맥락이 또 나뉘는데 아래에서 분류별로 정리하려 한다. 실제 논문에서는 다양항 학습 과정에서의 관점과 여러 활용 사례들이 있지만 여기서는 학습 방법을 위주로 정리한다. 사실 이미 정리된 걸 또 정리하는 것이기 때문에 단순히 한국어로만 변역해서 쓰는 것이 아닌가 싶은 생각도 있지만 추가적으로 내가 정리하는 내용은 다음과 같다.

Spectral GCN에 대한 중간에 생략된 설명들

Survey paper를 통해 소개된 여러 방법들의 연도별 Roadmap

각 논문들의 source code

Background

기존 머신러닝은 euclidean data에서는 굉장히 잘 적용된다. 하지만 non-euclidean data에는 이와 반대로 적용하기 어려운데 그 이유는 선형회귀와 같은 머신러닝 모델들이 대부분 가정하는 것이 feature가 서로 독립이어야 한다는 것이다. 여기서 non-euclidean data란 그림 (1)과 같이 graph 또는 tree 구조를 가진 데이터를 말한다. Graph는 연결된 edge들이 방향성(directed)이 있거나 없거나(undirected) 순환(cyclic)되는 구조가 있다. 한편 tree는 방향성(directed)이 있는, 즉 유향 비순환(acyclic) 그래프의 한 종류로 생각하면 된다. 단, tree는 root node가 하나로 고정되어 있다. 이러한 non-euclidean data는 각 feature 간의 관계(relation)가 있기 때문에 기존 머신러닝 방법으로는 접근이 어렵다. 따라서 이 문제를 해결하기 위해 다양한 neural network가 제안되었다.

그림 1. Tree와 Graph 구조 예시

Survey paper에서는 GNN을 다음과 같이 크게 4가지 맥락으로 나누었다.

Recurrent Graph Neural Networks (RecGNNs)

Convolutional Graph Neural Networks (ConvGNNs)

Graph AutoEncoders (GAEs)

Spatial-Temporal Graph Neural Networks (STGNNs)

각 맥락별 핵심은 다음과 같다. RecGNNs는 recurrent를 기반으로 iteration을 통해 node를 학습하는 방법을 말한다. ConvGNNs은 Computer Vision에서 사용되는 CNN을 기반으로 각 node 또는 edge의 정보를 계산하는 방법을 말한다. ConvGNNs에는 크게 spectral과 spatial로 나뉘는데 이에 대한 설명은 아래에서 이어하기로 한다. GAEs는 기존 AE와 같이 graph data를 embedding하거나 graph를 생성하기 위한 방법을 말한다. 마지막으로 STGNNs는 graph의 spatial과 temporal을 함께 고려한 방법이다. 즉, 공간과 순서를 함께 고려했다고 생각하면 이해하기 쉽다. 각 방법에 대한 내용은 그림 (2)를 통해 간략하게 볼 수 있다.

그림 2. 4가지 분류에 따른 Graph Neural Network의 학습 방법

Roadmap

Survey paper에서 소개하는 논문은 학습 방법만 따지면 대략 48개의 paper를 소개한다. 물론 각 방법마다 자세하게 설명하는 것은 아니라 핵심 내용만 소개하거나 이전 방법에서 개선된 점만 소개한다. 그림 (3)은 survey paper에서 분류한 GNN 학습 방법을 연도별 그리고 방법별로 나타낸 그림이다.

그림 3. Survey paper에서 소개하는 방법들에 대한 연도와 분류별 Roadmap

Terminology

기본적인 그래프에서 사용하는 notion은 survey paper에서 정리한 표 (1)을 보면 된다.

표 1. GNN에서 사용되는 기본 용어

하지만 graph 개념이 아예 처음이라면 아래 간단한 개념 정도는 짚고 넘어가야 한다. 하나씩 살펴보기 보다 그림 (4)를 통해 한번에 알아보자.

그림 4. Graph에 대한 기본 내용

Node or vertex (\(V\)) : 그래프에서 꼭지점에 해당하는 부분

: 그래프에서 꼭지점에 해당하는 부분 Neighbor of a node \(v\) : \(v\)번째 노드의 이웃

: \(v\)번째 노드의 이웃 Edge or link (\(E\)) : 노드를 연결하는 선

: 노드를 연결하는 선 Degree : 하나의 노드가 이웃과 연결된 edge 수

: 하나의 노드가 이웃과 연결된 edge 수 Adjacency matrix (\(A\)) : 인접 행렬이라고 불리며 노드 간 연결된 경우 1 아닌 경우 0인 정방 행렬

: 인접 행렬이라고 불리며 노드 간 연결된 경우 1 아닌 경우 0인 정방 행렬 Degree matrix (\(D\)) : 대각 원소가 각 노드의 degree로 이루어진 대각 행렬

Recurrent Graph Neural Networks (RecGNNs)

그림 5. RecGNNs Roadmap

1. Learning representations by back-propagating errors (1997)

neural network static infromation or temporal sequence structure data 에는 잘 되지만 graph 같은 structure data에는 잘 안된다. 그 이유는 graph의 경우 structure 사이즈가 다양하기 때문이다. 그래서 이러한 사이즈의 변화에도 사용할 수 있는 방법인 generalized recursive network 를 제안했다. 하지만 computational limitation이 존재한다. 또한, directed graph에만 적용 가능하다는 단점이 있다.

2.1 A new model for learning in graph domains (2005) 2.2 The graph neural network model, GNN (2008)

이후 GNN 이라는 단어를 처음 사용한 논문이 공개 되었다. 97년도에 발표된 generalized recursive network 와는 달리 directed, undirected, cycle이 있는 그래프 모두 적용 가능하다. 또한, 앞선 문제였던 computational complexity를 \(O(m)\)으로 줄였다. 여기서 \(m\)은 edge 수를 말한다. 즉, edge가 늘어남에 따라 complexity 또한 선형적으로 증가함을 말한다. 이유는 잘 모르겠지만 2005년에 처음 GNN을 소개했는데 앞선 논문에 더해서 time complextity를 줄이는 내용을 더 디테일하게 소개하며 2008년에 두 명의 저자가 추가되어 또 발표했다.

학습 방법은 이웃 노드들의 information을 recurrent하게 전달하여 node state를 업데이트 한다. 이 과정을 node state가 수렴할 때까지 iteration을 반복해야 한다.

3. Graph Echo State Networks, GraphESN (2010)

GraphESN을 간단히 설명하자면 encoder와 output layer로 구성되어 있고 encoder를 통해 전체 graph를 나타내는 값으로 변환한 뒤 고정한다. 이름과 같이 고정된 encoder를 echo로서 언급한 듯 하다. encoder를 학습하는 방법은 contractive state transition function을 통해 recurrent하게 노드를 업데이트하며 global graph state가 수렴할 때까지 반복한다.

4. Gated graph sequence neural networks, GGNN (2015)

이전에는 수렴할 때까지 iteration을 반복해야 한다는 단점이 있었지만 GGNN은 step 수를 고정해서 학습하기 때문에 convergence를 위한 iteration parameter가 없다는 것이 장점이다. 또한 이름에서와 같이 recurrent function으로 gated recurrent unit (GRU)을 사용하였다. 이전 GNN과 GraphESN 과의 차이점이라면 back-propagation through time (BPTT)를 사용했다는 것이지만 이러한 방법이 단점이 되기도 한다. Large scale 모델의 경우 모든 node에 대해 intermediate state를 가지고 있어야하기 때문에 memory가 많이 필요하다는 게 흠이다.

5. Stochastic Steady-state Embedding, SSE (2018)

SSE는 앞선 large sacle 모델에 대한 메모리 문제점을 해결할 수 있는 방법이다. Node의 hidden state를 stochastic 방식으로 업데이트 하기 때문에 node를 배치로 샘플링해서 업데이트 할 수 있고 gradient 또한 마찬가지로 배치 단위로 계산한다. 하지만 이러한 배치 단위의 학습이 stability를 낮출 수 있는데 이전 state와 현재 state에 가중 평균을 적용해서 stability를 높였다.

Convolutional Graph Neural Networks (ConvGNNs)

Spectral vs Spatial

일반적으로 Graph data에 Convolution을 적용하기 위해 크게 spectral과 spatial 두 가지 관점으로 접근한다. Spectral 모델은 graph signal processing으로 접근하여 이론적인 기반이 튼튼하다는 장점이 있지만 spatial 모델들에 비해 효율성(efficiency), 일반화(generality), 그리고 유연성(flexibility)이 떨어진다는 단점이 있다. 이러한 이유로 보통은 spatial 모델을 더 선호한다고 한다.

첫 번째로 spectral 모델을 사용하기 위해서는 eigenvector를 사용하기 때문에 연산 시간이 많이 소비되고 배치 단위로 학습이 안되기 때문에 사이즈가 큰 데이터는 비효율적이라는 단점이 있다. 두 번째로 spectral 모델은 학습한 데이터의 Fourier basis를 기반으로 하기 때문에 새로운 데이터를 적용했을 때 기존에 가지고 있던 eigenbasis가 변해서 일반화가 떨어진다는 단점이 있다. 마지막으로 spectral 모델은 undirected graph에 제한되어 있기 때문에 다른 graph에는 사용할 수 없다는 단점이 있다.

종합해보면 결국 spectral은 이론적으로는 훌륭하나 써먹을 곳이 많지 않다는 말이다. 조금 더 다양한 graph에 적용할 수 있고 사이즈가 큰 데이터에도 학습할 수 있는 spatial 모델들이 더 유용한 것 같다.

Spectral models

그림 6. Spectral 기반 GCNs Roadmap

Spectral 모델은 graph signal processing을 기반으로 한다. Fourier transform을 활용하여 convolution 연산을 수행한다. Spectral 모델에 대한 convolution 과정은 “Spectral GCN 은… 사드세요“에 자세히 작성했으니 spectral 과정을 보고 모델들을 보는게 이해가 쉽다.

Spectral 모델은 아래 식 (1)과 같이 Fourier transform을 적용하여 convolution 연산하는 것을 기본으로 전제한다.

\[\textbf{x}*_{G}\textbf{g} =\mathscr{F}^-1(\mathscr{F}(\textbf{x})\odot \mathscr{F}(\textbf{g})) = \textbf{U}(\textbf{U}^T \textbf{x} \odot \textbf{U}^T \textbf{g}) \tag{1}\]

식 (1)은 식 (2)와 같이 정리할 수 있다.

\[\textbf{x}*_{G}\textbf{g}_\theta = \textbf{U}\textbf{g}_\theta \textbf{U}^T\textbf{x} \tag{2}\]

1. Spectral Convolutional Neural Network, Spectral CNN (2013)

Spectral CNN은 아래 식 (3)을 통해 convolution 연산을 한다. 이미지에서 사용되는 convolution과 마찬가지로 pooling을 통해 이웃들 간의 정보를 합하여 layer를 쌓아나간다.

\[\textbf{H}_{:,j}^{k} = \sigma(\sum_{i=1}^{f_{k-1}} \textbf{U}\Theta_{i,j}^{(k)}\textbf{U}^T\textbf{H}_{:,j}^{(k-1)}), \ (j=1,2,\cdots,f_k) \tag{3}\]

여기서 \(k\)는 layer index이고 \(\textbf{H}^{(k-1)} \in \mathbb{R}^{n \times f_{k-1}}\)은 입력값인 graph signal을 말한다. 이때 초기 입력값은 \(\textbf{H}^{(0)}=\textbf{X}\)이다. \(f_{k-1}\)은 입력값의 채널 수이고 \(f_k\)는 출력값의 채널 수 이다. \(\Theta_{i,j}^{(k)}\)는 학습 파라미터로 단위 행렬이다.

Spectral CNN은 크게 세 가지 단점이 있다. 첫 번째로는 만약 학습된 모델에 기존 graph signal을 약간만 perturbation을 적용해도 eigenbasis가 바뀌어 버린다. 이는 spectral 모델의 큰 단점이기도 하다. 두 번째로는 학습한 filter를 다른 graph 구조를 가지고 있는 domain에 적용할 수 없다는 단점이 있다. 마지막으로 eigen-decomposition을 하기위한 연산 시간이 \(O(n^3)\)으로 오래걸린다는 단점이 있다.

2. Chebyshev Spectral CNN, ChebNet (2016)

ChebNet은 이러한 Spectral CNN 연산시간을 Chebyshev polynomial of the first kind를 통해 filter를 근사하여 시간 복잡도를 \(O(m)\)으로 낮추었다. 또한 filter를 다항식으로 바꿔서 graph 사이즈와는 별개로 local feature를 추출할 수 있다는 장점이 있다. 이 말이 직관적으로 와닿지 않는다면 “Spectral GCN 은… 사드세요 – Graph Convolution에서 GCN으로의 과정“을 읽어보는 것을 추천한다.

Chebyshev polynomial of the first kind는 convolution filter를 식 (4)와 같이 정의 할 수 있다

\[\textbf{g}_\theta=\sum_{i=0}^{K}\theta_iT_{i}(\tilde{\Lambda}), \ \ \tilde{\Lambda}=\frac{2\Lambda}{\lambda_{max}}-I_n \ \ (-1 < \tilde{\Lambda} <1 ) \tag{4}\] 여기서 \(\tilde{\Lambda}\)는 \(\Lambda\)를 [-1,1] 범위로 스케일링 한 값이다. \(T(\cdot)\)은 Chebyshev polynomial function이다. Chebyshev polynomial of the first kind에서 다항식은 다음 식 (5)를 따른다. \[T_{n+1}(x) = 2xT_n(x) -T_{n-1}(x) \tag{5}\] 여기서 \(T_0(x) =1\) 이고 \(T_1(x)=x\)이다. 식 (4)를 식 (2)에 적용하면 식 (6)과 같이 정의할 수 있다. \[\textbf{x}*_{G}\textbf{g}_\theta = \textbf{U}(\sum_{i=0}^{K}\theta_iT_{i}(\tilde{\Lambda}))\textbf{U}^T\textbf{x} \tag{6}\] 이때 \(\mathcal{L}\)는 \(\frac{2\textbf{L}}{\lambda_{max}} - I_n\)으로 나타낼 수 있다. \(T_i(\mathcal{L})\)은 \(\textbf{L} = \textbf{U}\Lambda\textbf{U}^T\)와 같이 \(\textbf{U} T_i(\tilde{\Lambda}) \textbf{U}^T\) 로 표현할 수 있다. 즉, 식 (6)을 다음과 같이 식 (7)로 표현 할 수 있다. \[\textbf{x}*_{G}\textbf{g}_\theta = \sum_{i=0}^{K}\theta_iT_{i}(\mathcal{L})\textbf{x} \tag{7}\] 3. Graph Convoluional Network, GCN (2017) GCN는 식 (7)에서 \(K=1\)로 \(\lambda_{max}=2\)로 정의하였고 \(\theta = \theta_0 = -\theta_1\)로 parameter를 줄이면서 over-fitting을 방지하면서 식을 더 간단하게 정의할 수 있게 되었다. 마지막으로 renormalization trick을 적용하여 최종적으로 식 (8)과 같이 나타내었다. 여기서도 중간 과정에 대해 궁금하다면 “Spectral GCN 은… 사드세요 - GCN“을 참고하면 생략된 과정과 renormalization trick에 대해 이해할 수 있다. \[\textbf{H} = \textbf{X} *_G \textbf{g}_\Theta = f(\bar{\textbf{A}}\textbf{X}\Theta) \tag{8}\] 여기서 \(\bar{\textbf{A}} = \tilde{\textbf{D}}^{(-1/2)}\tilde{\textbf{A}}\tilde{\textbf{D}}^{-1/2}\)이고 이때 \(\tilde{\textbf{A}} = \textbf{A} + \textbf{I}_n\) 그리고 \(\tilde{\textbf{D}}_{ii} = \sum_j \tilde{\textbf{A}}_{ij}\)이다. Spatial 관점에서 보자면 GCN 또한 layer를 쌓으면서 이웃 노드들의 정보를 aggregation하여 학습하기 때문에 비슷한 방법으로 볼 수 있다. 4. Adaptive Graph Convolutional Network, AGCN (2018) AGCN는 adjacency matrix로 표현되지 않은 노드 간의 관계를 학습하기 위해 “residual graph adjacency matrix”라는 것을 활용한다. 입력값으로 들어오는 두 노드의 거리를 학습 파라미터로 사용하여 학습한다. 5. Dual Graph Convolutional Network, DGCN (2018) 이름에서 알 수 있듯이 DGCN은 graph convolution 과정을 “parallel”하게 학습한다. 두 개의 layer는 서로 파라미터를 공유하고 \(\bar{\textbf{A}}\)와 positive pointwise mutual information (PPMI)를 사용하여 graph에서 sampling을 통해 random walks를 적용한 후 노드들의 co-occurrence 정보를 계산한다. PPMI는 식 (9)와 같이 정의한다. \[PPMI_{v_1,v_2} = max(log(\frac{count(v_1, v_2)\cdot |\textbf{D}|}{count(v_1)count(v_2)}, 0)) \tag{9}\] 여기서 \(v_1, v_2 \in V\)이고 \(\mid\textbf{D}\mid= \sum_{v_1,v_2} count(v_1, v_2)\)이다. 또한 \(count(\cdot)\)는 node \(v\)와 node \(u\)가 random walks로부터 발생한(co-occur/occur) 빈도수(frequency)를 계산하는 함수이다. DGCN은 이러한 dual graph convolutional layers를 통해서 결과를 ensemble하여 layer를 깊게 쌓지 않아도 local 정보와 global 정보를 함께 encoding 할 수 있는 방법이다. Spatial models 그림 7. Spatial 기반 GCNs Roadmap 이미지에서 사용하는 convolution과 유사하게 spatial 기반의 방법들은 노드들의 spatial 관계를 활용하여 학습하는 방법이다. Spetial 관계 라는건 중심 노드와 주변 노드의 관계를 말한다. Spatial 모델의 학습 과정은 convolution 과정을 통해서 중심 노드와 주변 노드의 representation을 학습하여 중심 노드의 representation을 업데이트 하는 방식을 말한다. 또다른 관점으로는 spatial 기반 GCN 모델은 앞서 설명한 RecGNNs의 information propagation 또는 message passing과 같은 개념으로 볼 수 있다. 즉, Spatial 모델 또한 edge를 통해 각 노드의 information을 전달하는 방식이다. 1. Neural Network for Graphs, NN4G (2009) NN4G는 spatial 기반으로 GCN을 적용한 첫 논문이다. NN4G는 각 layer 마다 독립적인 parameter를 사용해서 ‘graph mutual dependency’를 학습하도록 하였다. (논문에서 언급된 ‘graph mutual dependency’가 정확히 어떤 의미인지는 명확하게 알 수 없었으나 layer 마다 서로 다른 parameter를 사용했기 때문에 layer 마다의 output이 서로 의존한다는 의미로 이해했다.) NN4G에서는 각 노드와 주변 노드 같의 합을 통해 aggregation 하였고 이전 layer의 output을 전달하기 위한 skip connection과 residual connection을 사용하였다. (논문에서 ‘and’ 로 작성되어 있어 두 connection이 서로 차이가 있는걸로 보는거 같지만 어떤 차이인지는 명확하지 않았다. 그냥 기존에 알고있는 skip connection을 적용했다 정도만 이해하고 넘어가도 좋다.) NN4G에 대한 수식은 식 (10)과 같다. \[\textbf{h}_v^{(k)} = f(\textbf{W}^{(k)^T}\textbf{x}_v + \sum_{i=1}^{k-1} \sum_{u \in N(v)} \Theta^{(k)^T}\textbf{h}_u^{k-1}) \tag{10}\] 여기서 \(f(\cdot)\)은 activation function이고 \(\textbf{h}_v^{(0)}=0\) 이다. 식 (10)은 식 (11)과 같이 행렬로 나타낼 수 있다. \[\textbf{H}^{(k)} = f(\textbf{X}\textbf{W}^{(k)} + \sum_{i=1}^{k-1} \textbf{A}\textbf{H}^{(k-1)}\Theta^{(k)}) \tag{11}\] 식 (11)을 보면 GCN과 유사한 것을 알 수 있다. 차이가 있다면 NN4G는 unnormalized adjacency matrix \((\textbf{A})\)를 사용한다는 것이다. 하지만 \(\textbf{A}\)를 사용하게 되는 경우 hidden state node가 서로 다른 scale이 될 수 있는 단점이 있다. 2. Contextual Graph Markov Model, CGMM (2018) CGMM은 NN4G의 아이디어를 기반으로 제안한 확률 모델이다. CGMM의 장점으로는 확률적인 해석이 가능하다는 장점이 있다. Survey 논문에서는 CGMM에 대해 크게 다루지 않았으므로 추가적으로 알고자 한다면 논문을 참고하는 것이 좋을 듯 하다. 3. Diffusion Convolutional Neural Network, DCNN (2016) DCNN은 graph convolution 과정을 “diffusion process”로서 나타낸다. 여기서 diffusion process 란 하나의 노드에서 이웃 노드로 information을 전달할 때 특정 확률을 기반으로 전달하는 방법을 말한다. 이러한 과정을 여러번 하다보면 특정 지점에서 수렴하게 되는 시점이 온다. DCNN은 식 (12)와 같이 정의한다. \[\textbf{H}^{(k)}=f(\textbf{W}^{(k)}\odot\textbf{P}^k\textbf{X}) \tag{12}\] 여기서 \(f(\cdot)\)은 activation function이고 확률 matrix \(\textbf{P} \in \mathbb{R}^{n \times n}\)은 \(\textbf{P}=\textbf{D}^{-1}\textbf{A}\)로 계산된다. \(\textbf{P}\)에 대해 의미를 생각해보자면 각 노드의 연결된 이웃 노드에 대해 해당 노드의 degree로 나누어 \(1/degree(i)\)로 확률을 계산하였다고 생각할 수 있다. 여기서 알아야 할 점은 \(\textbf{H}^{(k)}\)는 입력값 matrix인 \(\textbf{X}\)와 같은 차원의 matrix라는 점이고 \(\textbf{H}^{(k-1)}\)로 부터 계산된 hidden representation이 아니라는 것이다. DCNN은 최종 output으로 \(\textbf{H}^{(1)},\textbf{H}^{(2)},\cdots,\textbf{H}^{(K)}\)를 모두 concatenate하여 사용한다. 4. Diffusion Graph Convolution, DGC (2018) DGC는 식 (13)과 같이 DCNN과 다르게 concatenate 대신 결과 값의 합을 사용하여 output을 나타낸다. \[\textbf{H} = \sum_{k=0}^{K}f(\textbf{P}^k\textbf{X}\textbf{W}^{(k)}) \tag{13}\] 여기서 \(\textbf{W}^{(k)} \in \mathbb{R}^{D \times F}\)이고 \(f(\cdot)\)은 activation function이다. 확률 matrix의 승을 사용한다는 의미는 멀리 있는 이웃 노드의 information이 중심 노드에 적게 영향을 주기 위함이라고 볼 수 있다. 5. PGC-DGCNN (2018) PGC-DGCNN은 shortest path를 기반으로 먼 이웃의 기여도(contribution)을 키우는 방법이다. 여기서 사용되는 shortest path adjacency matrix는 \(\textbf{S}^{(j)}\)로 정의하고 node \(v\)에서 node \(u\)까지의 shortest path가 \(j\)라면 \(\textbf{S}_{v,u}^{(j)}=1\) 아니면 \(0\)으로 한다. PGC-DGCNN에는 receptive field size를 조정하는 hyperparameter \(r\)이 있다. PGC-DGCNN은 식 (14)와 같이 나타낸다. \[\textbf{H}^{(k)} = \|_{j=0}^{r} f((\tilde{\textbf{D}}^{(j)})^{-1}\textbf{S}^{(j)}\textbf{H}^{(k-1)}\textbf{W}^{(j,k)}) \tag{14}\] 여기서 \(\tilde{\textbf{D}}_{ii}^{(j)}=\sum_{l} \textbf{S}_{i,l}^{(j)}\)이고 \(\textbf{H}^{(0)}=\textbf{X}\)이다. \(\|\)은 vector의 concatenation을 말한다. 앞서 말한 ‘먼 이웃의 기여도를 키운다’는 식 (14)에서 볼 수 있듯이 receptive field의 크기에 따라 중심 노드로 부터 멀리 떨어진 노드도 함께 고려할 수 있다는 말이다. 하지만 PGC-DGCNN의 단점으로는 \(\textbf{S}^{(j)}\)를 계산하는데 드는 시간 복잡도가 \(O(n^3)\)이라는 점이다. 6. Partition Graph Convolution, PGC (2018) PGC는 PGC-DGCNN과 다르게 단지 shortest path 만을 기준으로 하는 것이 아닌 특정한 기준(criterion)을 정해서 이웃 노드를 \(Q\)개의 그룹으로 나눠준다. 때문에 PGC에서는 \(Q\) adjacency matrix를 각각의 그룹별로 정의해서 사용한다. 그후 PGC의 연산과정을 앞서 소개한 GCN과 동일하다. \(Q\) 그룹 간의 결과값은 합으로 계산하여 산출한다. PGC는 식 (15)와 같이 나타낼 수 있다. \[\textbf{H}^{(k)} = \sum_{j=1}^{Q} \bar{\textbf{A}}^{(j)}\textbf{H}^{(k-1)}\textbf{W}^{(j,k)} \tag{15}\] 여기서 \(\textbf{H}^{(0)} = \textbf{X}\), \(\bar{\textbf{A}}^{(j)} = (\tilde{\textbf{D}}^{(j)})^{-1/2}\tilde{\textbf{A}}^{(j)}(\tilde{\textbf{D}}^{(j)})^{-1/2}\) 그리고 \(\tilde{\textbf{A}}^{(j)} = \textbf{A}^{(j)} + \textbf{I}\)이다. 7. Message Passing Neural Network, MPNN (2017) MPNN은 spatial 기반의 ConvGNNs을 메인으로 하면서 graph convolution 과정을 노드에서 다른 노드로 information을 edge를 통해 바로 전달하게 하는 “message passing process”로써 나타낸 방법이다. MPNN은 \(K\)-step message passing을 반복한다. Message passing function는 식 (16)과 같이 정의할 수 있다. \[\textbf{h}_v^{(k)} = U_k(\textbf{h}_v^{(k-1)}, \sum_{u \in N(v)} M_k(\textbf{h}_v^{(k-1)}, \textbf{h}_u^{(k-1)}, \textbf{x}_{vu}^e)) \tag{16}\] 여기서 \(\textbf{h}_v^{(0)} = \textbf{x}_v\)이고 \(U_k(\cdot)\)와 \(M_k(\cdot)\)은 학습 파라미터가 있는 function이다. 각 노드에 대해 hidden representation을 계산한 후에는 이 값에 output layer를 붙여서 node-level prediction 문제를 풀 수도 있고 readout function을 사용해서 전체 graph-level prediction 문제를 풀 수도 있다. 여기서 “readout function”이란 노드의 hidden representation을 통해 전체 graph의 representation을 뽑는 것을 말한다. readout function은 식 (17)과 같이 정의할 수 있다. \[\textbf{h}_G = R(\textbf{h}_v^{(K)}|v\in G) \tag{17}\] 여기서 \(R(\cdot)\)은 학습 파라미터가 있는 readout function을 말한다. MPNN은 \(U_k(\cdot)\), \(M_k(\cdot)\), 그리고 \(R(\cdot)\)을 다른 형태로 나타내어 다른 GNNs에 적용할 수 있다. 하지만 미리 학습된 graph embedding 으로 다른 graph structure에 사용할 수 없다는 단점이 있다. 8. Graph Isomorphism Network, GIN (2019) GIN은 중심 노드에 학습 parameter인 \(\epsilon^{(k)}\)를 더하여 이 값을 조정하며 MPNN의 단점을 보완하였다. GIN은 식 (18)과 같이 나타낼 수 있다. \[\textbf{h}_v^{(k)} = MLP((1+\epsilon^{(k)})\textbf{h}_v^{(k-1)} + \sum_{u \in N(v)} \textbf{h}_u^{(k-1)}) \tag{18}\] 논문에서는 GIN에 대한 내용은 이게 전부지만 \(\epsilon^{(k)}\)에 대하여 수식을 통해 이해한 바로는 주변 이웃의 수가 많아짐에 따라 중심 노드의 information이 사라질 수 있으니 \(\epsilon^{(k)}\)를 조정하여 중심 노드의 information 값을 키우는 것이 아닌다 싶다. 9. GraphSAGE (2017) GraphSAGE는 각 노드마다 이웃 노드의 수가 다양하게 존재하는데 모든 이웃 노드를 고려하는 것은 비효율적이기 때문에 일정한 이웃 노드 수를 고정하여 학습하는 방법이다. GraphSAGE의 graph convolution은 식 (19)를 통해 정의할 수 있다. \[\textbf{h}_v^{(k)} = \sigma(\textbf{W}^{(k)} \cdot f_k(\textbf{h}_v^{(k-1)}, \{ \textbf{h}_u^{(k-1)}, \forall u \in S_{N(v)} \})) \tag{19}\] 여기서 \(\textbf{h}_v^{(0)}=\textbf{x}_v\)이고 \(f_k(\cdot)\)은 aggregation function, 그리고 \(S_{N(v)}\)은 노드 \(v\)의 이웃 노드에 대한 샘플을 말한다. 이때 aggregation function은 mean, sum, 또는 max function과 같이 노드의 순서가 바뀌어도 같은 값이 나오도록 하는 invariant여야 한다. 10. Graph Attention Network, GAT (2017) GAT는 중심 노드에 대한 이웃 노드의 기여도를 계산하는 방법이 이웃 노드의 샘플을 정하는 GraphSAGE나 GCN과 같이 미리 고정된(pre-determined) 이웃 노드의 기여도와는 다르다. GAT는 일반적으로 사용되는 attention mechanisms을 사용한다. 단, graph에서는 연결된 두 노드의 상대적인 가중치를 학습하는 방식을 사용한다. GAT는 식 (20)과 같이 정의할 수 있다. \[\textbf{h}_v^{(k)} = \sigma(\sum_{u \in N(v) \cup v} \alpha_{vu}^{(k)} \textbf{W}^{(k)} \textbf{h}_u^{(k-1)}) \tag{20}\] 여기서 \(\textbf{h}_v^{(0)} = \textbf{x}_v\)이다. Attention weight \((\alpha_{vu}^{(k)})\)는 노드 \(v\)와 이웃 노드 \(u\)와의 connective strength를 식 (21)과 같이 계산한다. \[\alpha_{vu}^{(k)} = softmax(g(\textbf{a}^T[\textbf{W}^{(k)}\textbf{h}_v^{(k-1)} \| \textbf{W}^{(k)}\textbf{h}_u^{(k-1)})) \tag{21}\] 여기서 \(g(\cdot)\)은 LeakyReLU activation function 이고 \(\textbf{a}\)는 학습 parameter이다. Softmax function은 노드 \(v\)의 모든 이웃의 attention weigth 합이 1이 되게하기 위해 사용하였다. GAT는 또한 multi-head attention을 사용하여 모델 성능을 더욱 향상 시킬 수 있고 실제로도 GraphSAGE 보다 node classification 문제에서 더 좋은 성능을 나타내었다. 11. Gated Attention Network, GaAN (2018) GAT에서는 각각의 attention head의 기여도를 동일하게 적용하였지만 GaAN에서는 self-attention mechanism을 추가하여 각 attention head에 추가로 attention score를 계산하였다. 12. GeniePath (2019) GeniePath는 LSTM 같은 gate mechanism을 통해 information을 조절하여 사용하는 방법이다. 별다른 소개가 더는 없어서 만약 내용이 궁금하다면 논문을 보는 것이 좋을 듯 하다. 13. Mixture Model Network, MoNet (2017) MoNet은 노드의 이웃에 각각 다른 가중치를 주는 방법이다. 각 노드와 노드의 이웃들에 대한 상대적인 위치(relative position)를 나타낼 수 있는 ‘pseudo-coordinates’를 추가하여 위치에 따른 가중치를 부여할 수 있도록 학습하는 방법이다. 두 노드의 상대적인 위치가 주어지면 가중치 function은 각 위치에 맞는 가중치를 매핑하게 된다. 이러한 방식으로 graph filter의 가중치는 서로 다른 위치에 따른 가중치를 공유한다. Pseudo-coordinates는 아마 transformer에서 사용되는 position-embedding 이나 CoordConv에서 사용되는 coordinate convolution과 같은 의미가 아닐까 싶다. 14. PATCHY-SAN (2016) PATCHY-SAN은 서로 다른 위치에 따라 가중치를 주는 방법 중 하나이다. PATCHY-SAN은 특정한 기준과 학습 parameter에 순위를 매겨서 이웃 노드들의 순서를 정하여 서로 다른 가중치를 주는 방법이다. 노드의 순서는 “graph labeling”과 상위 \(q\)개의 이웃을 선정하여 결정한다. 여기서 graph labeling은 노드 degree, centrality, 그리고 Weisfeiler-Lehman color에 의해 정해진다. Weisfeiler-Lehman Algorithm은 두 그래프가 있을 때 isomorphic인지 아닌지 test하는 방법이기도 하고 또는 naive vertex classification에 사용 되기도 한다. 각 노드는 graph labeling 을 통해 \(q\)개의 정렬된 이웃 노드를 통해 graph-structure를 grid-structure로 변환할 수 있다. 이제 정렬된 이웃 노드의 순서에 맞게 1D convolutional filter를 사용하여 이웃 노드의 feature information을 aggregate 할 수 있다. PATCHY-SAN의 단점으로는 ranking 기준이 graph structure에만 적용된다는 점이고 이는 연산량이 크다는 단점이 있다. 15. Large-scale Graph Convolutional Network, LGCN (2018) LGCN은 노드의 feature information을 기준으로 이웃 노드의 순위를 정한다. LGCN의 feature matrix는 이웃 노드로 구성되어 있고 열을 기준으로 정렬하여 상위 \(q\)개를 중심 노드의 입력값으로 사용한다. Graph AutoEncoders (GAEs) GAEs는 노드를 laten feature space로 encoding 하고 다시 latent space의 representation을 decoding하는 방법이다. GAEs는 network embedding을 학습하거나 새로운 graph를 생각하기 위해 사용된다. 여기서는 Network Embedding과 Graph Generation 크게 두 가지로 나누어 리뷰한다. Network Embedding 그림 8. GAEs의 Network Embedding Roadmap Network embedding은 노드의 topological information을 가지면서 저차원의 vector representation으로 학습하는 방법이다. GAEs는 encoding을 사용하여 network embedding을 추출하고 다시 decoding을 사용하여 PPMI matrix나 adjacency matrix와 같이 graph의 topological information을 복원한다. 1. Deep Neural Network for Graph Representation, DNGR (2016) DNGR은 “stacked denoising autoencoder”를 사용하여 encoding하고 MLP를 통해 PPMI로 decoding하는 방법이다. 2. Structural Deep Network Embedding, SDNE (2016) SDNE는 ‘node first-order proximity’와 ‘second-order proximity’를 고려하여 “stacked autoencoder”를 사용한다. SDNE는 encoder와 decoder 각각 output에 대한 loss function을 계산한다. Encoder의 loss function은 노드의 network embedding과 이웃 노드의 representation의 차이인 node first-order proximity를 최소화하며 학습한다. Encoder의 loss function \((L_{1st})\)는 식 (22)와 같이 정의한다. \[L_{1st} = \sum_{(v,u) \in E} \textbf{A}_{v,u} \| enc(\textbf{x}_v) - enc(\textbf{x}_u) \|^2 \tag{22}\] 여기서 \(\textbf{x}_v = \textbf{A}_{v,:}\)이고 \(enc(\cdot)\)은 MLP로 구성된 encoder를 말한다. Decoder의 loss function은 노드의 입력값과 reconstruct된 입력값 간의 차이인 node second-order proximity를 최소화하며 학습하게 한다. Decoder의 loss function은 식 (23)과 같이 정의한다. \[L_{2nd} = \sum_{v \in V} \| (dec(enc(\textbf{x}_v)) - \textbf{x}_v) \odot \textbf{b}_v \|^2 \tag{23}\] 여기서 \(\textbf{A}_{v,u} = 0\)인 경우 \(b_{v,u}=1\), \(\textbf{A}_{v,u} = 1\)인 경우 \(b_{v,u}=\beta > 1\)이다. \(dec(\cdot)\)은 MLP로 구성된 decoder이다.

DNGR과 SDNE의 단점은 노드의 information은 무시한 채 두 노드 간의 연결성(connectivity), 즉 노드 구조만 고려한다는 점이다.

3. Graph Autoencoder, GAE (2016)

GAE\(*\)는 GCN을 활용하여 노드 구조와 feature information을 모두 고려하여 encoding 한다. GAE\(*\)의 encoder는 식 (24)와 같이 두 개의 graph convolutional layer로 구성되어 있다.

\[\textbf{X} = enc(\textbf{X}, \textbf{A}) = Gconv(f(Gconv(\textbf{A}, \textbf{X}; \Theta_1)); \Theta_2) \tag{24}\]

여기서 \(\textbf{Z}\)는 graph의 network embedding matrix를 말한다. \(f{\cdot}\)은 \(ReLU\) activation function 그리고 \(Gconv(\cdot)\)은 식 (8)에서 정의한 graph convolutional layer 이다. GAE\(*\)의 decoder는 graph의 adjacency matrix를 target으로 하여 embedding 값에서 노드의 relational information을 decoding한다. Decoder는 식 (25)와 같이 나타낸다.

\[\hat{\textbf{A}}_{v,u} = dec(\textbf{z}_v, \textbf{z}_u) = \sigma(\textbf{z}_v^T \textbf{z}_u) \tag{25}\]

여기서 \(\textbf{z}_v\)는 노드 \(v\)의 embedding이다. GAE\(*\)는 real adjacency matrix \((\textbf{A})\)와 reconstructed adjacency matrix \((\hat{\textbf{A}})\)을 통해 negative cross entropy가 최소화 되는 방향으로 학습한다. 하지만 GAE\(*\)의 단점으로는 overfitting이 잘된다는 것이다.

4. Variational Graph Autoencoder, VGAE (2016)

VGAE는 data의 분포를 학습하기 위한 GAE에서 변형된 방법이다. VGAE는 식 (26)과 같이 variational lower bound \((L)\)을 최적화 한다.

\[L = E_{q(\textbf{Z} | \textbf{X}, \textbf{A})} [\log p(\textbf{A}|\textbf{Z})] – KL[q(\textbf{Z}|\textbf{X}, \textbf{A})\| p(\textbf{Z})] \tag{26}\]

여기서 \(KL(\cdot)\)은 Kullback-Leibler divergence function을 말한다. KL divergence는 두 분포를 비교하는 function이다. \(p(\textbf{Z})\)는 Gaussian prior이고 \(p(\textbf{Z}) = \prod_{i=1}^{n} p(\textbf{z}_i) = \prod_{i=1}^{n} N(\textbf{z}_i \mid 0, \textbf{I})\)로 정의한다. 다음으로 \(p(A_{ij} = 1 \mid \textbf{z}_i, \textbf{z}_j) = dec(\textbf{z}_i, \textbf{z}_j) = \sigma(\textbf{z}_i^T\textbf{z}_j)\)이고 \(q(\textbf{Z} \mid \textbf{X}, \textbf{A}) = \prod_{i=1}^{n} q(\textbf{z}_i \mid \textbf{X}, \textbf{A})\)이다. 여기서 \(q(\textbf{z}_i \mid \textbf{X}, \textbf{A}) = N(\textbf{z}_i \mid \mu_i, diag(\sigma_i^2))\)이다.

Mean vector \(\mu_i\)는 식 (24)에서 정의한 encoder output의 \(i^{th}\) 행이고 \(\log \sigma_i\)는 \(\mu_i\)와 같이 다른 encoder로 계산된다. 식 (26)에서 정의하듯이 VGAE는 empirical distribution \(q(\textbf{Z} \mid \textbf{X}, \textbf{A})\)가 prior distribution \(p(\textbf{Z})\)와 근사해지도록 학습한다.

5. GraphSAGE (2017)

GraphSAGE는 spatial 기반 모델에서 설명했지만 network embedding에도 사용된다. GraphSAGE에서는 reconstruction error를 최적화 하는 것이 아닌, negative sampling을 통해 두 노드 간의 relational information을 최적화 한다. GraphSAGE의 embedding loss term은 식 (27)과 같이 나타낼 수 있다.

\[L(\textbf{z}_v) = -\log(\sigma(\textbf{z}_v^T \textbf{z}_u)) – QE_{v_n ~ P_n{(v)}}\log(\sigma(-\textbf{z}_v^T\textbf{z}_{v_n})) \tag{27}\]

여기서 노드 \(u\)은 노드 \(v\)의 이웃을 말하고 노드 \(v_n\)은 노드 \(v\)와 멀리 떨어진 노드를 말한다. 노드 \(v_n\)은 negative sampling distribution \(P_n(v)\)에서 추출한다. \(Q\)는 negative sample의 수 이다. \(\sigma(\cdot)\)은 sigmoid function을 말한다. 식 (27)의 loss function에 대해 해석하자면 유사한 representation을 갖는 노드는 가깝게하고 다른 representation을 갖는 노드는 더 멀게 한다고 볼 수 있다. 다른 말로는 만약 유사한 노드가 서로 다른 representation을 갖게되면 내적값이 작아지게 되어 첫 번째 term의 값을 키우게 되고 서로 다른 노드가 유사한 representation을 갖게 되면 내적값이 커져서 두 번째 term의 값이 커지게 된다.

6. Adversarially Regularized Variational Graph Autoencoder, ARVGA (2018)

ARVGA는 GAN의 학습 방법을 사용한다. GAN의 학습 방식과 같이 ARVGA는 prior distribution \(p(\textbf{Z})\)과 구분하기 어렵도록 empirical distribution \(q(\textbf{Z} \mid \textbf{X}, \textbf{A})\)를 생성하여 encoder를 학습한다.

Deep Recursive Network Embedding, DRNE (2018)

앞서 소개한 방법들은 대부분 기본적으로 link prediction 방식으로 network embedding을 학습한다. 하지만 graph가 sparse 한 경우, 노드는 많지만 서로 이웃이 많지 않은 경우 positive node가 negative node에 비해 훨씬 적다. 이러한 sparsity 문제를 풀기 위해 사용하는 방법이 random permutations 또는 random walks를 이용하여 graph를 sequence 형태로 변환하여 학습하는 것이다. Sequence로 데이터를 변환하면 기존 sequence에 적용한 딥러닝 모델을 적용할 수 있는 장점이 있다.

DRNE는 노드의 network embedding과 노드의 이웃들에 대한 network embedding을 aggregation한 값을 근사하도록 학습한다. 이때 사용되는 방법은 LSTM이다. DRNE의 reconstruction error는 식 (28)과 같다.

\[L=\sum_{v \in V} \| \textbf{z}_v – LSTM(\{ \textbf{z}_u \mid u \in N(v)\})\|^2 \tag{28}\]

여기서 \(\textbf{z}_v\)는 노드 \(v\)의 network embedding이고 LSTM network는 노드 \(v\)의 이웃에 대한 random sequence를 이웃 노드의 degree를 기준으로 하여 정렬한다. 하지만 seqeuce 형태이다보니 노드 순서가 바뀌는 경우 LSTM network가 invariant하지 못하다는 단점이 있다.

7. Network Representations with Adversarially Regularized Autoencoders, NetRA(2018)

NetRA는 graph encoder-decoder loss function을 식 (29)와 같이 제안하였다.

\[L = – E_{z~P_{data}}(\textbf{z})(dist(\textbf{z}, dec(enc(\textbf{z})))) \tag{29}\]

여기서 \(dist(\cdot)\)은 노드 embedding \(\textbf{z}\)와 reconstructed \(\textbf{z}\)와의 거리를 계산하는 function이다. NetRA의 encoder와 decoder는 노드 \(v \in V\)를 시작으로 하는 random walks를 사용한 LSTM network로 구성되어 있다. ARGVA와 마찬가지로 adversarial 학습을 통해 prior distribution를 기준으로 network embedding을 학습한다. NetRA에서는 LSTM network의 문제점인 permutation variant를 따로 해결하지는 않았지만 실험적으로 NetRA의 효과를 입증했다.

Deep Graph Infomax, DGI (2019)

DGI는 global structural information을 위해 local mutual information을 최대화하여 local network embedding을 유도하는 방법이다. DGI는 node classification 문제에서 기존 graph network embedding 방법보다 좋은 성능을 내는 것 뿐만 아니라 supervised learning 보다 좋은 성능을 내었다.

Graph Generation

그림 9. GAEs의 Graph Generation Roadmap

1. GrammarVAE (2017), Chemical-VAE. (2018), SD-VAE (2018)

이 세 가지 방법은 SMILES(simplifired molecular-input line-entry system)이라는 방법을 통해 encoder와 decoder에 각각 CNN과 RNN을 적용하였다. 이 방법은 분자 구조의 string representation을 생성하기 위한 방법으로 다소 domain에 특화되어 있긴 하다. 하지만 특정 기준에 수렴할때까지 반복적으로 node와 edge를 추가하며 graph를 키워나가는 방식으로 다양한 graph에 적용해 볼 수 있다.

2. Deep Generative Model of Graphs, DeepGMG (2018)

DeepGMG는 먼저 식 (30)과 같이 모든 노드의 permutation에 대한 확률 합으로 graph의 확률을 계산한다.

\[p(G) = \sum_{\pi} p(G, \pi) \tag{30}\]

여기서 \(\pi\)는 노드의 순서를 말한다. 식 (30)의 그래프에 대한 확률은 모든 노드와 edge에 대한 complex joint probability를 나타낸다. DeepGMG는 sequence of decision을 통해 노드를 추가할지 말지, edge를 더할지 말지 그리고 새로운 노드와 노드를 연결할지 말지를 정한다. 여기서 노드와 edge를 만들어내는 과정은 각 노드의 state를 보고 결정한다. Graph를 키워나가기 위한 graph state는 RecGNN을 통해 업데이트 한다.

3. GraphRNN (2018)

GraphRNN에서는 각 노드와 edge를 생성하기 위해 graph-level RNN과 edge-level RNN을 사용한다. 우선 edge-level RNN이 이전 sequence에서 생성된 노드에 새로운 노드를 연결할지 나타내는 binary sequence를 만들고 graph-level RNN은 매번 node sequence에 새로운 node를 추가한다.

4. Graph Variational Autoencoder, GraphVAE (2018)

GraphVAE는 앞서 소개한 방법들과 달리 한방에 graph를 뙇! 하고 생성하는 방법이다. GraphVAE는 각각의 노드와 edge가 독립변수라고 가정한다. Encoder를 통해 생성된 posterior distribution \(q_\phi (\textbf{z} \mid G)\)와 decoder를 통해 생성된 generative distribution \(p_\theta(G \mid \textbf{z})\)를 가정으로 하여 식 (31)을 통해 variational lower bound를 최적화 한다.

\[L(\phi, \theta ; G) = E_{q_\phi(z \mid G)}[-\log p_theta (G \mid \textbf{z})] + KL[q_\phi(\textbf{z} \mid G) \| p(\textbf{z})] \tag{31}\]

여기서 \(p(\textbf{z})\)는 Gaussian prior를 말하고 \(\phi\)와 \(\theta\)는 학습 parameter를 말한다. GraphVAE에서 encoder는 ConvGNN을 사용하고 decoder에서는 MLP를 사용한다. GraphVAE의 output으로는 adjacency matrix, node attributes, 그리고 edge attributes로 세 가지이다.

GraphVAE는 한번에 graph representation을 만들어내지만 생성된 graph에 대한 graph connectivity, validity, 그리고 node compatibility를 모두 고려하는 건 역시나 어렵고 앞으로 풀어나가야할 문제다.

5. Regularized Graph Variational Autoencoder, RGVAE (2018)

RGVAE는 앞서 언급한 challenge 중 validity에 대해 decoder의 output distribution을 정규화하여 graph variational autoencoder에 제약 조건을 추가한 방법이다.

6. Molecular Generative Adversarial Network, MolGAN (2018)

MolGAN은 ConvGNN, GAN, 그리고 강화 학습 목적식을 추가하여 그래프를 생성하는 방법이다. MolGAN은 generator와 discriminator로 구성되어 있고 서로 번갈아 가면서 학습하며 generator의 authenticity를 높이는 방법이다. 또한 강화 학습 방식을 적용했기 때문에 추가적인 evaluator를 넣어서 이에 맞는 기준을 충족하도록 graph를 생성하기 위해 discriminator와 함께 병렬적으로 reward network를 적용했다.

7. NetGAN (2018)

NetGAN은 random-walks를 기반으로 하여 graph를 생성하기 위해 LSTM과 Wasserstein GAN을 적용하였다. NetGAN은 앞선 방식들과 다르게 generator는 LSTM network를 통해 random walks를 생성하고 discriminator는 생성된 가짜 random walks와 진짜 random walks를 구분하도록 학습된다. 학습이 끝난 후에는 generator로 생성된 random walks를 사용하여 node의 co-occurrence matrix를 normalize하여 새로운 graph를 만들어낸다.

추가 정보

그래프를 순서대로 나열하는 Sequential 방법들은 graph 구조를 sequence로 선형화 하지만 graph 구조의 cycle 때문에 structural information에 손실이 생긴다.

그래프를 한방에 뙇! 만드는 global 방법들은 단계를 거치지 않고 한번에 만들 수 있지만 사이즈가 큰 데이터에는 시간이 기본적으로 GAE의 output space가 \(O(n^2)\)이기 때문에 적용하기 힘들다는 단점이 있다.

Spatial-Temporal Graph Neural Networks (STGNNs)

그림 10. STGNNs Roadmap

STGNNs은 graph의 dynamicity를 나타내기 위한 방법들을 나타내는 말이다. STGNNs의 방법들은 연결된 노드 간의 상호의존성(interdependency)를 가정으로하여 dynamic node 입력값을 모델링 하는 것을 목적으로 한다. 이 말이 무슨말인가 직관적으로 다가오지 않기 때문에 survey 논문에서는 친절하게 예시를 들어 주었다.

예를 들어 traffic network는 거리에 설치된 속도 감지 센서로 구성되어 있다. 여기서 각 센서 간의 거리는 edge weight를 나타낸다. 어떤 거리의 traffic 상황은 그 거리와 인접한 다른 거리의 상태에 의존하게 된다. 즉, traffic speed를 예측하면서 spatial 정보를 같이 고려해야 한다. 이러한 문제를 풀기 위해 STGNNs은 graph의 sptial과 temperal dependency를 모두 고려한다. STGNNs의 task는 미래의 node value와 label을 예측하거나 spatial-temperal graph label을 예측하는 것이다.

STGNNs은 RNN 기반의 방법들과 CNN 기반의 방법으로 크게 두 가지 방향성이 있다. RNN 기반 방법들은 graph convolution을 통해 reccurent unit에 입력값과 hidden state를 filtering하여 spatial-temporal dependency를 나타낸다. 간단한 RNN 형태로는 식 (32)와 같이 정의할 수 있다.

\[\textbf{H}^{(t)} = \sigma(\textbf{W}\textbf{X}^{(t)} + \textbf{U}\textbf{H}^{(t-1)} + \textbf{b}) \tag{32}\]

여기서 \(\textbf{X}^{(t)} \in \mathbb{R}^{n \times d}\)는 시간 \(t\)에서의 node feature matrix를 말한다. 여기에 graph convolution을 적용하면 식 (33)과 같이 나타낼 수 있다.

\[\textbf{H}^{(t)} = \sigma(Gconv(\textbf{X}^{(t)}, \textbf{A}; \textbf{W}) + Gconv(\textbf{H}^{(t-1)}, \textbf{A}; \textbf{U}) + \textbf{b}) \tag{33}\]

여기서 \(Gconv(\cdot)\)은 graph convolution layer이다.

CNN & RNN based model

1. Graph Convolutional Recurrent Network, GCRN(2018)

GCRN은 ChebNet과 LSTM network를 결합한 방법이다.

2. Diffusion Convolutional Recurrent Neural Network, DCRNN(2018)

DCRNN은 diffusion graph convolutional layer인 식 (13)과 GRU network를 통합한 방법이다. 또한, DCRNN은 node value의 \(K\) step을 예측하기 위해 encoder-decoder 방식을 적용하였다.

RNN based model

1. Structural-RNN (2016)

Structural-RNN은 time step 마다 node label을 예측하기 위해 recurrent framework를 적용했다. 이때 사용된 recurrent framework에는 node-RNN과 edge-RNN이 사용된다. 각 노드와 edge의 temporal information은 node-RNN과 edge-RNN에 따로따로 들어간다. Temporal 이외에 spatial information을 표현하기 위해 edge-RNN의 output은 node-RNN의 입력값으로 들어간다. 단점으로는 각각의 node와 edge가 서로 다른 RNN을 사용하다보니 model complextity가 높아질 수 밖에 없다는 점이다. 하지만 이 문제는 node와 edge를 semantic group으로 나누어 같은 group에 속한 node와 edge는 같은 RNN 모델을 공유하여 연산량을 줄일 수 있다.

CNN based model

RNN 기반의 방법들은 iterative propagation 과정에서 시간이 오래걸린다는 것와 gradients의 vanishing 또는 exploding 한다는 단점이 있다. 하지만 CNN 기반 방법들은 non-recursive 방법을 통해 병렬처리, 안정된 gradients, 그리고 낮은 메모리 소비라는 장점으로 spatial-temporal graph에 사용될 수 있다.

그림 (2). d와 같이 CNN 기반 모델들은 graph convolution layer에 1D-CNN를 사용하여 temporal과 spatial dependency를 각각 학습한다. Spatial-temporal GNN의 입력값이 \(\textbf{X} \in \mathbb{R}^{T \times n \times d}\)라고 가정할 때 1D-CNN layer는 시간 축으로 \(\textbf{X}_{[:,i,:]}\)을 통과시켜서 각 노드에 대한 temporal information을 aggregation한다. 한편 매번 time step 마다는 \(\textbf{X}_{[i,:,:]}\)에 graph convolution layer를 적용하여 spatial information을 aggregate한다.

1. CGCN (2018)

CGCN은 1D convolution layer를 ChebNet 또는 GCN에 적용한 방법이다. 이때 spatial-temporal block을 각 sequential order에 따라 gated 1D convolutional layer, graph convolutional layer, 그리고 다시 gated 1D convolutional layer를 쌓아서 구성하였다.

2. ST-GCN (2018)

ST-GCN은 spatial-temporal block을 PGC-layer 식 (15)와 1D convolutional layer를 사용하여 구성하였다.

3. Graph-WaveNet (2019)

앞서 소개한 CNN 기반 방법들은 사전에 정의된 graph structure가 노드 간의 genuine dependency relationship을 반영한다는 것을 가정으로 하였다. 하지만 spatial-temporal 환경에서는 graph data의 snapshots(전체가 아닌 일부분)만으로도 data로부터 latent static graph structure를 알아서 학습하는 것이 가능하다. 즉, 전체 graph에 대한 정보(예를 들면 adjacency matrix)가 없어도 graph structure를 학습할 수 있다.

Graph WaveNet은 graph convolution에 self-adaptive adjacency matrix를 적용하여 이를 구현한 방법이다. Self-adaptive adjacency matrix는 식 (34)와 같이 정의한다.

\[\textbf{A}_{adp} = softmax(ReLU(\textbf{E}_1\textbf{E}_2^T)) \tag{34}\]

여기서 \(softmax\) function은 행마다 적용한다. \(\textbf{E}_1\)은 source node embedding(시작 노드의 embedding)이고 \(\textbf{E}_2\)는 target node embedding(시작 노드로부터 연결된 노드 embedding)을 말한다. 각각은 학습 파라미터를 함께 적용하여 학습한다. \(\textbf{E}_1 \textbf{E}_2^T\)는 두 노드 간의 dependency weight를 말한다. 이러한 과정을 통해 Graph WaveNet은 adjacency matrix가 주어지지 않아도 좋은 성능을 낼 수 있다.

Attention based model

Latent static spatial dependency를 학습하는 것은 network의 서로 다른 노드 간의 해석가능성이나 상관관계를 나타낼 수 있다. 하지만 특정한 상황에서는 latent dynamic spatial dependency를 학습하는 것이 모델의 정확도를 더 향상시키기도 한다. 예를 들어 traffic network에서 두 도로 사이의 travel time은 현재 traffic 상황에 따라 다르다.

4. Gated Attention Network, GaAN (2018)

GaAN은 spatial 기반 GCN 모델에서도 설명했지만 spatial-temporal data에도 적용할 수 있다. GaAN은 RNN 기반 방법을 사용하여 dynamic spatial dependency를 학습하기 위해 attention mechanism을 적용했다. Attention function은 현재 시점의 입력값이 주어진 상황에서 서로 연결된 두 노드 간의 edge weight를 업데이트 한다.

5. ASTGCN (2019)

ASTGCN은 CNN 기반의 방법을 적용하여 sptial attention function과 temporal attention function을 적용하여 latent dynamic spatial dependency와 temporal dependency를 학습한다. 하지만 latent spatial dependency를 학습하기 위해서는 연결된 두개의 노드 마다 spatial dependency weight를 계산하기 위해 \(O(n^2)\)만큼의 시간 복잡도가 든다는 단점이 있다.

Benchmark Dataset

GNN을 평가하기 위한 benchmark dataset은 표 (2)에서 볼 수 있듯이 크게 Citation Network, Bio-chemical Graphs, Social Networks 등등 있다.

표 2. GNN에서 사용되는 benchmark dataset과 각 dataset 마다 속성값

이외에도 다양한 benchmark dataset이 있다. Python에서는 graph data를 다루기 위한 여러 framework가 존재하는데 그 중 대표적으로 Pytorch를 기반으로 하는 Pytorch Geometric 과 Stanford에서 만든 SNAP 이 두 framework는 다양한 dataset를 제공한다.

맺음말

수 많은 논문을 단지 survey로만 보고 모두 이해할 수는 없지만 graph data를 어떻게 neural network으로 활용하는지 알아볼 수 있는 좋은 시간이였다. 중간중간 단순히 말만으로는 이해하기 힘든 부분이 많지만… 특히 spectral의 경우… 그래도 처음 GNN을 공부하기로 했을 때의 안개 같았던 앞 길이 조금 맑아진 기분이다. 하지만 길의 끝이 안보이는 건 똑같다.

이제 GNN에 대해 공부하는 아주 샛병아리 수준의 G린이 지만 이제는 graph data도 다뤄볼 수 있다는 사실이 참으로 새롭고 재밌다.

Reference

[CS224W] 8. Graph Neural Networks

반응형

업로드가 조금 늦어졌습니다. ㅎㅎ 8강은 성실함의 대명사 이재빈님께서 리뷰하셨습니다. Graph에 Neral Network, GNN을 적용하는 강의 입니다. 크게 Graph에 Deep learning을 적용하는 개요와, Neighborhood aggregation을 배우고 NN을 이용하는 GNN, GCN, GAT 모델들을 알아봅니다.

목차

0. Intro

1. Basics of Deep Learning for Graphs

2. Graph Convolutional Network (GCN)

3. Graph Attention Network (GAT)

4. Application

0. Intro

Node Embedding

먼저 7강에서 node embedding에 대해서 배웠습니다. 본래의 network node u와 v 사이의 관계를 가장 잘 표현 하는 embedding 값을 찾는 것이 핵심이었습니다 이 때 그래프를 임베딩 벡터로 잘 찾아주는 encoder ENC(・)를 잘 만드는 것이 목표인데, 오늘은 이 Encoder 역할을 Neural Network 에게 시켜서 해결할 것입니다.

기존 Shallow Embedding의 문제점은 (ⅰ) node 갯수만큼의 parameter 가 필요하고 (node 들 끼리 파라미터 공유가 안되어서 각 node들이 unique embedding 값을 가지기 때문에) ( ⅱ) transductive해서 train 과정에서 보지 않은 unseen data를 표현할 수 없으며 (ⅲ) node에 대한 정보를 담고 있는 node attribute feature를 사용하지 않는다는 점이었습니다.

이를 GNN은 어떻게 해결하나 알아봅시다.

Graph Neural Network의 Challenges

대강 왼쪽과 같은 프로세스로 처리 될텐데, 이 때 네트워크가 이미지 처럼 그리드 모양으로 표현되지도 않고, Text나 음성처럼 sequence적인 데이터도 아니여서 문제가 생깁니다. 그래프는 더 복잡한 구조를 가지고 있습니다.

또한 CS22W 초반에 배웠듯이 고정된 순서나 기준이 있는 것도 아니여서 시각화할 때마다 다른 모양의 그래프가 나오기도 합니다. dynamic, multimodal features를 갖는 경우도 있다고 합니다.

A Naive Approach

가장 단순한 접근은 그래프의 adjacency matrix를 feature vector와 concat 해서 Deep Neural Network에 input으로 넣는 방법입니다. 이 방법도 파라미터가 많고 다른 사이즈나 노드 순서가 달라지면 사용이 불가능해지기 때문에 문제 입니다. (사용하지 않습니다.)

그래서 이런 단순한 접근 보다는 앞으로 살펴볼 GNN, GCN, GAT 등의 모델이 나왔습니다.

1. Basics of Deep Learning for Graphs

(모호한데) 강의에서는 그래프에 Deep Learning을 적용하는 것이 Graph Convolution Networks라고 합니다. 2. GCN에서는 GCN의 모델 중에 하나인 Graph SAGE를 중점적으로 가르칩니다. 따라서 그래프에 Deep learning을 적용하는 Graph Convolution Network에 대해 먼저 살펴보겠습니다.

Setup

graph G

vertex(node) set V

adjacency matrix A (assume binary)

node feature X (indicator vectors 와 Vector of constant는 고려하지 않음)

Graph Convolution Networks [Kipf and Welling, ICLR 2017]

핵심 아이디어는 “node의 이웃이 계산된 그래프를 결정한다” 입니다. node feature를 계산하기 위해서 그래프 전반에 걸쳐서 정보를 전파하는 법을 배우는 것입니다.

node i 에 대한 prediction을 하고 싶을 때 다음의 과정을 따릅니다.

node computation graph 를 결정하고,

를 결정하고, neighborhood information을 propagte 하고 aggregate합니다.

이는 구조를 캡쳐하고 이웃의 기능 정보도 바로 가져오는 것으로, 단일 노드를 분류하는 것보다 훨씬 낫다고 합니다.

이 전반적인 과정을 자세하게 살펴보겠습니다.

크게 Aggregate Neighbors에 대한 아이디어, Deep Model, Neighborhood Aggregation, Deep Encoder, Training model, Model parameters, Unsupervised Training & Supervised Training, Inductive Capability라는 소제목으로 설명합니다.

Idea : Aggregate Neighbors (그림과 같이 보세요)

local network neighborhoods 를 기반으로 node embedding을 생성하는 방법입니다.

를 기반으로 node embedding을 생성하는 방법입니다. 노드 정보를 집계하는데, neural networks를 사용해서 이웃들로 부터 정보를 aggregate(집계)합니다.

정보를 aggregate(집계)합니다. 네트워크 이웃들이 computation graph를 정의합니다. 모든 노드들이 자기만의 Neural Network Architecture 를 갖고 있으며, 각자의 neighborhood에 근거해서 computiation graph를 정의합니다. (그림)

노드 A에 대한 feature를 A의 이웃 노드 정보를 NN으로 수집해서 나타냄

네모박스가 가각의 Neural Network

(왼) 평균이 순서 불변의 함수이기 때문에(순서 상관없는 함수) 집계함수로 주로 사용됨 / (오) 모든 노드에 대해 각각 computation graph가 생성된 모습

Deep Model : Many Layers

기본적으로 모델의 depth는 자유롭게 설정할 수 있습니다. 그래프에는 hop이라는 단위가 있습니다. 일종의 거리 개념인데, 이 hop의 크기와 layer 갯수가 비례하기 때문에 Layer-K를 사용해서 embedding 했다는 것은 K-hop만큼의 노드정보를 가져왔다는 뜻이 됩니다.

Neighborhood Aggregation

이웃에서 정보를 집계하여 가져오는 단계를 말합니다. 이웃에서 집계한 정보를 average해서 NN에 적용합니다.

Deep Encoder : The Math

Deep Encoder를 수식적으로 나타내면 다음과 같이 정리됩니다.

h : embedding 값

h_v : v에 대한 embedding 값 -> [이웃에 대한 정보 집계 하는 부분] + [이전 레이어의 v에 대한 embedding 값]

z_v : 모든 레이어를 거친 최종 embedding 값

그래프에서 모델이 깊어진다는 것은 직관적으로 더 큰 네트워크, 더 많은 정보를 집계하는 것을 의미함

수식 추가 설명

Training Model

그렇다면 embedding 값을 생성하도록 모델을 학습시키는 방법은 무엇일까요? 학습시키기 위해서 embedding 하는 것에 대한 loss function 또한 정의할 필요가 있습니다.

위의 수식에서 W,B가 학습이 필요한 weight 파라미터 였습니다. W는 이웃 노드들로부터 집계한 정보에 대한 가중치, B는 지금 보고 있는 노드의 이전 레이어에서의 임베딩 정보에 대한 가중치이기 때문에 이를 조절함으로써 이웃정보에 집중할지, 자신의 own property에 주목할지가 결정됩니다. 따라서 이 가중치를 학습시키는 수식은 다음과 같습니다.

Loss function은 Task 에 따라 달라지며, SGD 방법을 통해 Weight를 update해서 학습시킵니다. 1강에서 배웠듯이 자기 자신의 정보를 잃지 않기 위해서 자기 자신에 대한 self-edge를 볼 수 있습니다.

Unsupervised Training & Supervised Training

그래프에서 Unsupervised Trainnig과 Supervised Training은 뭘까요? 다음과 같습니다.

Unsupervised Training 지금까지 배웠던 방법들이 unsupervised 방법 그래프 구조 자체만을 사용 similar nodes have similar embeddings ex) Random walks, Graph factorization, Node proximity in the graph

Supervised Training supervised task를 수행하기 위해서 모델을 직접적으로 학습시키는 방법 ex) node classification 그림 참고

약물 네트워크에서 A 약물이 안전한지 독인지 판단하는 node classification, 이 때 이 node classification은 위와 같은 cross-entropy loss function을 사용하는 Supervised Training을 수행합니다.

Inductive Capability

위에서도 inductive Capability, 직역하면 귀납적 능력입니다. 본문에서는 “The same aggregation parameters are shared for all nodes” 라고 설명합니다. CNN의 특징이기도 한, 이렇게 파라미터를 공유하는 특징을 가지고 있기 때문에 unseen node 정보에 대해서도 어느정도 알 수 있다고 합니다.

따라서 한가지 그래프에 대해서 학습을 하고, node embedding하는 법을 배워서 새로운 그래프에 대해서 일반화 시킬 수 있습니다.

-> protein interaction graph에서 유기체 A에 대해서 학습하고 embedding 값을 만들었다면, 처음보는 유기체 B에 대해서도 데이터만 있다면 embedding값을 만들어낼 수 있습니다.

-> 따라서 Reddit, Youtube, Google Scholar 모두 unseen data에 대한 적용으로 이러한 방법을 사용하고 있었다고 합니다.

Overview

정확히 짚고 넘어가기 위해서 model design에 대한 overview(process)를 한번 다시 보겠습니다.

Summary

Graph Neural Network는 이웃 정보를 집계해서 노드에 대한 embedding을 하는 방법입니다. 학습 진행 후에 추가 임베딩이 가능하고, 속성 정보를 저장해서 이용가능 하다는 장점이 있습니다.

이제 GNN 모델 두 가지를 알아보겠습니다.

2. Graph Convolution Network (GCN)

GraphSAGE [H amilton et al., NIPS 2017]

이웃정보를 잘 집계해서 전달하는 것이 임베딩에 중요하다는 것을 알았습니다. 그럼 이제 이웃정보를 잘 집계하는 방법은 무엇이 있을까요? 이 집계함수의 사용을 좀 더 잘하기 위해서 여러가지의 집계함수(AGG)를 사용해보고, 자신에 대한 정보 또한 따로 보관한다는 것이 GraphSAGE의 핵심입니다.

앞서 살펴봤던 SImple neighborhood aggregation과 GraphSAGE를 비교하면 위와 같습니다. 단순 average가 아니라 다양한 AGG(집계함수)를 사용할 것이고, 이를 자신에 대한 정보를 단순 합산하는 것이 아니라 Concat합니다. 이는 자신에 대한 정보를 따로 보관한다는 의미입니다.

사용될 수 있는 여러가지 집계함수 예시

GCN에 대한 추가적인 행렬계산을 원하신다면 추천드립니다. https://velog.io/@tobigs-gnn1213/8.-Graph-Neural-Networks#graph-neural-network

3. Graph Attention Network (GAT)

지금까지 simple neighborhood aggregation에서는 모든 이웃 노드를 동일한 중요도로 보고있었습니다. 각 노드마다 중요도를 다르게 해서 이웃 정보를 더 잘 집계하는 방법이 있을까요?

Attention weight를 사용해봅시다!

Attention Mechnism

노드 u와 노드 v사이의 어텐션 계수 e_vu를 계산해서 가중치 a_vu를 다르게 줍니다.

1. 노드 A, B에 대한 어텐션 계수는 e_AB로 나타냅니다. 노드 B -> 노드 A 일 때 중요도를 나타냅니다.

2. 각 노드의 임베딩 값들을 concat해서 e_AB가 계산됩니다.

3. softmax function을 사용해서, 어텐션 계수 e들에 대한 분포를 만들고 확률값 처럼 a_AB를 만들어줍니다.

이렇게 하면 위의 h_v를 simple 방법과 비교했을때, 이웃을 집계하고 있는 것은 동일하지만 a_vu를 사용해서 weight를 다르게 주고 있다는 것을 알 수 있습니다.

Attention Mechanism 사용시에 a를 구하는 방법은 다양한데 attention layer를 사용할 수도 있고 , 추정해서 사용할 수도 있습니다. weight matrix와 같이 훈련시킬 수도 있다고 합니다.

Multi-head Attention

Multi-head attention으로 확장하면 다음과 같습니다.

multi-head로 여러 값을 도출하여 다시 aggregate(보통 concat이나 add사용) 해서 최종 output을 사용합니다.

Properties of Attention Mechanism

다른 이웃에는 다른 중요도 를 부여할 수 있다.

를 부여할 수 있다. 계산적 이점 ttention mechanism으로 그래프의 엣지 에 대해 병렬처리가 가능하고 aggregation 도 모든 노드에 대해 병렬처리가 가능하다.

저장효율 sparse matrix 계산이 O(V+E) 이상의 공간을 필요로 하지는 않는다. 여전히 linear한 복잡도를 가진다. 그래프 크기에 상관없이 일정한 갯수의 파라미터만 사용한다.

local 포착가능 only attends over local network neighborhoods

Inductive capability edge-wise mechanism을 공유한다. 그래프 구조에 의존하지 않는다.

MLP 보다는 Random Walk 가,

이보다는 GCN 과 GAT 가 훨씬 성능이 좋다고 합니다.

4. Application : PinSAGE

잘 구분 못하는 울타리와 침대

적용사례로는 PinSAGE 를 보겠습니다. 앞선 강의들에서 그래프 모델의 재미있는 사용예시로 보여줬던 Pinterest의 추천시스템 입니다.

Graph : dynamic (모델의 retrainig 없이 새로운 노드에도 대응가능해야함), rich node features (각각이 content고 이미지임)

Task : Graph를 이용한 더 나은 Recommendation 결과 도출

Goal : 핀터레스트 그래프에서 노드에 대한 임베딩 생성

Idea : 근처 노드를 보고 정보를 가져오자 (비주얼적으로만 하려니깐 울타리랑 침대를 잘 구분못한다. -> 얘네가 같이 있는 정보도 좀 봐야겠다. 그래프에서는 얘네가 떨어져있겠지…)

적용

node를 각 이미지로 하고 노드 v를 node embedding을 해서 유사한 노드 u를 찾고 노드 u의 이웃을 추천해줍니다.

결과

결과를 잘 살펴보면 정말 비주얼적인 부분에 의존하지 않고 핵심을 잘 파악해서 추천하는 것을 알 수 있습니다. 이 때 Pixie 모델도 그래프 베이스의 모델입니다.

08-GNN Pixie is a purely graph-based method that uses biased random walks to generate ranking scores by simulating random walks starting at query Pin. Items with top scores are retrieved as recommendations [Eksombatchai et al., 2018]

Reference

Stanford CS224W 2019

스터디 8강 리뷰 자료 velog.io/@tobigs-gnn1213/8.-Graph-Neural-Networks#3-graph-attention-network-gat

스터디 8강의 참고자료

Reviews

CS224 Winter 2021

GCN

GAT

etc.

반응형

Graph Neural Networks (GNN) / 그래프 뉴럴 네트워크 기초 개념 정리

그래프 뉴럴 네트워크는 그래프 구조에 대해 직접적으로 작동하는 뉴럴넷으로, 그래프 노드 사이의 상관성을 모델링한다. 따라서 그래프 분석(graph analysis)이 필요한 분야들 – ▲소셜 네트워크 분석, ▲ 추천 시스템 ▲ 지식 그래프 등에서 최근 인기가 높아지고 있다.

그래프 (graph)란?

그래프 G는 방향성이 있거나(directed) 없는(undirected) 엣지(edge)로 연결된 노드(nodes=verticles)들의 집합이다. 여기서 노드와 엣지는 일반적으로 풀고자 하는 문제에 대한 전문가의 지식이나 직관 등에 의해 구성된다.

예를 들어 분자 속 원자들, 소셜 네트워크의 사용자, 교통 시스템에서 도시들, 뇌에 있는 뉴런들 등 연구자가 그래프의 노드와 엣지를 정의할 수 있다.

그래프 뉴럴 네트워크 (GNN)

GNN의 기본은 그래프에 있는 노드 사이의 관계를 모델링 하고, 그에 대한 representation을 생성 하는 것.

그래프 뉴럴 네트워크의 작동 원리를 이해하기 위해 다음과 같은 예시를 생각해보자

“SNS 사용자의 네트워크 관계가 그래프로 주어질 때 해당 유저의 영향력을 예측하기”

이를 수행하기 위해서는 임의의 구조의 그래프 G가 들어왔을 때 그를 하나의 representation으로 표현해야 한다.

즉, F(G) = embedding 으로 변환할 수 있는 함수 F를 찾는 것이 목표이다.

그래프를 임베딩할 수 있는 데에 사용할 수 있는 대표적인 아키텍쳐는 RNN(Recurrent Neural Networks)다.

RNN은 체인으로 연결된 구조 데이터에 사용할 수 있는 특별한 구조로, 이전 타임 스텝의 hidden과 현 타임 스텝의 인풋을 결합하여 현재의 hidden representation을 생성하는 것이 특징이다.

RNN을 이용해 그래프 뉴럴 네트워크를 구성하기 위해서는 다음의 두 가지를 먼저 생각해야 한다

1. 각각의 노드를 embedding 하기

– 노드 하나하나는 RNN unit으로 사용되기 때문

– 이 예시에서는 사용자의 나이, 성별, 활동 기간 등의 설명 변수를 벡터로 만들어 임베딩할 수 있다.

2. 엣지 타입에 따른 뉴럴 네트워크 정의하기

– 그래프에는 다양한 엣지 타입이 있을 수 있는데, 종류에 따라 네트워크를 다르게 구성한다.

– 예를 들어 SNS에서 ‘친구(friends)’ 관계와 ‘팔로우(follow)’ 관계가 있다면, 이 둘은 다른 weight를 사용하는 네트워크로 표현하는 것이다.

이제 각 노드를 recurrent unit으로 생각해보자.

각각의 노드는 가장 인접한 노드를 (t-1) 시점으로 보고 recurrent unit을 사용해 새로운 히든을 생성할 수 있다.

예를 들어 아래 그림에서 가운데에 있는 노드에 대해 가장 인접한 노드 ①에 대해 NN_1을 사용해 정보를 결합, 새로운 representation (파란색 블록으로 표시)을 생성해낼 수 있다.

같은 방식으로 가장 인접한 네 개의 노드에 대해 RNN을 적용하면 네 개의 히든을 얻게 된다. 노드 사이의 순서를 무시한다면, 이 네 히든을 더하여(sum) 가운데 노드에 대한 새로운 representation을 생성할 수 있다. 이렇게 생성된 representation은 이제 한 단계 인접해 있는 노드의 정보를 포함한 representation이 된다.

같은 방식으로 모든 노드에 대해 한 단계 인접해 있는 노드와 RNN으로 정보를 결합하게 되면, 이제 모든 노드는 각자의 인접한 노드의 정보를 알고 있는 representation을 가지게 된다.

그래프에 대한 최종 임베딩은 업데이트된 노드 representation을 합(sum)하여 생성할 수 있다. 이 경우에도 노드의 순서 정보는 무시된다.

이 예시에서는 한 단계 인접한, 즉 (t-1) 스텝만 고려한 RNN을 예시로 했지만, 두 단계, 세 단계 인접한 노드들까지 고려할 수도 있다. 즉, GNN에서 몇 개의 타임 스텝 k를 고려할지는 네트워크의 하이퍼파라메터로 설정하게 된다. 더 많은 타임 스텝을 고려한 임베딩은 더 많은 노드의 정보를 가지게 된다.

(참고) 그래프 활용의 유용성

1. 그래프는 유연한 데이터 구조를 가지고, 다양한 데이터 구조로 일반화가 가능

– 이에 따라 데이터를 그래프 구조로 표현할 때 문제를 새로운 관점에서 바라볼 수 있음

– 예를 들어 얼굴 인식 문제를 다음과 같이 여섯 가지 다양한 형태의 그래프로 표현할 수 있다

Antonakos et al., CVPR, 2015 – Figure 2: (a) complete graph (b) chain per area (c) chain and compete per area (d) chain and complete per area with connections between them (e) minimum spanning tree (f) empty graph

– 또한 사전 지식을 이용해 데이터에 바이어스를 주는 것도 가능하다.

예를 들어 포즈 추정 문제에서 인간 관절 움직임에 대한 해부학적 지식을 모델에 주는 식.

2. 데이터 그 자체가 자연스럽게 그래프로 표현되는 경우가 있음

– 분자 구조, 소셜 네트워크 등

3. 기존에는 어려웠던 문제들; 암 치료제 개발/ 뇌 커넥텀에 대한 이해/ 에너지 물질 발견 등에 활용 가능

참고 자료:

https://towardsdatascience.com/a-gentle-introduction-to-graph-neural-network-basics-deepwalk-and-graphsage-db5d540d50b3

https://medium.com/@BorisAKnyazev/tutorial-on-graph-neural-networks-for-computer-vision-and-beyond-part-1-3d9fada3b80d

http://snap.stanford.edu/proj/embeddings-www/files/nrltutorial-part2-gnns.pdf

https://theaisummer.com/Graph_Neural_Networks/

GNN(Graph Neural Network) 계열 모델과 추천 시스템

개인적으로 이제까지 배운 추천 시스템의 모델 중에서 GNN 계열이 가장 이해하기 어려웠다.

그렇지만 GNN 기반의 모델이 현재 글 작성 시점으로 가장 주목받는 모델인 것으로 보여 소홀히 공부할 수가 없을 것 같다.

그래서 GNN에 관해 공부한 내용이 생길 때마다 계속 이 글을 보충해 가면서 완성시키고자 한다.

그래프(Graph)의 정의와 사용

정보과학을 공부하면 항상 빼 놓을 수 없는 중요한 자료구조가 있는데, 바로 그래프이다.

프로그래밍 문제를 푼 사람들이라면 알겠지만 BFS, DFS 등 자주 나오는 알고리즘이 바로 그래프 탐색이다.

이러한 그래프 자료구조를 추천 시스템에도 적용할 수 있다는 것이 개인적으로 놀라웠는데, 이를 자세히 알기 위해서는 그래프의 정의부터 다시 살펴보는 것이 좋을 것 같아서 정의를 다시 살펴봤다.

그래프의 정의

[출처] https://commons.wikimedia.org/wiki/File:Line_graph_construction_1.svg

A graph $G$ consists of two sets, $V$ and $E$, where $V$ is a finite and nonempty set of vertices, and $E$ is a set of pairs of vertices. – Fundamentals of Data Structures, Ellis Horowitz –

그래프는 정점(Node, Vertex)들과 그 노드들을 잇는 변(Edge)들을 집합으로 모아 구성한 자료 구조이며, 일반적으로 $G = (V, E)$로 정의한다.

여기서 $V$는 그래프를 구성하는 정점의 집합, 그리고 $E$는 두 정점을 잇는 간선의 집합이다.

위와 같은 그래프를 정의에 맞게 표현한다면 다음과 같이 정리할 수 있다.

$$ \begin{align} \mathbf{G} &= (\mathbf{V}, \mathbf{E})\\ \mathbf{V} &= \{A, B, C, D, E\}\\ \mathbf{E} &= \{(A, B), (C, D), (D, E)\} \end{align} $$

정점은 어떤 한 시스템의 구성 요소를 의미한다고 볼 수 있고, 간선은 이러한 정점들 사이의 관계 또는 상호작용을 표현하는 요소로 볼 수 있다.

정점들 사이의 관계를 어떻게 정의하는지에 따라 간선의 방향이 존재하는 directed graph와 그렇지 않은 undirected graph로 나눌 수 있다.

또한 간선에 가중치가 있느냐와 없느냐에 따라 weighted와 unweighted graph로 나눌 수 있다.

그래프를 Representation Learning에 사용하는 이유

그러면 그래프를 어떻게 추천 시스템에 활용할 수 있을지 감이 잘 안 잡힌다.

그전에 그래프가 딥 러닝에서 어떠한 방식으로 사용되는지 궁금해질 수도 있다.

사실 그래프는 이미 CNN, LSTM, Transformer 등 이미 잘 알려진 Representation Learning 모델과 크게 다르지 않다.

CNN은 Euclidean 공간에서 행과 열로 배열된 픽셀들로 이루어진 이미지 에서 특징을 추출한다 .

LSTM은 자기 자신으로 돌아오는 recurrent 구조 를 통해 input으로 주어지는 어떤 한 시계열 데이터인 sequence의 특징을 추출한다 .

Transformer는 self-attention 구조 를 통해 어떤 한 부분에서 주의를 기울여야 할 여러 부분을 병렬적으로 함께 처리함으로써 input의 특징을 추출한다 .

감이 오겠지만 마찬가지로 GNN에서도 그래프 구조 를 통해 시스템에서의 관계 등 다양한 특징을 추출한다 .

그래서 학습하고자 하는 데이터를 그래프로 잘 표현할 수 있으면, 우리는 그러한 데이터의 특징을 모델에 학습시킬 수 있다.

구체적으로 그래프 구조를 딥 러닝에서 활용하는 이유는 다음과 같다.

추상적 개념을 다루기에 적합하다.

연결되어 있는 데이터를 표현하기에 좋은 특징 덕분에 관계와 상호작용과 같은 추상적인 개념을 다루기에 적합하다.

둘 이상의 상호작용을 테이블과 같이 정형화된 데이터로 표현하면 오히려 복잡해질 수 있지만, 그래프를 사용하면 간단하게 표현할 수 있다.

Non-Euclidean Space의 표현과 학습이 가능하다.

흔히 다루는 이미지, 텍스트, 정형 데이터는 격자 형태로 표현할 수 있어서 Euclidean Space에 나타낼 수 있다.

Euclidean Space는 2차원 평면이나 3차원 공간을 일반화시킨 것이고, 유한한 실수로 표현할 수 있는 공간으로 볼 수 있다.

그러나 그래프를 사용하면 SNS 문자 데이터, 분자(molecule) 데이터 등을 Non-Euclidean Space에 표현할 수 있게 된다.

[출처] https://arxiv.org/pdf/1812.08434.pdf, Graph neural networks: A review of methods and applications

Graph Neural Network(GNN)

GNN이란?

[출처] Jure Leskovec, Stanford CS224W: Machine Learning with Graphs, http://cs224w.stanford.edu

GNN은 그래프 데이터에 적용 가능한 신경망이며, 그래프를 구성하는 각 노드를 잘 표현하는 임베딩을 만든다.

즉, 이웃 노드들 간의 정보를 이용해서 특정 노드를 잘 표현할 수 있는 특징(벡터)을 잘 찾아내는 것이 GNN의 목표이다.

[출처] Representation Learning on Networks, snap.stanford.edu/proj/embeddings-www, WWW 2018

위의 사진에서는 정점 $u$를 잘 표현하는 $d$ 차원의 벡터를 GNN을 통해서 만들 수 있음을 나타낸다.

GNN을 input과 output의 관점에서 볼 때, input으로 주어지는 그래프에서 $x$ 차원의 정점 벡터가 GNN을 거쳐서 $d$ 차원의 특징 벡터인 정점으로 구성되는 그래프를 output으로 내보낸다고 볼 수 있다.

요약하면 GNN에서는 정점과 간선의 정보와 관계를 node-feature matrix와 인접 행렬(adjacency matrix)를 사용하여 표현한다.

여기서 node-feature matrix는 정점의 특징에 관한 임베딩 벡터로 이루어진 행렬을 의미하고, 인접 행렬은 정점 간 간선이 어떻게 이어져 있는지 그 관계를 표현하는 행렬이다.

GNN를 학습하는 과정

[출처] https://arxiv.org/pdf/2109.12843.pdf, Graph Neural Networks for Recommender Systems: Challenges, Methods, and Directions

GNN도 다른 Neural Network를 학습하는 과정과 크게 다르지 않다.

우선 주어진 데이터를 인접 행렬 등 그래프로 표현할 수 있는 자료 구조로 변경하는 과정이 필요하다.

예를 들어, 임의의 정점과 연결된 이웃 정점들의 정보를 인접행렬로 표현하는 것이다.

이를 바탕으로 GNN을 학습시키고 나온 예측 값과 GT(Ground Truth)를 비교하여 loss를 계산한다.

이 loss를 최소화하는 방향으로 GNN의 학습 파라미터를 최적화하는 것이 GNN을 학습하는 과정이라고 볼 수 있다.

[출처] https://arxiv.org/pdf/2011.02260.pdf, Graph Neural Networks in Recommender Systems: A Survey

CF(Collaborative Filtering)에서 전반적인 GNN의 학습과 예측 과정을 정리하면 위와 같은데, 여기서 task의 종류와 어떤 것을 예측하는지에 따라 예측을 위한 과정이 달라질 수 있다.

위의 그림에서는 모델이 학습한 유저의 임베딩 벡터와 아이템 임베딩 벡터를 가지고 예측을 하는 것을 나타내고 있으며, 대표적으로 두 임베딩 벡터를 내적해서 유사도를 구하는 방법이 해당될 것이다.

GNN의 Task 종류

주어진 데이터를 학습한 GNN을 통해 구한 각 정점 $i$의 특징 벡터를 $z_i$라고 하자.

이 $z_i$를 통해 최종적으로 수행하고자 하는 task의 종류는 크게 세 가지가 존재한다.

[출처] https://distill.pub/2021/gnn-intro, A Gentle Introduction to Graph Neural Networks

Node Classification

[출처] https://distill.pub/2021/gnn-intro, A Gentle Introduction to Graph Neural Networks

$$ \text{softmax}(z_i) $$

특징 정점 벡터 $z_i$를 통해 정점 $i$를 원하는 레이블로 분류하는 task를 수행할 수 있다.

Graph Classification

[출처] https://distill.pub/2021/gnn-intro, A Gentle Introduction to Graph Neural Networks

$$ \text{softmax}(\sum_{i}z_i) $$

그래프를 구성하는 전체 정점에 대한 특징 벡터 $z_i$를 모두 더하고 softmax를 적용하여 그래프 자체가 어떤 레이블에 속하는지를 분류할 수 있다.

Link Classification

[출처] https://distill.pub/2021/gnn-intro, A Gentle Introduction to Graph Neural Networks

$$ p(A_{ij}) = \sigma \left( z_i^T z_j \right) $$

간선으로 연결되지 않은 두 정점 $i$와 $j$이 서로 연결될 수 있는지 없는지를 예측하기 위해 두 정점의 특징 벡터를 내적해볼 수 있다.

이 내적의 결과값이 높으면 서로 상호작용할 확률이 높을 것임을 예측할 수 있다.

GNN의 방법론

GNN의 방법론에는 크게 spatial 방법과 spectral 방법이 존재하는데, 처음에는 이 둘의 차이를 구분하기 어려웠다.

Spectral 방법론

Spectral 하다는 것은 말 그대로 신호 전처리 분야에서 어떠한 신호를 스펙트럼처럼 분석하는 것을 의미한다.

이 스펙트럼이라는 말이 잘 와닿지 않아 열심히 구글링을 해서 이에 관해 잘 설명한 글을 발견했다.

https://towardsdatascience.com/spectral-graph-convolution-explained-and-implemented-step-by-step-2e495b57f801

“Spectral” simply means decomposing a signal/audio/image/graph into a combination (usually, a sum) of simple elements (wavelets, graphlets)

쉽게 이해하자면 영상, 오디오, 이미지, 그래프 등 주어진 어떠한 신호를 frequency domain의 관점에서 단순한 요소의 합으로 분해(decomposition) 하는 것을 뜻한다.

이에 관한 대표적인 방법으로 푸리에 변환(Fourier Transform)이 있는데, 이는 어떠한 신호를 $\sin$과 $\cos$ 등 다양한 주파수를 갖는 주기함수인 성분들의 합으로 분해하는 것이다.

하지만 그래프와 GNN에서의 “spectral”는 의미가 달라지는데, 이는 그래프의 라플라시안 행렬(Laplacian matrix)를 고유값 분해(eigen-decomposition) 하는 것을 뜻한다.

라플라시안 행렬(Laplacian Matrix)

그러면 라플라시안 행렬($L$)이 또 뭐냐는 질문에 맞닥뜨리는데, 이는 차수 행렬($D$)에서 인접 행렬($A$)를 뺀 것으로 생각보다 정의가 단순하다.

여기서는 편의를 위해 undirected graph로 고려하여 라플라시안 행렬이 대칭(symmetric)이도록 한다.

[출처] https://en.wikipedia.org/wiki/Laplacian_matrix

쉽게 생각하면 라플라시안 행렬은 인접 행렬을 특수한 방법으로 변환한 것으로 이해할 수 있다.

그래프의 유용한 특성을 찾고자 할 때 라플라시안 행렬을 많이 사용한다고 한다.

그런데 수알못인 나로서는 이 라플라시안 행렬을 가지고 고유값 분해를 한다는 것부터 정신이 아득해지기 시작한다. 😵‍💫

그래서 선형대수학에서 잊힌 내용을 다시 복습하는 겸 고유값과 고유 벡터부터 정리해 보았다.

고유값과 고유 벡터

정방행렬 $A$에 관하여 $A \mathbf{x} = \lambda \mathbf{x}$를 만족하는 0이 아닌 열벡터 $\mathbf{x}$가 존재할 때, 상수 $\lambda$를 고유값, $\mathbf{x}$를 고유 벡터라고 한다.

즉, 벡터 $\mathbf{x}$에 관하여 선형 변환 $A$를 했을 때, 벡터의 크기만 변하고 방향이 변하지 않는지를 구하는 것이다.

고유값과 고유 벡터를 구할 수 있다는 건 굳이 선형 변환을 하지 않고 벡터의 scale만 변화시킬 수 있음을 알려준다.

고유값 분해

고유값 분해는 말 그대로 행렬 $A$를 고유값과 고유 벡터로 분해하는 것을 의미한다.

예를 들어, 행렬 $A$의 고유값을 $\lambda_i$, 고유 벡터를 $v_i$라고 하면 다음과 같이 정리할 수 있다.

$$ \begin{align} A v_1 &= \lambda_1 v_1\\ A v_2 &= \lambda_2 v_2\\ &\vdots\\ A v_3 &= \lambda_3 v_3 \end{align} $$

이 고유값과 고유 벡터를 묶어서 다음과 같이 고유값 행렬과 고유 벡터 행렬을 정의할 수 있다.

$$ \begin{align} V = \left[ v_1 \cdots v_N \right], \quad V \in \mathbf{R}^{N \times N}\end{align} $$

$$ \begin{split} \begin{align} \Lambda = \begin{bmatrix} \lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{N} \\ \end{bmatrix} \end{align} , \quad \Lambda \in \mathbf{R}^{N \times N} \end{split}\ $$

고유벡터행렬 $V$는 고유 벡터를 열벡터로 옆으로 쌓아서 만든 행렬, 고윳값 행렬 $\Lambda$는 고유값을 대각성분으로 가지는 대각행렬이다.

이를 통해 행렬 $A$와 고유 벡터 행렬 $V$의 곱을 고유 벡터행렬 $V$와 고유값 행렬 $\Lambda$의 곱으로 나타낼 수 있다.

$$ \begin{split} \begin{align} \begin{aligned} AV &= A \left[ v_1 \cdots v_N \right] \\ &= \left[ A v_1 \cdots A v_N \right] \\ &= \left[ \lambda_1 v_1 \cdots \lambda_N v_N \right] \\ &= \left[ v_1 \cdots v_N \right] \begin{bmatrix} \lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{N} \\ \end{bmatrix} \\ &= V\Lambda \end{aligned}\end{align} \end{split}\ $$

$$ \begin{align} AV = V\Lambda \end{align} $$

고유 벡터 행렬 $V$의 역행렬이 존재하면 이를 우변으로 정리하여 다음과 같이 표현할 수 있는데, 이를 고유값 분해라고 한다.

$$ \begin{align} A = V \Lambda V^{-1} \end{align} $$

그러면 이 고유값 분해가 GNN과 어떤 관계가 있는지 궁금해지는데, 정리하면 고유값 분해는 그래프를 구성하는 단위 직교 요소(elementary orthogonal component)를 찾을 수 있는 방법으로 볼 수 있다.

그래프의 라플라시안 행렬의 단위 직교 요소를 찾는다는 것은 결과적으로 어떤 한 그래프의 노드에서 potential(signal)이 주어질 때, 그 signal이 어떻게 흩어지는지 그 정도(diffusion)를 보는 것이다.

여기서 signal이라는 말이 자주 언급되는데, 이는 어떤 한 정점이 갖고 있는 특징이라고 이해해도 좋다.

[출처] https://towardsdatascience.com/spectral-graph-convolution-explained-and-implemented-step-by-step-2e495b57f801, Boris Knyazev

위의 GIF 이미지를 어떤 한 그래프로 고려하면, 어떤 픽셀(정점)에서 signal이 주어질 때 이 signal이 어떻게 흩어지는지를 볼 수 있다.

인접한 픽셀과의 색상 변화가 두드러지게 나타나지 않는다면 signal이 부드럽게 흩어진다는 것을 알 수 있다.

Spectral 방법론은 그래프의 정점 간 연결성을 보존함과 동시에 유의미하고 더 많은 특성을 찾아내고자 그래프의 라플라시안 행렬을 찾아 이를 고유값 분해한다.

이를 통해 찾아낸 고유 벡터를 이용하여 Graph Fourier Transform을 정의하는데, 이는 앞에서 말한 푸리에 변환(Fourier Transform)과 유사하다.

그래프를 나타내는 어떤 한 signal이 주어질 때, 이를 표현 가능한 어떤 함수들의 합으로 표현하고자 하는 것이다.

좀 더 자세하게 정리하면 라플라시안 행렬 $L$의 eigen space에 존재하는 임의의 행렬 $\mathbf{x}$가 있을 때, 이를 직교하는 영역인 $L$의 orthonormal eigenvector space로 투영(projection)시키는 것으로 볼 수 있다.

내용을 정리한 이후에도 전반적으로 와 닿지 않는 부분이 많아서 낙담했는데, 정말 간단하게 생각해서 그래프의 정보를 나타내는 행렬을 새로운 공간으로 보내서 그래프의 더 많은 latent 정보를 파악하고자 하는 것으로 이해했다.

그렇지만 아직 정확히 이해되지 않는 부분도 많고, 수학적인 개념이 꽤 녹아들어 있어서 좀 더 정리가 되는 대로 내용을 보완하고자 한다.

Spatial 방법론

후술하겠지만 GCN에서처럼 target 정점의 주변 이웃 정점의 정보를 가져와서 aggregation하여 target 정점의 정보로 업데이트하는 것이 spatial 방법이라고 볼 수 있다.

Naive Approach를 사용하는 GNN의 단점

여기서 naive approach는 그래프의 모든 정점과 간선의 정보를 고려하는 방법으로 이해해도 된다.

정점의 수가 계속 증가하면 인접행렬의 차원이 증가하고, 이를 input으로 사용할 경우 모델의 복잡도가 증가하여 연산량이 많아지는 동시에 입력 데이터는 희소해진다.

또한 정점의 순서가 바뀌면 의미가 달라질 수 있는 단점이 있다.

Graph Convolution Network(GCN)

GCN이란?

[출처] https://arxiv.org/pdf/1901.00596.pdf, A Comprehensive Survey on Graph Neural Networks

GCN은 용어 그대로 그래프에서 CNN에서처럼 커널 또는 필터를 이용하여 convolution 연산을 수행하면서 그래프의 내재된 정보를 학습하는 모델이다.

이미지를 인접한 픽셀끼리 연결된 그래프라고 생각하면, CNN에서 커널을 이동해 가며 학습하는 것도 graph convolution의 일종으로 볼 수 있다.

그런데 CNN에서 사용하는 이미지 데이터는 픽셀의 위치와 다른 픽셀 간의 거리가 중요해서 locality를 학습하지만, 그래프는 non-euclidean 공간에 존재하므로 거리가 아닌 관계 그 자체가 중요하며, 정점 간의 연결 강도가 어느 정도인지를 학습하는 것이 중요하다.

즉, 서로 중요하게 학습하는 대상은 다르지만 CNN과 GCN 모두 convolution을 수행하는 방식은 유사하다고 볼 수 있다.

[출처] https://arxiv.org/pdf/1609.02907.pdf, Semi-Supervised Classification with Graph Convolutional Networks

GCN은 앞서 살펴 본 spectral 방법론에서 spatial 방법론으로 연결해주는 것으로 볼 수 있는데, spatial domain의 convolution 연산이 Fourier domain에서의 곱과 같다는 성질을 이용하여 정의한다고 한다.

Spatial 방법론 관점에서 GCN은 neighborhood aggregation을 수행하는 것이다.

이는 어떤 target 정점의 주변 이웃 정점의 정보를 가지고 자기 자신의 정보를 업데이트하는 것을 뜻한다.

이때 주변의 각 이웃 정점으로부터 target 정점에 얼만큼 정보를 전달시킬지를 message라고 한다.

이처럼 graph convolution은 target 정점과 연결된 이웃들의 정보를 가중 평균 또는 합을 한다고 볼 수 있다.

[출처] https://web.stanford.edu/class/cs224w/slides/06-GNN1.pdf, CS224W: Machine Learning with Graphs

앞에서 말한 node-feature matrix을 가지고 말하면, GCN은 node-feature matrix와 adjacency matrix를 사용하여 주변 이웃의 벡터 정보를 aggregate하고 이를 target의 임베딩 벡터 또는 hidden representation에 업데이트하는 것으로 해석할 수 있다.

위의 예시처럼 neighborhood aggregation을 적용한다고 가정하면, 다음과 같이 식을 작성할 수 있다.

$$ \begin{align} H_A^{(l+1)} &= \sigma \left( H_A^{(l)}W^{(l)} + H_B^{(l)}W^{(l)} + H_C^{(l)}W^{(l)} + H_D^{(l)}W^{(l)} + b^{(l)} \right)\\\\ H_i^{(l+1)} &= \sigma \left(\sum_{j \in N(i)} H_j^{(l)}W^{(l)} + b^{(l)} \right)\\ &= \sigma \left( AH^{(l)}W^{(l)} + b^{(l)} \right) \end{align} $$

$l$은 몇 번째 레이어에 해당되는지를 의미하고, $N(i)$는 정점 $i$의 이웃 정점, $A$는 인접 행렬, $W$는 임베딩 행렬에 곱해서 feature transformation을 하기 위한 가중치이자 학습 파라미터, $H_i$는 각 정점의 임베딩 행렬, $b$는 bias이다.

위의 예시에서는 Target 정점인 $A$의 주변 노드에 대한 정보를 학습하는 것이며, 이때 학습 가능한 파라미터인 $W$는 공유된다.

또 위의 식에서는 주변 이웃 정점의 정보를 aggregation할 때 파라미터 $W$를 가중치로 하여 가중 합을 하는 방식을 사용하지만, 이를 가중 평균으로 가져올 수도 있다.

GCN에서의 파라미터

$$ f(H^{(l)}, A) = \sigma \left( A H^{(l)} W^{(l)} \right) $$

GCN의 목적은 target의 주변 정점의 정보를 통해 target 자신의 정보를 hidden representation으로 만들 수 있는 최적의 필터인 $W$를 찾는 것이다.

이 필터 $W$는 가중치이자 학습 가능한 파라미터이며, 다른 정점의 hidden representation을 사용할 때도 공유(sharing)된다.

또한 $H$의 차원에 의존하므로 $W$의 차원은 그래프의 전체 정점의 수인 $n$과 관계가 없으며, 정점의 순서와도 무관(order invariant)하다.

GCN과 인접행렬

그러나 위에서의 인접행렬 $A$는 이웃 정점과의 연결만 표현하고 정작 자기 자신인 target 정점 자체의 feature는 고려하지 못한다.

그래서 자기 자신으로 돌아오는 self loop이 있다고 가정하여 새로운 인접행렬 $\tilde{A}$를 사용하는데, 이는 $\tilde{A} = A + I$로 볼 수 있다.

이처럼 자기 자신의 정보를 주변 이웃에서 온 정보와 합치는 과정을 combine이라고 부르며, 주로 인접 행렬에 차원이 같은 단위 행렬을 곱하는 방법으로 수행한다.

물론 자기 자신의 정보에 관해 새로운 파라미터를 가지고 feature transformation하여 더할 수도 있지만, 이는 학습할 파라미터가 늘어나서 모델의 복잡도를 높이게 되므로 self loop를 추가하여 고려하는 인접행렬을 쓰는 방법이 더 효율적일 수 있다.

또한 $A$는 degree 관점에서 정규화되어 있지 않으므로 연산 시 feature 행렬의 크기가 불안정해질 수 있다.

그래서 각 정점의 degree로 정규화해주는데, 이를 symmetric renormalization trick이라고 한다.

$$ \psi(\tilde{A}, X) = \sigma (\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} XW) $$

GCN을 학습할 때 인접행렬 $A$가 사용되면서 그래프의 구조적인 전체 정보를 반영하게 되는데, 이는 spatial한 GCN에 spectral 방법이 반영되어 있다고 볼 수 있다.

GCN의 특징

Local Connectivity

주어진 데이터와 물리적으로 가까이 있는 데이터를 가지고 convolution 연산을 수행하는 것이며, 그래프에서는 한 정점에 관해 인접해 있는 이웃한 정점 데이터를 가지고 convolution 연산을 수행하는 것이다.

Shared Weights

CNN에서 커널(kernel) 또는 필터(filter)를 이동해 가면서 커널의 weight을 공유하여 convolution을 수행했는데, 그래프에서도 마찬가지로 앞서 말한 바처럼 같은 파라미터인 weight($W$)을 가지고 convolution 연산을 수행하게 된다.

Multi Layer

Convolution Layer를 둘 이상 쌓게 되면 좀 더 넓은 영역을 필터에 포함시켜서 convolution을 수행할 수 있는데, 그래프에서도 마찬가지로 레이어를 추가하여 바로 인접한 정점 외의 좀 더 멀리 있는 정점도 convolution을 수행할 수 있다.

Transductive Learning

GCN은 transductive learning으로 볼 수 있는데, transductive learning을 알기 위해서는 이와 대조되는 inductive learning을 알 필요가 있다.

Inductive learning은 지도학습으로 볼 수 있으며, 모델을 학습할 때 미리 label이 주어지고 이에 대한 예측 결과를 가지고 모델이 학습을 진행한다.

즉, label이 있는 데이터로 모델의 파라미터를 학습하며, 모델을 test하거나 inference 할 때는 이미 학습이 완료된 모델을 가지고 학습을 더 진행하지 않고 예측을 한다.

반면에 transductive learning은 test하거나 inference 할 때도 모델 학습을 진행하며, 이를 통해 나온 결과로 특정 input에 관해 예측을 수행한다.

그래서 GCN에서 새로운 정점이 생기거나 그래프 구조가 변하면 전체 그래프와의 연결성을 다시 고려해야 하므로 다시 학습을 진행해서 예측을 한다.

테스트나 추론 전에 미리 명시적인 모델의 파라미터를 학습하지 않는다는 게 transductive과 inductive learning의 차이로 볼 수 있다.

GCN의 Receptive Field

CNN에서 여러 번 convolution 연산을 수행하면 receptive field가 넓어지는 것과 같이 GCN의 레이어를 여러 개 쌓으면 바로 인접한 이웃 정점을 넘어서 그 이웃 정점의 주변 정보도 같이 가져올 수 있다.

import torch.nn as nn class GCN(nn.Module): def __init__(self): super().__init__() self.conv1 = GCNConv(dataset.num_node_features, 16) self.conv2 = GCNConv(16, dataset.num_classes) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = F.relu(x) x = F.dropout(x, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1)

일반적으로 GNN에서는 바로 인접한 이웃 뿐만이 아니라 몇 번 건너게 되는 이웃까지 볼 것인지를 정하는 것을 hop이라고 한다.

Over Smoothing

[출처] https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123710120.pdf, Embedding Propagation: Smoother Manifold for Few-Shot Classification

GCN 또는 GNN에서 여러 번 건넌 이웃까지 target 정점의 정보로 반영하게 되면서 정점의 임베딩 벡터가 결국 국소 지역의 정보의 평균으로 될 가능성이 있다.

이는 결과적으로 어떤 한 정점이 주변 정점에 의해 기존에 갖고 있던 임베딩 벡터가 희석되어 정점 간의 임베딩 벡터가 서로 비슷해지는 결과를 낳게 된다.

그래서 주변의 많은 정보를 반영하는 게 항상 좋은 게 아님을 알 수 있다.

일반적으로 데이터셋에 따라서 GCN에서 레이어 수가 4를 넘으면 성능이 떨어지는 경우가 있다고 알려져 있다.

이러한 over-smoothing을 예방하는 방법으로는 정점 또는 간선을 dropout하는 방법이 있다.

또는 레이어에 따라서 간선을 랜덤하게 dropout하여 각 레이어마다 다른 subgraph를 만드는 random walk 방법도 존재한다.

아니면 희석된 모든 정점 임베딩 벡터를 영점으로 옮겨서(centering) 이를 다시 rescaling하는 pair norm 방식을 사용할 수도 있다.

Graph Attention Network(GAT)

GAT란?

[출처] https://arxiv.org/pdf/2109.12843.pdf, Graph Neural Networks for Recommender Systems: Challenges, Methods, and Directions

GCN에서는 neighborhood aggregation할 때 단순히 주변 정점의 정보에 관해 sum 연산을 수행하고, 전체 그래프 구조를 반영하기 위해 인접 행렬 $A$를 사용한다.

이러한 관점에서 GCN은 spectral 방법론에서 spatial 방법론을 사용했다고 볼 수 있다.

그러나 GAT에서는 인접 행렬을 쓰지 않아서 완전한 spatial 방법론에 해당된다.

GAT에서는 주변 정점의 정보를 가져올 때 각 이웃 정점마다 다른 attention을 부여하여 자기 자신을 업데이트한다.

이는 상식적으로 주변 정점들이 target 정점에게 모두 같은 영향력을 행사하는 경우는 드물다는 데서 유추할 수 있다.

Target 정점에게 가장 많은 영향력을 끼치는 정점에 더 큰 attention을 부여하고자 하는 게 GAT이다.

GAT와 Attention Coefficient

[출처] https://distill.pub/2021/gnn-intro, A Gentle Introduction to Graph Neural Networks

GAT에서는 GCN과 달리 인접 행렬 $A$ 대신 주변의 각 이웃 정점에 얼마나 주목할 것인지를 반영하기 위해 attention coefficient $a$를 사용한다.

다시 말해서, 각 정점 간의 벡터를 참고해서 연산을 할 때, 전체를 동일한 비율로 참고하는 것이 아니라 연관이 있는 정점에 좀 더 주의를 기울이겠다는 의미이다.

[출처] https://arxiv.org/pdf/1710.10903.pdf, Graph Attention Networks

$$ H_i^{(l+1)} = \sigma \left(\sum_{j \in N(i)} a_{ij}^{(l)}H_j^{(l)} W^{(l)} + b^{(l)} \right) $$

정점 $i$와 $j$가 서로 이웃이고 정점 $i$에 관하여 주변 이웃 정점을 가지고 attention score를 구하려면, 우선 정점 $i$와 $j$의 hidden matrix에 가중치 파라미터를 곱해 feature transformation을 수행한다.

$$ e_{ij} = v_a^{T} \tanh(W_a[h_i;h_j]) $$

이를 가지고 MLP에 input으로 넣어서 출력값 하나를 뽑을 수 있게 되는데, 마찬가지로 정점 $i$의 모든 이웃 정점에 관해 MLP에 넣어 출력값을 구한다.

이 출력값이 $e_{ij}$이며, 위의 식과 왼쪽 그림이 나타내는 것이 MLP에 넣어 정점 $i$을 기준으로 $j$에 대한 attention score를 구하는 것이다.

[출처] https://towardsdatascience.com/sequence-2-sequence-model-with-attention-mechanism-9e9ca2a613a, Renu Khandelwal

사실 dot-product self-attention만 있는 것이 아니라 어떤 두 token 또는 정점의 attention을 구하는 방법은 다양하다.

여기서는 세 번째 방법인 concat을 하여 MLP에 통과시키는 것을 사용했다.

Attention score를 구하는 다양한 방법과 self-attention의 의의에 관한 자세한 내용은 이전에 작성한 포스트를 참고하면 된다.

Attention score를 구하는 다양한 방법

Self-Attention의 의의

이렇게 $i$에 관하여 모든 이웃 정점에 대하여 구한 attention score의 합은 가중 평균을 위해 1이 되어야 하므로 softmax를 적용한다.

$$ \begin{align} a_{ij} &= \text{softmax} (e_{ij}) = \frac{e_{ij}}{\exp (\sum_{k \in N(i)}e_{ik})}\\ e_{ij} &= \text{LeakyReLU}(a^T[H_iW, H_jW]) \end{align} $$

GAT에서의 Multi Head Attention

[출처] https://arxiv.org/pdf/1710.10903.pdf, Graph Attention Networks

GAT에서 Multi Head Attention은 attention score를 구하는 과정을 각 정점에 관해 여러 번 수행하는 것인데, 위의 오른쪽 그림에서 보라색, 파란색, 초록색의 구불구불한 선이 바로 정점 1에 관해 세 번 Multi Head Attention을 수행한 것이라고 볼 수 있다.

Multi Head Attention을 수행하는 방법에는 head 별로 계산한 결과의 평균을 구하는 방법과 concatenation하는 방법이 있다.

$$ H_i^{(l+1)} = \sigma \left(\frac{1}{K} \sum_{k = 1}^{K}\sum_{j \in N(i)} a_{ij}^{(l)}H_j^{(l)} W^{(l)} + b^{(l)} \right) $$

$$ H_i^{(l+1)} = \bigcup_{k=1}^K \sigma \left(\sum_{j \in N(i)} a_{ij}^{(l)}H_j^{(l)} W^{(l)} + b^{(l)} \right) $$

Neural Graph Collaborative Filtering(NGCF)

NGCF란?

NGCF는 그래프가 가진 장점을 활용하여 CF에서 유저-아이템 상호작용(Collaborative Signal)을 임베딩 레이어에서 직접 추출하여 반영할 수 있도록 하는 방법을 제시한 접근 모델이다.

Target 정점의 주변 이웃 정점으로부터 target 정점으로 메시지를 만들어서 전달(message passing)하고 이를 aggregation 하는 방법은 GCN과 유사하지만, 유저와 아이템 간의 상호작용을 이분 그래프(bipartite graph)로 구성하고 메시지를 만들 때 아이템과 유저 사이의 상호작용을 반영한다는 점이 차이라고 볼 수 있다.

기존의 유저와 아이템 데이터를 사용하는 학습 가능한 CF 모델의 핵심 두 가지를 정리하면 다음과 같다.

유저와 아이템의 임베딩을 잘 학습해야 한다. 유저와 아이템은 처음에 one-hot encoding으로 표현되고, 그것을 embedding layer를 통과하여 dense한 임베딩으로 표현한다.

유저와 아이템의 상호작용을 모델링한다. 예를 들어, MF에서는 유저와 아이템을 임베딩한 이후에 이를 내적하여 둘의 상호작용을 linear하게 표현한다.

하지만 기존의 신경망을 적용한 CF 모델들은 유저-아이템의 상호작용을 임베딩 단계에서 접근하지 못한다.

예를 들어, Neural Collaborative Filtering에서도 임베딩이 일어난 이후에 임베딩을 concatenate하므로 임베딩과 상호작용 모델링이 분리되어 있다.

즉, 유저와 아이템의 상호작용에 관한 latent factor 추출을 interaction function에만 의존하므로 결과적으로 sub-optimal한 임베딩을 사용하게 되어서 모델이 더 정확한 표현력을 가지지 못하는 단점이 있다.

NGCF는 이러한 유저와 아이템의 상호작용을 각 정점의 특징 임베딩 벡터를 업데이트하는 과정에서 반영할 수 있도록 한다.

NGCF의 학습 과정

[출처] https://arxiv.org/pdf/1905.08108.pdf, Neural Graph Collaborative Filtering

앞서 말한 바와 같이 NGCF는 유저와 아이템 간의 상호작용(Collaborative Signal)을 이분 그래프로 만들고, 정점의 임베딩 벡터를 업데이트하는 과정에서 학습될 수 있도록 한다.

그러나 유저와 아이템 개수가 많아질수록 각 정점의 임베딩 벡터가 모든 상호작용을 학습하기에는 한계가 존재한다.

그래서 GNN을 통해 경로의 길이가 1보다 큰 연결의 High-Order Connectivity를 임베딩한다.

High-Order Connectivity는 너무 어렵게 생각할 것 없이 GCN에서 여러 layer를 쌓아서 target 정점에 관해 몇 번 떨어진 이웃까지 볼 것인지와 비슷하다.

위의 그림은 유저와 아이템의 상호작용 이분 그래프에서 유저 $u_1$을 target 정점으로 삼아 이를 tree 구조의 root로 고려하여 주변의 이웃 정점으로부터 메시지를 받아 aggregation 하는 과정을 그린 것이다.

$$ e_u^{(1)} = \text{LeakyReLU} \left( m_{u \leftarrow u} + \sum_{i \in \mathcal{N}_u } m_{u \leftarrow i} \right) $$

유저 $u$에 관해 메시지를 aggregation 하는 과정은 GCN과 유사한데, self loop가 있다는 가정 하에 자기 자신으로부터 오는 메시지와 주변 이웃 아이템 정점으로부터 오는 메시지를 합친다.

$$ m_{u \leftarrow i} = \frac{1}{\sqrt{|\mathcal{N}_u||\mathcal{N}_i}|}(\mathbf{W}_1 e_i + \mathbf{W}_2 (e_u \odot e_u)) $$

주변 이웃 아이템 정점으로부터 오는 메시지를 만드는 과정(message contruction)을 식으로 나타낸 것이다.

$m_{u \leftarrow i} = \frac{1}{\sqrt{|\mathcal{N}_u||\mathcal{N}_i}|}(\mathbf{W}_1 e_i)$까지만 보면 GCN과 유사한 것처럼 보이지만, 뒤의 유저와 아이템 간의 상호작용을 반영하는 $\mathbf{W}_2 (e_u \odot e_u)$이 있다는 것이 주목할 만하다.

이 두 번째 항이 추가되면서 유저와 유사한 아이템으로부터 메시지가 더 많이 오도록 한다.

$$ m_{u \leftarrow u} = \mathbf{W}_1 e_u $$

자기 자신으로부터 오는 메시지는 자신의 임베딩 벡터 $e_u$에다가 공유하는 가중치 파라미터인 $\mathbf{W}_1$를 곱하면 된다.

NGCF 전체 구조

[출처] https://arxiv.org/pdf/1905.08108.pdf, Neural Graph Collaborative Filtering

위의 NGCF의 예시는 유저 $u_1$이 아이템 $i_4$를 얼마나 선호할지를 예측하는 것을 나타낸 것이다.

이처럼 NGCF의 전체적인 구조 관점으로 각 레이어에서 어떠한 과정이 일어나고 어떻게 식을 정의할 수 있는지를 정리해보자.

임베딩 레이어(Embedding Layer)

유저와 아이템의 one-hot encoding을 $k$차원으로 임베딩하는 유저-아이템의 초기 임베딩을 제공한다.

$$ E = [ \underbrace{e_{u_1}, \cdots, e_{u_N}}_\text{users embeddings}, \underbrace{e_{i_1}, \cdots, e_{i_M}}_\text{item embeddings}] $$

$e_u$: 유저 $u$에 해당되는 정점에 대한 임베딩

$e_i$: 아이템 $i$에 해당되는 정점에 대한 임베딩

기존 MF(Matrix Factorization), Neural CF 모델에서는 one-hot encoding 벡터를 embedding layer로 임베딩시켰던 것이 곧바로 interaction function에 입력되어 선호도를 예측한다.

그러나 NGCF에서는 이 임베딩을 GNN 상에서 전파시켜 정제(refine)시킨다.

쉽게 이해하자면 앞에서 계속 말한 것처럼 각 정점의 임베딩 벡터를 업데이트 하는 과정이 존재한다는 걸 뜻한다.

이는 임베딩 레이어에서 각 정점의 임베딩 벡터를 업데이트할 때 유저와 아이템 간의 collaborative signal을 명시적으로 주입하기 위한 과정이다.

임베딩 전파 레이어(Embedding Propagation Layer)

Target 정점에 관하여 몇 번 건너 뛴 이웃 정점의 정보까지 반영하는 High-Order Connectivity를 학습한다.

유저와 아이템 간의 collaborative signal(또는 interaction 정보)을 담을 메시지를 구성(message construction)하고 결합(aggregation)하는 단계이다.

Message Construction

유저-아이템 간의 affinity(관련성)를 고려할 수 있도록 메시지를 구성한다.

유저와 연결된 아이템의 수가 많을수록 이 메시지의 크기가 커지는데, 이를 정규화하기 위해 개별 메시지의 크기를 이웃한 정점의 개수로 나누어준다.

여기서 가중치를 공유하는 weight sharing이 생긴다.

$$ m_{u \leftarrow i} = \frac{1}{\sqrt{|\mathcal{N}_u| |\mathcal{N}_i|}}(\mathbf{W}_1 e_i + \mathbf{W}_2 (e_i \odot e_u)) $$

$\mathbf{W}_1$, $\mathbf{W}_2$: weight matrix

$\odot$: element-wise production

$\mathcal{N}_u$, $\mathcal{N}_i$: 유저, 아이템의 이웃한 유저, 아이템 집합

Message Aggregation

$u$의 이웃 노드로부터 전파된 message들을 결합하면 1-hop 전파를 통한 임베딩이 완료된다.

자신으로부터 전달되는 메시지와 인접 노드들로부터 전달되는 메시지를 합해서 Leaky ReLU를 통과시킨다.

$$ e_u^{(1)} = \text{LeakyReLU}(m_{u \leftarrow u} + \sum_{i \in \mathcal{N}_u} m_{u \leftarrow i}) $$

Higher-Order Propagation

[출처] https://arxiv.org/pdf/1905.08108.pdf, Neural Graph Collaborative Filtering

위의 사진은 3개의 레이어를 쌓아서 만든 3-hop layer의 메시지 구성, 전파, 그리고 aggregation 과정을 나타낸 것이다.

이처럼 $l$개의 임베딩 전파 레이어를 쌓으면, 유저 정점은 $l$-차 이웃으로부터 전파된 메시지까지 모두 이용할 수 있다.

$l$단계에서 유저 $u$의 정점 임베딩 벡터는 $(l – 1)$ 단계의 임베딩을 통해 업데이트 된다.

$$ e_u^{(l)} = \text{LeakyReLU}(m_{u \leftarrow u}^{(l)} + \sum_{i \in \mathcal{N}_u} m_{u \leftarrow i}^{(l)}) $$

$$ m_{u \leftarrow i}^{(l)} = p_{ui}(\mathbf{W}_1^{(l)} e_i^{(l-1)} + \mathbf{W}_2^{(l)} (e_i^{(l-1)} \odot e_u^{(l-1)})) $$

$$ m_{u \leftarrow u}^{(l)} = \mathbf{W}_1^{(l)} e_u^{(l-1)} $$

유저의 아이템 선호도 예측 레이어(Prediction Layer)

NGCF에서는 서로 다른 임베딩 전파 레이어에서 학습된 임베딩 벡터를 concatenate한다.

유저와 아이템 별로 $L$차 까지의 임베딩 벡터를 concatenate하여 최종 임베딩 벡터를 계산한 후, 유저-아이템 벡터를 내적하여 최종 선호도 예측값을 계산한다.

$$ e_u^* = e_u^{(0)} \| \cdots \| e_u^{(L)}, \quad e_i^* = e_i^{(0)} \| \cdots \| e_i^{(L)} $$

$$ \hat{y}_{NGCF}(u,i) = e_u^{*\top} e_i^* $$

실제 부스트캠프 과제 코드에서는 이 부분을 내적으로 하지 않고 broadcasting을 고려한 element-wise 곱셈을 진행하여 나중에 합치는 방식으로 진행했는데, 이는 바로 위의 식에서 유저의 최종 임베딩 벡터와 아이템의 최종 임베딩 벡터를 내적하는 것과 결과적으로 동일하기 때문이다.

”’ u_emb: 유저와 최종 임베딩 벡터 p_emb: Positive item(유저와 상호작용 있었던 아이템)의 최종 임베딩 벡터 y_NGCF(u,i) = e_u*^T \cdot e_i* 식을 pytorch의 element-wise 곱셈 연산과 sum으로 구현한 것이다. ”’ y_ui = torch.mul(u_emb, p_emb).sum(dim = -1)

NGCF의 특징

[출처] https://arxiv.org/pdf/1905.08108.pdf, Neural Graph Collaborative Filtering

논문에서 사용한 데이터셋에 의하면 임베딩 전파 레이어가 많아질수록 모델의 추천 성능이 향상되는 것을 볼 수 있다.

다만, 레이어가 너무 많이 쌓이면 앞서 설명한 over-smoothing이 발생할 수 있어서 대략 $L=3, 4$일 때 좋은 성능을 보인다고 알려져 있다.

Model capacity가 크고 임베딩 전파를 통해 representation power가 좋아져서 학습 과정에서 MF보다 더 빠르게 수렴하고 recall도 높다.

MF와 비교하여 유저와 아이템의 상호작용이 임베딩 공간에서 더 명확하게 반영되며, 레이어가 많아질수록 더 명확해진다.

LightGCN

LightGCN이란?

LightGCN은 GCN의 가장 핵심적인 부분만 사용한 모델이며, 이를 위해 핵심적이지 않은 부분을 제거하고 다른 방법을 사용했다.

우선 주변 이웃 노드로부터 메시지를 target 정점으로 전달할 때 $W_1 e_i$처럼 공유하는 가중치 파라미터를 곱하는 feature transformation 과정을 제거하고 단순히 normalized sum을 하는 과정으로 구현했다.

또한 정점 임베딩 벡터를 업데이트하기 위해 주변 정점으로부터 aggregation하는 과정에서 NGCF는 non-linear activation 함수인 LeakyReLU 를 사용했지만, LightGCN은 비선형 함수를 사용하지 않았다.

그리고 마지막에 각 임베딩 전파 레이어에서 나온 한 정점에 관한 임베딩 벡터들을 concatenation 하지 않고 가중 합 하는 과정으로 변경했다.

LightGCN의 아이디어

[출처] https://arxiv.org/pdf/2002.02126.pdf, LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation

가벼운 message construction과 aggregation

기존 NGCF 모델은 임베딩 전파 레이어에서 메시지를 전달할 때 매번 가중치인 학습 파라미터를 임베딩 벡터에 곱하고, 거기에 non-linear transformation인 LeakyReLU 를 사용하여 정점의 임베딩 벡터를 업데이트한다.

반면에 LightGCN에서는 target의 이웃 정점의 임베딩 벡터를 가중합 하는 것이 메시지 전달과 aggregation 과정의 전부여서 학습 파라미터 수와 연산량이 감소한다.

Layer Combination (Weighted Sum)

레이어가 깊어질수록 강도가 약해질 것이라는 아이디어를 적용하여 모델에서 한 정점에 관한 각 레이어의 임베딩 벡터를 최종 임베딩으로 합치는 부분을 단순화했는데, NGCF에서는 concatenation 했지만 여기서는 가중 합(weighted sum)을 적용한다.

LightGCN의 전파 규칙

[출처] https://arxiv.org/pdf/2002.02126.pdf, LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation

Feature transformation과 nonlinear activation을 제거하고 가중합으로 GCN을 적용한다.

$$ e_u^{(k+1)} = \sum_{i \in \mathcal{N}_u} \frac{1}{\sqrt{|\mathcal{N}_u| |\mathcal{N}_i|}}(e_i^{(k)}) $$

$$ e_i^{(k+1)} = \sum_{i \in \mathcal{N}_i} \frac{1}{\sqrt{|\mathcal{N}_i| |\mathcal{N}_u|}}(e_u^{(k)}) $$

앞에서 말한 바처럼 $\mathbf{W}_1^{(k)} e_i^{(k-1)}$와 같은 feature transform이 존재하지 않는다.

또한 NGCF와는 달리 self-loop를 가정하지 않아서 자기 자신을 제외하고 주변의 이웃 정점만 메시지 aggregation에 사용했기 때문에 $\mathbf{W}_1^{(k)} e_u^{(k-1)}$ 항이 뜻하는 self-connection이 존재하지 않는다.

또한 NGCF에서 사용했던 유저와 아이템의 상호작용을 반영하는 $\mathbf{W}_2^{(k)} (e_i^{(k-1)} \odot e_u^{(k-1)}$도 없다.

LightGCN의 예측 레이어(Layer Combination)

[출처] https://arxiv.org/pdf/2002.02126.pdf, LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation

LightGCN에서는 최종 예측을 위해 한 정점에 관한 각 레이어의 임베딩을 결합하는 방법으로 가중 합(weighted sum)을 사용하는데, 이는 각 레이어의 임베딩 결과를 concatenation 하는 NGCF와의 차이점 중 하나이다.

아래 식은 $k$-층으로 된 레이어의 임베딩을 각각 $\alpha_k$배 하여 가중합으로 각 유저 또는 아이템 정점에 관한 최종 임베딩 벡터를 계산하는 것이다.

$$ \begin{align} e_u &= \sum_{k=0}^{K} \alpha_k \mathbf{e}_{u}^{(k)}\\ e_i &= \sum_{k=0}^{K} \alpha_k \mathbf{e}_{i}^{(k)} \end{align} $$

여기서 $\alpha_k$는 최종 임베딩 벡터를 만들 때 가중 합에 사용하는 $k$-층 임베딩의 가중치이며, 하이퍼 파라미터 또는 학습 파라미터로 둘 다 설정이 가능하다.

예를 들어, $\alpha_k$를 하이퍼 파라미터처럼 $(k + 1)^{-1}$로 설정할 수 있는데, 이때는 레이어 층이 더 깊어질수록 강도가 낮아짐을 수식으로 반영한 것이다.

레이어가 깊어지면 앞서 말한 것처럼 over-smoothing이 발생하는데, 이를 해결하기 위해 단순히 마지막 레이어만 사용하면 문제가 발생할 수 있다.

다른 레이어에서 나온 임베딩 벡터 결과는 다른 semantic을 포착할 수 있으며, 레이어가 깊어질수록 Higher Order Connectivity(Interaction)을 포착할 수 있다.

LightGCN에서는 임베딩 벡터를 업데이트할 때 메시지를 aggregation 하는 과정에서 self-connection을 사용하지 않았는데, 이 layer combination 과정에서 self-connection의 효과가 나타난다.

LightGCN의 특징

[출처] https://arxiv.org/pdf/2002.02126.pdf, LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation

논문에서 Gowalla, Yelp2018, Amazon-Book 데이터셋을 가지고 NGCF과 LightGCN을 실험한 결과, 학습 과정에서의 loss와 추천 성능 모두 LightGCN이 NGCF보다 뛰어나다.

여기서 LightGCN은 NGCF보다 Training loss가 낮으면서 추천 성능이 좋은 것을 볼 수 있는데, 이는 모델의 일반화 성능이 좋다는 의미이다.

키워드에 대한 정보 graph neural network 설명

다음은 Bing에서 graph neural network 설명 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 개쉬운 그래프 뉴럴 네트워크 Graph Neural Network

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

개쉬운 #그래프 #뉴럴 #네트워크 #Graph #Neural #Network


YouTube에서 graph neural network 설명 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 개쉬운 그래프 뉴럴 네트워크 Graph Neural Network | graph neural network 설명, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  Carritos De Muñecas De Madera | Carrito Para Muñecas / Juguete De Madera / Woodworking 200 개의 베스트 답변

Leave a Comment