Post

[Study]Chapter 8. Applications of Graph Neural Networks

해당 내용은 개인적으로 정리한 내용임으로 틀린 부분이 있을 수 있습니다.

이전 강의에서 GNN을 구성하는 방법과 표현력을 강화하는 방법을 배웠고, 이제 다음으로는 GNN을 학습시키는 방법을 이번 강의에서 다루었습니다.

I. Prediction with GNNs

8-1 Figure 1 : Task에 따른 prediction heads

입력 그래프가 GNN을 통과하면 노드 임베딩 집합\(\{h_v^{(L)}, \forall v \in G\}\)으로 나오게 되며 앞선 GNN을 학습시키기 위한 Learning objective를 정의하는 서로 다른 수준을 가지는 Task의 prediction heads를 필요로 합니다.

1. Node-level prediction

\[\begin{array}{ll} \hat{y}_v&=Head_{(node)}(h_v^{(L)}) \\ &=W^{(H)}h_v^{(L)} \end{array}\]

노드 임베딩을 활용해 직접적인 예측이 가능합니다. \(h^{(L)}_v\)에서 \(\hat{y}_v\)로 노드 임베딩을 매핑하면 loss를 계산할 수 있습니다.

2. Edge-level prediction

\[\hat{y}_{uv}=Head_{edge}(h_u^{(L)},h_v^{(L)})\]

노드 임베딩 쌍을 사용한 예측을 만듭니다. 아래와 같은 방법들이 존재합니다.

  1. Concat + Linear

    \[\hat{y}_{uv}=Linear(Concat(h_u^{(L)},h_v^{(L)}))\]

    linear가 2차원(concat을 통해 생성된)에서 k-dim으로 임베딩한다.

  2. Dot product

    \[\hat{y}_{uv}=(h_u^{(L)})^Th_v^{(L)}\]

    해당방법은 1-way 예측에만 사용 가능하고, link prediction등의 k-way는 아래와 같이 적용합니다.

    \[\begin{array}{ll} \hat{y}_{uv}^{(k)}=(h_u^{(L)})^TW^{(k)}h_v^{(L)} \\ \hat{y}_{uv}=Concat(\hat{y}_{uv}^{(1)},..., \hat{y}_{uv}^{(k)}) \in \mathbb{R}^k \end{array}\]

3. Graph-level prediction

\[\hat{y}_{G}=Head_{graph}(\{h_v^{(L)} \in \mathbb{R}^d,\forall v \in G\})\]

그래프의 모든 노드 임베딩을 활용하여 예측을 만들어 냅니다.

\(Head_{graph}(\cdot)\)은 GNN의 \(AGG(\cdot)\)과 유사하고 아래와 같은 방법들이 존재합니다.

  1. Global mean pooling

    \[\hat{y}_{G}=Mean{graph}(\{h_v^{(L)} \in \mathbb{R}^d,\forall v \in G\})\]
  2. Global max pooling

    \[\hat{y}_{G}=Max{graph}(\{h_v^{(L)} \in \mathbb{R}^d,\forall v \in G\})\]
  3. Global sum pooling

    \[\hat{y}_{G}=Sum{graph}(\{h_v^{(L)} \in \mathbb{R}^d,\forall v \in G\})\]

이러한 방법들은 큰 그래프에서의 Global pooling은 정보를 잃을 수도 있습니다. 만약 노드 임베딩의 scale 값이 다른 두 그래프에서 sum pooling을 진행했는데 임베딩의 결과가 유사하게 나와 정보를 잃게 됩니다. 이러한 방법은 모든 노드임베딩을 계층적\(_{hierarchically}\)으로 종합하여 변환하면 괜찮아집니다. 따라서, 이러한 Polling 방법들은 작은 그래프에서 잘 작동합니다.

8-2 Figure 2 : Hierarchical Pooling in Practice, DiffPool idea로 각 level에서 독립적인 두개의 GNN A(노드 임베딩 계산), B(노드가 속하는 계층\(_{cluster}\)를 계산) 활용하여 병렬적으로 계산하고, 각 pooling layer는 B를 통해 cluster를 할당하고 A로 생성된 노드 임베딩을 종합합니다. 그러면 각 군집에서 새로운 단일 노드를 생성하고 이러한 노드들의 네트워크에 군집간의 연결이 유지됩니다. 그러면 결과적으로 GNN A와 GNN B가 결합되어 학습이 됩니다.

II. Training GNN

이제 학습에 대한 구체적인 절차를 설명합니다.

1. Ground-truth

GNN의 ground-truth1는 제공된 레이블과 제공되지 않은 signal의 정보에서 파생 됩니다.

8-3 Figure 3 : GNN이 예측하려고 하는 대상의 실제 값이나 상태인 Ground-truth

  • 제공된 정보(지도 학습)

    Labels는 외부 소스에서 오며 아래와 같이 작업을 node, edge,graph label로 줄인다면 더 쉬워진다.

    • node labels : 인용 네트워크에서 subject area가 노드가 속한다
    • edge labels : 거래 네트워크에서 edge가 사기\(_{fraudulent}\)인지 아닌지
    • graph labels : molecular 그래프 사이에서 그래프의 drug 유사도
  • 제공되지 않은 정보(비지도 학습)

    signal이 graph 자체에서 나온다.

    비지도학습에서도 “supervision”을 가지고 있어 지도 학습과의 차이가 흐려지기도 하는데, 이러한 경우 “자기지도(self-supervised)”이라고 부른다.(ex. GNN을 노드 군집 계수를 예측하도록 훈련하는 경우)

    GNN 예측에서 아래와 같은 작업들은 외부 label이 필요하지않다.

    • node-level: 노드 통계 clustering coefficient, pagerank 등등
    • edge-level : 연결 예측, 두 노드 사이에 숨겨진 edge, 연결되었는지 예측
    • graph-level : 그래프 통계; 두 그래프가 isomrphic인지 예측

2. Loss & Metrics

8-4 Figure 4 : 예측 값과 실제 값을 가지고 최종 Loss를 계산하는 방법

  • Classification loss

    8-5 Figure 5 : \(Loss=\sum^{N}_{i=1}CE(y^i, \hat{y}^i); 원-핫인코딩 된 값과 예측값에 softmax를 적용하여 확률값으로 구한후 각 임베딩의 loss를 계산.\)

    개별적인\(_{discrete}\) 값을 지닌 label들로 흔히 분류 Task에서 사용되는 Loss function인 Cross-Entropy를 사용합니다.

  • Regression loss

    8-6 Figure 6 : \(Loss=\sum^{N}_{i=1}MSE(y^i, \hat{y}^i), 각 예측값과 실제 값의 오차제곱합\)

    연속적인 값을 가지는 label들로 회귀 Task에서 흔히 L2 loss로 알려진 MSE를 사용합니다.

8-7 Figure 7 : GNN의 성공 지표

GNN은 분류와 회귀 두가지 방법 모두 유연하게 사용이 가능하고, loss와 evaluation metric에서 주된 차이를 보입니다. GNN의 평가 지표로 각 loss에 맞는 일반적인 평가지표(accuracy, ROC 또는 AUC 등)를 사용할 수 있습니다.

III. Setting-up GNN Prediction Tasks

1. Data split

그래프의 데이터셋을 학습을 위해 나누는 방법에 대해 이야기합니다.

8-8 Figure 8 : 데이터셋 분할 방법

  • fixed split
    • Train : GNN 파라미터를 최적화하는데 사용
    • Valid : 모델과 하이퍼파라미터를 개발하는데 사용
    • Test : 마지막 성능 측정에 사용
  • Random split

    위의 방법은 테스트 집합을 훈련 집합에서 완전히 격리됨을 보장하지 못해 랜덤하게 나누는 방법으로 다른 random seed들을 가지고 수행한 결과의 평균을 사용합니다.

왜 그래프를 나누는것이 중요할까?

이미지 데이터셋에서 각 데이터는 이미지이고 독립적입니다. 그러나 그래프 데이터셋에서는 각 데이터가 독립적이지 않습니다. 예를들어 노드 분류에서 각 데이터는 노드 자체이며 각 노드는 독립적이지 않습니다. 그렇다면 어떻게 해야할까요?

  1. Transductive setting

    추론적인 설정으로 입력그래프는 전체 데이터셋 분할에서 관측 될수 있으며 (node)label만 나눕니다. 학습 시 전체 그래프의 1,2 레이블만 사용하여 임베딩을 계산하고 평가할때 3,4 레이블만 가지고 평가한다.

    8-9 Figure 9 : Transductive setting; 노드의 label만 split하여 학습한 label의 임베딩으로 다른 노드의 label을 추론한다.

  2. Inductive setting

    귀납적인 설정으로 여러개의 그래프를 얻기위해 edge를 끊어 분할한다. Figure 10처럼 3개의 독립적인 그래프로 각 그래프의 노드들은 독립적인 관계가 된다. 즉, 본적이 없는 다른 그래프를 일반화하는 것이다.

    8-10 Figure 10 : Inductive setting; 입력 그래프의 edge를 끊어 독립적인 부분 그래프로 만든 후 각 단계에 사용하여 일반화한다.

2. Example

연결 예측 Task에서는 label을 만들 필요가 있고 데이터셋 분할을 스스로 할 필요가 있습니다. 따라서, 구체적으로 몇개의 edge를 숨겨 해당 edge의 존재를 예측하게 합니다.

8-11 Figure 11 : Link prediction

  1. 2개의 타입의 edge를 배정

    • message edges : 메시지 패싱에 사용
    • supervision edges : objective 계산에 사용

    이렇게 두가지 타입의 edge를 배정하면 노드 간 정보를 전달하는데 사용하는 중요한 메시지 타입만 남게 되고, 모델이 어떻게 학습해야하는 지를 알려주는 지도 타입의 edge를 가지고 예측을 하게 됩니다. 여기서 모델이 학습과 예측 단계에서 사용하는 정보가 부분적으로 분리되어 있는 것을 의미하여 모델이 어떤 출력을 해도 GNN에 영향을 미치지 않아 일반화 능력을 높여줍니다.

  2. edge를 학습, 평가, 테스트로 분할한다.

    • option 1. inductive link prediction split
    • option 2. transductive link prediction split

    8-12 Figure 12 : supervision edge를 사용하여 message edge를 학습한 후 validation edge와 test edge를 예측한다.

    왜 edge의 타입 수를 늘려서 사용하는가?

    학습 이후에 GNN에 지도 edge 정보가 알려진다. 따라서 이상적인 모델은 메시지 패싱에 있는 지도 edge를 사용해야한다. 이는 테스트 때도 동일하게 적용해야 한다.

    즉, training message, training supervision, validation, test의 4가지 타입으로 그래프를 분할한다.

DeepSNAP(파이프라인의 핵심 모듈)과 GraphGym(GNN 디자인의 전체 파이프라인 구현) 등으로 구현 가능하다고 합니다.



HNSW

https://www.pinecone.io/learn/series/faiss/hnsw/

  1. 기상학에서 유래된 용어로 학습하고자 하는 데이터의 원본 혹은 실제 값을 표현할 때 사용한다고 합니다.(출처) 

This post is licensed under CC BY 4.0 by the author.