이번에 알아볼 내용은 Diffusion Model에서
샘플생성 과정에서 생성된 데이터가 특정 클래스에 속하도록 유도하기 위해 분류기(Classifier)의 정보를 활용하는 방법인
Classifier Guidance 입니다.
1. Classifier Guidance
- Diffusion 모델 자체는 기본적으로 생성할 데이터의 클래스가 정보가 없는 상태로 학습되지만, 특정 클래스를 제어하며 샘플을 생성하고자 할 때는 분류기의 예측 결과를 활용할 수 있습니다.
- Classifier Guidance의 주요 아이디어는 Classifier의 출력을 통해 조건부 확률을 변경하는 것입니다.
* 즉, 특정 클래스 y에 대해 가이드된 샘플 xt는 다음과 같은 과정을 통해 얻어지는데
* 이 Gradient를 이용해 타임스텝마다 샘플을 이동시키며, 원하는 클래스에 속할 확률을 높이는 것입니다.
- Classifier Guidance의 작동 단계는 아래와 같습니다.
1) Pre-trained Classifier
* 사전에 학습된 분류기를 사용해 각 타임스텝마다 생성된 데이터에 대한 클래스 정보 생성
2) Gradient-based Guidance
* 분류기의 출력을 통해 각 타임 스텝에서 샘플이 특정 클래스에 속하도록 유도하기 위해, 클래스 확률의 Gradient를 계산하고 이를 Diffusion model의 샘플링 과정에 반영
ex. 특정 클래스 y에 대해 분류기 p(y l xt)의 출력을 최대화하는 방향으로 노이즈 xt를 이동
- 이때 클래스 조건에 대한 Guidance의 강도를 조절하기 위해 Guidance Weight를 활용합니다.
* 이 값이 클수록 분류기의 조건을 더욱 강하게 반영하여 특정 클래스에 속하는 샘플이 생성될 확률이 높아지지만, 과도하게 높을 경우에는 왜곡이 생길 수도 있습니다.
* 이를 식으로 표현해보면 아래와 같습니다.
* 아래는 Guidance weight에 따른 생성된 결과물들이고, w가 커질수록 점차 원하는 개체가 잘 생성되는 것을 확인할 수 있습니다.
(실험적으로는 1~10사이의 weight가 가장 적절하고 이보다 클 경우 Overfitting이 되는 경우가 많다고 합니다.)
'딥러닝 with Python' 카테고리의 다른 글
[딥러닝 with Python] 디퓨전 모델(Diffusion Model) (4) : Latent Diffusion Models (0) | 2024.11.13 |
---|---|
[딥러닝 with Python] Weakly Supervised Learning 이란? (1) | 2024.11.13 |
[딥러닝 with Python] 디퓨전 모델(Diffusion Model) (2) DDIM (0) | 2024.11.11 |
[딥러닝 with Python] 디퓨전 모델 (1) (Diffusion Model) : DDPM (0) | 2024.11.10 |
[딥러닝 with Python] GAN (Generative Adversarial Network) (1) | 2024.11.09 |
댓글