이것은 2022 MLSA Workshop에 제출한 “Evaluation of creating scoring opportunities for teammates in soccer via trajectory prediction”논문을 바탕으로 제가 공부한 GVRNN에 대한 설명입니다.
- 위 논문은 GVRNN을 활용하여 선수들의 trajectory를 예측하는 문제를 다루고 있습니다. 논문에 대해서는 본 blog에서 설명하지 않고 GVRNN에 대해서만 설명합니다.
- GVRNN을 설명하려면, 결국 AE(AutoEncoder), VAE(Variational AutoEncoder), VRNN(Variational Recurrent Neural Network), GNN(Graph Neural Network)를 모두 알아야한다. GVRNN은 VRNN과 GNN를 활용한 기법이므로 4가지 특징을 모두 안다면, GVRNN를 이해할 수 있을 것이다.
- 4가지 개념을 하나의 blog에 담으려면 요약된 정보만을 설명할 수 밖에 없다. 나중에 조금 더 자세히 쓸 계획이다.
AE(AutoEncoder)
-
오토인코더(AE)는 입력 데이터를 압축한 후 복원하여 representation learning(데이터의 표현을 학습)하는 비지도 학습 알고리즘이다.
-
Encoder : 입력 데이터를 내부 표현(잠재 공간)으로 변환 -> 추출된 특징을 Latent Vector라고 부름
-
Decoder : Encoder를 거친 Latent Space를 받아 원본 데이터과 같은 형태로 재구성
-
-
Model code github : Model

VAE(Variational AutoEncoder)
-
변이형 오토인코더(VAE)는 AE과 비슷한 구조를 가지지만, 확률 분포를 모델링한다는 점에서 차이가 있다
-
Encoder : 입력 데이터를 내부 표현(잠재 공간)으로 변환 -> 확률 분포를 정의하는 평균과 표준편차 출력
- Latent Space : AE과 다르게 VAE에서는 Latent Space에서 noise를 추가함(동일한 데이터 생성 방지)
- 정규분포로 부터 하나의 noise를 샘플링한 후 이를 바탕으로 Latent vector z를 얻는데, 이를 reparameterize이라 한다.
- Decoder : Latend Space를 거친 z를 받아 원본 데이터과 같은 형태로 재구성
-
-
Model code github : Model

VRNN
-
RNN의 시간적 동적 특성과 VAE의 확률적 생성 모델링를 결합했다. 시간에 따라 변화하는 Trajectory를 효과적으로 학습하기 위해서 RNN도입
1. Prior
- 데이터를 접근하기 전 가지고 있는 사전 분포를 통해서 데이터를 추정함.
- Encoder가 입력데이터를 받아 Latent Space표현으로 변환하는 역할을 한다면, Prior은 Latent Space에 대한 전체적인 구조 와 분포를 정의함으로써 데이터를 생성할 때 일반화능력을 향상시킬 수 있다.
- 수식은 t시점 이전(과거)의 정보만을 활용한 분포를 추정하는 식임을 확인할 수 있다.
$$\ \text{p}_{\theta}(z_t | x_{<t}, z_{<t}) = \ \phi_{\text{prior}}(h_{t-1}) $$
2. Latent Space
- VAE과 같은 역할이다. 학습할 때는 Encoder의 확률 분포를 받고, 데이터 생성할 때는 Prior의 확률분포를 받는다.
3. Encoder(Inference)
- 입력 데이터를 내부 표현(잠재 공간)으로 변환
- 학습할 때 사용
$$\ \text{q}_{\theta}(z_t | x_{\leq t}, z_{<t}) = \ \phi_{\text{enc}}(x_t,h_{t-1})$$
4. Decoder(Generation)
- Latent Space를 거친 z를 받아 원본 데이터과 같은 형태로 재구성
- 학습할 때 사용
$$\ \text{p}_{\theta}(z_t | z_{\leq t}, x_{<t}) = \ \phi_{\text{dec}}(z_t,h_{t-1})$$
5. Recurrence
- 이전 시점의 hidden state과 입력데이터, Latent Vecor를 활용하여 현재 시점의 hidden state를 업데이터하는 과정이다
ELBO
-
VAE는 확률분포 \(p_{\theta}\)를 maximize하는 \({\theta}\)를 찾는 것이 목적이다. 즉 \(log_{p_{\theta}}(x)\)를 maximize를 해야한다. 이를 전개하면 아래 수식처럼 나오고, 우리는 그것을 ELBO라고 부른다
ELBO-
Model code link : Model
-
ELBO는 두 부분으로 구성된다: 재구성 손실(reconstruction loss)과 정규화 손실(Kullback-Leibler divergence). VAE의 목표는 ELBO를 최대화하는 것입니다.
- Reconstruction error
- 원본 데이터과 유사한 데이터를 생성할 수 있게 복원해주는 loss function
- encoder를 거친 latent vector z를 통해서 원본데이터과 유사한 분포를 가지는지 측정한다
- 원본데이터과 유사한 데이터를 생성하게 해주는 error이다,
- Regularization error
- 모델이 단순히 데이터를 재생산하는 것을 넘어서, 일반적인 데이터 패턴을 이해하고 새로운 데이터를 생성할 수 있게 하는 정규화 역할(입력 데이터과 똑같은 복사본 생성 방지)
- 두 확률분포 p, q를 최대한 유사하게 만들어주는 error이다.
- KL divergence는 Trajectory관점에서 다음 위치를 예측할 때, 이전 위치와 동일한 위치를 생성하지 않도록 하기 위한 것과 유사합니다. 즉, 모델이 데이터의 다양성을 유지하고 예측 가능한 패턴을 학습하도록 유도합니다.
- Reconstruction error
-
Loss
-
nagative_loss과 KL-divergence를 최소화하도록 학습하는 것이 VAE의 학습방식이다.
$$\text{Loss}_{VAE} = D_\text{KL}(q(z|x) || p_{\theta}(z)) - \mathbb{E}_{z\sim q(z|x)}[\log p_\theta(x|z)]$$
kld_loss += self._kld_gauss(enc_mean_t, enc_std_t, prior_mean_t, prior_std_t) nll_loss += self._nll_bernoulli(dec_mean_t, x[t])
GVRNN
- GVRNN은 VRNN에 GNN기법을 추가한 것이다. 축구의 경우 각 선수들의 Trajectory는 다른 선수들의 영향을 받기 때문에 GNN기법도 추가한 것이다.
- 다중 에이전트의 상호작용을 학습
- Prior, Encoder(Inference), Decoder(Generation)를 통해 나온 확률분포에 GNN를 추가하므로써 선수들의 상호작용도 학습하는 구조
- Model code link : Model