본문 바로가기
딥러닝 with Python

[딥러닝 with Python] 디퓨전 모델(Diffusion Model) (3) / Classifier Guidance

by CodeCrafter 2024. 11. 12.
반응형

 

이번에 알아볼 내용은 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이 되는 경우가 많다고 합니다.)

 

 

반응형

댓글