참조 : https://medium.com/dair-ai/an-illustrated-guide-to-graph-neural-networks-d5564a551783
- Graph
- 그래프는 노드 (node, vertex)와 엣지 (edge)로 구성되는 자료 구조 입니다. 그래프는 각 노드가 엣지로 연결되어 있고, 시작지점과 끝지점이 없는 정보를 표현하는데 적합한 자료 구조 입니다.
- 엣지는 노드 간 관계를 표현합니다. 엣지는 방향을 가지는데, 단방향일 수 있고 양방향일 수 있습니다.
공부할 것 : recurrent unit, embedding vector representation, feed forward neural network
- Graph Neural Network
그래프의 각 노드는 특정 속성을 나타내는 값이 있습니다. 이를 feature라고 합니다. feature가 여러개라면, 이를 feature vector라고 지칭합니다.
각 노드를 Recurrent unit으로 치환합시다. (뉴럴 네트워크 아키텍처로 치환할 수도 있습니다.) 그리고 각 엣지를 간단한 feed forward 뉴럴 내트워크로 치환합시다.
물론 각 노드와 엣지를 어떤 연산으로 설정할 건지, 어떤 feature를 사용할건지는 개발 목표에 따라 설정할 수 있습니다. 추가로, 엣지의 종류 (단일 엣지, 양방향 엣지)에 따라 다른 연산을 적용할 수도 있겠죠.
이렇게 Graph를 변경하고 나면, 각 노드 간 데이터 / 값을 주고 받을 수 있습니다. 특정 노드가 엣지로 연결된 주변 노드로 부터 데이터를 전달받아 feature를 업데이트 하는 과정을 Neighbourhood Aggregation 이라고 합니다. 이 과정을 거쳐 업데이트 된 노드 feature를 embedding이라고도 표현합니다.
GNN에서는, 특정 노드가 연결관계가 있는 주변 노드로부터 각 노드에서의 연산과 엣지 연산된 값을 받습니다. 그리고 이 값들을 현재 노드에서 연산된 값과 합해 추가 연산을 진행하게 됩니다.
이와 같은 GNN 연산 특징은 각 노드가 unordered 하다는 것입니다.
- 각 노드 별 최종 Vector feature 값으로 무엇을 할 수 있을까요?
Neighbourhood Aggregation을 수 회 수행하고 나면, 각 노드 별로 업데이트 된 embedding feature 값을 얻게 됩니다.
이 과정의 정성적 의미는, 각 노드가 주변 노드 간의 관계와 전체 그래프를 더 정확하게 표현한다는 것입니다.
한 단계 더 추상화 해보면, 각 노드 별 embedding을 모은 vector 값 H는 전체 그래프를 나타내는 vector 값이 됩니다.
이 vector set H는 그래프를 표현하는 방법 중 하나인 adjaency matrix 보다 더 나은 표현 방법입니다. ( adjency matrix는 노드 간 연결 관계만 표현한 행렬이기 때문)
이 veector set H는 다음 연산 과정의 입력으로 사용할 수도 있습니다. (Ex, VectorNet에서 subgraph간 Interaction 시 사용)
- GNN을 사용하는 과정은 크게 4가지로 요약 가능합니다.
1. 그래프의 노드를 나타내는 feature응 정의한다. 노드와 엣지를 적절한 연산으로 치환한다.
2. 그래프의 모든 노드에서 Neighbourhood Aggregation을 N회 수행한다. N : hyper parameter
3. 그래프의 모든 노드에서 embedding 값을 모아, 그래프를 포현하는 vector set H를 구한다.
4. vector set H를 다음 과정에 활용한다.
- Graph Neural Network를 사용하는 이유
Social media에서는 GNN이 컨텐츠 추천에 사용하기 좋다고 합니다. 사용자를 노드로 정의하면, 사용자간 연결관계에 따라서 비슷한 취향을 가진 범주로 분류하고, 관심있을 만한 컨텐츠를 제공할 수 있죠.
혹은, 비슷한 취향을 가졌거나 연결이 필요하다고 생각되는 사용자를 팔로우 추천할 수도 있습니다.
- 추가
Graph Neural Network 설계 시 사용하기 좋은 라이브러리 : Deep Graph Library, Pytorch Geometric