본문 바로가기
스터디/인공지능, 딥러닝, 머신러닝

[CS224w] 5. A General Perspective on GNNs (2), 아키텍처

by 궁금한 준이 2023. 3. 10.
728x90
반응형

GNN Layer

classic GNN layer는 이러한 구조를 갖고, 최신 딥러닝 모듈들(BatchNorm, Dropout, etc.)을 추가하여 layer를 구성할 수 있다.

Figure 1. Classic GNN Layer

Batch Normalization

Neural Network가 안정적으로 학습할 수 있도록 함.

batch단위 input의 centering과 scaling을 조정한다.

GNN에서는, node embedding의 평균을 $0$으로 조정하고, 분산도 단위분산으로 크기를 조정한다.

 

$\mathbf{X} \in \mathbb{R}^{N \times D}$: $N$개의 node embeddings

$\mathbf{\gamma, \beta} \in \mathbb{R}^{D}$: trainable parameters

$\mathbf{Y} \in \mathbb{R}^{N \times D}$: Normalized node embeddings

 

(1) $N$개의 임베딩의 평균과 분산(모분산처럼 계산)을 구한다.

\[ \mathbf{\mu}_j = \cfrac{1}{N}\sum_{i=1}^{N}\mathbf{X}_{i,j} \]

\[ \sigma_j^2 = \cfrac{1}{N}\sum_{i=1}^{N}(\mathbf{X}_{i,j} - \mathbf{\mu}_j)^2 \]

(2) (1)에서 구한 평균과 분산을 이용하여 node embedding의 크기를 정규화한다.

\[ \widehat{\mathbf{X}}_{i, j} = \cfrac{\mathbf{X}_{i,j} - \mathbf{\mu}_j}{\sqrt{\mathbf{\sigma}_j^2 + \epsilon}} \]

\[ \mathbf{Y}_{i, j} = \mathbf{\gamma_j \widehat{X}_{i, j} +  \beta_j} \]

 

 

Dropout

neural network가 overfitting되는 것을 방지하도록 한다.

(training) 일정 확률 $p$만큼 뉴런의 값을 $0$으로 한다. (turn off)

(testing) 모든 뉴런을 사용하여 결과를 계산한다. (No turn off)

GNN에서의 dropout은 message function의 linear layer($\mathbf{m}_u^{(l)} = \mathbf{W}^{(l)} \mathbf{h}_u^{(l-1)}$)에 적용된다.

Figure 2. Dropout for GNNs

Activation (Non-linearity)

자주 사용되는 activation function으로는 ReLU, Sigmoid, Parametric ReLU이다.

GNN에서는 Parametric ReLU가 성능이 더 좋다고 한다. 

\[ \text{PReLU}(\mathbf{x}_i) = \max(\mathbf{x}_i, 0) + a_i \min(\mathbf{x}_i, 0) \quad a_i \text{ is a trainable parameter} \]

Figure 3. PReLU

Stacking GNN Layers

GNN layer끼리 연결하는 방법은 크게 2가지가 있다.

  • 순차적으로 layer 쌓기(stacking)
  • skip connection 만들기 (CNN family의 ResNet처럼)

Standard way: Stack GNN layers sequentially

초기값으로 node feature $\mathbf{h}_v^{(0)} = \mathbf{x}_v$로 사용하여 $L$개의 layer를 통과하여 $\mathbf{h}_v^{(L)}$을 얻는다.

 

Figure 4. Stacking GNN layers

 

Over-smoothing problem

layer를 통과할 수록 모든 node embedding이 같은 값으로 수렴하는 현상. 그런데 우리는 node embedding이 달라야 의미를 갖기 때문에 이것은 문제가 된다.

 

over-smoothing 이 생기는 이유는?

$K$개의 layer를 쌓은 GNN을 생각해보자. 이 경우 각 노드는 $K$-hop(노드 간의 거리가 $K$인) 이웃 노드들로부터 영향을 받는다. 그런데 $K$가 커질 수록 공유하는 이웃 노드들은 매우 빠르게 증가하여 거의 모든 노드들과 공유하게된다. ($K=3$만 되어도 거의 모든 노드들이 연결된다.) Receptive field가 너무 커지는 것이다.

 

GNN layer를 많이 stacking → receptive field가 매우 많이 겹친다→ node embedding은 매우 유사할 것이다 → over-smoothing problem 발생

 

따라서 GNN layer를 쌓을때 $L$이 필요이상으로 커지지 않도록 주의하여 $L$값을 정해야한다. (receptive field를 사전에 분석하여 정하는 방법이 될 것이다.)

 

Shallow GNN

그렇다면, GNN layer가 깊지 않으면서(shallow) 어떻게 그래프의 표현력을 높일 수 있을까?

하나의 방법은 GNN layer 자체의 표현력을 높이는 것이다. Transformation이나 Aggregation 단계에서 Linear모델 대신에 DNN 모델을 적용하면 하나의 GNN layer도 높은 표현력을 가질 것이다.

 

두번째 방법은 GNN layer 앞과 뒤에 전처리/후처리 layer를 추가하는 것이다. 실제로 이렇게 전처리/후처리 layer를 추가하는 것 역시 매우 잘 동작한다.

Figure 5. Two ways to make shallow GNN

Skip Connections

Shallow GNN을 만들어서 일부 해결할 수 있지만, 그럼에도 불구하고 더 깊은 layer를 쌓아야 하는 경우가 있다.

over-smoothing의 문제점에서, 이전 단계의 node embedding이 오히려 더 노드들을 구별하는 능력이 있지 않을까라는 아이디어에서 착안한다.

Figure 6. Skip connections

skip-connection이 잘 동작하는 이유

skip-connection은 모델을 섞어주는 효과를 갖는다. $N$개의 skip connection은 $2^N$개의 경우의 수를 만들어 낸다. (skip or include the module) 따라서 skip connection을 추가하는 것 만으로도 shallow GNN은 사실상 deep GNN으로 만들어지는 효과를 얻을 수 있다.

 

Skip Connections in GCN

standard GCN layer와 skip connection이 있는 GCN layer의 수식을 비교하면 다음과 같다.

\[ \mathbf{h}_v^{(l)} = \sigma \left( \sum_{u \in N(v)}\mathbf{W}^{(l)} \cfrac{\mathbf{h}_u^{(l-1)}}{|N(v)|} \right) \]

\[ \mathbf{h}_v^{(l)} = \sigma \left( \sum_{u \in N(v)}\mathbf{W}^{(l)} \cfrac{\mathbf{h}_u^{(l-1)}}{|N(v)|} + \mathbf{h}_v^{(l-1)} \right) \]

Figure 7. GNN Design

Other options of Skip Connections

skip connection을 구성하는 방법은 다양하다. 그 중 마지막 layer에만 node embedding을 더하여 aggregate하는 방법도 있다.

Figure 8. Directly skip to the last layer

 

 

728x90
반응형