Mixture Density Network

skjh314108·3일 전

AI 스터디

목록 보기
11/13


참고자료

https://publications.aston.ac.uk/id/eprint/373/1/NCRG_94_004.pdf


1. 기존 딥러닝


일반적인 회귀 신경망은 입력 벡터 x\mathbf{x}를 받아
목표 벡터 t\mathbf{t}의 각 성분에 해당하는 출력 fk(x;w)f_k(\mathbf{x};\mathbf{w})를 계산합니다.

MSE로 학습할 때의 오차 함수는 다음과 같습니다.

12∑q=1n∑k=1c[fk(xq;w)−tkq]2\frac{1}{2} \sum_{q=1}^{n}\sum_{k=1}^{c} \left[ f_k(\mathbf{x}^{q};\mathbf{w})-t_k^{q} \right]^2

데이터가 충분히 많고 모델이 데이터를 잘 표현할 수 있을 때
데이터에 대한 합을 결합확률밀도 p(t,x)p(\mathbf{t},\mathbf{x})를 이용한 적분으로 나타낼 수 있습니다.

E=lim⁡n→∞12n∑q=1n∑k=1c[fk(xq;w)−tkq]2=12∑k=1c∬[fk(x;w)−tk]2 p(t,x) dt dx\begin{aligned} E &= \lim_{n\to\infty} \frac{1}{2n}\sum_{q=1}^{n}\sum_{k=1}^{c}[f_k(\mathbf{x}^q;\mathbf{w})-t_k^q]^2 \\ &= \frac{1}{2}\sum_{k=1}^{c}\iint [f_k(\mathbf{x};\mathbf{w})-t_k]^2\, p(\mathbf{t},\mathbf{x})\,d\mathbf{t}\,d\mathbf{x} \end{aligned}

고정된 입력 x\mathbf{x}에서 이 오차를 최소화하는 출력값을 구해보면

p(t,x)=p(t∣x)p(x)p(\mathbf{t},\mathbf{x})=p(\mathbf{t}\mid\mathbf{x})p(\mathbf{x})를 이용하고 fk(x;w)f_k(\mathbf{x};\mathbf{w})에 대해 미분하면 다음과 같습니다.

∫[fk(x;w)−tk]p(t∣x)dt=0\int \left[ f_k(\mathbf{x};\mathbf{w})-t_k \right] p(\mathbf{t}\mid\mathbf{x})d\mathbf{t} =0

조건부 확률밀도의 적분값은 1입니다.
따라서 출력값은

⟨tk∣x⟩=∫tk p(t∣x) dt\langle t_k\mid\mathbf{x}\rangle = \int t_k\,p(\mathbf{t}\mid\mathbf{x})\,d\mathbf{t}

MSE로 학습한 신경망의 kk번째 출력은 입력 x\mathbf{x}가 주어졌을 때 목표값 tkt_k의 조건부 평균입니다.

하지만 하나의 입력에 대해 목표값이 여러개라면 어떻게 될까요?


2. inverse problem


어떤 과정에서는 같은 결과가 서로 다른 원인에서 나올 수도 있습니다.

이렇게 관측된 결과로부터 그 결과를 만들어 낸 원인을 추정하는 문제를 inverse problem(역문제)이라고 합니다.

결과가 같더라도 가능한 원인이 여러 개라면, 하나의 입력에 여러 목표값이 대응하게 됩니다

이제 관측된 결과를 신경망의 입력 x\mathbf{x}
추정할 원인을 목표값 t\mathbf{t}라고 두겠습니다.

어떤 입력 x0\mathbf{x}_0에 대해
서로 다른 두 목표값 t1\mathbf{t}_1, t2\mathbf{t}_2가 모두 가능하다고 하였을 때

MSE 회귀 신경망은 하나의 출력값만 예측합니다. 두 목표값이 비슷한 빈도로 나타난다면 kk번째 출력은 대략 다음과 같습니다.

⟨tk∣x0⟩≈t1,k+t2,k2\langle t_k\mid\mathbf{x}0\rangle \approx \frac{t_{1,k}+t_{2,k}}{2}

이 출력의 문제점은 출력값이 두 개의 원인 모두와 값이 달라 어느 쪽에도 해당하지 않을 수 있다는 점입니다.

이와 같은 역문제에서는 평균값 하나를 예측하는 것보다 주어진 입력에서 어떤 목표값들이 얼마나 가능한지를 나타내는 조건부 분포 p(t∣x)p(\mathbf{t}\mid\mathbf{x})를 모델링할 필요가 있습니다.

이것이 다음 절에서 살펴볼 MDN의 출발점입니다.


3. MDN


문제는 신경망이 입력 x\mathbf{x}에 대해 목표값 하나만 출력한다는 데 있습니다.

Mixture Density Network(MDN)는 목표값 하나 대신 조건부 확률밀도 p(t∣x)p(\mathbf{t}\mid\mathbf{x})를 모델링합니다. 따라서 같은 입력에서 여러 목표값이 가능한 상황도 표현할 수 있습니다.

MDN은 신경망과 혼합모형으로 구성됩니다.

신경망은 입력 x\mathbf{x}를 받아 혼합모형의 파라미터를 출력하고
혼합모형은 이 파라미터를 사용해 목표값 t\mathbf{t}의 확률밀도를 만듭니다.

가우시안 성분을 mm개 사용하면 다음과 같습니다.

∑i=1mαi(x)ϕi(t∣x)\sum_{i=1}^{m} \alpha_i(\mathbf{x}) \phi_i(\mathbf{t}\mid\mathbf{x})

ϕi(t∣x)\phi_i(\mathbf{t}\mid\mathbf{x})는 ii번째 가우시안의 확률밀도이고
αi(x)\alpha_i(\mathbf{x})는 그 성분의 혼합계수입니다. 각 성분은 입력에 따라 다음 세 가지 값을 가집니다.

αi(x)\alpha_i(\mathbf{x}): 해당 성분이 차지하는 비중

μi(x)\boldsymbol{\mu}_i(\mathbf{x}): 해당 성분의 중심

σi(x)\sigma_i(\mathbf{x}): 해당 성분의 퍼짐 정도

목표 벡터 t\mathbf{t}의 차원이 cc일 때 자료에서 사용한 가우시안 성분은 다음과 같습니다.

1(2π)c/2σi(x)cexp⁡(−∣t−μi(x)∣22σi(x)2)\frac{1}{(2\pi)^{c/2}\sigma_i(\mathbf{x})^c} \exp\left( -\frac{|\mathbf{t}-\boldsymbol{\mu}_i(\mathbf{x})|^2} {2\sigma_i(\mathbf{x})^2} \right)

혼합계수는 확률의 비중이어서 αi(x)≥0\alpha_i(\mathbf{x})\geq 0, ∑i=1mαi(x)=1\sum_{i=1}^{m}\alpha_i(\mathbf{x})=1이어야 합니다.
이를 위해 신경망의 혼합계수 출력을 softmax에 통과시킵니다.

이 구조에서는 한 입력에 대해 가능한 목표값이 두 군데에 모여 있을 때 두 가우시안의 중심을 각각의 목표값 근처에 둘 수 있습니다.

기존 MSE 회귀 모델은 두 값 사이의 평균을 하나의 답으로 출력하지만 MDN은 두 영역 모두에서 목표값이 나올 수 있음을 분포로 표현합니다.

각 영역의 비중과 퍼짐 정도도 함께 나타낼 수 있습니다.

4. software implementation


Mixture Density Network도 일반적인 신경망과 같은 방법으로 학습합니다.

신경망이 혼합분포의 파라미터를 출력하면 오차 함수가 그 파라미터와 목표값을 이용해 손실 및 출력층의 기울기를 계산합니다.
이후에는 이 기울기를 신경망에 역전파하여 가중치를 조정합니다.

MSE 회귀에서는 예측값과 목표값의 차이 제곱을 오차로 사용했습니다.

MDN은 입력 xq\mathbf{x}^{q}가 주어졌을 때 실제 목표값 tq\mathbf{t}^{q}에 모델이 얼마나 높은 확률밀도를 부여하는지 평가합니다.
qq번째 데이터의 손실은 음의 로그 가능도입니다.

Eq=−ln⁡p(tq∣xq)=−ln⁡[∑i=1mαi(xq)ϕi(tq∣xq)]E^q = -\ln p(\mathbf{t}^q|\mathbf{x}^q) = -\ln\left[\sum_{i=1}^{m}\alpha_i(\mathbf{x}^q)\phi_i(\mathbf{t}^q|\mathbf{x}^q)\right]

신경망의 출력 벡터를 zq\mathbf{z}^{q}라고 하겠습니다.
이 출력으로부터 혼합계수 αi\alpha_i 평균 μi\boldsymbol{\mu}_i 표준편차 σi\sigma_i를 계산합니다.

오차 함수는 zq\mathbf{z}^{q}와 목표값 tq\mathbf{t}^{q}를 받아 손실 EqE^q 및 출력에 대한 기울기 δq=∇zqEq\boldsymbol{\delta}^{q}=\nabla{\mathbf{z}^{q}}E^q를 반환합니다.

가중치를 조정하려면 먼저 실제 목표값 tq\mathbf{t}^{q}에 대해 각 가우시안 성분이 얼마나 기여했는지 계산합니다. 이를 ii번째 성분의 책임도라고 합니다.

αi(xq)ϕi(tq∣xq)∑j=1mαj(xq)ϕj(tq∣xq)\frac{ \alpha_i(\mathbf{x}^{q}) \phi_i(\mathbf{t}^{q}\mid\mathbf{x}^{q}) }{ \sum_{j=1}^{m} \alpha_j(\mathbf{x}^{q}) \phi_j(\mathbf{t}^{q}\mid\mathbf{x}^{q}) }

책임도를 이용하면 손실을 신경망의 출력인 혼합계수, 평균, 표준편차에 대해 미분할 수 있습니다.

이렇게 구한 출력층의 기울기를 일반적인 역전파 알고리즘과 동일하게 사용하면 됩니다.

∑j∂Eq∂zjq∂zjq∂w\sum_j \frac{\partial E^q}{\partial z_j^q} \frac{\partial z_j^q}{\partial w}
profile
인공지능, 알고리즘, ps 등을 다룹니다

0개의 댓글