스탠포드 강의를 듣고 정리한 내용입니다.
지난 포스팅에서는 Belief Propgation에 대해서 알아보았습니다.
이번 포스팅에서는 드디어 그래프 신경망에 대해서 알아보겠습니다! 딥하게 들어가는 것은 다음 포스팅 부터이니 가볍게 읽어주세요!
현재까지의 Node Embedding
지금까지 우리가 노드 임베딩을 하려고 했던 이유는 그래프의 노드를 d차원의 벡터로 표현하기 위함이었습니다.
임베딩 할 때는 실제 그래프에서 가까운 노드끼리 벡터 공간에서도 가깝에 유지하도록 매핑 함수 f를 학습하려고 하였습니다.
위의 학습을 위해서는 크게 두 가지를 정의해야합니다. (참고 포스팅)
1. 인코더
인코더는 '노드를 어떻게 벡터로 바꾸는가' 입니다. 즉, 노드를 수치로 나타내는 것이죠.
여기서는 shallow encoding을 통해 구현했는데요. 정말 간단한 look-up이라고 생각하시면 됩니다.
2. 디코더
디코더는 임베딩된 벡터를 원래 그래프에서 표현하는 것을 뜻하는데요.
디코더를 하는 이유는 "그래프에서 가까운 노드는 벡터 공간에서도 유사도가 높다"를 정의하기 위함이죠.
즉, 벡터공간에서의 두 노드 벡터와 실제 노드들간의 관계성을 알아야하기 때문이죠.
그래프에서의 유사도는 앞의 포스팅에서 했던 DeepWalk, Node2vec과 같은 알고리즘이고, 벡터 공간에서의 유사도는 내적입니다.
여기서!
Shallow encoding은 크게 3가지 한계점이 존재합니다.
1. O(|V|)의 파라미터가 필요
노드간의 파라미터 공유가 안되기 때문에, 각 노드는 유니크한 임베딩을 가집니다. 따라서 노드 수가 곧 파라미터 수입니다.
노드 수가 매우 많을 경우 파라미터 수도 그만큼 늘어납니다.
2. transductive함
학습할때 못봤던 노드는 추론할 때 사용할 수 없음을 뜻합니다.
3. 노드 자체의 특성을 이용하지 않음
노드는 많은 특성을 가지고 있지만, 지금까지 우리가 배웠던 방법들에서는 그래프의 구조적인 특징만 사용하고, 노드 자체의 특성은 이용하지 않았습니다.
Deep Graph Encoder
드디어 나온 Deep Graph Encoder!!!
기존 방법과의 차이가 무엇일까요? 바로 인코드 할 때, 다중 레이어로 인코딩을 한다는 것입니다.
이 때, 인코더 부분만 달라질 뿐이고, 유사도 함수 같은 경우는 node2vec, deepwalk등에 사용할 수 있습니다.
위에 나온 것은 노드의 인코딩 과정인데요. 기존의 look-up과는 다르게 딥러닝 알고리즘을 사용한 것을 알 수 있습니다. 확실히 딥해졌죠.
또한 아래의 작업들에 이용할 수 있다고 합니다.
- Node Classification
- Link prediction
- Community detection
- Network similarity
그런데 '그래프 신경망'이라고 하는 것은 기존의 신경망들과 과연 무엇이 다를까요?
1장에서도 언급한 바 있는데요.
기존의 이미지, 텍스트, 음성 같은 경우에는 시퀀셜하거나 그리드한 데이터들이었습니다. 즉, 형태가 정해져있는 데이터였죠.
하지만 그래프 데이터는 정해진 형식이 없기 때문에 훨씬 더 처리가 복잡합니다.
그 이유는
- 그래프 데이터의 사이즈는 매번 바뀌며, 복잡한 토폴로지를 가지고
- 순서도, 고정 포인트도 없고
- 동적이며 multimodal feature를 가질 수 있기
때문입니다!
오늘은 정말 간단하게 그래프 신경망에 대해서 언급정도만 했는데요. 본격적인 내용은 다음 포스팅에 이어서 하겠습니다.