링크 예측과 그래프 분류
간선 예측 과제, 음성 샘플링, 그래프 수준 풀링, 그래프 분류를 위한 GINConv를 다룹니다.
링크 예측과 그래프 분류은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
두 가지 새로운 그래프 과제
노드 분류 외에도 GNN은 다음 과제를 처리합니다:
- 링크 예측: 두 노드 사이에 엣지가 존재할까요? (친구 추천, 약물 상호작용)
- 그래프 분류: 전체 그래프에 레이블을 할당합니다(이 분자가 독성을 가졌을까요?)
링크 예측 설정
링크 예측에서는 먼저 GNN으로 노드 임베딩을 계산한 다음, 후보 노드 쌍의 점수를 계산합니다. 점수가 높으면 모델이 해당 노드들을 엣지로 연결해야 한다고 판단한다는 뜻입니다.
엣지 점수 계산
일반적인 엣지 점수는 두 노드 임베딩의 내적입니다. score = dot(h_u, h_v)처럼 계산합니다. 임베딩이 유사하면 내적이 커지므로 링크가 존재할 가능성이 높다고 예측합니다.
h = gnn(data.x, data.edge_index) # node embeddings
score = (h[u] * h[v]).sum(dim=-1) # dot product per pair네거티브 샘플링
그래프에는 존재하는 엣지만 나열되어 있습니다(양성 예시). 분류기를 학습하려면 엣지가 없는 경우도 필요합니다. 네거티브 샘플링은 연결되지 않은 노드 쌍을 무작위로 선택해 음성 예시로 사용하여 훈련 세트의 균형을 맞춥니다.
from torch_geometric.utils import negative_sampling
neg_edge_index = negative_sampling(
edge_index=data.edge_index,
num_nodes=data.num_nodes,
num_neg_samples=data.edge_index.size(1),
)로짓을 포함한 이진 교차 엔트로피 손실
링크 예측은 이진 문제입니다(엣지 또는 엣지 없음). 양성 쌍과 음성 쌍의 점수를 계산하고 각각 1과 0으로 레이블을 지정한 다음, 시그모이드와 이진 교차 엔트로피를 수치적으로 안정적인 방식으로 결합하는 BCEWithLogitsLoss로 학습합니다.
import torch
pos = (h[pos_u] * h[pos_v]).sum(-1)
neg = (h[neg_u] * h[neg_v]).sum(-1)
scores = torch.cat([pos, neg])
labels = torch.cat([torch.ones_like(pos), torch.zeros_like(neg)])
loss = torch.nn.functional.binary_cross_entropy_with_logits(scores, labels)그래프 분류로 전환하기
그래프 분류에서는 노드마다 하나씩 있는 벡터가 아니라 그래프마다 하나의 벡터가 필요합니다. GNN 계층이 노드 임베딩을 생성한 후, 이를 하나의 그래프 수준 표현으로 풀링합니다.
global_mean_pool
global_mean_pool은 그래프의 모든 노드 임베딩을 평균 내어 그래프 크기와 관계없이 고정된 크기의 벡터 하나를 생성합니다. 그래프를 하나의 묶음으로 처리할 때는 batch 인덱스가 각 노드가 어느 그래프에 속하는지 알려 줍니다.
from torch_geometric.nn import global_mean_pool
h = gnn(x, edge_index) # [num_nodes, dim]
hg = global_mean_pool(h, batch) # [num_graphs, dim]
logits = classifier(hg)풀링이 중요한 이유
풀링을 사용하면 모델이 노드 순서와 그래프 크기에 영향을 받지 않습니다. 즉, 동형 그래프 두 개는 동일한 풀링 벡터를 생성합니다. 평균 풀링은 간단하며, 합계 풀링과 최댓값 풀링은 서로 다른 특성을 가진 대안입니다.
GINConv
GINConv(그래프 동형성 네트워크)는 더 높은 표현력을 가진 합성곱입니다. 그래프 수준 작업에서 메시지 전달의 판별력을 극대화하도록 특별히 설계된 MLP와 합계 집계를 사용합니다.
from torch_geometric.nn import GINConv
import torch
mlp = torch.nn.Sequential(
torch.nn.Linear(in_dim, hid),
torch.nn.ReLU(),
torch.nn.Linear(hid, hid),
)
conv = GINConv(mlp)바이스파일러-리먼 연결
GIN은 바이스파일러-리먼 (WL) 테스트만큼 강력하도록 설계되었습니다. 바이스파일러-리먼 테스트는 동형이 아닌 그래프를 구분하는 고전적인 알고리즘입니다. 더 단순한 GNN 중 다수는 특정 그래프들을 서로 구분하지 못하지만, GIN은 WL 테스트의 한계 내에서 이를 구분할 수 있으므로 그래프 분류에 강력합니다.
적절한 도구 선택
작업에 맞는 아키텍처를 선택하십시오:
- 링크 예측: GNN 임베딩 + 점곱 점수 계산 + 음성 샘플링 + BCE 손실
- 그래프 분류: GINConv와 같은 표현력이 높은 합성곱 + 전역 풀링 + 분류기
빠른 확인
배운 내용을 확인해 보십시오.
복습
링크 예측과 그래프 분류를 배웠습니다:
- 간선 점수 =
dot(h_u, h_v), 음성 샘플링과 BCEWithLogitsLoss로 학습 - global_mean_pool은 노드 임베딩을 그래프 수준 벡터로 변환합니다
- GINConv는 표현력이 매우 높으며 바이스파일러-리먼 테스트와 일치합니다
AI 튜터와 함께 Python을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 53
- 레슨
- 225
자주 묻는 질문
“링크 예측과 그래프 분류” 강의는 무료인가요?
네 — “링크 예측과 그래프 분류” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“링크 예측과 그래프 분류”에서 뭘 배우나요?
간선 예측 과제, 음성 샘플링, 그래프 수준 풀링, 그래프 분류를 위한 GINConv를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“링크 예측과 그래프 분류” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 머신러닝을 위한 그래프 이론
- 그래프 합성곱 네트워크(GCN)
- GNN을 활용한 노드 분류
- 링크 예측과 그래프 분류