**그래프 신경망 (Graph Neural Networks, GNNs)** 그래프 신경망(GNN)은 그래프 데이터에서 직접 학습할 수 있도록 설계된 신경망 아키텍처의 한 종류입니다. 그래프에서는 **노드(Node, 정점)**가 개체(Entity)를 나타내고, **엣지(Edge, 간선)**가 개체 간의 관계를 나타냅니다. GNN은 이러한 네트워크 구조를 그대로 반영하여 학습하는 데 강점을 가지며, 대표적인 응용 분야로는 **소셜 네트워크, 분자 구조, 지식 그래프(Knowledge Graph), 교통 네트워크** 등이 있습니다. --- ## **핵심 개념** ### 1. **그래프 표현 (Graph Representation)** - 그래프 GG는 보통 **노드 집합** VV와 **엣지 집합** EE로 정의됩니다. - 각 노드 $v∈Vv \in V$에는 **특징 벡터** $xv\mathbf{x}_v$가 할당될 수 있습니다. - 각 엣지 $(u,v)∈E(u, v) \in E$ 역시 **특징 벡터** $euv\mathbf{e}_{uv}$를 가질 수 있으며, 이는 노드 $uu$와 $vv$ 사이의 관계를 설명하는 정보입니다. ### 2. **메시지 패싱 (Message Passing)** - GNN에서는 **메시지 패싱(Message Passing)** 또는 **이웃 정보 집계(Neighborhood Aggregation)** 과정을 통해 노드 간 정보를 교환합니다. - 각 레이어에서 노드는 다음 단계를 거칩니다: 1. **이웃 노드로부터 정보를 집계** (예: 평균, 합산, 가중합 등) 2. **자신의 기존 정보와 결합하여 업데이트** - 여러 레이어를 거치면서 한 노드는 점점 더 많은 이웃의 정보를 포함한 **임베딩(Embedding)**을 형성하게 됩니다. ### 3. **그래프 컨볼루션 레이어 (Graph Convolutional Layers)** - 대표적인 GNN 모델 중 하나인 **GCN(Graph Convolutional Network)**의 업데이트 규칙은 다음과 같습니다: $hv(k+1)=σ(∑u∈N(v)∪{v}1∣N(v)∣∣N(u)∣W(k) hu(k))\mathbf{h}_v^{(k+1)} = \sigma\Bigg(\sum_{u \in \mathcal{N}(v) \cup \{v\}} \frac{1}{\sqrt{|\mathcal{N}(v)|}\sqrt{|\mathcal{N}(u)|}} \mathbf{W}^{(k)}\, \mathbf{h}_u^{(k)}\Bigg)$ - $hv(k)\mathbf{h}_v^{(k)}$ 는 kk번째 레이어에서 노드 vv의 임베딩입니다. - $N(v)\mathcal{N}(v)$는 노드 vv의 이웃 노드 집합입니다. - $W(k)\mathbf{W}^{(k)}$는 학습 가능한 가중치 행렬입니다. - $σ\sigma$는 활성화 함수(예: ReLU)입니다. - 다른 GNN 모델(예: GraphSAGE, GAT, GIN)은 이웃 정보를 집계하는 방식에서 차이가 있습니다. ### 4. **풀링 및 리드아웃 (Pooling / Readout)** - 그래프 전체를 하나의 벡터로 표현해야 하는 경우, **리드아웃(Readout) 연산** 또는 **풀링(Pooling) 연산**이 사용됩니다. - 노드 임베딩들의 **합(Sum), 평균(Mean), 최댓값(Max)**을 취하는 방식 - **계층적 풀링(Hierarchical Pooling)** 기법을 활용해 점진적으로 그래프를 축소하는 방식 ### 5. **작업 유형 (Types of Tasks)** - **노드 분류 (Node-Level Tasks)**: 개별 노드의 속성을 예측 (예: 소셜 네트워크에서 봇 계정 탐지) - **엣지 예측 (Edge-Level Tasks)**: 엣지 존재 여부 또는 엣지 속성을 예측 (예: 추천 시스템에서 사용자-아이템 연결 예측) - **그래프 분류 (Graph-Level Tasks)**: 그래프 전체의 속성을 예측 (예: 분자의 독성 여부 판단) --- ## **대표적인 GNN 아키텍처** 1. **GCN (Graph Convolutional Network)** - 가장 널리 사용되는 GNN 모델 중 하나 - **스펙트럼 기반 컨볼루션**을 적용하여 노드 간 관계를 학습 - 반지도 학습(Semi-Supervised Learning)에서 주로 사용 2. **GAT (Graph Attention Network)** - **어텐션 메커니즘(Attention Mechanism)**을 적용하여 이웃 노드의 중요도를 학습 - 단순 평균이 아니라 학습 가능한 가중치를 통해 정보 집계 3. **GraphSAGE** - **샘플링(Sampling) 기법**을 활용하여 대규모 그래프도 처리 가능 - 평균, LSTM, 가중합 등 다양한 집계 방식 지원 4. **GIN (Graph Isomorphism Network)** - 그래프 구조를 보다 강력하게 구별할 수 있도록 설계됨 - 단순한 구조이지만 표현력이 뛰어남 5. **MPNN (Message Passing Neural Network)** - GNN을 일반화한 프레임워크로, 다양한 메시지 패싱 기법을 포괄 - 분자 구조 분석 등에서 활용 --- ## **GNN의 주요 응용 분야** 1. **소셜 네트워크 분석** - 친구 추천, 커뮤니티 탐색, 악성 계정 탐지 2. **의약/화학** - 분자 특성 예측, 신약 개발 - [[GNN에서 단백질-약물 상호작용 분석]] 3. **추천 시스템** - 사용자-아이템 관계를 그래프로 모델링하여 추천 정확도 향상 4. **[[지식 그래프]] (Knowledge Graph)** - 엔터티(개체) 분류, 관계 추론, 질의 응답 시스템 5. **컴퓨터 비전** - 이미지 내 객체 간 관계 분석, 장면 그래프(Scene Graph) 생성 6. **교통 및 네트워크 분석** - 교통 흐름 예측, 최적 경로 탐색 --- ## **장점과 과제** ### ✅ **장점** - **관계 정보 학습 가능**: 그래프 구조 자체를 활용하여 데이터 간의 연결을 효과적으로 학습 - **가변 크기의 입력 처리 가능**: CNN이나 RNN과 달리 노드 수가 변하는 데이터를 다룰 수 있음 - **유연성**: 다양한 그래프 기반 태스크에 적용 가능 ### ⚠ **과제** - **확장성(Scalability)**: 대규모 그래프에서는 계산 비용이 높음 → 샘플링 기법 필요 - **과도한 스무딩(Over-Smoothing)**: 너무 많은 메시지 패싱은 노드 간 표현이 동일해지는 문제 발생 - **이질적 그래프(Heterogeneous Graphs)**: 노드/엣지 타입이 다양한 경우 모델링이 복잡해짐 - **동적 그래프(Dynamic Graphs)**: 시간에 따라 변화하는 그래프를 처리하는 방법이 필요 --- ## **시작하기** 1. **라이브러리 및 프레임워크** - [PyTorch Geometric (PyG)](https://pytorch-geometric.readthedocs.io/) - [DGL (Deep Graph Library)](https://www.dgl.ai/) - [Graph Nets (DeepMind)](https://github.com/deepmind/graph_nets) 2. **기본 코드 (PyTorch Geometric)** ```python import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv class SimpleGCN(torch.nn.Module): def __init__(self, in_channels, hidden_channels, out_channels): super().__init__() self.conv1 = GCNConv(in_channels, hidden_channels) self.conv2 = GCNConv(hidden_channels, out_channels) def forward(self, x, edge_index): x = self.conv1(x, edge_index).relu() x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) ``` --- ## **요약** GNN은 그래프 데이터에서 관계와 패턴을 학습하는 강력한 도구입니다. 다양한 분야에서 활용되며, 실용적인 과제(확장성, 과적합 등)를 해결하는 연구가 활발히 진행되고 있습니다.