유튜브 Idea Factory KAIST 채널의 "Basic of Graph Convolution Network - 딥러닝 홀로서기" 강의를 듣고 정리하였다.
What is Graph?
![](https://velog.velcdn.com/images/youbbin/post/c623b75b-4a9f-4bd0-98df-c3187c33192e/image.png)
- 그래프란? vertices의 set과 edge의 set으로 이루어진 것
![](https://velog.velcdn.com/images/youbbin/post/03b31221-5b10-4d12-a4f0-af20b642a0f4/image.png)
- vertex는 node라고도 부른다.
- 방향이 있는 경우 그래프(directed graph)도 있다.
- edge에 값을 넣는 그래프(weighted graph)도 있다.
- 그래프를 어떻게 표현하는가?
![](https://velog.velcdn.com/images/youbbin/post/78a40b94-3900-4b3d-b9bd-de2b0dca83c5/image.png)
- Node Feature Matrix : 노드의 정보들을 나타내는 행렬
- f(feature 개수)*n(node 개수) 크기
- Adjacency Matrix : 노드간의 connectivity들을 나타내는 행렬
- n개의 노드 → n*n 크기
- 엣지가 없으면 0, 있으면 1
Graph Convolution Network
![](https://velog.velcdn.com/images/youbbin/post/e54cba32-333f-4b63-8c46-d5f78f3b2c9a/image.png)
-
그래프를 Convolution Network에 적용하려면?
- 한 노드는 주변에 있는 노드들과 비슷한 특성을 가질 것이다. → Hidden State는 근처에 있는 노드의 가중치를 적용한다. 즉, 인접한 state들과 같은 Weight를 사용(Weight Sharing) 한다.
- 1번 노드는 1,2,3,4번 노드의 영향을 받는다. 만약 4번 노드에 5번 노드가 연결되어 있다면 1번에는 5번의 가중치가 적용되지 않는다. (Learn Local Feature)
-
실제 구현할때는? 노드가 많아지면 for문으로 다 해야하는가? No!
- 행렬 연산으로 한다.
![](https://velog.velcdn.com/images/youbbin/post/33ff2270-d516-4ada-9dba-b0adc0417d4a/image.png)
-
한번 레이어를 거치면 해당 노드는 주변 노드의 정보를 함께 담고있는 것이기 때문에 연속적으로 레이어를 거치게 된다면 하나의 노드에는 더욱더 확장된 범위에서의 지역적인 정보를 담고있다.
![](https://velog.velcdn.com/images/youbbin/post/1a2f9d78-a450-4a88-8e51-983b2fec5406/image.png)