WiseN

[Reinvent2019] GNN 계열 신규 알고리즘 적용 - Sagemaker Support for DGL 소개

Dec 16, 2019   |   AWS

작성자_임성균

페이스북 공유하기 트위터 공유하기
Blog thumbnail

들어가며



안녕하십니까. GS네오텍 임성균입니다.

이번 포스팅은 AWS Re:invent 2019 ML 분야 중 Amazon SageMaker에 추가된 알고리즘 하나를 소개해드리려 합니다. 순수 알고리즘을 개발하시거나 Graphic을 이용하여 기계학습을 사용하시는 분이라면 꼭 한번쯤 보시면 좋은 주제일 듯 합니다. 본문에서 자세히 다루겠지만 쉽게 이용할 수 있다는 점에서 글을 쓰는 과정이 매우 흥미로웠습니다. 과연 그래픽을 이용한다는 알고리즘은 무엇일까요?

그것은 바로!! Amazon SageMaker Support for Deep Graph Library(DGL)입니다. Graph Neural Network(그래프 신경망, GNN) 분야 중 하나로 최근 기계학습에서 가장 흥미로운 발전 분야 중 하나입니다. 이 외에도 간단히 AWS에서 제공하는 알고리즘을 소개할 예정이니 필요하신 알고리즘을 적절히 선택하셔서 사용하시면 좋을 것 같습니다. 

자 그럼, 시작하겠습니다!

 

AWS SageMaker에서 지원하는 Built-In Algorithm


AWS에서는 이미 검증된 다양한 기계 학습 모델을 최적화해서 Amazon SageMaker에서 사용할 수 있도록 유명한 알고리즘을 제공하고 있습니다. 또한 AWS Marketplace의 기계 학습 분야에는 수백개의 모델들을 원-클릭으로 SageMaker에서 사용 가능합니다. 그렇다면 Sagemaker에서 지원하는 대표적인 알고리즘이 무엇이 있는지 간단히 살펴 보도록 하겠습니다.

먼저 적합한 알고리즘을 선택하기 위해서는 비즈니스 모델의 답 형식이 무엇인가를 고려해야 합니다. 예를 들어 은행 마케팅 관리자가 새 고객 유치를 위해 메일을 보내고자 한다면 이때 얻고자하는 답의 유형에 따라 알고리즘을 선택할 수 있습니다.

 

먼저, 이산적 범주("예" 또는 "아니요"라는 범주)에 맞는 답 또는 정량적인 질문(잠재적인 대상 고객을 유추하는)의 답

   ● Linear Learner Alogrithm & ​XGBoost Algorithm 

    - "지난 메일링의 투자수익률(ROI)을 기반으로 이 고객의 메일링의 ROI는 어떻게 되는가?" 에 대한 ROI를 사용하여 메일 캠페인의 대상 고객을 지정

 

둘째, 이산적인 추천 형식의 답

​   ● ​Factorization Machines Algorithm

    - "이전 메일링 응답을 기반으로 각 고객에 대한 추천 콘텐츠는 무엇인가?" 이 경우 고객에게 메일을 보낼 것인지 여부가 아닌 무엇을 메일로 보낼 것인가에 대한 추천을 찾고 있음

셋째, 답이 포함된 예제 데이터를 사용할 필요가 없거나 사용할 수 없을 때가 있는데, 답을 통해 그룹이 식별되는 문제

   ​● ​​K-Means Algorithm

    - "현재 및 잠재 고객을 속성 기반 10개의 그룹으로 그룹화하고자 합니다. 어떻게 그룹화해야 합니까? " 현재 고객의 비율이 가장 높은 그룹에 있는 고객에게 메일을 보내기로 할 수 있습니다. 다시 말해 동일한 속성 세트를 기반으로 현재 고객과 가장 유사한 잠재 고객​

   ● Principal Component Analysis(PCA) Algorithm

    - "이러한 고객을 차별화하는 속성은 무엇이고, 이러한 차원을 따라 각 고객에 대한 가치는 어떻게 되는가" 이러한 답변을 사용하여 현재 및 잠재 고객의 관점을 간소화하고 이러한 고객의 속성을 잘 이해할 수도 있습니다.​

범용 알고리즘과 별개로 Amazon SageMaker는 특정 사용 사례에 맞춰진 알고리즘을 제공합니다.

 

  • ​Image Classification Algorithm - 이미지를 분류(Supervised Algorithm)
  • ​Sequence-to-Sequence Algorithm - 신경망 머신 번역에 사용되는  Unsupervised Algorithm
  • Latent Dirichlet Allocation(LDA) Algorithm​ - 여러 문서에서 주제를 결정하는데 적합한 알고리즘
  • ​Neural Topic Model(NTM) Algorithm - 신경망 접근 방식을 사용하여 여러 문서에서 주제를 결정하는 또 다른 Unsupervised Algorithm

 

 

그래프 딥러닝 학습을 위한 Deep Graph Library(DGL) 


그래프를 이용한 기계학습, 뭔가 그럴듯해 보이지 않으신가요? 먼저 기능을 소개를 하기 전 어디에 활용하면 좋을지 보게되면 이해가 쉬울 것 같습니다.

 

  • 사람들 사이의 관계를 그래프로 나타내는 소셜 네트워크
  • 고객과 제품 사이의 상호 작용을 그래프로 나타내는 추천 시스템
  • 화합물 원자와 결합의 그래프로 모델링 하는 화학 분석
  • 소스 및 대상 IP 주소 사이의 연결을 그래프로 설명하는 사이버 보안
  • 그 외 더 많은 데이터 세트

 

감이 오시나요? 실제 우리 주위에 Graph로 표현하여 분석할 수 있는 Case를 생각해보면 Fraud Detection(사기탐지), Drug Discovery System(마약 탐지)에 분류를 통해 적용해볼 수 있지 않을까요?

그렇다면 실제 예제를 통해 사용방법을 알아보도록 하겠습니다. 


위 그림은 복잡하게 얽혀있는 그래프처럼 보이지만 Graph Neural Network(GNN) 설명하는 가장 쉬운 예제이기도 합니다. 예제는 "Zachary 's karate club" 문제를 기반으로합니다. 가라테 클럽은 34 명의 회원(동그라미 숫자를 포함한 노드)을 포함하는 소셜 네트워크이며 클럽 외부에서 상호 작용하는 회원들 사이의 쌍별 링크(엣지)를 표현한 그림입니다.

이 가라테 클럽은 나중에 강사 (노드 0)와 클럽 회장 (노드 33)이 이끄는 두 개의 커뮤니티로 나뉩니다. 회원들간의 링크를 통해 네트워크는 커뮤니티를 나타내는 색상으로 다음과 같이 시각화하는 목표로 진행됩니다.

예제를 진행하기 위해 DGL에서 notebook code를 이용하여 실험을 진행합니다.

https://docs.dgl.ai/tutorials/basics/1_first.html 

 

▨ 환경설정

 

실험을 위해서 Amazon SageMaker에 Jupyter Notebook과 Deep Graph Library(DGL)을 이용합니다. 

1. Deep Graph Library(DGL)에 접속합니다. https://www.dgl.ai/

2. Get started에서 사용하고자 하는 버전을 확인 합니다.

   ※  conda install -c dglteam dgl                     # CPU version

       conda install -c dglteam dgl-cuda9.0       # CUDA 9.0

       conda install -c dglteam dgl-cuda9.2       # CUDA 9.2

       conda install -c dglteam dgl-cuda10.0     # CUDA 10.0

       conda install -c dglteam dgl-cuda10.1     # CUDA 10.1

3. 설치 위치는 Jupyter Notebook에서 New 탭에 Terminal을 실행하여 위 코드에 맞게 설치합니다.

   ※ OS 사양 확인(Linux) : cat /proc/version

      cuda version 확인 : nvcc --version

      conda 버전확인 : conda --version

해당 코드는 34개의 회원 노드를 생성하며, 회원들간의 관계(엣지)를 156개로 표현한 코드입니다.

 

다음은 노드와 엣지의 관계를 그래프로 표현하였습니다.

 

다음은 GCN 모델을 적용하여 최적화된 학습 단계입니다. 파라미터(하이퍼파라미터)의 Epoch은 30으로 설정하였고, 이를 통해 반복적인 학습이 이루어집니다.

학습단계를 애니메이션으로 보여주는 단계입니다. 예제를 통해 클럽 회장과 강사의 두 분류로 나누어진 것을 결과로 볼 수 있습니다.

이뿐만 아니라 Graph Neural Network에서는 10가지 모델이 있으며 사용자의 비즈니스에 따라 맞추어 알고리즘을 구현한다면 더욱 정확한 결과를 얻을 수 있지 않을까요?
 

마치며


Deep Graph Library은 연구 결과 우수성은 보여주었지만, 실제 응용프로그램에서의 사용이 제한적입니다. 

제한적인 이유는 수백만 개의 노드(Graph)를 찾고 훈련하는 것을 포함하여, 이 학습을 수행하는데 필요한 컴퓨팅인 인프라를 구축하고 유지하는데 시간이 많이 들기 때문입니다. 하지만 Deep Graph Library(DGL)를 사용하게 되면 GNN(Graph Neural Network)의 구현 및 배포를 단순화하기 위한 Tool과 인프라를 제공하게 됩니다.

왠지 리소스가 풍부한 AWS와 잘 어울리는 알고리즘이기도 한듯합니다. 읽어주셔서 감사합니다. 끝!!

 

참고:

Amazon SageMaker, 그래프 딥러닝 학습을 위한 Deep Graph Library 모델 추가

https://aws.amazon.com/ko/blogs/korea/now-available-on-amazon-sagemaker-the-deep-graph-library/ 

GNN 학습 모델 및 Overview

https://docs.dgl.ai/tutorials/models/index.html