GNN (Graph Neural Network)

CODA·2022년 9월 15일
0

본 포스팅은 네이버커넥트재단신기정 교수님(KAIST AI대학원) 자료를 참고하여 작성하였습니다

  • 노드 임베딩에서 학습의 결과로 임베딩 자체를 얻는 것이 아닌, 인코더(임베드 함수)를 얻는 귀납식 임베딩 방법 중 대표적인 방법인 그래프 신경망(GNN)에 대해서 알아보자.

GNN 이란?

  1. 컴퓨터상에서 원활하게 다루기 위해 노드를 벡터로 만들어야 함
  2. f(graph) = node embeddings
  • 이 때의 함수 f를 비선형 변환의 multi-layer로 구상
  • output은 task에 따라 다름 (node classification, link prediction 등)
  • 이 때 목적함수는 기존 그래프 구조에서의 유사도와 벡터변환공간에서의 유사도의 차이가 최소가 되도록

1. 그래프 신경망 구조

그래프 신경망은 그래프와 노드의 속성 정보를 입력으로 받는다 (노드 속성 예시 : sns 사용자의 지역, 성별, 연령 등)

  • 그래프 신경망은 이웃 노드들의 정보를 집계하는 과정을 반복하면서 임베딩을 얻는다
    => 대상 노드(그림에서 노드 A)의 임베딩을 얻기 위해서는 이웃의 이웃의 정보, 이웃의 정보 순으로 임베딩을 구하면서 얻게된다
  • 각 집계 단계를 층(Layer)라 부르고, 층마다 임베딩을 얻는다
    각 층에서는 이전 층의 임베딩을 통해서 해당 층의 임베딩을 얻는다
    0번 층의 경우 노드의 속성 벡터를 이용한다

2. 집계함수

대상 노드가 서로 다른경우에도 층 별 집계 함수는 공유 한다

  • 서로 다른 구조의 계산 그래프를 처리하기 위해서 집계함수는 (1) 이웃들 정보의 평균을 계산하고 (2) 신경망에 적용하는 단계를 거친다

  • 위와 같이 각 층에서의 해당 노드의 이웃 정보를 계산하는데, 이 때 자기 자신도 이 전층에서는 이웃한 것이기 때문에 자신의 임베딩 정보도 더해준다. 이 두 과정에서 가중치를 부여하고, 이것을 신경망을 통해 값을 갱신해나간다
  • 마지막 층에서의 임베딩 = 해당 노드의 출력 임베딩 !
  • 0번째 층에서의 임베딩 = 입력 속성 정보

  • 그리고 우리의 목표는 그래프 공간과 임베딩 공간 사이에서 유사도 수준을 최대한 보존하는 것이였으므로 차이 값이 최소가 되도록 손실 함수를 정의한다
  • 이때 classifier의 역전파를 graph 신경망까지 진행하는 '종단종 학습'도 가능한데, 그래프 신경망의 종단종 학습을 통한 분류는 변환적 노드 임베딩 이후에 별도의 분류기를 학습하는 것보다 정확도가 대체로 높다고 한다

3. 그래프 신경망 변형

위에서 소개한 것 이외에도 다양한 형태의 집계함수를 사용할 수 있다

3-1. GCN(그래프 합성곱 신경망)의 집계함수

  • 이전층에서의 자신의 정보를 별도의 신경망을 쓰는것이 아닌 동일 신경망을 사용한다
  • 기존 방법에서, u와 v의 연결성의 기하평균을 사용하는 방식으로 정규화 방법이 변화되었다

3-2. GraphSAGE의 집계함수

  • AGG함수에 넣고 이것을 신경망으로 처리
  • 자신의 이전층 임베딩을 별도에 신경망으로 사용하는데 마지막에 이것을 더하는것이 아니라 Concatenation해서 더 기다란 신경망을 만듦

4. 기존 합성곱 신경망(CNN)과의 비교

  • CNN도 유사하게 해당 픽셀의 임베딩을 얻고자 이웃의 정보를 convolutional하게 집계하는 과정을 반복한다
  • 그러나 CNN에서는 이웃의 수가 균일하지만 GNN에서는 그렇지 않다. 노드별로 집계하는 이웃의 수가 다르다
  • CNN에서 주로 쓰이는 이미지에서는 인접 픽셀이 유용한 정보를 담고 있을 가능성이 높지만 그래프에서는 그렇지 않기때문에 (특히나 인접행렬의 행과 열의 순서는 임의로 결정되는 경우가 많음) GNN을 적용하여야 한다

5. 그림으로 보는 GNN

이미지 출처 : Stanford CS224W

1. input으로 Graph를 받는다
2. Graph Conv 등의 layer를 통과한다
3. Activation function 등의 layer를 통과한다
4. Dropout과 같은 Regalariztion layer를 통과한다
5. prediction을 진행 (nodes, links, graphs 수준의 예측)

Life Cycle

raw data => graph data 로 변형하는 과정에서 기존에는 feature engineering을 수행하였다면 GNN에서는 Representation Learning(== 노드를 d차원의 벡터로 임베딩)을 수행한다

6. 활용

node와 edge를 각각 object, interacion으로 대응하며, 문제를 어느 수준에서 정의할 것인가에 따라 나뉠 수 있다

  • node-level : node classification (노드의 속성 분류)
    • user의 특성 예측
  • edge-level : link prediction (두 노드 사이의 누락된 link 예측)
    • user와 item 간의 상호작용 예측 (추천시스템, 약물 조합 부작용 예측)

7. 구현

Pytorch Geometric으로 GNN을 구현해볼 수 있다
=> Geometric 라이브러리를 설치하기 위해 설치된 pytorch가 cuda 어느버전을 지원하는지 등을 확인해야한다

profile
금융권에 가고싶은 김코다입니다. 취업을 하면 기타치며 조르바처럼 살고파요.

0개의 댓글