그래프(graph) : 정점과 간선의 집합으로 구성된 구조
정점 (Vertex / Node) : 그래프의 점을 나타내며, 개체를 표현함
간선(Edge) : 정점 간의 연결을 나타내며, 방향성이 있을수도 있고, 없을 수도 있음
❗vertex : 그래프 이론에서 사용되는 공식적인 용어, 수학적 문헌에서 주로 사용
❗node : 컴퓨터 과학 및 네트워크 관련 분야에서 일반적으로 사용, 데이터 구조나 네트워크의 기본 단위
수학적 정의
: G=(V,E) , V는 점의 집합 E는 두 점을 잇는 선 집합

ex. 분자구조 : 개별 원자들이 노드, 결합이 엣지가 됨
그래프는 인접행렬(adjacency matrix)와 특징 행렬(feature matrix)로 표현이 된다.

ex. molecular property prediction task 일 땐
node feature : atom type, atom charge ... (atom의 특성)
edge feature : bond type (이중결합, 삼중결합 ...) 이라고 볼 수 있음
보통 인접행렬은 주변 노듸와의 연결만 표시하기 때문에 자신의 정보는 날아감
=> 항등행렬을 이용 A+I로 사용
하지만 그래프는 분석하기 쉽지 않음
=> 그래프는 유클리드 공간에 있지 않아 우리에게 익숙한 좌표계로 표현할 수 없음
=> 그래프는 고정된 형태가 아니라 축을 회전시켰을 때 같은 분자가 다른 방식으로 표현됨

그럼에도 불구하고 그래프를 사용하는 이유는 뭘까?
1) 복잡한 관계 표현에 효과적
2) 쉽게 추가, 제거, 수정이 가능하여 동적인 데이터 구조를 유지할 수 있음 (유연성,확장성)
3) 다양한 데이터 유형을 통합해 처리 가능 (추상적인 개념, 정량적 개념..)
4) 연결된 데이터의 특성 활용
등등 ...
기존에는 전통적인 알고리즘 기반 방법들이 많이 쓰임
=> 한 노드의 feature 업데이트 과정은 aggregate 함수와 concat함수를 통해 이루어짐
=> 각 정점마다 이웃 노드가 다르므로 같은 aggregate 함수를 사용하더라도 입력의 수가 다를 순 있음

초기엔 Spectral 한 방법으로 접근했지만 GCN의 등장 후, 현재엔 대부분 Spatial한 방법론들을 사용함
spectral한 방법
input: 노드와 엣지로 구성된 그래프 ( 각 노드는 feature을 가질 수 있고 간선은 정점간의 관계를 나타냄)
CNN의 개념을 그래프에 확장한 거라고 생각하면 됨
각 노드의 특성을 이웃 노드의 정보와 결합하여 업데이트
우리가 자주 다루는 이미지, 텍스트 등의 데이터는 유클리디언 공간 상의 격자 형태로 표현이 가능하지만 그래프는 거리가 아닌 연결 여부와 연결 강도가 중요 !

convolution 연산 : 필터를 사용하여 이미지의 특정 영역에서의 정보를 모음
=> 이와 유사하게 graph 에선 각 노드가 자신의 이웃 노드로부터 정보를 수집
(weight average: 연결강도에 따라 다르게 고려됨)
정보를 수집해서 어떻게 되는가?

그래프의 input과 output이 언뜻 같아 보이지만 graph 값을 업데이트한다는 것은 노드의 feature(정보) 값들이 업데이트 되는 것

타겟 : 노드 1 / 이웃 : 노드 2,3,4 => 노드 2,3,4 의 정보를 수집해 노드1의 feature 업데이트
컨볼루션 연산
=> 노드 1이 자신의 이웃 노드들의 정보를 가중평균하여 특성을 업데이트하는 방식으로 작용
=> 가중치 행렬은 모든 노드에서 공유됨되며 GCN의 주요 특징임
하지만 이웃노드의 feature만 합치는 방식이기 때문에 자신의 정보를 포함하지 않음 !
연결이 많이 되어있는 노드는 큰 값, 적은 노드는 값이 작아 기울기 폭발, 소실 문제

A틸다 : A+I / D 틸다 : A 틸다의 행의 값을 다 더한 행렬 => A 틸다를 정규화 시킨 것



비선형성을 추가해 모델이 더 복잡한 관계를 학습할 수 있도록 함
Leaky Relu
=> ReLU의 변형으로, 입력이 0보다 작을 때에도 약간의 기울기를 허용하여, 완전히 0이 되지 않도록 함

