"그래프 신경망"(GNN)으로 알려진 딥 러닝 기술은 그래프 영역에서 작동합니다. 이러한 네트워크는 최근 몇 가지 예를 들자면 컴퓨터 비전, 추천 시스템, 조합 최적화를 비롯한 다양한 분야에서 사용되고 있습니다.
또한 이러한 네트워크는 소셜 네트워크, 단백질-단백질 상호 작용 네트워크, 지식 그래프 및 여러 연구 분야의 기타를 포함한 복잡한 시스템을 나타내는 데 사용할 수 있습니다.
비유클리드 공간은 그림과 같은 다른 유형의 데이터와 달리 그래프 데이터가 작동하는 곳입니다. 노드를 분류하고 링크를 예측하고 데이터를 클러스터링하기 위해 그래프 분석이 사용됩니다.
이 기사에서는 그래프를 살펴보겠습니다. 신경망 PyTorch를 사용하여 실제 예제를 제공할 뿐만 아니라 유형을 자세히 설명합니다.
그렇다면 그래프는 무엇입니까?
그래프는 노드와 꼭짓점으로 구성된 일종의 데이터 구조입니다. 다양한 노드 간의 연결은 정점에 의해 결정됩니다. 노드에 방향이 표시되면 그래프는 방향이 지정된다고 합니다. 그렇지 않으면 방향이 지정되지 않습니다.
그래프의 좋은 적용은 다양한 개인 간의 관계를 모델링하는 것입니다. 소셜 네트워크. 링크 및 교환과 같은 복잡한 상황을 다룰 때 그래프는 매우 유용합니다.
추천 시스템, 의미 분석, 소셜 네트워크 분석 및 패턴 인식에 사용됩니다.
. 그래프 기반 솔루션을 만드는 것은 복잡하고 상호 관련된 데이터에 대한 통찰력 있는 이해를 제공하는 완전히 새로운 분야입니다.
그래프 신경망
그래프 신경망은 그래프 데이터 형식에서 작동할 수 있는 특수 신경망 유형입니다. 그래프 임베딩 및 CNN(컨볼루션 신경망)은 이에 상당한 영향을 미칩니다.
그래프 신경망은 노드, 에지 및 그래프 예측을 포함하는 작업에 사용됩니다.
- CNN은 이미지를 분류하는 데 사용됩니다. 마찬가지로 클래스를 예측하기 위해 그래프 구조를 나타내는 픽셀 그리드에 GNN이 적용됩니다.
- 반복 신경망을 사용한 텍스트 분류. GNN은 또한 구의 각 단어가 노드인 그래프 아키텍처와 함께 사용됩니다.
노드, 에지 또는 완전한 그래프를 예측하기 위해 신경망을 사용하여 GNN을 생성합니다. 예를 들어 노드 수준의 예측은 스팸 탐지와 같은 문제를 해결할 수 있습니다.
링크 예측은 추천 시스템의 일반적인 경우이며 에지별 예측 문제의 예일 수 있습니다.
그래프 신경망 유형
수많은 신경망 유형이 존재하며 그 중 대부분에 컨볼루션 신경망이 있습니다. 우리는 이 부분에서 가장 잘 알려진 GNN에 대해 배울 것입니다.
그래프 컨볼 루션 네트워크 (GCN)
그들은 고전적인 CNN과 비슷합니다. 가까운 노드를 보고 특성을 얻습니다. 활성화 함수는 노드 벡터를 집계하고 출력을 밀집 계층으로 보낸 후 비선형성을 추가하기 위해 GNN에서 사용됩니다.
본질적으로 Graph convolution, linear layer, non-learner activation function으로 구성되어 있습니다. GCN은 Spectral Convolutional Networks와 Spatial Convolutional Networks의 두 가지 주요 유형으로 나뉩니다.
그래프 자동 인코더 네트워크
인코더를 사용하여 그래프를 표현하는 방법을 배우고 디코더를 사용하여 입력 그래프를 재구성하려고 시도합니다. 인코더와 디코더를 연결하는 병목 레이어가 있습니다.
자동 인코더는 클래스 균형을 잘 처리하므로 링크 예측에 자주 사용됩니다.
순환 그래프 신경망(RGNN)
단일 노드가 수많은 관계를 갖는 다중 관계 네트워크에서 최적의 확산 패턴을 학습하고 그래프를 관리할 수 있습니다. 평활도를 높이고 과도한 매개 변수화를 줄이기 위해 이러한 형태의 그래프 신경망에는 정규화가 사용됩니다.
더 나은 결과를 얻으려면 RGNN에 더 적은 처리 능력이 필요합니다. 텍스트 생성, 음성 인식, 기계 번역, 사진 설명, 비디오 태깅 및 텍스트 요약에 활용됩니다.
게이트 신경 그래프 네트워크(GGNN)
장기 종속 작업의 경우 RGNN보다 성능이 뛰어납니다. 장기 종속성에 노드, 에지 및 시간 게이트를 포함함으로써 게이트 그래프 신경망은 순환 그래프 신경망을 향상시킵니다.
게이트는 다양한 단계에서 데이터를 호출하고 잊어버리는 데 사용된다는 점에서 GRU(게이트 순환 장치)와 유사하게 기능합니다.
Pytorch를 사용하여 그래프 신경망 구현
우리가 집중할 특정 문제는 공통 노드 분류 문제입니다. 우리는 musae-github, GitHub 개발자를 위해 공개 API에서 컴파일되었습니다.
에지는 노드 간의 상호 팔로워 관계를 표시하며, 이는 최소 10개의 저장소에 별표 표시된 개발자(플랫폼 사용자)를 나타냅니다(mutual이라는 단어는 방향이 지정되지 않은 관계를 나타냄).
노드의 위치, 별표 표시된 저장소, 고용주 및 이메일 주소를 기반으로 노드 특성이 검색됩니다. GitHub 사용자가 웹 개발자인지 예측 기계 학습 개발자 우리의 임무입니다.
각 사용자의 직위는 이 타겟팅 기능의 기반이 되었습니다.
파이토치 설치
시작하려면 먼저 다음을 설치해야 합니다. 파이 토치. 다음에서 컴퓨터에 따라 구성할 수 있습니다. 여기에서 지금 확인해 보세요.. 여기 내 것입니다:
모듈 가져오기
이제 필요한 모듈을 가져옵니다.
데이터 가져오기 및 탐색
다음 단계는 데이터를 읽고 레이블 파일에서 처음 XNUMX개 행과 마지막 XNUMX개 행을 그리는 것입니다.
1개의 열 중 노드의 id(즉, 사용자)와 ml_target(사용자가 기계 학습 커뮤니티의 구성원이면 0이고 그렇지 않으면 XNUMX) 열 중 두 개만 이 상황에서 우리와 관련이 있습니다.
클래스가 두 개뿐이라는 점을 감안할 때 이제 작업이 이진 분류 문제라는 것을 확신할 수 있습니다.
심각한 클래스 불균형의 결과로 분류기는 과소 대표되는 클래스를 평가하는 대신 어떤 클래스가 대다수인지 가정할 수 있으므로 클래스 균형을 고려해야 할 또 다른 중요한 요소가 됩니다.
히스토그램(빈도 분포)을 플로팅하면 기계 학습(label=1)의 클래스가 다른 클래스보다 적기 때문에 불균형이 나타납니다.
기능 인코딩
노드의 특성은 각 노드와 관련된 기능을 알려줍니다. 데이터를 인코딩하는 방법을 구현하여 이러한 특성을 즉시 인코딩할 수 있습니다.
우리는 이 방법을 사용하여 표시를 위해 네트워크의 작은 부분(예: 60개 노드)을 캡슐화하려고 합니다. 코드는 여기에 나열되어 있습니다.
그래프 디자인 및 표시
우리는 토치 기하학을 사용할 것입니다. 데이터를 사용하여 그래프를 작성합니다.
다른(선택 사항) 속성을 가진 단일 그래프를 모델링하기 위해 간단한 Python 객체인 데이터가 사용됩니다. 이 클래스와 다음 속성(모두 토치 텐서)을 활용하여 그래프 개체를 만듭니다.
인코딩된 노드 특성에 할당될 값 x의 형식은 [노드 수, 특성 수]입니다.
y의 모양은 [노드 수]이며, 노드 레이블에 적용됩니다.
에지 인덱스: 무방향 그래프를 설명하려면 동일한 두 노드를 연결하지만 반대 방향을 가리키는 XNUMX개의 별개의 방향 에지가 존재하도록 원래 에지 인덱스를 확장해야 합니다.
예를 들어, 노드 100과 200 사이에는 노드 200에서 100을 가리키고 다른 하나는 100에서 200까지 가리키는 한 쌍의 간선이 필요합니다. 간선 인덱스가 제공되면 이것이 무방향 그래프를 표현하는 방법입니다. [2,2*원래 모서리 수]는 텐서 형식이 됩니다.
그래프를 표시하기 위해 그래프 그리기 메서드를 만듭니다. 첫 번째 단계는 동종 네트워크를 NetworkX 그래프로 변환하는 것입니다. 이 그래프는 NetworkX.draw를 사용하여 그릴 수 있습니다.
GNN 모델을 만들고 훈련시키십시오.
우리는 light=False로 데이터 인코딩을 실행하여 전체 데이터 세트를 인코딩한 다음 전체 그래프를 빌드하기 위해 light=False로 생성 그래프를 호출하여 시작합니다. 리소스가 제한된 로컬 컴퓨터를 사용하고 있다고 가정하기 때문에 이 큰 그래프를 그리려고 하지 않습니다.
숫자 0과 1을 사용하여 각 특정 마스크에 속한 노드를 식별하는 이진 벡터인 마스크는 훈련 단계에 어떤 노드가 포함되어야 하는지 알려주고 추론 단계에서 테스트 데이터인 노드를 알려주는 데 사용할 수 있습니다. 토치 기하학.변환.
AddTrainValTestMask 클래스의 훈련 마스크, 발 마스크 및 테스트 마스크 속성을 사용하여 노드 수준 분할을 추가할 수 있습니다. 이 속성을 사용하여 그래프를 만들고 마스크 구성 방법을 지정할 수 있습니다.
훈련에 10%만 사용하고 데이터의 60%를 테스트 세트로 사용하고 30%를 검증 세트로 사용합니다.
이제 우리는 두 개의 GCNConv 레이어를 쌓을 것입니다. 그 중 첫 번째 레이어의 출력 기능 수가 입력 기능으로 그래프의 기능 수와 같습니다.
클래스 수와 동일한 출력 노드를 포함하는 두 번째 계층에서 relu 활성화 함수를 적용하고 잠재 기능을 제공합니다.
간선 인덱스와 간선 가중치는 GCNConv가 forward 함수에서 받아들일 수 있는 많은 옵션 x 중 두 가지이지만 우리 상황에서는 처음 두 변수만 필요합니다.
우리 모델이 그래프의 모든 노드의 클래스를 예측할 수 있다는 사실에도 불구하고 위상에 따라 각 세트의 정확도와 손실을 별도로 결정해야 합니다.
예를 들어 훈련 중에 훈련 세트를 활용하여 정확도와 훈련 손실을 결정하기만 하기 때문에 마스크가 유용합니다.
적절한 손실과 정확도를 계산하기 위해 마스크 손실과 마스크 정확도의 함수를 정의합니다.
모델 훈련
이제 토치를 사용할 교육 목적을 정의했습니다. Adam은 마스터 옵티마이저입니다.
유효성 검사 정확도를 주시하면서 특정 에포크 수에 대한 교육을 수행합니다.
또한 다양한 시대에 걸쳐 훈련의 손실과 정확도를 표시합니다.
그래프 신경망의 단점
GNN을 사용하면 몇 가지 단점이 있습니다. GNa를 사용하는 시기와 기계 학습 모델의 성능을 향상하는 방법은 둘 다 더 잘 이해한 후에 명확해질 것입니다.
- GNN은 일반적으로 XNUMX개의 레이어가 있는 얕은 네트워크이지만 대부분의 신경망은 성능을 향상시키기 위해 깊이 들어갈 수 있습니다. 이러한 제한으로 인해 큰 데이터 세트에서 최첨단으로 수행할 수 없습니다.
- 그래프의 구조적 역학이 동적이기 때문에 그래프에서 모델을 훈련시키는 것이 더 어렵습니다.
- 이러한 네트워크의 높은 계산 비용으로 인해 생산 모델을 확장하는 데 어려움이 있습니다. 그래프 구조가 거대하고 복잡한 경우 프로덕션을 위해 GNN을 확장하는 것이 어려울 것입니다.
결론
지난 몇 년 동안 GNN은 그래프 영역에서 기계 학습 문제를 위한 강력하고 효과적인 도구로 발전했습니다. 이 기사에서는 그래프 신경망에 대한 기본적인 개요를 제공합니다.
그런 다음 모델을 훈련하고 테스트하는 데 사용할 데이터 세트를 생성할 수 있습니다. 그것이 어떻게 작동하고 무엇을 할 수 있는지 이해하기 위해 훨씬 더 나아가 다른 종류의 데이터 세트를 사용하여 훈련할 수도 있습니다.
행복한 코딩!
댓글을 남겨주세요.