GAN은 성격이 다른 두 개의 신경망인 생성자(Generator)와 판별자(Discriminator)로 구성된 네트워크이다.
생성자는 실제 데이터와 유사한 데이터를 생성하는 역할이며, 판별자는 주어진 데이터가 실제인지 가짜인지(생성된 것인지) 구별하는 역할이다.
두 네트워크가 서로 적대적인 관계(Adversarial)로서 학습을 진행하는 것이 GAN 아키텍처의 기본 개념이다.
생성자는 판별자를 속이기 위해 더욱 정교한 데이터를 생성하기 위한 학습을 진행하며, 판별자는 더 정확하게 데이터를 판별하기 위한 학습을 진행한다.
생성자 : 랜덤한 노이즈 벡터를 입력받아 실제와 유사한 데이터를 생성
판별자 : 생성자가 만든 데이터와 실제 데이터를 입력받아, 이를 구별
두 신경망은 적대적 학습을 통해 서로의 성능을 향상시키며, 결국 생성자는 판별자가 구별할 수 없을 정도로 실제와 유사한 데이터를 생성하게 된다.
GAN의 학습은 게임 이론에 기반한다.
생성자와 판별자는 적대적 학습을 통해 균형 상태를 찾아간다. 이를 내쉬 균형(Nash Equilibrium)이라고 하며, 내쉬 균형 상태에 도달한 경우 어느 한쪽도 더이상 상대방을 쉽게 이길 수 없게 된다.
이 경우, 판별자는 생성자가 생성한 데이터를 구분할 수 있는 확률이 5:5로 수렴한다. 따라서 생성자는 판별자를 완벽히 속일 수 있는 데이터를 생성하며, 판별자는 더이상 가짜와 진짜를 판별하지 못한다.
GAN의 학습을 위해선 실제 데이터, 생성된 데이터, 각 이미지에 대한 레이블(참조 레이블)이 필요하다.
여기서 말하는 참조 레이블은 판별자의 훈련을 위해 사용하는 정답을 의미하며, 실제 데이터는 1, 가짜 데이터는 0으로 설정된다.
1) 랜덤 노이즈 생성 : 생성자에게 랜덤한 노이즈 벡터를 입력
2) 가짜 이미지 생성 : 생성자는 입력받은 노이즈 벡터를 기반으로 가짜 이미지를 생성
3) 실제 및 가짜 이미지 데이터 생성 : 실제 이미지와 가짜 이미지를 적절히 섞은 데이터를 판별자에게 전달
4) 판별자 학습 : 판별자는 실제 이미지는 1로, 가짜 이미지를 0으로 구별하도록 학습
5) 생성자 학습 : 생성자는 판별자를 속이기 위해 가짜 이미지를 더욱 정교하게 생성하도록 학습
판별자를 훈련하기 위한 데이터의 비율은 어떻게 설정하느냐에 따라 달라질 수 있지만, 일반적으로 실제 이미지와 생성 이미지를 5:5 비율로 섞어 진행한다.
판별자는 실제 이미지에 대해 1에 가까운 값을, 가짜 이미지에 대해 0에 가까운 값을 출력하도록 학습된다.
판별자의 실제 이미지가 입력일 때의 손실 함수와 가짜 이미지가 입력일 때의 손실 함수가 각각 존재하며, 전체 손실 함수는 두 함수를 합친 형태이다.
1) 실제 이미지를 진짜로 판별한 경우
2) 실제 이미지를 가짜로 판별한 경우
1) 가짜 이미지를 가짜로 판별한 경우
2) 가짜 이미지를 진짜로 판별한 경우
즉, 다음과 같이 수식을 정리해볼 수 있다.
이 손실 함수를 통해 판별자는 실제 이미지를 1로, 가짜 이미지를 0으로 구별하는 능력을 최대화하는 방향으로 학습하게 된다.
생성자가 생성한 이미지가 좋은 이미지인지 아닌지를 직접적으로 학습시킬 수 없기 때문에, 판별자를 속일 수 있는 이미지를 생성하도록 학습 방향을 취하게 된다.
즉, 생성자 입장에서는 생성된 이미지에 해당하는 최종 레이블이 전부 1로 계산되도록 학습을 진행하면 된다.
생성자의 손실 함수는 판별자를 속이는 능력으로 평가한다.
생성자가 생성한 가짜 데이터 에 대해 판별자가 1에 가까운 값을 출력할수록 손실이 줄어드는 형태이다.
1) 가짜 이미지를 진짜로 판단한 경우
2) 가짜 이미지를 가짜로 판단한 경우
GAN은 생성 모델로서 활용도가 높기 때문에, 일반적으로 학습이 끝난 생성자를 여러가지 생성 모델로 활용한다.
생성자는 일반적으로 다음과 같은 분야에 활용된다.
이미지 생성 : 새로운 이미지를 생성
데이터 증강 : 학습에 활용하기에 제한된 데이터셋을 보완하기 위해 데이터를 생성
스타일 변환 : 한 이미지의 스타일을 다른 이미지로 변환하는 데 활용
판별자는 일반적으로 생성자의 성능을 평가하는 데 활용되는 데 그친다.
고품질 이미지 생성 : GAN은 매우 정교하고 현실적인 이미지를 생성할 수 있다.
다양한 응용 : 상술한 바와 같이 다양한 생성 분야에서 활용될 수 있다.
학습 불안정성 : GAN의 학습은 매우 불안정해질 수 있기 때문에, 적절한 하이퍼파라미터 설정이 필수적이다.
모드 붕괴 : 생성자는 특정 유형의 이미지만 생성이 가능할 수 있다.
손실값 모니터링의 어려움 : GAN의 손실 함수를 모니터링하는 것은 어렵기 때문에 학습 과정 추적이 어려울 수 있다.