연구를 하면서 머신러닝에 사용되는 Graph에 관해 알아둘 필요가 있어, 관련 기초 내용을 알차게 다루는 Stanford CS224W 강의를 수강하고, 내용을 정리하려 한다.
유튜브 강의 링크는 다음과 같다.
https://www.youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn
목차
Graph Neural Networks (1) ~ (4)까지 input graph를 어떻게 node embeddings로 변환하는지, 이후 GNN 학습 과정은 어떻게 진행되는지 알아보았다.
https://jjuke-brain.tistory.com/entry/Graph-Neural-Networks-1-Deep-Learning-for-Graphs-GCN-GraphSAGE
https://jjuke-brain.tistory.com/entry/Graph-Neural-Networks-2-GNN-Framework
https://jjuke-brain.tistory.com/entry/Graph-Neural-Networks-4-GNN-Training
이번 포스팅에서는 dataset을 train dataset / validation dataset / test dataset으로 어떻게 나눌지를 알아볼 것이다.
Introduction
Dataset은 보통 세 가지로 나눈다.
- Training set : GNN parameter를 최적화하기 위한 데이터이다.
- Validation set : Hyperparameter를 설정하기 위한 데이터이다.
- Test set : 모델의 최종 성능을 평가하는 데 사용하는 데이터이다.
이렇게 나누는 방법은 두 가지이다.
- Fixed split : dataset을 한 번에 세 가지로 나눈다. Training set과 validation set은 모델을 구축할 때 사용되고, test set은 모델을 평가할 때 사용한다.
- Random split : 랜덤 seed로 dataset을 여러 번 나누어 학습 및 평가를 진행하고, 성능의 평균을 최종 성능으로 간주한다.
Data Splitting on Graph
Graph Splitting
이미지 데이터를 나눈다고 생각해보자. 각 이미지(data point)는 서로 독립적이므로, 데이터셋을 쉽게 나눌 수 있다.
하지만, graph dataset에서는 각 node(data point)가 서로 연결되어있으므로, 독립적이지 않다.
위 예시에서 node 5는 node 1에 대한 prediction에 영향을 줄 것이다. (message passing 과정에 관여하므로, node 1의 embedding을 구할 때 영향을 주기 때문이다.
따라서 graph data는 무턱대고 split했다가는 train dataset, validation dataset, test dataset 간에 information leakage가 발생한다.
이를 해결하기 위해서는 다음과 같은 방법을 사용한다.
- Transductive Setting
- Inductive Setting
각각을 자세히 살펴보자.
Transductive and Inductive Settings
Transductive setting은 (노드의) label만 split하여 input graph를 모든 split된 dataset에서 관찰할 수 있도록 하는 것이다.
예를 들어, 위에서 예로 들었던 graph를 다시 한 번 살펴보자.
Training할 때, embedding을 계산할 때에는 전체 graph를 사용하고, 노드 1, 2에 대한 label을 사용하여 학습한다.
Validation할 때, 마찬가지로 embedding을 계산할 때에는 전체 graph를 사용하고, 노드 3, 4의 label을 활용하여 평가한다.
Inductive setting은 edge를 없애고 여러 graph를 얻어 split하는 것이다. 이렇게 얻은 graph들은 서로 독립적이다.
Training할 때, node 1, 2를 포함하는 graph로 embedding을 계산한 후, node 1, 2의 label을 사용하여 학습한다.
Validation할 때, node 3, 4를 포함하는 graph로 embedding을 계산하고, node 3, 4의 label을 사용하여 평가한다.
Transductive setting과 Inductive setting의 특징 및 장단점은 아래와 같다.
- Transductive setting : 같은 graph에서 split한다.
- Dataset은 graph 하나로 이루어진다.
- 전체 graph는 모든 dataset split에서 볼 수 있고, label만 나누어진다.
- Node prediction, Edge prediction task에만 사용 가능하다.
- Inductive setting : 완전히 다른 graph로 split한다.
- Dataset은 여러 graph로 이루어진다.
- 각 split은 해당하는 graph(들)만 관찰 가능하다. → 성능이 좋은 모델은 본 적 없는 graph에 대한 일반화 성능이 좋아야 한다.
- Node, edge, graph task 모두에 사용 가능하다.
각 task에 대해 dataset을 나눈 예시를 알아보자.
Node Classification and Graph Classification Example
위에서 Ransductive setting과 Inductive setting을 설명할 때 들었던 예시가 바로 node classification 예시이다. 간단하게 살펴보고 넘어가자.
Transductive Node Classification
Inductive Node Classification
Graph classification task는 본 적 없는 graph에 대해 test해야 하므로, inductive setting만 가능하다.
Graph Classification Data Splitting Example
Link Prediction Example
Link prediction task의 목표는 missing edge를 예측하는 것이다.
Split을 할 때는 tricky한 방법을 사용한다. Link prediction은 self-supervised task이므로, label 생성과 dataset split을 직접 해주어야 하는데, 일부 edge들을 숨기고, GNN이 edge가 존재하는지 예측하도록 한다. (총 두 번의 edge split을 진행한다.)
Step 1. Original graph에 두 종류의 edge를 할당한다.
- Message Edges (검은색 edge) : GNN message passing에 사용하는 edge
- Supervision Edges (주황색 edge) : Objective 계산, 즉 training에 사용하는 edge
할당 후에는 그래프에 message edge만 남는다. Supervision edge는 training 과정에서 모델이 edge prediction을 진행할 때 사용되며, GNN의 입력으로 들어가지는 않는다.
Step 2. Edge를 나누어 training set / validation set / test set을 만든다.
여기서 두 가지 방법이 있다.
1. Inductive link prediction split
dataset에 3개의 graph가 있다고 한다면, 각 inductive spllit은 서로 독립적인 graph를 갖게 될 것이다.
Training, validation, test set의 각 graph에 대해 message edge와 supervision edge를 나눈다. (supervision edge는 위에서와 마찬가지로 GNN에 입력되지 않는다.)
2. Transductive link prediction split (default)
보통 'link prediction'이라고 하면 이 방법을 말한다.
Transductive(전도성)라는 정의 그대로, 모든 graph가 모든 dataset split에 존재한다. 하지만 edge들은 graph의 구조이면서 동시에 supervision이기도 하므로, validation이나 test에서 training 시의 설정을 유지시킨 상태에서 새로운 edge를 예측하도록 해야 한다.
따라서 Traning set에서의 message edge와 supervision edge를 validation set과 test set에서 유지시킨다.
또한 validation set에는 validation edge(새로운 edge)를 설정하여 그것을 예측하도록 하고, test 시에는 training과 validation에서의 모든 설정을 유지하면서 test edge(새로운 edge)를 예측하도록 한다.
원래 graph에서의 edge 2개를 아예 뺀 상태에서 training을 진행하고, 각각 하나씩 validation과 test 시에 예측하는 개념으로 이해할 수 있다.
최근댓글