[Graph 9강] 그래프 신경망이란 무엇일까? (기본)

💡
귀납식 정점 표현방법인 그래프 신경망이 무엇이고, CNN과 어떤 차이점이 있는지에 대해 알아본다.

그래프 신경망 기본

그래프 신경망(GNN)은 정점 표현 학습의 일부이다. 마찬가지로 정점의 유사도를 보존한 채 벡터로 변환시키는 것을 목표로 한다. 단, 앞서 배웠던 변환식 정점 표현 학습과는 다르게, 귀납식 정점 표현 학습의 일부로 Encoder 자체를 반환하는 정점 표현 학습이다. 귀납식 임베딩 방법은 다음과 같은 장점을 가진다.

GNN, 귀납식 임베딩의 장점

그래프 신경망은 그래프와 각 정점의 속성 정보를입력으로 받는다. 각 정점 uu의 속성 벡터를 XuX_u라고 하고, XuX_umm개의 속성을 같는 mm차원 벡터로 생각할 수 있다. 예를 들어, 정점의 속성은 정점의 중심성이나 군집계수나 Page Rank Score등이 될 수 있다.

그래프 신경망은 이웃 정점들의 정보를 집계하는 과정을 반복하여 최종 임베딩을 얻는다.

대상 정점의 이웃의 정보를 집계하는데, 해당 이웃 정점 역시 다른 이웃들로부터 정보를 집계한다. AA정점의 이웃들의 정보에 AA가 포함되어 있음을 볼 수 있다.

각 집계 단계를 층(Layer)라고 부르며, 각 층마다 임베딩을 얻는다. 각 층은 이전 층의 임베딩을 집계하여 생성되며, 0번 층에서는 정점의 속성 벡터를 사용해 임베딩을 시작한다.

0번 층에서는 정점의 속성 벡터를 통해 임베딩을 한다.

각 정점은 이웃의 수에따라 집계되는 정보의 갯수가 상이하다.

이웃의 수에 따라 집계되는 정점의 수가 다름을 볼 수 있다.

GNN은 층 별로 사용되는 집계함수를 공유한다. CNN에서의 Filter나, RNN에서의 Encoder처럼, 각 층의 집계함수는 동일하게 사용된다.

각 층에서 사용되는 함수는 동일하기 때문에, 다른 갯수의 입력이 들어와도 이를 해결할 수 있어야 한다. 층이 다른 경우에는 다른 함수를 사용하는 것이 일반적이다.

다른 갯수의 입력이 들어와도 일정하게 계산할 수 있도록, 정보들을 취합한 후에 신경망에 적용하는 형태로 구현되어 있다.

평균을 사용하여 갯수와 무관하게, 일정한 크기의 벡터를 입력으로 사용할 수 있다.

집계함수를 수식으로 표현하면 아래와 같다.

임베딩 벡터 hh는 0번째에 각 정점의 속성으로 이루어지고, 이후 kk step의 임베딩 벡터는 WkW_kBkB_k에 의해 계산된다. GNN의 학습은 이 두 선형변환 행렬을 최적화시키는 것이다.

그래프 신경망을 학습하기 위해서 손실함수를 정의해야 하는데, 이 과정은 유사도를 정의하는 것과 깊은 상관관계가 있다. 예를 들어, 인접성을 기반으로 유사도를 정의한다면, 다음과 같은 손실함수를 사용할 수 있다.

노드간 간선이 있는 경우만 유사도가 있다고 판단하는 AA행렬을 근사하는 형태이다.

이외에도, 후속과제의 손실함수를 이용해 학습시킬수도 있다. 예를 들어, 그래프 신경망을 통해 정점의 임베딩을 얻고, 이를 분류기의 입력으로 사용하여 각 정점을 분류하고자 한다면, 분류 알고리즘의 손실함수를 사용할 수 있는 것이다.

분류 알고리즘의 손실함수를 사용해 GNN을 동시에 학습시키는 방법의 예시
End-to-End 학습의 시각화 예시

그래프 신경망은 각 층별로 같은 유닛을 공유하기 때문에, 학습 시 일부 정점만 사용해서 학습을 진행할 수 있다. 일부 정점으로만 학습한 GNN은 학습에 사용되지 않은 정점에도 사용하여, 임베딩을 얻어낼 수 있다. 더 나아가서 학습 이후에 추가된 정점에 대한 임베딩도 얻을 수 있으며, 새로운 그래프에도 신경망을 적용할 수도 있다.

학습에 사용하지 않은 정점에 대해 임베딩을 얻는 예시
학습 이후에 추가된 정점에 대해 임베딩을 얻는 예시
학습된 GNN을 새로운 그래프에 적용하는 예시

그래프 신경망 변형

위의 집계함수 형태 외에도 다양한 형태가 존재한다.

그래프 합성곱 신경망(GCN)은 GNN과 다른 집계함수를 사용함으로써 큰 성능의 향상을 이뤄냈다. 가장 큰 차이점은 BkB_k를 줄이고, 정규화 방법을 변경한 점이다.

GCN의 집계함수 예시

GraphSAGE는 이웃들의 임베딩을 AGG함수로 이용해 합치고, 더하지 않고 Concatenate하는 형태로 구현되어 있다. 특이한 점은 다양한 AGG함수를 사용해 결과를 얻을수 있다는 점이다.

GraphSAGE의 집계 함수 예시
AGG 함수의 다양한 예시

합성곱 신경망과의 비교

GCN은 CNN과 인접한 이웃의 정보를 집계한다는 점에서는 유사하다.

GCN과 CNN은 모두 이웃의 정보를 집계한다.

CNN은 집계하는 이웃의 수가 균일하지만, GCN은 정점별로 집계하는 이웃의 수가 다르다.

GCN과 CNN은 집계하는 이웃의 수에 차이점이 있다.

그래프의 인접행렬에 대해서 CNN을 적용하는 것은 문제가 생길 수 있다. 왜냐하면, 인접행렬은 이미지의 픽셀처럼 인접 셀과 관계가 없을 수 있기 때문이다. 각 행과 열의 순서는 임의로 배정될 수 있기 때문이다.

실습 코드

GraphSAGE


[Graph 10강] 그래프 신경망이란 무엇일까? (심화)

💡
어텐션을 적용하는 방법과, 그래프 풀링으로 그래프의 임베딩을 얻는 방법, 이 과정에서 일어날 수 있는 문제점에 대해 알아본다.

그래프 신경망에서의 어텐션

위에서 살펴본 GNN은 이웃들의 정보를 동일한 가중치로 평균을 내며, GCN도 단순히 연결성만을 고려해 동등한 가중치를 부여한다.

박스 친 부분을 보면, 각 이웃에 대해 동일한 가중치를 부여함을 알 수 있다.

이는 모든 이웃이 동일한 관계를 갖는 것으로만 표현할 수 있는 한계를 가진다. 실제 그래프에서는 이웃별로 미치는 영향이 다를 수 있기 떄문에, 각 이웃에 대해 가중치를 다르게 판단할 필요가 있다.

그래프 어텐션 신경망(GAT)는 가중치 자체도 학습하는 형태로 구성된다. 이 가중치를 학습하기 위해서 Self-Attention이 사용된다.

각 이웃에 대해서 다른 가중치 α\alpha를 부여하는 예시

각 층에서 정점 ii로부터 jj로의 가중치를 αij\alpha_{ij}라고 할 때, 이는 다음과 같은 계산을 통해 구해진다.

각 간선의 가중치가 구해지는 계산의 예시

Transformer에서 보았듯, 여러 개의 헤드로부터 어텐션을 구해 Concatenate하는 Multi-Head Attention도 수행할 수 있다.

Single-Head Attention보다 많은 정보를 포함할 수 있다.

여러 Task에서 어텐션을 사용한 GAT은 기존의 GCN보다 더 나은 성능을 보였다.

그래프 표현 학습과 그래프 풀링

그래프 표현 학습은 그래프 전체를 벡터의 형태로 표현하는 것이다. 각각의 정점뿐만 아니라, 그래프 전체를 벡터로 표현하고자 하는 시도이다. 이는 다양한 그래프가 있을 때 그래프를 분류 하는 문제 등에 사용될 수 있다.

그래프 풀링이란, 정점 임베딩으로부터 그래프 임베딩을 얻는 과정을 의미한다. 각 정점들의 평균을 구하는 등의 간단한 방법보다 그래프의 구조를 고려하는 방법을 사용할 경우 더 좋은 성능을 보이는 것으로 알려져있다.

군집 구조를 활용한 미분가능한 풀링의 예시

위 사진처럼 각 정점 임베딩으로부터 GCN으로 군집구조를 파악하고, 각 군집을 하나의 정점으로 표현하는 식으로 집계를 해나간다. 최종적으로 하나의 정점으로 표현되는 그래프를 벡터로 표현하여 후속 과제를 수행할 수 있다.

지나친 획일화 문제

지나친 획일화(Over-Smoothing) 문제는 그래프 신경망의 층이 증가하면서 정점의 임베딩이 과하게 유사해지는 현상을 의미한다. 이는 작은 세상 효과와 관련이 있다. 수 많은 정점이 존재하는 그래프더라도, 몇번의 간선을 거치면 서로 이웃이 되는 성질을 때문이다.

GNN이 5층만 있어도, 거의 모든 정점이 비슷한 임베딩을 갖게 된다.

이는 후속과제에서도 문제가 된다. 그래프 신경망의 층이 2~3개를 넘어가게 되면 정확도가 현저히 낮아지는 현상을 보인다. 이를 극복하기 위해 다른 신경망에서는 잔차항을 사용하나, 그래프 신경망에서는 큰 효과를 얻지 못한다.

잔차항을 도입하여도, 성능이 개선되지 않는다.

그래프 신경망에서는 이를 극복하기 위해 새로운 개념을 도입한다. Jumping Knowledge Network는 마지막 층의 임베딩 뿐만 아니라, 모든 층의 임베딩을 함께 사용하는 것으로 획일화의 문제를 해결하고자 했고, APPNP는 0번째 층을 제외하고 다른 모든 집계함수에 신경망을 제거해 집계함수를 단순화 하였다. 특히 APPNP는 층의 증가에 따른 정확도 감소효과가 없는 성과를 거뒀다.

JK Network의 예시
APPNP의 예시
APPNP의 성능 예시

그래프 데이터 증강

데이터 증강(Data Augmentation)은 다양한 머신러닝에서 효과적인 방법이다. 그래프에서도 누락되거나 부정확한 간선이 있을 수 있는데, 이를 보완하는 방법으로 사용될 수 있다. 이 방법은, 임의 보행을 통해 정점간 유사도를 계산하고, 유사도가 높은 정점간의 간선을 추가하는 방법으로 제시되었다.

그래프 데이터 증강의 예시

이런 데이터 증강의 결과로 후속 과제의 정확도가 개선되는 효과를 얻을 수 있었다.

Heat와 PPR은 데이터 증강의 기법을 의미한다.

실습 코드

SAGEConv


Reference

GCN Paper

GNN Paper

+ Recent posts