[TIL] 내일배움캠프 123일차_[DL] GNN 기반 추천 시스템
👀Today I Learn
- 추천 시스템은 우리가 매일 접하는 플랫폼들—넷플릭스, 유튜브, 스포티파이, 그리고 아마존—의 핵심 기술
- 전통적인 협업 필터링(Collaborative Filtering), 콘텐츠 기반 필터링(Content-based Filtering) 외에도 최근에는 Graph Neural Networks(GNN)를 활용한 차세대 추천 시스템이 주목받고 있음
GNN(Graph Neural Network)이란?
- GNN은 그래프 구조 데이터를 처리하기 위해 고안된 신경망
- 전통적인 신경망이 행렬(예: 이미지, 텍스트 등)을 다룬다면, GNN은 노드(node)와 엣지(edge)로 구성된 그래프(graph) 구조를 다룸
GNN 핵심 개념 요약
- 노드(Node): 사용자, 아이템 등 추천 시스템의 개체
- 엣지(Edge): 사용자-아이템 간의 상호작용 (예: 클릭, 좋아요, 구매)
- 메시지 전달(Message Passing): 노드가 이웃 노드로부터 정보를 전달받아 자신을 업데이트하는 과정
GNN은 추천 시스템에 어떻게 사용될까?
- 추천 시스템은 유저-아이템(User-Item) 관계를 그래프로 표현하기에 딱 좋은 구조
- GNN을 이용하면 단순한 상호작용 뿐 아니라 다층적인 연결 정보까지 학습할 수 있음
기본 구조
User1 --- MovieA
|
User2 --- MovieB
|
MovieC --- User3
- 위처럼 유저와 아이템 사이의 bipartite graph (이분 그래프)를 구성하고, GNN을 통해 각 노드의 임베딩을 학습
대표 GNN 추천 모델들
- GCN (Graph Convolutional Network) 기반: LightGCN
- GraphSAGE 기반: 효율적인 이웃 샘플링 가능
- PinSage: Pinterest에서 사용, 그래프와 콘텐츠 정보 모두 반영
- GAT (Graph Attention Network): 이웃 노드의 중요도에 따라 가중치를 다르게 학습
GNN 추천 시스템 아키텍처 예시
- 그래프 구성: 유저-아이템 상호작용 로그를 기반으로 그래프 생성
- 초기 임베딩 정의: 유저, 아이템에 대한 초기 임베딩 정의
- GNN 레이어 적용: 이웃 노드 정보 수집 및 업데이트
- 예측(Scoring): 유저와 아이템 임베딩 간 유사도 기반 추천 점수 계산
- Top-K 추천: 높은 점수를 받은 아이템을 추천 리스트로 출력
GNN 추천 예제 코드 (LightGCN, PyTorch 기반)
import torch
import torch.nn as nn
import torch.nn.functional as F
class LightGCN(nn.Module):
def __init__(self, num_users, num_items, embedding_dim):
super(LightGCN, self).__init__()
self.user_embedding = nn.Embedding(num_users, embedding_dim)
self.item_embedding = nn.Embedding(num_items, embedding_dim)
def forward(self, edge_index):
x = torch.cat([self.user_embedding.weight, self.item_embedding.weight])
# 간단한 GCN message passing (여기선 생략)
return x
- 실제 구현에는 adjacency matrix와 여러 propagation step이 포함됩니다.
장점 및 한계점
GNN 기반 추천 시스템의 장점
| 항목 | 장점 | | —- | —- | | 다층 연결 학습 | 유저-아이템 직접 연결뿐 아니라 간접 연결도 학습 가능 | | 유연한 구조 | 다양한 상호작용 유형(클릭, 좋아요 등)을 통합 가능 | | 인사이트 | 그래프 구조 자체에서 유의미한 패턴 발견 가능 |
GNN 추천의 한계점
- 학습 및 추론 속도 느릴 수 있음 (특히 대규모 그래프일 때)
- 데이터 전처리 및 그래프 구성의 복잡성
- 실시간 추천에는 최적화가 필요
💡Today I Thought
오늘의 체크리스트
- 알고리즘 코드카타 1문제
- SQL 코드카타 1문제
- 발표자료 만들기
- TIL 작성
회고
하루종일 발표자료… 너무 힘든 하루였다🥺 내일은 일찍 마무리하고 좀 쉬어야지
댓글남기기