Graph Convolutional Networks

Chunkyun
BioAI
Published in
8 min readJan 23, 2020

Graph Neural Networks(GNN)는 drug discovery 인공지능의 수준을 올리는 데 많은 기여를 하고 있습니다. 그 동안, 약을 인공지능이 이해할 수 있게 feature로 표현하는 방법 중에 Extended-Connectivity Fingerprints(ECFPs)가 많이 이용되어 왔습니다. 하지만 Steven Kearnes et al., 2016에 의하면, 약을 그래프로 표현하는 것이 ECFPs 보다 반드시는 아니지만 대체로 좋은 성능을 보이고 있습니다.

Fig 1. CVPR 2019 Top 25 keywords

위 사진에서 볼 수 있듯이 “graph”는 CVPR 2019 상위 키워드 15위로 등극하였습니다(CVPR 2018은 55위). 그 만큼 GNN에 많은 연구가 이루어지고 있고, 이를 drug discovery 분야에도 적용한다면 많은 발전이 있을 것이라 예상합니다. 그 중, GNN을 대표하는 모델 중 하나인 Graph Convolutional Networks(GCN)에 대해 알아보도록 하겠습니다.

What Is Graph?

Fig 2. Graph(left), Adjacency matrix(right)

GNN에서 말하는 그래프에 대해 간략하게 설명하겠습니다. 그래프는 우선 다음 두가지로 이루어져 있습니다.

  1. Node(Vertex) : Fig 2. 왼쪽 그림에서 원으로 표시 된 a, b, c, d, e ,f를 node라 합니다.
  2. Edge : 두 vertices를 연결한 선을 의미합니다.

약에서 nodes는 원소들을, edges는 결합 방법(single, double, triple, aromatic 등)을 의미합니다.

또한, 그래프는 Fig 2. 우측 그림과 같은 인접 행렬(Adjacency matrix)를 이용한다면 비교적 컴퓨터가 이해하기 쉽게 그래프를 표현할 수 있습니다. 각 column과 row에 순서대로 node set을 정의하고, edge로 연결이 되어 있으면 1, 그렇지 않으면 0으로 채워주어 간단하게 인접 행렬을 구할 수 있습니다. 보통, 인접 행렬은 자기 자신으로 가는 edge가 없기 때문에 대각 원소(diagonal elements)를 0으로 채웁니다. 하지만 GCN에서는 자기 자신의 정보를 이용하기 위하여 1로 채워 줍니다.

이 외에도 그래프는 다음과 같은 상황에서 응용 될 수 있습니다.

  1. SNS에서 관계 네트워크
  2. 학술 연구에서 인용 네트워크
  3. 3D Mesh

Graph Convolutional Networks

Fig 3. An example of Graph Convolutional Networks. Image taken from Thomas Kipf’s blog post

Convolutional Neural Networks(CNN)에서 픽셀 대상으로 하던 합성곱(convolution) 연산을 Graph Convolutional Networks(GCN)에서는 그래프에 적용하자는 것이 가장 기본적인 아이디어입니다.

Input

Fig 4. Input matrices of Graph Convolutional Networks

GCN에서는 다음의 두 행렬을 입력으로 받습니다.

  • A : 그래프의 인접 행렬
  • X : N×D feature matrix (N = nodes의 수, D = vertex feature의 차원)

예를 들어, 그래프 구조가 SNS에서 친구들의 관계를 나타내는 네트워크라면 node는 사람이 될 것이고, edge는 사람들 간의 friendship의 정도가 될 것입니다. 이 때, 특징 행렬 X는 각 node의 feature(나이, 신장, 몸무게, 결혼 유무, 흡연 유무 등)로 만들어진 행렬을 의미합니다.

Output

GCN은 node-level output 혹은 graph-level output이 모두 가능합니다. 이는 우리가 해결해야 할 task가 어떤 형태인지에 따라 달라지게 됩니다. 예를 들어, SNS 관계 네트워크에서 사람 단위로 분류하고 싶은 경우에는 node-level output이, 약을 분류하고 싶은 경우에는 graph-level output이 적절할 것입니다.

  • Node-level output Z : N×F feature matrix (N = nodes의 수, F= node feature의 차원)
  • Graph-level output은 pooling 연산을 이용

How to update node feature

Fig 5. Information needed to update feature of node b(left), node a(right)

Node feature를 업데이트 하기 위하여 자기 자신의 정보와 인접한 노드들의 정보를 함께 이용합니다. 예를 들어, 노드 b를 업데이트 하기 위해서 노드 a, b, c, d의 정보를 이용하고(Fig 5.의 좌측 그림), 노드 a를 업데이트 하기 위해서는 노드 a, b의 정보만을 이용하면 됩니다(Fig 5.의 우측 그림).

이를 수식으로 다음과 같이 나타낼 수 있습니다.

where

다시 말해, l+1 레이어에서 node i의 feature를 업데이트 하는 방법은 nodes(node i와 인접한 노드들)의 weight를 곱해주고 bias를 더한 형태에 활성화 함수를 입힌 형태입니다.

이를 모든 노드에 대하여 다음과 같이 하나의 행렬식으로 표현할 수 있습니다.

여기서 주의할 점은 인접 행렬 A의 대각원소를 모두 1로 하여야 자기 자신의 정보를 이용한다는 것을 쉽게 보일 수 있습니다.

하지만, 위의 식을 바로 이용하게 되면 A를 정규화(normalization)하지 않기 때문에 연산 과정에서 feature vector의 scale이 완전히 바뀐다는 문제가 생기게 됩니다. 따라서 우리는 인접행렬 A를 다음과 같이 정규화하여 사용합니다.

where D is the diagonal node degree matrix,

D 행렬은 자신을 포함하여 몇개의 노드와 연결이 되어있는지를 나타내는 행렬이고, 인접 행렬 A의 각 row의 원소들을 더하여 쉽게 얻을 수 있습니다. 이렇게 얻은 D 행렬의 역함수를 구하고 루트를 씌어주어 인접 행렬 A 앞 뒤의 곱해주면 우리는 정규화 된 인접 행렬을 구할 수 있습니다.

실제 사용에서는 graph convolution layer를 세번 정도 거쳐 각 노드의 feature를 업데이트 하고 해당하는 task에 따라 classification 혹은 regression을 진행하면 됩니다.

Conclusion

Graph Neural Networks는 강력합니다. 더군다나, 그래프 구조로 표현 되는 drug discovery 분야에서는 더욱 강력합니다. 그 중 GNN을 대표하는 Graph Convolutional Networks에 대해 알아봤습니다. 이를 시작으로 SOTA graph model을 공부하여 drug discovery에 적용한다면 빠른 시일 내에 인공지능으로 만든 약을 시중에서 볼 수 있을 것이라 예상합니다.

References

[1] Thomas Kipf’s blog post

[2] SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS Thomas N. Kipf and Max Welling, ICLR 2017

[3] Slide by DonghyeonKim

--

--