GNN을 활용한 노드 분류
Cora 데이터셋, 2층 GCN, 학습 루프, 마스크된 손실, 테스트 정확도, 임베딩 시각화를 다룹니다.
GNN을 활용한 노드 분류은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
노드 분류 과제
노드 분류는 노드의 특성과 그래프 구조를 사용해 각 노드의 레이블을 예측합니다. 대표적인 예로, 인용 네트워크의 각 논문을 연구 주제별로 분류하는 작업이 있습니다. 이때 논문의 단어와 해당 논문이 인용하는 논문을 모두 사용합니다.
Cora 데이터셋
Cora는 그래프 학습의 MNIST입니다. 2,708개의 머신러닝 논문으로 구성된 인용 그래프이며, 엣지는 인용을 나타냅니다. 각 논문에는 길이가 1433인 단어 모음 특성 벡터가 있고, 목표는 각 논문을 7개 주제 중 하나로 분류하는 것입니다.
# Cora:
# nodes = 2708 papers
# edges = citations
# features per node = 1433
# classes = 7Planetoid로 불러오기
PyTorch Geometric은 Planetoid 로더를 통해 Cora를 제공합니다. 이 로더는 데이터를 다운로드하고 하나의 그래프 객체로 형식을 변환합니다.
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root="data/Cora", name="Cora")
data = dataset[0]
print(data) # x, edge_index, y, train_mask, test_mask데이터 객체
그래프 객체에는 모든 정보가 들어 있습니다. data.x(특성 2708 x 1433), data.edge_index(연결 정보), data.y(참 레이블), 그리고 어떤 노드를 훈련, 검증, 평가에 사용할지 표시하는 불리언 마스크가 포함됩니다.
7개 클래스를 위한 GCN
1433개의 입력 특성을 64차원 은닉 계층을 거쳐 7개 클래스의 로짓으로 매핑하는 2계층 GCN을 구축합니다.
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
class GCN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(1433, 64)
self.conv2 = GCNConv(64, 7)
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)전이적 학습
Cora는 전이적입니다. 전체 그래프(평가 노드와 해당 특성 포함)를 학습 중에 볼 수 있고, 평가 레이블만 숨깁니다. 모델은 모든 노드 연결을 사용하지만 레이블이 있는 훈련 노드에서만 학습합니다.
훈련 마스크
훈련 마스크는 손실에 기여하는 노드를 선택하는 불리언 벡터입니다. 전체 그래프에서 모델을 실행하지만, 마스크로 선택된 훈련 노드에 대해서만 교차 엔트로피를 계산합니다.
model = GCN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
def train():
model.train()
optimizer.zero_grad()
out = model(data.x, data.edge_index)
loss = F.cross_entropy(out[data.train_mask], data.y[data.train_mask])
loss.backward()
optimizer.step()
return loss.item()마스크된 손실의 직관
forward 패스가 2708개 모든 노드에 대한 로짓을 생성하더라도, train_mask로 인덱싱하면 손실이 레이블이 있는 훈련 노드로 제한됩니다. 레이블이 없는 노드도 메시지를 전달하여 모델을 돕지만, 그래디언트를 직접 유도하지는 않습니다.
평가 마스크로 평가하기
학습이 끝나면 손실 계산에 한 번도 사용되지 않은 보류된 평가 마스크 노드에서 정확도를 평가합니다. 이를 통해 모델이 레이블을 본 적 없는 논문에 얼마나 잘 일반화되는지 측정합니다.
@torch.no_grad()
def test():
model.eval()
pred = model(data.x, data.edge_index).argmax(dim=1)
correct = (pred[data.test_mask] == data.y[data.test_mask]).sum()
return int(correct) / int(data.test_mask.sum())t-SNE로 임베딩 시각화하기
GCN이 무엇을 학습했는지 확인하려면 은닉 계층의 노드 임베딩을 가져와 t-SNE를 사용해 2차원으로 투영합니다. 잘 학습된 GCN에서는 같은 클래스의 노드가 함께 모인 군집이 나타납니다.
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
emb = model.conv1(data.x, data.edge_index).detach().numpy()
z = TSNE(n_components=2).fit_transform(emb)
plt.scatter(z[:, 0], z[:, 1], c=data.y, cmap="tab10", s=8)t-SNE 그래프 해석하기
색이 있는 군집이 서로 잘 분리되어 있으면 임베딩이 클래스를 잘 구분한다는 뜻이며, 이는 GCN이 유용한 구조를 학습했다는 신호입니다. 서로 겹치는 덩어리는 학습 부족이나 과도한 평활화를 시사합니다. t-SNE는 정성적 확인 방법이지 지표는 아닙니다.
빠른 확인
노드 분류 지식을 확인해 보세요.
복습
GNN을 사용한 노드 분류를 학습하셨습니다:
- Planetoid는 Cora 인용 그래프를 불러옵니다
- 2계층 GCN은 1433개 특성에서 64개를 거쳐 7개 클래스로 매핑합니다
- 훈련 마스크는 손실을 제한하고, 평가 마스크는 일반화 성능을 측정합니다
- t-SNE는 노드 임베딩을 시각화하여 클래스 분리를 살펴볼 수 있게 합니다
자주 묻는 질문
“GNN을 활용한 노드 분류” 강의는 무료인가요?
네 — “GNN을 활용한 노드 분류” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“GNN을 활용한 노드 분류”에서 뭘 배우나요?
Cora 데이터셋, 2층 GCN, 학습 루프, 마스크된 손실, 테스트 정확도, 임베딩 시각화를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“GNN을 활용한 노드 분류” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 머신러닝을 위한 그래프 이론
- 그래프 합성곱 네트워크(GCN)
- GNN을 활용한 노드 분류
- 링크 예측과 그래프 분류