GAN의 생성기 부분은 판별자의 피드백을 통합하여 가짜 데이터를 만드는 방법을 학습합니다. 판별자는 출력을 진짜로 분류하는 방법을 학습합니다.
생성기 학습에는 분류기 학습에 비해 생성기와 분류기 간의 긴밀한 통합이 필요합니다. 생성기를 학습시키는 GAN 부분에는 다음이 포함됩니다.
- 무작위 입력
- 무작위 입력을 데이터 인스턴스로 변환하는 생성기 네트워크
- 생성된 데이터를 분류하는 분류자 네트워크
- 구분자 출력
- 생성기 손실(Generator가 속임수를 사용하지 못하는 경우 페널티)
그림 1: 생성기 학습의 역전파
무작위 입력
신경망에는 일종의 입력이 필요합니다. 일반적으로 분류하거나 예측을 수행하고자 하는 인스턴스 등 실행하려는 데이터가 입력됩니다. 그런데 완전히 새로운 데이터 인스턴스를 출력하는 네트워크의 입력으로 무엇을 사용해야 할까요?
가장 기본적인 형식의 GAN은 임의의 노이즈를 입력으로 사용합니다. 그러면 생성기가 이 노이즈를 유의미한 출력으로 변환합니다. 노이즈를 도입하면 GAN을 통해 광범위한 데이터를 생성하고 타겟 분포의 여러 위치에서 샘플링할 수 있습니다.
실험 결과, 노이즈의 분포가 중요하지 않으므로 균일한 분포와 같이 샘플링하기 쉬운 것을 선택할 수 있습니다. 편의를 위해 노이즈가 샘플링되는 공간은 일반적으로 출력 공간의 차원보다 작습니다.
분류기를 사용하여 생성기 학습
신경망을 학습시키기 위해 출력의 오류나 손실을 줄이기 위해 순 가중치를 변경합니다. 하지만 GAN에서 생성기는 영향을 주려는 손실에 직접 연결되지 않습니다. 생성기가 판별자 네트에 입력되고 분류기가 영향을 미치려고 하는 출력을 생성합니다. 생성기 손실은 생성기가 가짜로 분류하는 샘플 생성을 위해 생성기에 페널티를 적용합니다.
이러한 추가 네트워크 청크는 역전파에 포함되어야 합니다. 역전파는 출력에 대한 가중치의 영향을 계산하여 올바른 방향으로 각 가중치를 조정합니다. 가중치를 변경하면 출력이 어떻게 달라지는지 보여줍니다. 하지만 생성기 가중치의 영향은 해당 생성기가 피드하는 구분자 가중치의 영향에 따라 다릅니다. 따라서 역전파가 출력에서 시작해서 구분자를 통해 생성기로 다시 흐릅니다.
이와 동시에 생성기 학습 중에 구분자를 변경하지 않아야 합니다. 움직이는 타겟을 맞추려고 하면 생성기가 더 어려운 문제를 겪게 됩니다.
따라서 다음 절차를 통해 생성기를 학습시킵니다.
- 샘플 노이즈입니다.
- 샘플링된 무작위 노이즈에서 생성기 출력을 생성합니다.
- 생성기 출력의 구분자 '실제' 또는 '가짜' 분류를 가져옵니다.
- 구분자 분류에서 손실 계산
- 분류기와 생성기를 모두 역전파하여 경사를 얻습니다.
- 경사를 사용하여 생성기 가중치만 변경합니다.
이는 발전기 학습의 한 반복입니다. 다음 섹션에서는 생성기와 분류기의 학습을 모두 처리하는 방법을 알아봅니다.