2020. 11. 27. 19:52ㆍ카테고리 없음
GAN을 에너지 기반 관점에서 바라보며, 이를 위해 GAN과 Auto-encoder를 결합한 네트워크 구조를 제안한다.
주어진 데이터에 대해서 data manifold 공간 상에 포함되는 경우에 낮은 energy, 그 외에는 경우인 contrastive sample에 높은 energy를 배정할 수 있는 "energy function" (또는 "contrast function")를 Auto-encoder 구조를 가진 Discriminator로 두어 adversarial training을 수행한다.
Network Architecture
왜 Discriminator의 구조를 Auto-Encoder로 두어야하는가?
Energy is Reconstruction Loss: ||Dec(Enc(x)) -x||.
- Real: Low reconstruction loss (low energy)
- Fake: High reconstruction loss (high energy)
주어진 데이터에 대해 Real/Fake를 구별하는 하나의 scalar 값을 내는 것보다 더 많은 정보를 통해 판별할 수 있다.
복원 오차 기반의 방법은 discriminator에게 더 다양한 target을 제공한다.
Auto-encoder는 energy 기반 모델에서 고전적으로 사용 되었던 모델이기 때문에 자연스러운 모델 선정이다.
특정 regularization 항과 함께 학습할 경우, 지도 학습 또는 negative sample이 없어도 target distribution 학습이 가능하다.
- Binary logistic loss는 불가능한 방식
EBGAN
- The regularizer (generator) is fully trainable
- The adversarial training paradigm enables a direct interaction between the duality of producing contrastive sample and learning the energy sample
Connection to the regularized auto-encoders
- Auto-Encoder가 identity 함수를 배우는 흔한 문제가 있음.
- 모든 공간에 대해서 zero-energy를 할당하는 것과 동일
- solution: "By regularizing the latent representions"
Loss Function: Reconstruction Loss + A Simple Hinge Loss
여기서 주목할 부분은 hinge loss로 정의된 max(0, m - D(G(z))) 이다. 어떤 양수 margin m에 대해서 reconstruction loss가 m보다 작은 경우에 대해서만 gradient를 갖는다.
The choice of value m
- m being overly large: training instability/difficulty
- m being too small: prone to the mode-dropping problem
Generator가 데이터 분포를 동일하게 만들 수 있다면, D()의 값이 0과 m 사이의 값을 갖는다.
semi-supervised learning에 적용할 때에는 m의 값을 점진적으로 낮추어 가는 방법이 성능 향상에 매우 효과적이었다. 고정된 margin보다 학습에 따라 margin을 작게 변화시키는 게 중요하다. 비슷하게 고정된 margin을 사용하지 않는다는 관점에서 EBGAN을 발전시키면서 제안된 논문이 아래 Margin Adaptation GAN (MAGAN)이다.
Repelling Regularizer
- mode collapse를 방지 하기 위해 Pulling-away Term를 제안 (minibatch discrimination과 유사한 아이디어)
- Generator의 loss term에 추가된 항
- S는 Encoder의 출력 값으로 주어진 입력 데이터에 대한 중요한 특징 값만을 압축.
- Euclidean distance가 아닌 Cosine similarity를 사용
- to make the term bounded below
- to make the term invariant to scale
def pullaway_loss(self, embeddings):
norm = torch.norm(embeddings, 1)
normalized_embeddings = embeddings / norm
similarity = torch.matmul(normalized_embeddings, normalized_embeddings.transpose(1, 0)) ** 2
batch_size = embeddings.size()[0]
pt_loss = (torch.sum(similarity) - batch_size) / (batch_size * (batch_size - 1))
return pt_loss
Thoughts
- hinge loss가 이상한 것 같다... -> Margin Adaptation GAN에서 dynamic margin을 제안.
- Boundary Equilibrium GAN을 같이 보면 좋을 것 같다.