AI바라기의 인공지능

개념 정리 : GNN (Graph Neural Network) 본문

인공지능

개념 정리 : GNN (Graph Neural Network)

AI바라기 2026. 4. 22. 20:18

1. GNN을 한 줄로 말하면

내 주변 이웃들의 정보를 모아서, 내 정보와 섞어, 내 표현을 새로 만드는 모델”입니다.

즉 각 노드는 처음에는 자기 feature만 가지고 있는데,

GNN은 거기에 이웃 정보까지 반영해서 더 좋은 표현을 만듭니다.


2. 왜 이런 게 필요하냐

그래프 데이터에서는 노드 하나만 따로 보면 정보가 부족한 경우가 많습니다.

예를 들어:

  • 사람 노드라면: 내 정보만으로는 부족하고 친구들도 중요할 수 있음
  • 논문 노드라면: 내 내용뿐 아니라 인용 관계도 중요함
  • 분자 그래프라면: 원자 하나만이 아니라 주변 원자와 결합 구조가 중요함

즉,

이 노드가 어떤 의미를 가지는가?는 주변과의 관계를 봐야 더 잘 알 수 있다

는 것입니다.


3. 가장 기본적인 흐름

노드 $i$의 현재 feature를

$$h_i$$

라고 하겠습니다.

이웃 노드들의 feature는

$$\{h_j \mid j \in \mathcal{N}(i)\}$$

입니다.

여기서 $\mathcal{N}(i)$는 노드 $i$의 이웃 집합입니다.

GNN은 보통 크게 두 단계를 합니다.

(1) 이웃 정보 모으기

이웃들의 정보를 하나로 합칩니다.

가장 단순하게 평균을 쓰면:

$$m_i = \text{mean}_{j \in \mathcal{N}(i)} h_j$$

즉,

이웃들의 평균 정보를 만든 것입니다.

(2) 내 정보와 합치기

그 다음 이웃 요약 정보 $m_i$와 내 정보 $h_i$를 섞어서 새로운 표현을 만듭니다.

예를 들면:

$$h_i' = W_{\text{self}} h_i + W_{\text{nbr}} m_i$$

여기서

  • $W_{\text{self}}$: 내 정보를 얼마나 반영할지
  • $W_{\text{nbr}}$: 이웃 정보를 얼마나 반영할지

를 학습하는 가중치입니다.


4. 이 수식이 직관적으로 무슨 뜻이냐

이 식은 사실 그냥 이런 뜻입니다.

“내 원래 정보도 유지하되,

주변 이웃들의 정보도 참고해서

나를 다시 표현하자.”

즉,

$$\text{새로운 나} = \text{내 정보} + \text{주변 정보}$$

인데,

그냥 더하는 게 아니라 학습 가능한 방식으로 섞는 것입니다.

핵심 식만 다시 보면:

$$h_i' = W_{\text{self}} h_i + W_{\text{nbr}} \text{mean}_{j\in\mathcal{N}(i)} h_j$$

5. 왜 “학습 가능한 가중치”가 중요하냐

만약 이웃 정보와 내 정보를 무조건 똑같이 섞으면 너무 단순합니다.

실제로는

  • 어떤 문제에서는 내 정보가 더 중요할 수 있고
  • 어떤 문제에서는 이웃 정보가 더 중요할 수 있습니다.
  • 심지어 이웃들끼리도 중요도가 다를 수 있습니다.

그래서 모델이 직접 배우게 합니다.

예를 들어 더 유연하게 하려면:

$$h_i' = \sigma\big(W [h_i \mid m_i]\big)$$

이렇게 쓸 수도 있습니다.

여기서

  • $[h_i \mid m_i]$: 두 벡터를 이어붙이기(concat)
  • $W$: 학습되는 가중치
  • $\sigma$: 비선형 함수(ReLU 등)

입니다.

즉,

내 정보와 이웃 정보를 붙여서 작은 신경망에 넣어 새 표현을 만드는 것입니다.


6. 엣지 feature가 있으면?

엣지가 단순히 “연결되어 있음”만 나타내는 게 아니라,

그 관계 자체의 정보도 가질 수 있습니다.

예를 들어 엣지 feature를

$$e_{ij}$$

라고 하겠습니다.

그러면 노드 $j$가 노드 $i$에게 보내는 정보를 만들 때

노드 feature뿐 아니라 엣지 feature도 같이 쓸 수 있습니다.

예를 들면:

$$m_{ij} = \phi(h_i, h_j, e_{ij})$$

즉 메시지는

  • 내 정보 $h_i$
  • 이웃 정보 $h_j$
  • 둘 사이 관계 $e_{ij}$

를 같이 보고 만들 수 있습니다.

그 다음 이 메시지들을 모아서:

$$m_i = \sum_{j \in \mathcal{N}(i)} m_{ij}$$

최종적으로 업데이트합니다:

$$h_i' = \psi(h_i, m_i)$$

이게 더 일반적인 GNN 형태이고,

이걸 보통 message passing이라고 부릅니다.


7. 그래서 GNN의 본질은 뭐냐

아주 본질만 남기면 이겁니다.

GNN의 핵심 3단계

  1. 이웃에게서 정보 받기
  2. 그 정보를 하나로 모으기
  3. 내 정보와 합쳐서 내 표현을 업데이트하기

즉,

$$\text{Gather} \rightarrow \text{Aggregate} \rightarrow \text{Update}$$

입니다.

좀 더 일반적으로 쓰면:

$$h_i' = \text{Update}\Big(h_i, \text{Aggregate}(\text{messages from neighbors})\Big)$$

입니다.


8. 직관적 비유

노드 하나를 한 사람이라고 생각해보면 쉽습니다.

  • 내 feature = 내 생각, 내 상태
  • 이웃 feature = 주변 사람들의 생각, 상태
  • 엣지 feature = 나와 그 사람의 관계

그러면 GNN은

“내 생각만 보지 말고,

주변 사람들 얘기도 듣고,

그걸 종합해서 내 상태를 다시 정하자”

라는 구조입니다.

즉, 주변 문맥을 반영한 표현 학습입니다.


9. 한 층, 두 층, 세 층 쌓이면?

GNN layer를 한 번 적용하면

보통 1-hop 이웃 정보까지 반영됩니다.

두 번 적용하면

이웃의 이웃, 즉 2-hop 이웃 정보까지 간접적으로 반영됩니다.

세 번이면 더 멀리 갑니다.

즉 layer를 쌓을수록

더 넓은 그래프 문맥을 보게 됩니다.

예를 들어:

  • 1층: 바로 연결된 노드들 반영
  • 2층: 한 칸 더 멀리 있는 노드들까지 반영
  • 3층: 더 넓은 주변 구조 반영

10. 핵심을 제일 짧게 요약하면

아주 짧게 줄이면:

$$\text{새 노드 표현} = \text{내 정보} + \text{이웃 정보의 요약}$$

좀 더 GNN스럽게 쓰면:

$$h_i' = \text{Update}\Big(h_i, \text{Aggregate}(\{h_j : j\in\mathcal{N}(i)\})\Big)$$

즉,

GNN은 그래프에서 이웃 정보를 모아 자기 표현을 업데이트하는 모델입니다.


11. 진짜 핵심만 다시 말하면

중요한 건 세 가지입니다.

  • 노드는 자기 feature를 가짐
  • 이웃들의 정보를 모음
  • 그걸 자기 정보와 합쳐 새로운 node representation을 만듦

그래서 GNN을 이해할 때 가장 중요한 문장은:

그래프 구조에 따라 주변 정보를 모아 자기 표현을 업데이트한다.”

입니다.