그래프 데이터 → GNN layer → 활성화 함수 → 정규화 → GNN layer → 출력 임베딩
GNN은 노드와 엣지로 구성된 그래프를 입력 받아, 각 노드의 벡터 표현을 생성하는 신경망 구조
Recap : Graph Neural Networks
각 노드의 이웃이 그 노드의 계산 그래프를 정의함.
노드 별 계산 그래프 정의 : 중심 노드 i 를 기준으로 k-hop 범위 내의 이웃 노드들이 해당 노드의 정보 업데이트에 참여한다. (k-hop neighborhood)
정보 전파 및 변환 : 이웃 노드들의 정보를 message passing과 aggregation을 통해 통합함.
Recap : Aggregate from Neighbors
각 노드는 자기 주변의 이웃으로부터 정보를 받아서 자신의 벡터 표현을 업데이트한다.
Recap : Aggregate Neighbors
네트워크에서 각 노드는 자신의 이웃으로부터 정보를 단계적으로 집계한다.
모든 노드는 자신의 연결관계 (이웃 구조)를 바탕으로 독립적인 정보 집계 과정을 가진다.
→ GNN은 하나의 큰 그래프를 여러 개의 노드별 지역 계산 그래프로 분해하여, 각 노드가 이웃의 정보를 단계적으로 집계하고 학습하는 구조
A General GNN Framework
: 이웃 간 메시지 전달과 집계를 반복하면서, 층을 쌓아 더 넓은 그래프 정보를 학습하고, 최종적으로 학습 목표를 통해 예측을 수행하는 신경망 구조임.
메시지 전달 → 집계 → 층 연결 → 그래프 확장 → 학습 목표
1. A Single Layer of a GNN
GNN Layer = Message + Aggregation
하나의 GNN layer은 이웃으로부터 메시지를 받고 → 그것을 집계 → 자신의 임베딩 업데이트
ex) GCN, GraphSAGE, GAT, …
A Single GNN Layer
compress a set of vectors into a single vector
2-step process
1. Message : 각 이웃 노드가 자신의 정보를 중심 노드에게 보냄
2. Aggregation : 중심 노드가 이웃들로부터 받은 메시지를 통합해서 자신의 새로운 임베딩 생성
자기 노드의 이전 표현 + 이웃 노드들의 이전 표현 = 다음 레이어의 입력
Message Computation
(1) Message computation (메시지 계산)
각 노드는 자신이 가진 정보를 이웃에게 전달할 메시지를 만든다.
Message Function : mu(l)=MSG(l)(hu(l−1))
MSG function Example : A Linear Layer mu(l)=W(l)hu(l−1)
(2) Aggregation (집계 단계)
각 노드 v는 이웃 노드들 u로부터 받은 메시지들을 모아서 자신의 새로운 표현을 만든다.
hv(l)=AGG(l)({mu(l),u∈N(v)})
- Agg Example : Sum(·), Mean(·), or Max(·) aggregator
ex) $h_v^{(l)} = Sum(\{ m_u^{(l)} , u \in N(v) \})$
Message Aggregation 에서의 문제점
문제점 : 노드 v 자기 자신의 정보가 사라질 수 있다 → hv(l) 계산이 이웃 노드 정보에만 의존하게 됨.
해결방법:hv(l)를 계산할 때, 자기 자신의 정보도 메시지로 포함시켜서 함께 집계하도록 하자
💬 (1) Message
자기 자신 노드 v도 메시지를 생성한다.
보통, 이웃 노드와 자기 자신에 대해 서로 다른 가중치 행렬을 사용한다.
For neighbors: mu(l)=W(l)hu(l−1)
For self node: mv(l)=B(l)hv(l−1)
🔗 (2) Aggregation
이웃 노드들의 메시지를 모두 집계한 뒤, 자기 자신의 메시지도 포함 시켜 최종 노드 표현을 만든다.
이때, 덧셈이나 벡터 연결 방식을 사용한다.
hv(l)=CONCAT(AGG(mu(l),u∈N(v)),mv(l))
→ GNN은 이웃의 정보 뿐만 아니라 자기 자신의 정보도 포함해야 함!!
→ 이웃의 메시지 + 자기 자신의 메시지 = 새로운 노드 표현
A Single GNN Layer
자기 자신의 메시지를 포함시켰을 때의 GNN layer
하나의 GNN layer은 세 단계로 구성된다. (1) Message : 각 노드가 자신의 feature로부터 메시지를 계산한다. mu(l)=MSG(l)(hu(l−1)),u∈{N(v)∪v} 이웃 노드 + 자기자신 모두 메시지를 만든다. (2) Aggregation : 이웃 노드들의 메시지를 모아 새로운 표현을 만든다. hv(l)=AGG(l)({mu(l),u∈N(v)},mv(l)) 중심 노드 v는 이웃들의 메시지와 자신의 메시지를 집계해서 새로운 노드 표현 생성
Nonlinearity (activation) : 모델의 표현력 향상
$\sigma(\cdot)$ (e.g. ReLU, Sigmoid, etc.)
Activation (Non-linearity)
모델이 단순한 선형 계산만 반복할 시 복잡한 패턴을 학습하기 어려움
→ 각 차원 xi에 비선형 함수를 적용해 표현력을 높이는 것이 활성화 함수임.
ReLU (Rectified Linear Unit)
- $\text{ReLU}(x_i) = \max(x_i,0)$
- 0보다 작으면 0, 크면 그대로 값을 통과시키는 단순한 구조
- 가장 많이 쓰이는 활성화 함수
Sigmoid
- $\sigma(x_i) = \dfrac{1}{1+e^{-x_i}}$
- 출력이 0~1 사이로 제한됨
- 주로 확률값 표현이 필요한 경우 사용
- 단, 큰 입력 값에서 gradient 가 0으로 수렴하는 포화 문제
Parametric ReLU (PReLU)
- $\text{PReLU}(x_i) = \max(x_i,0) + a_i\min(x_i,0)$
- $a_i$는 학습가능한 파라미터
- 음수 영역 기울기를 0 대신 $a_i$로 둬서 ReLU의 한계를 보완
- 경험적으로 ReLU보다 성능이 좋음. (음수 영역도 조금은 통과시킴)
Classical GNN Layers → GCN / GraphSAGE / GAT
1. GCN
GCN 이란?
→ CNN의 그래프 버전임. 이웃 노드의 정보를 평균내고, 그 결과에 가중치 행렬 W를 곱해서 노드의 새로운 표현을 생성한다.
How to write this as Message + Aggregation?
hu(l−1) : 이전 층에서의 노드 임베딩
W(l) : 현재 층의 학습 가능한 가중치 행렬
∣N(v)∣ : 이웃 수로 나누어 평균하는 역할 (정규화)
→ 각 이웃이 동일한 비중으로 기여하도록 만듬.
GCN에서는 자기 자신도 이웃으로 포함시켜서 함께 합산함. → 즉, v∈N(v)
2. GraphSAGE
GraphSAGE란?
→ 이웃의 정보를 sampling하고 집계한 뒤, 자기 자신의 임베딩과 연결해서 업데이트하는 GNN 모델 .
hv(l−1) : 이전 층의 노드 v의 임베딩
hu(i−1) : 이전 층의 이웃 노드 u의 임베딩
Two-stage aggregation
Stage 1️⃣ — 이웃으로부터 집계 (Aggregate from neighbors)
👉 주변 이웃 노드들의 임베딩을 평균/합/최댓값 등으로 집계(aggregate)
Stage 2️⃣ — 자기 자신과 결합 (Combine with self-node)
자기 정보와 이웃 정보를 연결(CONCAT) 후, 가중치 W(l) 곱하고 비선형 활성화를 적용해 새로운 임베딩 생성
Neighbor Aggregation
GraphSAGE는 다양한 집계 함수 사용 가능함.
🔹 (1) Mean Aggregator → 각 이웃들의 균등 가중 평균
AGG=u∈N(v)∑∣N(v)∣hu(l−1)
🔹 (2) Pool Aggregator → 이웃 정보를 비선형 변환 후 집계하는 방식 (중요도 다름)
AGG=Mean(MLP(hu(l−1)),∀u∈N(v))
🔹 (3) LSTM Aggregator → 순서를 고려한 집계
AGG=LSTM([hu(l−1),∀u∈π(N(v))])
L2 Normalization
GraphSAGE에서는 각 층의 노드 임베딩 $h_v^{(l)}$에 l2 정규화를 적용할 수 있음.
hv(l)←∣hv(l)∣2hv(l)
여기서 ∣hv(l)∣2=∑i(hv,i(l))2
→ 벡터 크기를 통일시켜 안정적인 학습 유도
GCN vs GraphSAGE
항목
GCN
GraphSAGE
자기 노드 포함 방식
자기 자신을 이웃에 포함시킴
자기 노드 임베딩과 이웃 임베딩을 CONCAT
집계 함수
평균(Mean) 기반 (고정)
다양한 집계 가능 (Mean, Max, LSTM 등)
샘플링
전체 이웃 사용
일부 이웃만 샘플링 가능
목표
전체 그래프 학습 (Transductive)
새로운 노드도 일반화 가능 (Inductive)
3. GAT (Graph Attention Networks)
GAT란?
각 노드가 이웃의 정보를 동일하게 평균하지 않고, 학습 가능한 attention 가중치를 두어 더 중요한 이웃에게 더 높은 비중을 부여하는 방식
αvu : attention weight → u가 v에게 얼마나 중요한가를 나타내는 값.
GCN/GraphSAGE와의 차이점?
기존의 GCN이나 GraphSAGE에서는 이웃의 중요도를 동일하게 취급했다. 하지만, GAT는 각 이웃의 중요도를 학습해 다르게 반영하는 그래프 신경망 → 더 중요한 관계에 더 집중하도록 !!
(GCN의 경우 αvu=∣N(v)∣1 ) 즉, 모든 이웃 노드 u∈N(v)가 동일한 비중으로 노드 v의 임베딩 계산에 기여했다. 그래프의 구조적 특성 (이웃의 수) 에 기반한 고정 비율이지, 학습되는 값이 아님 !!
항목
GCN / GraphSAGE
GAT
가중치(α)
$\alpha_{vu} = \frac{1}{
N(v)
중요도
모든 이웃 동일
중요도가 다름
근거
구조적 속성(이웃 수)
데이터 기반 학습 (attention)
결과
단순 평균
가중 평균 (학습 기반)
Not all node’s neighbors are equally important.
attention coefficient αvu는 입력 데이터 중 중요한 부분에 집중하고, 덜 중요한 부분은 무시한다.
Neural Network는 전체 데이터 중 작지만 중요한 부분에 더 많은 계산 자원을 사용해야함.
데이터의 어떤 부분이 중요한지는 context에 따라서 달라지며, 이는 training을 통해 자동 학습
Graph Attention Networks
Can we do better than simple neighborhood aggregation?
Can weighting factors avu be learned?
목표 : 그래프의 각 노드마다 이웃 노드에 임의의 중요도를 부여할 수 있도록 하는 것 즉, 단순히 모든 이웃을 동일하게 평균내는 대신, 어떤 이웃은 더 중요하고, 어떤 이웃은 덜 중요하다는 것을 모델이 학습하게 하는 것이 목표임 !
아이디어 : 그래프의 각 노드 v에 대해 어텐션(attention) 전략을 따라 임베딩 hv(l)를 계산한다.
각 노드는 자신의 이웃들의 메시지에 대해 어텐션(attend) 을 수행함.
이를 통해 이웃 노드마다 다른 가중치(weight) 를 암묵적으로 부여하게 됨.
Attention Mechanism
Attention Coefficient 계산
노드 u와 v 쌍에 대해, 각각의 노드 임베딩을 비교해서 어떤 이웃이 더 중요한가를 나타내는 attention coeffiecient를 구한다.