논문 리뷰/Generative model

[CTGAN] Modeling Tabular Data using Conditional GAN

dororo_27 2024. 5. 14. 11:37

 

[ 목차 ]

     

     

    오늘은 2019년 NeurIPS에서 발표된 CTGAN 논문을 리뷰해 보겠습니다.

     

    Abstract

    Tabular data란 Discrete(이산형) columns, Continuous(연속형) columns을 갖고있는 데이터입니다.

    Continuous columns은 multiple modes(여러개의 봉우리)를 가지고 있으며 Discrete columns은 각 카테고리 수가 불균형(암 환자 : 5%, 정상 환자 : 95%)하게 되어있으면 Deep neural network 모델은 모델링 하는데 어려움을 겪습니다.


    저자는 CTGAN이라는 모델을 제안했으며 이 모델은 위에서 제시한 문제점을 해결하기 위해 Conditional Generator를 사용한다고 합니다. 모델이 어떤 구조인지 살펴보도록 하겠습니다.

     

    Challenges with GANs in Tabular Data Generation Task

    Table $T$(Tabular data)에 대한 column 정의는 다음과 같습니다.

    Continuous columns : $\{C_1,...,C_{N_C}\}$

    Discrete columns : $\{D_1,...,D_{N_d}\}$

    Total columns : 총 $N_C$+$N_d$ 즉, N개의 컬럼을 갖고 있다고 보면 됩니다.

     

    각각의 컬럼은 Random variable(확률변수)로 생각하고 각 컬럼은 unknown joint distribution $\mathbb{P}(C_{1:N_c},D_{1:N_d})$라고 합니다. 즉 각 컬럼 간 독립이 아니라 컬럼끼리 관계를 갖고 있다고 해석 할 수 있을 것 같네요

    One row $\bold{r}j=\{c{1,j},...,c_{N_c,j},d_{1,j},...,d_{N_d,j}\},j\in\{1,...,n\}$

     

    Table $T$를 $T_{train}$과 $T_{test}$로 나누고, $T_{train}$으로 G를 학습한 후에 G를 사용해 각 행을 독립적으로 생성한 집합을 $T_{syn}$이라 합니다.

     

    저자는 2가지 측면으로 Generator의 효율성을 판단한다고 합니다!

    1. Likelihood fitness : $T_{syn}$로 생성한 컬럼이 $T_{train}$와 같은 joint distribution 따르는지
    2. Machine learning efficacy : $T_{train}$로 모델을 학습하여 $T_{test}$ 평가한 성능과 $T_{syn}$로 모델을 학습하여 $T_{test}$ 평가한 성능이 비슷한지?

    기존의 GAN 모델을 사용해 Tabular data를 생성하면 문제가 있다고 했는데, 어떤 문제가 있는지 확인해 보겠습니다. 총 5가지 도전과제가 있습니다.

    1. Mixed data types : 연속형, 이산형 columns을 동시에 생성하기 위해서는 Softmax, Tanh 함수를 적용해야 합니다. Softmax는 이산형 columns, Tanh는 연속형 columns를 처리하기 위한 함수입니다.

      GAN의 경우 Mixed data를 처리할 때 최적화 문제가 발생한다고 합니다! GAN을 학습시킬 때, 이산형 데이터와 연속형 데이터를 동시에 다루기 위해 손실 함수를 적절히 조합하고 최적화해야 합니다. 이산형 데이터를 위한 손실은 일반적으로 분류 문제에 사용되는 크로스 엔트로피 같은 함수가 적합하고, 연속형 데이터에는 평균 제곱 오차와 같은 함수가 적합합니다. 이 두 손실 함수를 적절히 조합하는 것은 도전적이라고 합니다.

    2. Non-Gaussian distributions : 이미지 데이터의 경우 pixel들은 Gaussian과 유사한 분포를 따르기 때문에 [-1,1]의 범위로 normalizing할 수 있지만, Continuous 컬럼의 값들은 Gaussian 분포를 따르지 않아서 Tanh로 normalizing 시키면 vanishing gradient problem문제가 발생합니다.

      왜 gradient problem문제가 발생하느냐? → 만약 3개의 mode를 가진다고 가정해봅시다. 각각의 mode는 $N(0,1)$, $N(5,1)$, $N(10,1)$의 분포를 갖는 데이터들이 존재한다고 하면 이 값들을 Tanh로 normalizing 시켜버리면 $N(0,1)$과 $N(10,1)$ 분포에 존재하는 데이터 들은 각각 -1과 1에 근사하는 값을 가집니다.

      근데 Tanh함수는 아래와 같은 그림을 나타냅니다. 여기서 -1과 1에 근사하는 값의 기울기는 거의 0이 되겠죠. 그래서 Backpropagation과정에서 기울기가 소실된다고 말하는 것 같습니다. (기울기 소실이 발생하면, 네트워크의 특정 부분에서 가중치가 업데이트 되지 않거나 매우 느리게 학습되어, 전체적인 학습 과정의 효율성과 효과가 크게 저하됩니다.)
      Tanh 함수
    3. Multimodal distributions : 여러개의 mode(봉우리)를 가지고 있어서 Kernel Density Estimation(KDE)로 mode를 추정합니다. 기존의 GAN은 이런 Multimodal distribution을 모델링하는데 어려움을 겪는다고 합니다.

      그러면 GAN 모델은 Multimodal distribution을 모델링하는데 왜 어려움을 겪을까요? 모드 간 균형: GAN은 경향적으로 분포의 주된 모드에 초점을 맞추고, 덜 대표적인 모드는 무시할 수 있습니다. 이로 인해 데이터의 다양성과 복잡성을 완전히 포착하지 못할 수 있습니다.

    4. Learning from sparse one-hot-encoded vectors : 새로운 샘플들을 생성하면 모델은 softmax를 사용하여 각 카테고리의 확률(e.g. [0.7,0.2,0.1])을 출력합니다. 하지만, 실제 데이터는 one-hot vector(e.g. [1,0,0])로 표현됩니다.


      이게 무슨 문제가 되냐? 실제 데이터는 원-핫 벡터로 매우 희소한(0이 많음) 반면, 생성된 데이터는 확률 분포로 인해 상대적으로 덜 희소합니다. 이러한 차이는 판별자(discriminator)가 실제 데이터와 생성된 데이터를 구별하는 데 사용될 수 있습니다.

      위의 예시의 경우 one-hot vector에서 1의 카테고리가 생성된 모델에서는 0.7의 확률을 가지니 ‘진짜’라고 판단을 해야하는데, 이런 특성을 보지 않고 그저 벡터의 희소성만 확인하여 생성된 데이터를 가짜라고 구별하게 됩니다. 이렇게 되면 [0.99,0.005,0.005]의 데이터여도 희소하지 않기 때문에 가짜라고 구별하게 돼서 GAN 학습 과정에서 문제가 발생할 수 있는 것 같습니다.

      D입장에서는 [0.99,0.005,0.005]도 가짜라 생각해 0을 출력하니 Maximize가 되지만, G입장에서 보면 E_{z\sim p(z)}[log(1-D(G(z)))]값이 E_{z\sim p(z)}[log(1-0)]=0이 되어 Minimize가 되지 않습니다. 즉, 제대로 학습이 안되는거죠.

    5. Highly imbalanced categorical columns : 이산형 컬럼에서 category의 빈도가 불균형 하여 mode collapse(모드 붕괴)가 일어납니다. 즉, 생성자가 데이터의 다양성을 반영하지 못하고 주로 주요 카테고리만을 반복적으로 생성하는 현상입니다. 이는 GAN이 다양한 데이터 패턴을 학습하고 재현하는 데 실패하게 만듭니다.

      그리고 minor category를 생성과정에서 누락해도 데이터의 분포의 변화는 거의 없어서 판별자가 이것을 감지하기는 어렵다고 합니다! 그렇게 되면 minor category 데이터는 거의 생성이 되지 않는 문제가 발생하여 전체 데이터의 다양성을 학습하지 못하고 major category의 데이터만 생성하게 되는 문제가 발생하는 것 같습니다.

    위 5가지 문제를 해결하면 2가지 평가지표가 좋은 성능을 보일 것 같습니다!

     

     

    CTGAN Model

    저자는 위 문제를 다음과 같이 해결하였습니다.

    Mode-specific Normalization : Non-Gaussian distributions, Multimodal distribution(2,3) 해결(Continuous columns)

    Conditional Generator and Training-by-Sampling : Imbalanced(4,5) 문제 해결 (Discrete columns)

     

     

    Mode-specific Normalization

    Non-Gaussian, Multimodal 문제였던 것을 확인해 봅시다. $T$에서 Continuous 컬럼은 아래 그림처럼 여러개의 mode를 갖는다고 했습니다.

    위 그림은 3개의 mode가 존재하니 3개의 sub distribution으로 나누고, 각각의 distribution에서의 평균 : $\eta_k$, Weight : $\mu_k$, standard deviation : $\phi_k$로 설정합니다.

    $c_{i,j}$ : i 번째 컬럼에 해당하는 j번째 행 데이터로 각각 Gaussian mode에서 발생할 확률은 $\rho_k$입니다.

    그림에선 $\rho_3$ 확률이 가장 높으므로($c_{i,j}$는 $\rho_3$의 분포에서 나왔을 것!) $\beta_{i,j}=[0,0,1]$로 표현하고 $\alpha_{i,j}$도 식에 대입합니다.

    기존의 One row $\bold{r}_j$를 다시 재표현 하면 아래와 같습니다.

    여기서 $d_{1,j}$ 이전의 부분들은 continuous columns이고, mode-specific Normalization을 통해 구할 수 있습니다.

    $d_{1,j}$ 이후의 부분들은 discrete columns로 구성되었으며 one-hot encoding 되어있습니다.

     

     

    Conditional Generator and Training-by-Sampling

    기존의 GAN에서는 minor category를 고려하지 못하는 문제가 있었기 때문에 Conditional Generator를 도입합니다. Conditional Generator를 통해 특정 이산형 컬럼의 값에 따라 데이터 행을 생성할 수 있도록 하는 것입니다. CGAN과 유사한 방식이라고 생각하시면 됩니다! 그러면 이제 어떻게 Condition을 줄 것이냐? 바로 Training-by-Sampling 방법으로 Condition을 줄 것입니다! ( 이 방식으로 불균형 한 문제를 해결할 수 있습니다.)

     

    아래는 Training-by-Sampling 방식입니다!

    각각 단계를 자세히 보겠습니다.

    1. $N_d$ 개의 discrete columns 중에 랜덤으로 한개의 컬럼을 선택 $i^*$
    2. 선택된 Discrete columns에 대해 PMF(확률질량함수) 구함
    3. PMF를 따르는 확률 분포에 따라 하나의 카테고리를 선택한다. 이를 $k^$라고 합니다. 아래는 $k^$ 선택하는 과정입니다.(카테고리가 2개가 있다고 가정)
      1. 첫 번째 카테고리 빈도 : 100
      2. 두 번째 카테고리 빈도 : 10
        1. 첫번째 카테고리 확률 : 100/110 ~ 0.9
        2. 두번째 카테고리 확률 : 10/110 ~ 0.1
      3. 그대로 사용하는게 아니라 log 변환 수행
        1. log(100) ~ 4.61, log(10) ~ 2.3
        2. 첫번째 카테고리 확률 : 4.61/6.91 ~ 0.667
        3. 두번째 카테고리 확률 : 2.3/6.91 ~ 0.333
      4. log의 유무에 따라 뽑힐 확률이 달라지는게 보이시죠! log변환을 통해 minor category가 뽑힐 수 있는 확률을 늘려주었습니다!
    4. Conditional vector 생성
      만약 2개의 이산형 컬럼이 존재하고, 첫번째 컬럼에는 3개의 카테고리, 두번째 컬럼에는 2개의 카테고리가 있는데, 2번째 컬럼의 첫번째 카테고리가 선택되었다면 Conditional vector는 다음과 같습니다. Conditional vector : [0,0,0,1,0]

     

    그리고 여기서 저희가 Generator loss를 추가해 주는데, conditional vector로 2번째 컬럼의 1번째 카테고리가 주어졌을 때 이 조건에 맞는 이산형 벡터를 생성해야하는데, 잘못된 벡터가 생성되었을 수도 있으니 그 손실을 감소시키기 위해 cross-entropy 손실을 추가합니다!

     

    위 방법으로 기존의 문제였던 5(Highly imbalanced categorical columns)번 문제를 해결할 수 있었습니다.

     

    그러면 이제 4번문제가 남아있는데, 기존의 GAN에서 Softmax 함수를 사용했다면, Gumbel-Softmax 함수를 사용해서 sparse한걸로 판별했던 문제를 해결할 수 있었습니다.

    Gumbel-Softmax 내용은 Chat GPT를 사용하였습니다

     

    Gumbel-Softmax는 각 범주에 대한 확률을 계산한 후, Gumbel 분포를 통해 샘플링하여 one-hot vector와 유사한 출력을 생성할 수 있게 합니다. 이를 통해 신경망은 연속적인 방식으로 역전파를 수행하면서도, 이산적인 범주형 데이터를 효과적으로 생성할 수 있습니다.

    기존의 GAN의 도전과제들을 다 해결하였습니다. 이제 두 가지 평가지표로 성능이 확실한지 파악해보겠습니다.

     

    Evaluation Metrics and Framework

    두가지 평가지표

    1. Likelihood fitness metric
    2. Machine learning efficacy

     

    Likelihood fitness metric

    과정은 아래 사진과 같습니다.

     

    Synthetic Data Generator: 이 생성기는 학습 데이터를 기반으로 합성 데이터를 생성합니다.

    합성 데이터(Synthetic Data): Generator에 의해 생성된 데이터입니다. 이 데이터는 실제 데이터와 유사한 데이터 입니다

    Likelihood $L_{syn}$: 합성 데이터의 likelihood를 계산하여, 이 데이터가 실제 분포를 얼마나 잘 따르는지 평가합니다.

    Likelihood $L_{test}$: 테스트 데이터에 대한 likelihood를 계산하여, 합성데이터가 실제 데이터를 얼마나 잘 모델링하는지 평가합니다.

     

    Machine learning efficacy

    실제 데이터에서 효율 확인

    이번에는 합성데이터를 이용해 Decision Tree, Linear SVM, MLP를 사용하여 학습한 후 Test data에 대해 예측을 수행하여 Accuracy와 F1, $R^2$ 확인!

     

    Result

    TVAE와 CTGAN에서 우수한 성능을 보이고 있음!

    그리고 CTGAN에서는 Generator에서 input data가 아닌 noise를 사용하기 때문에 Privacy 문제에 유용하다고 합니다(TVAE보다)

     

    GM Sim, BN Sim에서 Likelihood 값이 커야 두 분포가 유사하다고 볼 수 있습니다. CTGAN이나 TVAE가 역시 다른 모델에 비해 likelihood값이 대략적으로 큰 것을 볼 수 있습니다!

     

     

    참고문헌

    1. https://arxiv.org/pdf/1907.00503

     

    감사합니다!