GAN이란?
GAN(Generative Adversarial Network)은 합성 영상을 생성하는 데 사용되는 일종의 심층 신경망입니다. 이 아키텍처는 서로 경쟁하는(즉, 적대적인) 2개의 신경망인 생성자와 감별자로 이루어져 있습니다. 생성자는 새로운 데이터 인스턴스를 생성하는 반면, 감별자는 데이터의 진정성을 평가하고 데이터의 각 인스턴스가 훈련 데이터셋에서 나온 '진짜' 인스턴스인지, 아니면 생성자에게서 나온 '가짜' 인스턴스인지 판단합니다.
감별자가 더 이상 가짜로 판정하지 않는 진짜 합성 데이터를 생성자가 생성할 수 있을 때까지, 생성자와 감별자는 서로 경쟁하면서 훈련합니다. 훈련을 성공적으로 마치면 생성자가 생성한 데이터로 새로운 합성 데이터를 만들어서 다른 심층 신경망에 입력으로 사용할 수도 있습니다.
GAN은 얼굴의 합성 영상, 특정한 스타일의 새로운 노래, 특정한 장르의 텍스트 등 모든 데이터 유형에 대해 새로운 인스턴스를 생성하도록 학습할 수 있기 때문에 활용도가 높은 아키텍처입니다.
GAN 훈련시키기
화폐의 합성 영상을 생성하는 예제를 이용하여 GAN 아키텍처의 구체적인 구성과 기능을 살펴보겠습니다.
- 잡음이 생성자에 입력됩니다. 생성자가 아직 훈련되지 않았기 때문에 처음에는 출력이 잡음처럼 보일 것입니다.
- 훈련 데이터와 생성자의 출력이 감별자로 전송되는데, 감별자는 진짜/가짜 영상을 식별하도록 병렬로 훈련됩니다. 신경망에서 감별자 부분 역시 훈련 중이기 때문에 감별자의 출력은 처음에는 그다지 정확하지 않지만 정확도는 시간이 지나면서 향상될 것입니다.
- 피드백: 감별자의 출력은 다시 생성자와 감별자에게로 입력될 수 있고 감별자는 이 정보를 활용하여 파라미터들을 업데이트하고 정확도 개선을 시도합니다.
감별자의 목표는 진짜 데이터 세트에서 나온 인스턴스를 보았을 때 진짜인 영상을 제대로 인식하는 것입니다. 한편으로 생성자는 새로운 합성 영상을 생성하여 감별자에게 전달합니다. 생성자는 비록 영상이 가짜일지라도 진짜로 판정되기를 바라며 그렇게 합니다. 생성자의 목표는 발각되지 않고 통과할 수 있는 가짜 영상을 생성하는 것입니다. 감별자의 목표는 생성자가 제공하는 영상을 가짜로 식별하는 것입니다.
MATLAB® 및 Deep Learning Toolbox™를 이용하면 자동 미분, 사용자 지정 훈련 루프, 공유 가중치를 이용하여 GAN 신경망을 구축할 수 있습니다.
Generative Adversarial Network의 응용 분야
손글씨 생성: 아래의 영상 예제와 같이, GAN은 합성 데이터를 생성하는 데 사용됩니다. 정확한 딥러닝 모델을 훈련시키기 위해 더 많은 데이터 샘플이 필요한 작은 데이터 세트들을 보충하는 데 사용할 수 있습니다. 손글씨 감지는 그중 한 예입니다. 손글씨에 대해 심층 신경망을 훈련하려면 수천 개의 훈련 데이터 샘플이 필요하며, 그런 데이터를 직접 수집하려면 오랜 시간이 걸릴 수 있습니다.
장면 생성: 조건부 GAN은 레이블을 활용하는 특수한 유형의 GAN인 반면, 원래의 GAN은 레이블이 있다고 가정하지 않습니다. 조건부 GAN은 정보에 반드시 어떤 구조가 있어야 하는 장면 생성 등의 응용 분야에 활용할 수 있습니다. 자율주행에 관한 장면 생성의 예를 들어 보겠습니다. 도로와 인도는 반드시 건물과 하늘 아래에 있어야 합니다. 이 예제에서 이런 도로의 위치를 따르지 않는 합성 영상은 즉각 가짜로 판정되고, 자율주행 응용 분야에서 사용 불가능하다고 판정됩니다.
오디오 및 음성 응용 분야: GAN은 텍스트-음성 합성, 음성 변환 및 음성 향상 등의 응용 분야에도 활용할 수 있습니다. GAN은 기존의 신호를 단순히 보강하는데 그치지 않고 새로운 샘플을 생성할 수 있기 때문에 종래의 오디오 및 음성 구현보다 상당히 많은 장점이 있습니다. 소리 합성에 GAN을 활용하는 예로는 드럼 소리를 합성을 통해 생성하는 경우가 있습니다. 소리 합성을 위해 GAN(Generative Adversarial Network) 훈련시키기
참고: GAN은 많은 응용 분야에서 활용할 수 있는 새로운 합성 데이터를 생성하는 강력한 툴이 될 수 있지만, 실패 유형이 많이 나타날 수 있기 때문에 정확한 결과를 얻기 어려운 경우가 많습니다. MATLAB을 통해 GAN 훈련 진행 과정을 모니터링하고 흔히 발생하는 실패 유형을 식별할 수 있습니다.