[Graph Neural Networks] Graph Attention Network (GAT)
2025.06.08 - [Data & Research] - [Graph Neural Networks] Table of Contents
이번에는 Graph Attention Network에 대해서 알아볼텐데요. 기존의 모델들은 모든 이웃을 동등한 중요도로 취급하여 처리했습니다. 그런데, 현실의 문제에서는 그렇지 않을 수 있죠. 예를 들어, 어떤 사람의 직업을 예측할 때, 같은 회사 동료의 정보가 동네 친구의 정보보다 더 중요할 수 있습니다. GAT는 바로 이 문제에 대한 해답을 제시합니다. 자연어 처리 분야의 트랜스포머(Transformer) 모델에서 큰 성공을 거둔 Attention Mechanism(Attention과 그를 기반으로 한 LLM모델들은 추후에 포스팅하도록 하겠습니다)을 그래프에 적용하여, 각 노드가 이웃 노드들의 정보를 집계할 때, 어떤 이웃에 더 "집중(attention)"해야 하는지를 모델 스스로 학습하게 합니다. 즉, 이웃마다 다른 중요도(가중치)를 동적으로 계산하여 적용합니다.
오늘의 포스팅 내용은 서울대 산공과 DSBA연구실의 세미나 자료를 참고하였습니다.
https://youtu.be/NSjpECvEf0Y?si=XKizVuGgm1JRz7tl
1. Graph Attention Network의 작동 원리
먼저, 모든 노드의 embedding vector \( \mathbf{h}_i \in \mathbb{R}^F \)에 learnable wieght \( W \in \mathbb{R}^{F' \times F} \)를 곱하여 embedding을 \(F'\)차원의 새로운 공간으로 변환합니다. $$ \mathbf{h}'_i = W \mathbf{h}_i $$
이 후에 $$ e_{ij} = \text{LeakyReLU}(\mathbf{a}^T [\mathbf{h}'_i || \mathbf{h}'_j]) $$ 를 계산하여 노드 \(i\)가 이웃노드 \(j\)에 얼마나 "attention"해야하는지를 나타내는 attention coefficient \(e_{ij}\)를 계산합니다.
- 두 노드의 변환된 embedding(\(\mathbf{h}'_i, \mathbf{h}'_j\)) 을 concatenate합니다.
- 결합된 벡터에 learnable한 weight \(\mathbf{a} \in \mathbb{R}^{2F'}\)를 내적하고 LeakyReLU를 통과시켜줍니다.
learnable weight \(\mathbf{a}\)와 \(W\)는 모든 노드 쌍에의해 공유됩니다.
이렇게 계산된 상태는 상대적인 중요도를 나타내긴 하지만 normalization되어 있지 않기 때문에 softmax함수를 이용해서 중요도를 정규화하고 이 값을 비로소 attention으로 활용합니다.
$$ \alpha_{ij} = \text{softmax}_j(e_{ij}) = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}_i} \exp(e_{ik})} $$
attention값은 이 자체로 어떤 산출물이라기 보다 이제 update 과정에서 이웃 노드들로부터 오는 신호를 가중치를 두어 처리하는데 활용합니다.
$$ \mathbf{h}_i^{\text{new}} = \sigma\left(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \mathbf{h}'_j\right) = \sigma\left(\sum_{j \in \mathcal{N}_i} \alpha_{ij} W \mathbf{h}_j\right) $$
위 영상에서는 이 attention계산을 기존의 transformer의 attention 계산법과 비교해서 설명하고 있는데요. transformer attention과 유사한 점은 Key와 Query, Value가 모두 동일하다는 점에서 self-attention과 통하는 부분이 있구요. similarity를 계산할 때 transformer에서처럼 dot product를 쓰는 것이 아니라 1-layered Feed Forward Network(learnable한 weight)를 활용한다는 점이 차이점입니다.
2. GAT의 적용 모식도 (DSBA영상 참고)
위에서 설명한 수식의 내용을 어떻게 적용하는지 한번 살펴볼까요? 아래와 같은 Graph가 있다고 했을 때, 일단 learnable weight \(mathbf{W}\) 를 곱해준 값을 Key이자 Query로서 (Query-Key Concatenate 후에) Similarity 계산하는 1-layer feedforward network에 넣어줍니다(1-layer feedforward network라고 했지만 수식적으로는 이 역시 learnable weight \(mathbf{a}\)를 곱해주는 것에 다름아닙니다). 그리고 나서 LeakyReLU를 통과시켜주면 attention coefficient가 계산됩니다. 일단 첫번째 그림에서는 \( Wh_{1}^{k-1}\)이 key이자 query일 때의 계산을 보여주고 있습니다. node1과 node1사이의 attention 계산이죠.
방식은 동일하게 다른 이웃노드들과의 attention도 계산해 볼 수 있습니다. node1과 node2사이의 계산은 아래와 같고
나머지 노드 간 attention coefficient 계산도 모두 수행할 수 있습니다. 여기에 softmax를 적용하여 attention값을 최종산출해 냅니다(실제 구현 상에서는 빈 자리에 큰 음수값을 넣는 트릭을 사용합니다).
여기까지가 attention의 값을 산출하는 작업이었고, 이제는 이렇게 산출된 attention을 활용해서 GNN의 업데이트에 활용해주면 됩니다.