0Pricing
Learn AI with Python · 강의

그래프 합성곱 네트워크(GCN)

메시지 전달 프레임워크, GCNConv, 노드 특성 집계, PyTorch Geometric 설정을 다룹니다.

그래프 합성곱 네트워크(GCN)은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

CNN에서 GCN으로

CNN은 이미지의 격자 구조를 활용합니다. 그래프 합성곱 네트워크(GCN)은 합성곱을 불규칙한 그래프로 일반화하여 각 노드가 이웃의 정보를 사용해 자신의 표현을 업데이트하도록 합니다. 이를 통해 고정된 격자가 없는 데이터를 처리할 수 있습니다.

메시지 전달

GCN은 메시지 전달 프레임워크를 따릅니다. 각 계층에서 모든 노드는 (1) 이웃으로부터 메시지를 수집하고, (2) 메시지를 집계한 다음, (3) 자신의 임베딩을 업데이트합니다. 계층을 쌓으면 그래프 전체로 정보가 흐를 수 있습니다.

이웃 정보 집계

핵심 연산은 이웃 특성 집계입니다. 간단한 GCN 계층은 노드의 이웃과 노드 자신에 해당하는 특성 벡터의 평균을 구한 다음, 학습된 선형 변환과 비선형성을 적용합니다.

# For each node v:
#   h_v = activation( W * mean(features of v and its neighbors) )

인접 행렬을 정규화하는 이유

이웃을 단순히 합산하면 차수가 높은 노드가 지나치게 큰 영향을 미칩니다. GCN은 정규화된 인접 행렬을 사용해 각 기여도의 크기를 조정하므로, 차수가 서로 다른 노드 사이에서도 노드 임베딩의 크기를 안정적으로 유지합니다.

정규화 공식

대칭 정규화는 자기 자신으로 향하는 엣지를 추가한 다음 노드 차수에 따라 크기를 조정하며, D^(-1/2) (A + I) D^(-1/2)로 나타냅니다. 단위 행렬 I를 추가하면 집계 중에 노드가 자신의 특성을 유지할 수 있습니다.

# A_hat = A + I  (add self-loops)
# D_hat = degree matrix of A_hat
# A_norm = D_hat^(-1/2) * A_hat * D_hat^(-1/2)

PyTorch Geometric

PyTorch Geometric(PyG)은 PyTorch에서 GNN을 사용하기 위한 표준 라이브러리입니다. 정규화된 메시지 전달 합성곱을 대신 구현해 주는 GCNConv와 같은 즉시 사용할 수 있는 계층을 제공합니다.

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

단일 그래프 합성곱 계층

GCNConv(in_channels, out_channels)는 그래프 합성곱 하나를 생성합니다. 노드 특성 행렬 x와 edge_index(COO 형식의 그래프 연결 정보)를 입력으로 받아 업데이트된 노드 임베딩을 반환합니다.

conv = GCNConv(in_channels=16, out_channels=32)
# x: [num_nodes, 16], edge_index: [2, num_edges]
h = conv(x, edge_index)  # -> [num_nodes, 32]

2계층 GCN

일반적인 GCN은 두 계층을 쌓습니다. 첫 번째 계층은 특성을 사상하고 한 단계 떨어진 이웃을 집계하며, 두 번째 계층은 두 단계 떨어진 이웃까지 집계하므로 각 노드가 2홉 수용 영역을 갖게 됩니다.

class GCN(torch.nn.Module):
    def __init__(self, in_dim, hid, out):
        super().__init__()
        self.conv1 = GCNConv(in_dim, hid)
        self.conv2 = GCNConv(hid, out)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, training=self.training)
        return self.conv2(x, edge_index)

깊이에 따라 수용 영역이 넓어집니다

각 GCN 계층은 노드의 수용 영역을 한 홉씩 넓힙니다. 두 계층은 2홉 이웃을 보고, 세 계층은 3홉 이웃을 보는 식으로 계속 확장됩니다. 깊이가 깊어질수록 멀리 있는 정보가 노드에 도달할 수 있습니다.

과도한 평활화

하지만 계층을 너무 많이 쌓으면 과도한 평활화가 발생합니다. 이웃을 반복해서 평균 내면 모든 노드 임베딩이 거의 같은 벡터로 수렴하여 분류에 필요한 구별이 사라집니다. 그래서 대부분의 GCN은 2~3개 계층만 사용합니다.

과도한 평활화 완화

과도한 평활화를 줄이는 방법으로는 잔차/건너뛰기 연결, 여러 계층의 출력을 결합하는 점프 지식 네트워크, 그리고 네트워크를 얕게 유지하는 방법이 있습니다. 표준 벤치마크에서는 얕은 GCN이 깊은 GCN보다 더 나은 성능을 내는 경우가 많습니다.

빠른 확인

GCN 지식을 확인해 보세요.

복습

그래프 합성곱 네트워크를 학습하셨습니다:

  • GCN은 메시지 전달 프레임워크를 따릅니다. 이웃 특성을 집계한 다음 업데이트합니다
  • 자기 자신으로 향하는 엣지가 포함된 정규화된 인접 행렬은 임베딩을 안정적으로 유지합니다
  • PyTorch Geometric의 GCNConv는 합성곱 하나를 구현합니다
  • 일반적인 구조는 2계층 GCN입니다
  • 깊이가 지나치게 깊으면 과도한 평활화가 발생합니다

자주 묻는 질문

“그래프 합성곱 네트워크(GCN)” 강의는 무료인가요?

네 — “그래프 합성곱 네트워크(GCN)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

“그래프 합성곱 네트워크(GCN)”에서 뭘 배우나요?

메시지 전달 프레임워크, GCNConv, 노드 특성 집계, PyTorch Geometric 설정을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“그래프 합성곱 네트워크(GCN)” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 머신러닝을 위한 그래프 이론
  2. 그래프 합성곱 네트워크(GCN)
  3. GNN을 활용한 노드 분류
  4. 링크 예측과 그래프 분류
← Learn AI with Python(으)로 돌아가기