GraphSAGE 1. 개념 이해.

HanJu Han·2025년 10월 13일

GraphSAGE 수식 완벽 해부: 이커머스 추천 시스템으로 쉽게 이해하기

시나리오 설정: '사용자 A'에게 딱 맞는 상품 추천하기

우리의 목표는 '사용자 A'의 취향을 완벽하게 반영하는 최종 임베딩 벡터 zAz_A를 만드는 것입니다. 이 벡터가 잘 만들어지면, A가 좋아할 만한 다른 상품을 아주 정확하게 추천할 수 있습니다.

  • 그래프 구성 요소:
    • 노드(Node): 사용자(A, E, F), 상품(B:노트북, C:키보드, D:마우스)
    • 엣지(Edge): '사용자'가 '상품'을 구매했다는 연결 고리

[Step 0] 초기 상태: 모든 노드는 '주민등록증'을 가지고 있다

모든 학습의 시작점입니다. 아직 그래프의 연결 관계를 고려하지 않은, 각 노드 고유의 정보입니다.

수식:
hv0=xvh_v^0 = x_v

기호의미이커머스 예시
hv0h_v^00번째 단계(초기)의 노드 vv의 임베딩아직 주변 정보를 받지 않은 순수한 상태
xvx_v노드 vv의 고유한 특징(Raw Feature)사용자 A의 [나이, 성별, 거주지] 또는 상품 B의 [가격, 카테고리, 브랜드]
  • 예시: 사용자 A의 초기 벡터 hA0h_A^0[25세, 여성, 서울]이라는 정보만 담고 있습니다.

[Step 1] 첫 번째 정보 수집 (k=1): "내 이웃은 누구인가?"

이제 각 노드는 자신과 직접 연결된 1-Hop(한 칸 거리) 이웃들의 정보를 수집하여 한 단계 업그레이드됩니다. 이 과정은 Aggregation(집계)Update(업데이트)로 나뉩니다.

1-1. Aggregation: 이웃들의 정보를 하나로 요약하기

상품 '키보드(C)'의 입장에서 생각해 봅시다. 키보드 C는 자신을 구매한 사용자들(A, E, F)의 정보를 모읍니다.

수식 개념:
hN(C)1AGGREGATE1({hA0,hE0,hF0})h_{N(C)}^1 \leftarrow \text{AGGREGATE}_1(\{h_A^0, h_E^0, h_F^0\})

가장 간단한 평균(Mean)을 사용한다고 가정해 봅시다.

  • 행동: 키보드 C는 사용자 A, E, F의 초기 정보(h0h^0)를 가져와 평균을 냅니다.
  • 의미: 이렇게 요약된 정보는 "이 키보드를 구매하는 사람들의 평균적인 프로필"이 됩니다. (예: '주로 수도권에 거주하는 20대 후반')

1-2. Update: 이웃 정보와 내 정보를 합쳐 '새로운 나' 만들기

이제 요약된 이웃 정보와 키보드 C 본연의 스펙 정보를 합칩니다. (GraphSAGE의 Mean Aggregator 변형 예시)

수식:
hC1=σ(W1Mean({hC0}{hA0,hE0,hF0}))h_C^1 = \sigma(W^1 \cdot \text{Mean}(\{h_C^0\} \cup \{h_A^0, h_E^0, h_F^0\}))

기호역할
{hC0}{...}\{h_C^0\} \cup \{...\}'나의 원래 정보'와 '이웃들의 정보'를 모두 합침
W1W^1가중치 행렬 (학습 대상). 어떤 정보가 중요한지 판단하는 필터 역할
σ\sigma활성화 함수 (ReLU 등). 데이터를 더 풍부하게 표현하도록 도움
hC1h_C^11단계로 업데이트된 키보드 C의 임베딩
  • 결과(hC1h_C^1)의 의미: 이제 키보드 C의 벡터는 단순한 상품 스펙이 아닙니다. "어떤 사람들이 주로 구매하는 상품인지"에 대한 문맥(Context) 정보까지 포함하게 되었습니다.

[Step 2] 두 번째 정보 수집 (k=2): "내 친구의 친구는 누구인가?"

이제 우리의 주인공 '사용자 A'의 최종 임베딩을 만들 차례입니다. GraphSAGE의 강력함은 여기서 나옵니다. Step 1에서 이미 한 번 업데이트된 정보(h1h^1)들을 가져와 사용하기 때문입니다.

2-1. Aggregation: '업데이트된 이웃 정보' 모으기

사용자 A는 자신이 구매한 상품들(노트북 B, 키보드 C, 마우스 D)의 1단계 임베딩(h1h^1)을 모읍니다.

수식 개념:
hN(A)2Mean({hB1,hC1,hD1})h_{N(A)}^2 \leftarrow \text{Mean}(\{h_B^1, h_C^1, h_D^1\})

  • 핵심: hB1,hC1,hD1h_B^1, h_C^1, h_D^1에는 이미 이 상품들을 구매한 '다른 사용자들(E, F 등)'의 정보가 녹아들어 있습니다.
  • 의미: 사용자 A는 자신이 산 물건들을 통해, 자신과 취향이 비슷한 다른 사람들의 특성까지 간접적으로 파악하게 됩니다. (친구의 친구 정보를 얻는 셈이죠!)

2-2. Final Update: '사용자 A'의 최종 임베딩 zAz_A 완성

마지막으로 사용자 A의 정보와 집계된 상품들의 정보를 합칩니다.

최종 수식:
zA=hA2=σ(W2Mean({hA1}{hB1,hC1,hD1}))z_A = h_A^2 = \sigma(W^2 \cdot \text{Mean}(\{h_A^1\} \cup \{h_B^1, h_C^1, h_D^1\}))

이렇게 완성된 최종 임베딩 벡터 zAz_A는 엄청난 정보를 압축하고 있습니다.

  1. A의 원래 프로필 (나이, 성별 등)
  2. A가 구매한 상품들의 특성
  3. 그 상품들을 구매한 다른 사용자들의 특성 (A와 유사한 집단의 특성)

zAz_A 벡터를 이용하면, A가 아직 구매하지 않았지만 좋아할 법한 '모니터' 같은 상품을 매우 정교하게 추천할 수 있게 됩니다.


💡 요약: GraphSAGE의 철학

GraphSAGE 수식의 핵심은 "나를 제대로 알기 위해선, 내 주변을 살펴봐야 한다"는 것입니다.

  1. Sample: 내 이웃을 찾는다.
  2. Aggregate: 이웃들의 정보를 요약한다.
  3. Update: 내 정보와 합쳐서 나를 업그레이드한다.

이 과정을 반복(Layer를 쌓음)할수록, 노드는 그래프 전체에서 자신이 어떤 위치와 문맥을 가지는지 깊이 있게 이해하는 똑똑한 벡터로 거듭나게 됩니다.

profile
시리즈를 기반으로 작성하였습니다.

0개의 댓글