공부한 내용 정리
생성형 모델은 데이터의 분포 p(x)를 따라한 qθ(x)를 만드는 것이 목적이다.
데이터의 분포를 따라한 분포에서 sampling을 할 수 있으면 데이터를 생성하는 것이 가능하기 때문.
에너지 기반 모델
이때 일반적인 확률 분포 qθ(x)를 확률 밀도 함수로 표현이 가능한데 qθ(x)=γθ(x)/Z(θ)라고 하는데
여기에서 γθ(x)≥0로 확률밀도 함수이다.
아래 Z(θ)=∫x′∈Xγθ(x′)dx′로 확률분포 qθ(x)를 확률의 조건인 합 1을 맞추기 위해서 전체 확률밀도 함수의 가능한 모든 output 합을 나눠주는 것이다.
그런데 이때 γθ는 ≥0의 조건이 달려 있기에 다루기 까다롭다. 그렇기에 에너지 함수라는 것이 등장하는데
에너지 함수는 다음과 같다. γθ(x)=exp(−fθ(x))로 e의 내부에 임의의 함수 fθ를 가지고 기존 γθ의 조건인 0보다 크게만드는 것을 만족시킨다..
에너지 함수를 이용해서 표현하면 다음과 같다. qθ(x)=exp(−fθ(x))/Z(θ)
이제 에너지 함수를 자유롭게 구성해서 확률분포의 모델링이 가능해졌다.
이때 energy 함수를 보면 알 수 있겠지만 에너지가 낮으면 sampling 확률이 높고 에너지가 높으면 sampling 확률이 낮다.
우도 증가?
에너지 함수를 이용한 분포에서 sampling을 어떻게 할 수 있을까?
sampling을 위해서는 학습 데이터 D={x(1),x(2),...,x(N)}인 데이터를 잘 모델링 하는 분포여야 하는데
이를 계산하기 위해서 우도(likelihood)로 표현을 한다.
이때 데이터 전체의 우도는 각 학습 데이터는 독립적이기에 각 데이터 우도의 곱으로 표현 qθ(D)=∏iqθ(x(i))
곱을 다루기 쉽게 log 우도로 표현하면 L(θ)=N1logqθ(D)=N1∑ilogqθ(x(i))로 표현이 된다.
이를 높이는 param이 우도를 최대로 하는 param이 되고 sampling을 하였을 때 학습 데이터의 분포에서 잘 생성할 수 있을 것이다.
위 우도 식에 처음 구한 에너지 함수 식을 넣으면 L(θ)=−N1∑i=1N[fθ(x(i))]−log∫x′∈Xexp(−fθ(x′))dx′이 된다.
위 식을최대화 하려면
첫번째 항의 의미는 학습 데이터 주변 energy를 낮춰서 sampling이 잘 이루어지게 되어야 하고
두번째 항의 의미는 전체 data의 분포에서는 energy를 늘려야 한다는 것이다.
경사 하강법
보통 param의 학습이 경사 하강법으로 이루어지기에 이를 θ에 대해서 미분하면 다음과 같다. ∂θ∂L(θ)=−N1∑i=1N[∂θ∂fθ(x(i))]−∂θ∂logZ(θ)=−N1∑i=1N[∂θ∂fθ(x(i))]−Z(θ)1∫−∂θ∂fθ(x)exp(−fθ(x))dx=−N1∑i=1N[∂θ∂fθ(x(i))]+Ex∼qθ(x)[∂θ∂fθ(x)]
위에서 첫번는 훈련 데이터 에너지의 기울기이고 두번째는 sampling 기댓값 x∼qθ(x)의 에너지 기울기인데
두번째 부분에서 sampling을 해야하기에 매우 계산량이 많아지고 복잡해진다.
그렇기에 score를 사용해서 진행한다.
score
log 우도 logp(x)에 대한 기울기를 score 점수라고 가정하고 s(x)를 score 함수라고 한다. s(x):=∇xlogp(x)라고 한다.
이 score를 통해서 우도가 증가하는 방향으로 data를 이동해서 생성할 수 있다.
랑주뱅 몬테카를로를 적용하면 xk:=xk−1+α∇xlogp(xk−1)+2αuk,uk∼N(0,I)
위처럼 noise uk를 추가하는 동시에 score가 증가하는 방향으로 데이터를 옮겨서 우도가 높은 즉, 데이터를 그럴듯한 분포로 맞출 수 있고 생성할 수 있게 된다.
이렇게 확률 분포 대신에 점수를 학습해서 생성 모델을 구현하는 방법이 Score based model이다.
Noise를 넣어주는 이유는 너무 극점으로 가는 것을 막기 위함과 동시에 다른 분포를 탐색할 확률을 주기 위함이다.
(한 꼭짓점으로 모이면 sampling이 수렴하는 것도 있다)
score matching
위에서 score를 통해서 데이터를 생성할 수 있음을 보였는데 그럼 score는 어떻게 학습할 수 있을까?
Explicit score matching
우선 바로 학습하는 명시적 점수 매칭을 봐보면 JESMp(θ)=21Ep(x)[∥∇xlogp(x)−sθ(x)∥2]이렇게 MSE로 바로 score model을 score와 같은 값을 가질 수 있게 학습한다.
이는 별로 설명할 것이 없다.
Implicit score matching
하지만 위에서 우리는 score를 알기가 매우 어렵다. 왜냐하면 data의 분포 ∇xlogp(x)를 알아야 하는데 이를 모르기 때문...
그렇기에 ∇xlogp(x)를 사용하지 않고 학습 목표를 설정하는데
이는 암묵적 점수 매칭으로 다음과 같이 정의가 된다.
JISMp(θ)=Ep(x)[21∥sθ(x)∥2+tr(∇xsθ(x))]
위 식인데 tr은 trace로 대각합이다.
∇xsθ(x)는 헤세 matrix로 2계도함수 matrix.
이걸 학습하면 explit을 학습하는 것과 동일한데 왜 그런걸까?
두 식의 유도는 매우 복잡한데
가정이 4가지 필요하다
p(x)가 미분 가능
Ep(x)[∣∣∇xlogp(x)∣∣2]이 유한
임의의 θ에 대하여 Ep(x)[∣∣sθ(x)∣∣2]이 유한
lim∣∣x∣∣→∞[p(x)sθ(x)]=0
이면 JESM=JISM(θ)+C1을 만족
이때 위 두 식이 만족하면 학습하는 것이 동일한데 왜냐하면 상수가 달라져도 두 함수의 최적 값은 만족하는 param은 동일할 것이기 때문
우선 explicit의 내부를 전개하면 다음과 같다. JESM(θ)=21Ep(x)[∥∇xlogp(x)−sθ(x)∥2]=∫x∈Rdp(x)[21∥∇xlogp(x)∥2+21∥sθ(x)∥2−∇xlogp(x)⊤sθ(x)]dx.
여기에서 첫번째 항은 상수이기에 C1이고 두번째 항은 implicit에도 동일하기에 그대로 두고 마지막 항이 tr(∇xsθ(x))와 동일한지만 보면 된다.
마지막항은 내적이기 때문에 다음과 같이 표기가 가능하다. ∫x∈Rd−p(x)∇xlogp(x)⊤sθ(x)dx=−∑i∫x∈Rdp(x)∂xi∂logp(x)sθ(x)idx
여기에서 sθ(x)i는 i번째 항을 의미한다.
이후 ISM의 항인 tr(∇xsθ(x))는 ∑i∫x∈Rd∂xi∂sθ(x)ip(x)dx이기 때문에
−∫x∈Rd∂xi∂p(x)sθ(x)idx=∫x∈Rd∂xi∂sθ(x)ip(x)dx가 만족하는지만 보이면 된다.
i=1일때 증명은 같이 된다. −∫x∈Rd∂x1∂p(x)sθ(x;θ)1dx=−∫x2:d∈Rd−1[∫x1∈R∂x1∂p(x)sθ(x;θ)1dx1]dx2:d=−∫x2:d∈Rd−1[lima→∞,b→−∞[p(a,x2:d)sθ(a,x2:d)1−p(b,x2:d)sθ(b,x2:d)1]−∫x1∈R∂x1∂sθ(x;θ)1p(x)dx1]dx2:d=−∫x2:d∈Rd−1[0−0−∫x1∈R∂x1∂sθ(x;θ)1p(x)dx1]dx2:d=∫x∈Rd∂x1∂sθ(x;θ)1p(x)dx.
내부 증명은 부분적분으로 이루어진다.
증명 끝.
denoising score matching
디노이징은 x~=x+ϵ,ϵ∼N(0,σ2I)인 x~의 분포를 가지고 score를 학습하고 matching을 진행하는 것.
위에서 정리하면 pσ(x~∣x)=N(x~;x,σ2I)이다.
이때의 score은 다음과 같이 학습이 되는데 JESMpσ(θ)=21Epσ(x~)[∥∇x~logpσ(x~)−sθ(x~,σ)∥2]
역시 ESM은 복잡하다.
ISM은 이전과 동일하게 유도가 됨으로 생략
DSM은 다음과 같이 나온다. JDSMpσ(θ)=21Epσ(x~∣x)p(x)[∥∇x~logpσ(x~∣x)−sθ(x~,σ)∥2]
여기에서 ∇x~logpσ(x~∣x)=∇x~log((2π)d/2σd1exp(−2σ21∥x~−x∥2))=∇x~log(2π)d/2σd1+∇x~(−2σ21∥x~−x∥2)=0−σ21(x~−x)=−σ21ϵ
위와 같이 되어서 JDSMpσ(θ)=21Eϵ∼N(0,σ2I),x∼p(x)[∥∥∥−σ21ϵ−sθ(x+ϵ,σ)∥∥∥2]
이렇게 DSM은 noise를 맞추는 문제가 된다.
DSM 증명
역시 ESM을 풀면 다음과 같고 JESMpσ(θ)=21Epσ(x~)[∥∇x~logpσ(x~)−sθ(x~,σ)∥2]=21Epσ(x~)[∥sθ(x~,σ)∥2]−Epσ(x~)[⟨sθ(x~,σ),∇x~logpσ(x~)⟩]+C2
(이떄 <>기호는 내적)
DSM을 풀면 다음과 같다. JDSMpσ(θ)=21Epσ(x~∣x)p(x)[∥∇x~logpσ(x~∣x)−sθ(x~,σ)∥2]=21Epσ(x~)[∥sθ(x~,σ)∥2]−Epσ(x~,x)[⟨sθ(x~,σ),∇x~logpσ(x~∣x)⟩]+C3
여기에서 첫항은 동일하니 제외하고 두번째 항이 동일한지만 보면 된다.
이때 Epσ(x~)[⟨sθ(x~,σ),∇x~logpσ(x~)⟩]를 풀면 다음과 같은데 =∫x~pσ(x~)⟨sθ(x~,σ),∇x~logpσ(x~)⟩dx~
의 내부 ∇x~logpσ(x~)=pσ(x~)∇x~pσ(x~)그렇기에
Epσ(x~)[⟨sθ(x~,σ),∇x~logpσ(x~)⟩]=∫x~⟨sθ(x~,σ),∇x~pσ(x~)⟩dx~가 된다.
이후 내부 미분이 ∇x~pσ(x~)=∇x~∫xp(x)pσ(x~∣x)dx=∫xp(x)∇x~pσ(x~∣x)dx=∫xp(x)pσ(x~∣x)∇x~logpσ(x~∣x)dx
를 만족하게 되어 이를 대입하면
S(θ)=∫x~⟨sθ(x~,σ),∫xp(x)pσ(x~∣x)∇x~logpσ(x~∣x)dx⟩dx~=∫x~∫xp(x)pσ(x~∣x)⟨sθ(x~,σ),∇x~logpσ(x~∣x)⟩dxdx~=∫x~∫xpσ(x~,x)⟨sθ(x~,σ),∇x~logpσ(x~∣x)⟩dxdx~=Epσ(x~,x)[⟨sθ(x~,σ),∇x~logpσ(x~∣x)⟩]가 나오게 된다.
증명 끝.
정리
결국 score based model은 우도의 미분 값 즉,score를 학습을 하고 이를 통해서 data를 우도가 높은 곳으로 이동시켜 생성을 한다.
이를 위해서 score를 학습하는 방법으 explicit, implicit이 있으며 noise를 넣은 data로부터 noise를 예측하는 식으로 진행을 하는 denoising score matching을 알아보았다.