Generative Adversarial Network
적대적 생성 네트워크?
한마디로 생성기 Generator 와 판별기 Discriminator 가 서로 배틀을 하며 서로의 능력을키워가는….?
뭐 이런 네트워크다.
들어보면 이게 뭔가 하겠지만 막상 내부구조를보면 아 이런거구나 하는 느낌이 오는?
일단 봅시다
Generator 는 1차원벡터인 Noise(균등분포로 랜덤생성)를 입력받아 해당 이미지를 출력하고 Discriminator는 이미지를 입력받아 그것이 진짜인지 가짜인지 여부를 Sigmoid로 출력한다
간단히하자면 Generator에 노이즈를 입력해서 만든 Fake Image 를 Discriminator에 넣고 이것의 결과가 0이되도록 , 그리고 실제 이미지를 Discriminator 에 넣고 이것의 결과는 1이 되도록 학습시키는것이다.
이 학습이 반복되면 Generator는 점점 실제에 가까운 이미지를 생성해내게 되고 Discriminator는 두 그림의 차이를 점점더 세밀하게 찾아내게 된다. 하지만 점점 가짜 이미지는 실제 이미지와 유사해지고 결국은 판별을 못하게 되는것이다.
궁극적 목표는 바로 이 Discriminator 가 가짜 이미지와 진짜 이미지를 판별할 능력이 0.5 (찍는것과 동일)로 수렴하게 만드는것!
실제 이 방식이 위와같은 수렴을 하게 만든다는것도 증명을 해놨는데 수식이 어렵다. 나중에 시간나면 봐야지… 생각보다 구조는 간단하다 문제는 엄청난수의 하이퍼파라미터들에 정확한 값을 넣지않으면 학습이 잘 되지않는다……
Deep Convolution GAN
이름만 봐선 뭔지…
위에 GAN의경우 불안정함을 많이 보였다고 한다. 실제로 해봐도 진짜 학습하기 어렵… 이것의 안정화를 위해 나온 방식이라 보면되는데 현재 대부분 모델은 대부분 다 이것을 기반으로 한다고 한다.
자 그럼 살펴보자.
일단 특징?
어떤 상황에서도 정말 안정적으로 학습이됨.
생성된 벡터가 산술연산이 가능
필터 시각화 가능
이미지 분류 성능이 매우 높음
외워서 만든 이미지가 아님을 보여줘야함 latent space 에서 움직일때 변화가 부드러워야함
아키텍쳐 가이드라인
Maxpooling 을 제거하여 모두 미분가능하게 변화
[http://jaejunyoo.blogspot.com/]