데이터

그래프 신경망(Graph Neural Network, GNN)이란 무엇인가?

Yuniverse. 2024. 11. 3. 18:01
그래프 신경망(Graph Neural Networks, GNN)은 그래프 구조 데이터를 처리하고 분석하기 위해 설계된 딥러닝 모델이다. 그래프 구조화된 데이터를 처리하는 데 특화된 모델이기 때문에 GNN을 사용하기에 앞서 해결하려는 문제와 내가 가진 데이터의 구조를 파악하는 과정이 선행되어야 한다. 

 

 


 

회사 프로젝트에서 모델 성능 개선을 위하여 주요한 피처가 무엇인지를 파악하는 피처 엔지니어링 업무를 맡게 되었다. '의미 있는' 사용자의 임베딩값을 추출한다면 모델의 주요한 피처도 역추적으로 알아낼 수 있지 않을까 싶었고, 동료들과 논의를 거쳐 GNN을 활용해서 해당 작업을 해보기로 했다. 워낙 Graph를 많은 분야에서 활용하다 보니까, GNN도 여러 번 들어보긴 했는데 내가 직접 실무에 적용해 본 경험은 없어서 논문과 영상을 보고, 주위 AI 연구원분들한테 조언을 듣고, 예시 코드를 짜보며 공부했다. 그러면서 알게 된 내용을 기록하고자 글을 쓴다.  

*아직 저도 많이 부족한지라, GNN에 대해 더 해박한 지식을 갖고 계신 분들께서 주시는 피드백은 언제든 환영입니다🤗


그래프 신경망 GNN

우리가 보통 '딥러닝'이라고 말하는 모델들은 신경망 알고리즘을 따른다. 신경망(Neural Networks)이라는 말에서 짐작할 수 있듯이, 인간의 두뇌에서 영감을 받은 방식으로 데이터를 처리하도록 컴퓨터를 학습시키는 알고리즘이다.

 

신경망 모델은 여러 개의 은닉층(Hidden layer)를 가진다.

 

신경망 모델은 위의 그림과 같이 여러 개의 레이어를 갖는데, 쉽게 말해서 Input으로 들어온 데이터를 레이어를 거쳐 가며 학습시킨 후 Output으로 내보낸다고 생각하면 된다.

 

그렇다면 '그래프 신경망 모델'은 무엇인가? 나는 다음과 같이 이해했다.

신경망 모델은 여러 레이어를 통과하면서 데이터를 처리하고 학습한다.
그래프 신경망 모델은 그 레이어 중에서 그래프 컨볼루션 레이어를 포함하고 있는 모델이다.

 

자, 그러면 나처럼 GNN에 대해 잘 몰랐다면 너무나도 당연하게 하나의 질문이 떠오를 것이다.

 

"계속해서 그래프, 그래프 하는데... 도대체 그래프(Graph)가 뭔데?"

 

그래프 구조의 데이터

내가 아는 그래프는 이게 전부였거든요...

 

그래프 구조의 데이터란, Node와 Edge로 구성된 데이터를 의미한다.

그래프(Graph)에 대해 기본적인 이해가 있던 사람 외에는 위와 같이 말해서 한 번에 "아 그렇구나! Node와 Edge로 구성되면 그래프 구조의 데이터구나~!"라고 말할 사람은 없을 것이다. Node와 Edge가 무엇인지도 모르는데 위의 말이 이해될 리가 없다. 나 또한 그랬다.

Node와 Edge가 무엇인지 바로 찾아볼 수도 있겠지만, 그 전에 그래프는 어떤 특징을 지니는지를 먼저 알아보자.

 

그래프 구조의 데이터는, 다른 무엇보다도 개체 간의 관계를 중요하게 여긴다.

 

그래프를 설명하는 모든 글과 영상에서 공통적으로 예시로 드는 게 소셜 네트워크 데이터 인데, SNS는 사람과 사람 간의 관계가 그 무엇보다 중요한 서비스이기 때문이다. 이처럼 다른 데이터 구조보다도 개체 간의 관계를 특히 더 중요하게 여기는 게 바로 그래프 구조이다.

따라서, 그래프 구조의 데이터를 정의할 때도 '개체'와 '관계'라는 말이 포함되어야한다. 이게 바로 Node와 Edge의 정의이다.

 

Node는 개체를, Edge는 개체 간 관계를 의미한다.

 

그래프 구조로 표현될 수 있는 데이터는 다음과 같은 특성을 가진다.

  1. 데이터 내의 개체(Node)들이 명시적인 관계(Edge)를 가지고 있다.
  2. 데이터가 고정된 크기나 형식이 없고, 각 개체가 다양한 개체들과 연결을 가지고 있거나 가질 수 있다.

그렇다면 그래프 구조가 가지는 장점은 무엇일까? 무엇 때문에 그래프 구조의 데이터라는 게 이렇게나 핫한 것일까? 데이터를 그래프 구조로 표현하면: 데이터 간 관계를 직관적으로 표현할 수 있고, 정형화된 테이블 구조보다 유연하며, 복잡한 패턴을 탐지하는 데 효과적이다.

  • 데이터 관계 표현의 직관성
    • 데이터 간의 관계를 Node와 Edge로 표현함으로써 시각적으로 명확하고 이해하기 쉽게 나타낼 수 있다.
  • 유연한 구조
    • 그래프는 정형화된 테이블 구조보다 훨씬 유연하다. 비정형적이거나 구조가 자주 변하는 데이터의 경우에 그래프 구조로 표현하면, 별도의 처리를 해줄 필요없이 새로운 Node나 Edge를 추가만 하면 된다.
  • 복잡한 패턴 탐지
    • 데이터가 단순한 패턴이 아닌 서로가 서로에게 얽혀 상관성을 지닐 때, 데이터 간의 연결성을 분석하고 복잡한 패턴을 탐지하는 데 유리하다.

물론 위의 장점 중 몇몇은 일반적인 신경망 모델에도 충분히 적용될 수 있는 말이다. 앞에서도 말했듯이 GNN도 결국엔 '신경망 모델'이고, 따라서 일반적인 신경망 모델이 가지는 특징 및 장점에 '관계'에 특히 더 포커스를 맞춘 게 GNN이라고 생각해주면 된다.

 

GNN 사용시의 유의점

어쩌면 여기까지 읽고나서, 'GNN 짱인데...? 어차피 데이터 중에 연결관계가 아예 없는 데이터라는 건 없으니까 무조건 GNN 적용하면 최고 아웃풋을 낼 수 있는 거 아니야?' 라는 생각이 들 수도 있겠다. 하지만 그렇게 간단하지 않다. GNN 또한 만능은 아니다.

GNN은  신경망 모델+α 이다. 이 말은 다르게 말하면, GNN은 일반적인 신경망 모델보다 복잡하다는 뜻이다. 복잡하다는 건 그만큼 미리 고려해줘야 할 게 많다는 뜻이다. 즉, 한 마디로 말해서 일반적인 신경망 모델보다 더 까다로운 모델이란 뜻이다.

 

그래프 구조의 단점

  • 모델의 복잡성 증가
    • 그래프 구조는 데이터 간의 관계를 상세하게 표현할 수 있지만, 데이터의 크기와 복잡성이 증가함에 따라 그래프의 크기도 급격히 커질 수 있다. 이는 계산 비용과 저장 공간의 증가로 이어진다.
    • 예시: 고객과 상품을 Node로 두고, 고객의 상품 구매시각(yyyy-mm-dd hh:mm:ss) 및 상품 정보를 Edge로 두었다. 그러자 구매시각이 '초'까지 일치하는 경우에만 이웃 노드로 연결되어 그래프가 과도하게 커졌다. 
  • 데이터 전처리의 어려움
    • GNN을 활용하기 위해서는 그래프 구조여야 한다. 즉, 기본적으로 사용하는 데이터프레임 형태의 데이터를 Node와 Edge의 관계를 명확히 정의하는 전처리 과정을 거쳐야 한다. 복잡한 비정형 데이터일수록 이 과정이 까다로울 수 있다.
  • 스케일링 문제
    • 대규모 그래프에서는 효율적인 연산이 어려울 수 있다. 수십억 개의 노드와 엣지를 가진 그래프가 있다고 했을 때, 이를 다루는 것은 상당한 계산 자원을 요구한다.
  • 표준화 부족
    • 다른 일반적인 신경망 모델에 비해 GNN은 비교적 최근에 나온 기법이다. 이는 그래프 데이터에 대한 표준화된 모델링이나 학습 방법이 상대적으로 부족하다는 것을 의미한다. 특정 문제에 맞는 맞춤형 알고리즘을 원할 경우, 이를 직접 설계해야 될 수도 있다.

따라서 데이터 간의 관계가 크게 고려해야 할 요소가 아니고, 각 데이터가 독립적으로 작용하는 경우이거나 데이터의 구조가 고정되어 있고 변화가 거의 없는 경우에는 굳이 GNN을 사용할 필요가 없다. 일반적인 신경망 모델을 쓰는 게 성능적으로나 리소스 측면에서 훨씬 유리하다. 

 

결론

GNN은 데이터 간의 복잡한 관계를 모델링하는 데 매우 유용하지만, 모든 상황에서 최적의 선택은 아니다. 문제의 특성과 데이터의 특성을 고려하여 적절한 구조와 알고리즘을 선택해야 한다. 모든 문제에 적용되는 정답은 없다. 현재 내가 해결해야 하는 문제에 알맞은 답을 찾아내야 한다.