Search
Duplicate

AI/ Conditional Model

Conditional Model

생성 모델에서 생성을 제어하는 가장 단순한 방법은 조건부 likelihood p(xc)p(\bold{x}|\bold{c})를 최대화하기 위해 (c,x)(\bold{c},\bold{x}) 쌍을 학습하는 것이다.
조건 신호 c\bold{c}가 스칼라이면(예: 클래스 라벨), 이를 임베딩 벡터에 매핑한 다음 공간 추가를 통해 네트워크를 통합하거나 이것을 사용하여 group normalization 레이어를 모듈화할 수 있다. 입력 c\bold{c}가 또 다른 이미지면 추가 채널 집합인 xt\bold{x}_t에 간단히 연결할 수 있다. 입력 c\bold{c}가 텍스트 프롬프트이면 이를 임베딩한 다음 공간 추가나 cross-attention을 사용할 수 있다.
아래 conditional에서 c\bold{c}는 text 뿐만 아니라 image나 기타 다른 형태의 데이터일 수 있다. Stable Diffusion에서는 c\bold{c}가 이미지였으면 이미지 인코더(VAE)를 이용하고 c\bold{c}가 텍스트 였으면 텍스트 인코더(CLIP)을 이용해서 prior를 생성하면, 모델은 애초에 c\bold{c}가 이미지였는지 텍스트였는지를 구분하지 않고 주어진 prior c\bold{c}를 이용해서 이미지를 생성한다. c\bold{c}가 이미지인 경우는 inpainting이나 coloring, 오염된 이미지를 깨끗한 이미지로 변환하는 등의 image-to-image 작업을 수행할 수 있다.

Classifier guidance

conditional diffusion 모델의 한 가지 문제는 수행하기를 원하는 각 종류의 조건에 대해 모델을 재학습 해야 한다는 것이다. classifier guidance라고 알려진 대안 접근은 pϕ(cx)p_{\boldsymbol{\phi}}(\bold{c}|\bold{x}) 형식의 사전 학습된 판별 분류기를 활용하여 생성 절차를 제어한다. 아이디어는 다음과 같다. 우선 베이즈 규칙을 사용하여 다음과 같이 작성한다.
logp(xc)=logp(cx)+logp(x)logp(c)\log p(\bold{x}|\bold{c}) = \log p(\bold{c}|\bold{x}) + \log p(\bold{x}) - \log p(\bold{c})
이것에 대한 score 함수는 다음이 된다. (logp(c)\log p(\bold{c})x\bold{x}의 함수가 아니므로 사라짐)
xlogp(xc)=xlogp(x)+xlogp(cx)\nabla_{\bold{x}}\log p(\bold{x}|\bold{c}) = \nabla_\bold{x} \log p(\bold{x}) + \nabla_\bold{x} \log p(\bold{c}|\bold{x})
이제 unconditional score 대신 이 conditional score를 사용하여 샘플을 생성할 수 있다. 또한 조건부 신호의 factor w>1w > 1로 스케일링하여 영향을 증폭 할 수 있다.
xlogp(xc)=xlogp(x)+wxlogp(cx)\nabla_{\bold{x}}\log p(\bold{x}|\bold{c}) = \nabla_\bold{x} \log p(\bold{x}) +w \nabla_\bold{x} \log p(\bold{c}|\bold{x})
실제에서 다음에서 샘플을 생성할 수 있다.
xt1N(μ+wΣg,Σ)μ=μθ(xt,t)Σ=Σθ(xt,t)g=xtlogpϕ(cxt)\begin{aligned} \bold{x}_{t-1} &\sim \mathcal{N}(\boldsymbol{\mu} + w\boldsymbol{\Sigma}\bold{g},\boldsymbol{\Sigma})\\ \boldsymbol{\mu} &= \boldsymbol{\mu}_{\boldsymbol{\theta}}(\bold{x}_t,t)\\ \boldsymbol{\Sigma} &= \boldsymbol{\Sigma}_{\boldsymbol{\theta}}(\bold{x}_t,t)\\\bold{g} &= \nabla_{\bold{x}_t} \log p_{\boldsymbol{\phi}}(\bold{c}|\bold{x}_t) \end{aligned}

Classifier-free guidance

불행히 p(cxt)p(\bold{c}|\bold{x}_t)는 입력 xt\bold{x}_t의 많은 디테일을 무시할 수 있는 판별 모델이다. 따라서 xtlogp(cxt)\nabla_{\bold{x}_t}\log p(\bold{c}|\bold{x}_t)에 의해 지정된 방향을 따라 최적화하면 adversarial 이미지를 생성할 때 발생하는 것과 유사하게 빈곤한 결과를 만들 수 있다. 게다가 xt\bold{x}_t의 블러 수준이 다르기 때문에 각 시간 단계마다 분류기를 훈련해야 한다.
생성 모델에서 분류기를 유도하는 classifier-free guidance라 부르는 기법이 제안 되었다. 이것은 p(cx)=p(xc)p(c)p(x)p(\bold{c}|\bold{x}) = {p(\bold{x}|\bold{c})p(\bold{c}) \over p(\bold{x})}를 사용하여 다음을 얻는다.
logp(cx)=logp(xc)+logp(c)logp(x)\log p(\bold{c}|\bold{x}) = \log p(\bold{x}|\bold{c}) + \log p(\bold{c}) - \log p(\bold{x})
이것을 위해 2개 생성 모델 즉 p(xc)p(\bold{x}|\bold{c})p(x)p(\bold{x})을 학습해야 한다. 그러나 실제에서 이것에 대해 동일한 모델을 사용할 수 있고, unconditional 경우를 나타내기 위해 간단하게 c=\bold{c} = \empty로 설정할 수 있다. 그 다음 이 암시적 분류기를 사용하여 다음의 수정된 score 함수를 얻을 수 있다.
x[logp(xc)+wlogp(cx)]=x[logp(xc)+w(logp(xc)logp(x))]=x[(1+w)logp(xc)wlogp(x)]\begin{aligned} \nabla_\bold{x}[\log p(\bold{x}|\bold{c}) + w\log p(\bold{c}|\bold{x})] &= \nabla_\bold{x}[\log p(\bold{x}|\bold{c}) + w(\log p(\bold{x}|\bold{c}) - \log p(\bold{x}))] \\ &= \nabla_\bold{x} [(1+w)\log p(\bold{x}|\bold{c}) - w \log p(\bold{x})] \end{aligned}
일반적으로 guidance 가중치 ww가 클수록 더 나은 image-text alignment를 이끌지만 이미지의 fidelity(충실도)는 낮아진다.
guidance 가중치에 의한 train-test mismatch는 생성 모델에서 학습 단계와 테스트 단계 사이의 설정이 다를 때 발생하는 문제를 지칭한다. 이는 일반적으로 학습 단계에서 w=0w = 0 또는 낮은 가중치를 사용하여 데이터의 자연스러운 분포를 학습하게 하지만, 테스트 단계에서는 높은 ww를 설정하여 학습된 모델이 특정 조건 c\bold{c}에 더 의존하여 이미지를 생성하도록 하기 때문이다. 이를 해결하기 위한 2가지 thresholding 전략이 유도되었다.
static thresholding: 학습 데이터 x\bold{x}[1,1][-1,1]의 범위 내에 존재한다면 예측을 [1,1][-1,1]로 clip 한다.
dynamic thresholding: 각 샘플링 단계에서 ss를 특정한 백분위수 절대 픽셀 값으로 계산. s>1s > 1이면 예측을 [s,s][-s, s]로 clip하고 ss로 나눈다.

참고