검수요청.png검수요청.png

생성대립신경망

해시넷
sosodam (토론 | 기여)님의 2020년 8월 13일 (목) 16:33 판
이동: 둘러보기, 검색

생성대립신경망(generative adversarial network)은 이안 굿펠로우(Ian Goodfellow)와 그의 동료들이 2014년에 고안한 머신러닝 프레임워크의 한 종류이다. 게임 이론의 관점에서 두 개의 신경망은 게임에서 서로 경쟁한다. 훈련 세트가 주어지면, 이 기술은 훈련 세트와 동일한 통계로 새로운 데이터를 생성하는 법을 배운다. 생성대립신경망은 원래 비지도학습의 생성모델로 제안되었지만, 준 지도 학습과 지도학습강화학습에도 유용한 것으로 입증되었다.

개요

생성 네트워크는 후보들을 생성하는 반면 차별적 네트워크는 후보들을 평가한다. 콘테스트는 데이터 배포 측면에서 운영된다. 전형적으로 생성 네트워크는 잠재된 공간으로부터 관심의 데이터 분포로 매핑하는 방법을 배우는 반면, 차별적 네트워크는 생성자에 의해 생산된 후보들을 실제 데이터 분포와 구별한다. 생성 네트워크의 교육 목표는 차별적 네트워크의 오류율을 높이는 것이다. 즉, 판별자가 종합하지 않는다고 생각하는 새로운 후보를 생산하여 판별자 네트워크의 오류율을 높이는 것이다. 알려진 데이터 집합은 판별자의 초기 훈련 데이터 역할을 한다. 훈련에는 허용 가능한 정확도에 도달할 때까지 훈련 데이터 세트의 샘플을 제공하는 것이 포함된다. 생성자는 그것이 판별자를 속이는 데 성공하는지 여부에 따라 훈련한다. 일반적으로 생성자는 사전 정의된 잠재 공간(예: 다변량 정규 분포)에서 샘플링되는 랜덤화된 입력으로 시드된다. 그 후 생성자에 의해 합성된 후보들을 판별자에 의해 평가한다. 역전파(Backpropagation)를 두 네트워크 모두에 적용하여 생성자가 더 나은 이미지를 생성하는 반면, 판별자는 합성 이미지에 플래그를 지정하는 데 더 능숙해진다. 생성자는 전형적으로 디콘볼루션(deconvolutional) 신경망이며, 판별자는 경동신경망이다. 생성대립신경망은 입력 데이터에서 전체 모드를 누락하여 제대로 일반화하지 못하는 모드 붕괴를 겪는 경우가 많다. 예를 들어, 각 자릿수의 많은 표본을 포함하는 MNIST 데이터 집합에 대해 훈련된 생성대립신경망은 그럼에도 불구하고 소심하게 출력에서 자릿수의 부분집합을 생략할 수 있다. 어떤 연구자들은 근본적인 문제를 누락의 패턴을 알아차리지 못하는 약한 차별적 네트워크로 인식하는 반면, 다른 연구자들은 객관적 기능의 잘못된 선택에 책임을 전가한다.[1]

역사

생성대립신경망에 가장 직접적인 영감을 준 것은 소음 대비 추정치로, 굿펠로우(Goodfellow)가 박사 과정 2010년부터 2014년 동안 생성대립신경망과 동일한 손실 기능을 사용하며 연구한 것이다. 다른 사람들도 비슷한 생각을 가지고 있었지만 비슷하게 발전시키지는 않았다. 적대적 네트워크와 관련된 아이디어는 올리 니이미탈로(Olli Niemitalo)가 2010년 블로그 포스트에 게재했다. 하지만 이러한 생각은 결코 구현되지 않았고 발전기에 확률성을 포함하지 않았기 때문에 생성 모델이 아니었다. 이는 현재 조건부 생성대립신경망으로 알려져 있다. 2013년에 리(Li), 고치(Gauci), 그로스(Gross)에 의해 동물 행동을 모형화하는 데에 생성대립신경망과 유사한 아이디어가 사용되었다. 적대적 기계학습은 생성 모델링 외에 다른 용도가 있으며 신경 네트워크 이외의 모델에 적용할 수 있다. 신경망에 기초한 대립적 학습은 2006년에 미니마이저 정책, 제어기 정책 및 최대화 정책인 교란(suppression) 사이의 반복을 교대로 게임 이론적 의미에서 강력한 제어기를 훈련시키기 위해 사용되었다.

2017년에는 화소정확도보다는 사실적인 질감에 초점을 맞춘 영상향상에 생성대립신경망을 사용했고, 높은 확대율에서 화질을 더 높였다. 또한 2017년에 생성대립신경망의 기술을 이용해 처음으로 사람의 얼굴이 제작되었다. 그리고 이는 2018년 2월 그랜드팔레에서 전시되었다. 2019년 스타일지에이엔(StyleGAN)에서 제작한 얼굴은 딥 페이크와 비교를 이끌어내었다. 생성대립신경망 기술은 2017년부터 독특하고 호소력 있는 추상화를 제작할 수 있는 문턱을 넘어 '창의적 네트워크'로 불린 새로운 구현이 나타나면서 미술계에서 존재감을 드러내기 시작했다. 2018년 그림 에드몽 드 벨라미(Edmond de Belamy)를 제작하기 위해 생성대립신경망 시스템을 사용했는데, 이 그림은 미화 43만 2,500달러에 팔리게 되었다. 오리지널 창의적 네트워크 팀원들의 2019년 초 기사에서는 이 시스템과 함께 추가적인 진전에 대해 논의했으며, 인공지능이 가능한 예술에 대한 전반적인 전망을 고려했다.

2019년 5월 삼성 연구진은 사람의 사진 한 장만으로 그 사람이 말하는 영상을 제작하는 생성대립신경망 기반 시스템을 시연했다. 2019년 8월에는 가사와 신경 멜로디 생성을 위해 조건부 생성대립신경망 장단기 메모리를 이용한 각각 1만 2,197곡의 악기 디지털 인터페이스(MIDI) 곡으로 구성된 대규모 데이터세트가 만들어졌다. 2020년 5월 엔비디아(Nvidia) 연구진이 팩맨 게임을 단순히 보는 것만으로도 재현하는 인공지능 시스템을 개발했다.

작동 원리

생성 대립 신경망

생성대립신경망이라는 이름에서 알 수 있듯이 생성자는 실제처럼 보이는 이미지를 생성하는데 사용되고, 판별자는 어느 것이 가짜인지 식별한다. 생성자가 판별자를 속이기 위해 노력하는 반면, 다른 판별자는 속지 않기 위해 노력하며 끊임없는 싸움을 벌이고 있다. 최상의 이미지를 생성하려면 매우 우수한 생성자와 판별자가 필요하다. 생성자가 부족하면 판별자를 속일 수 없고 모델이 수렴하지 않기 때문이다. 만약 판별자가 나쁘다면 말이 되지 않는 이미지들도 분류되어, 모델은 결코 훈련되지 않을뿐더러 원하는 출력을 생산하지 못하게 된다. 입력과 무작위 노이즈는 가우스 분포일 수 있으며, 값은 이 분포로부터 샘플링되어 생성자 네트워크에 공급되고 영상이 생성된다. 생성된 이미지는 판별자에 의해 실제 이미지와 비교되며, 주어진 이미지가 가짜인지 진짜인지 식별하려고 한다.

손실 함수

 

생성대립신경망은 게임 이데올로기적 접근법을 취하기 때문에 객관적인 기능은 미니맥스(minimax) 함수로 표현된다. 판별자는 목표 함수를 최대화하려고 노력하므로 목표 함수에 대해 기울기 상승(gradient ascent)을 수행할 수 있다. 생성자는 목표 기능을 최소화하려고 하므로 목표 기능에 대해 기울기 강하를 수행할 수 있다. 그러므로 경사로 상승과 하강 사이를 교대하여 네트워크를 훈련할 수 있는 것이다. 위의 식에서 각각이 의미하는 바는 다음과 같다.

  • : 실제 데이터 인스턴스 가 실제일 가능성에 대한 판별자의 추정치다.
  • : 모든 실제 데이터 인스턴스에 대해 예상되는 값이다.
  • : 노이즈가 주어졌을 때 제너레이터의 출력이다.
  • : 가짜 인스턴스가 진짜일 확률을 판별자가 추정하는 것이다.
  • : 생성자에 대한 모든 임의 입력에 대한 예상 값이다.
 
 

그러나 적용했을 때 생성자 목표 함수의 최적화가 잘 되지 않는다는 것이 관찰되는데, 이는 샘플이 생성되었을 때 모델이 구배에서 배우기를 원하지만 구배는 상대적으로 평평하기 때문이다. 이것은 모델이 배우는 것을 어렵게 만든다. 따라서 생성자 목표 함수는 아래와 같이 변경된다.

 

생성대립신경망은 판별자가 정확할 가능성을 최소화하는 대신 판별자가 틀릴 가능성을 최대화한다. 따라서 이 목표 기능에 따라 발전기에 경사도를 상승시킨다.[2]

와세르슈타인 손실

기본적으로 텐서플로우 생성대립신경망은 와세르슈타인 손실(Wasserstein loss)을 사용한다. 이 손실 함수는 판별자가 실제로 인스턴스를 분류하지 않는 생성대립신경망 체계('Wasserstein GAN' 또는 'WGAN')의 변경에 따라 달라진다. 또한 각 인스턴스에 대해 숫자를 출력한다. 이 숫자는 1보다 작거나 0보다 클 필요는 없으므로, 인스턴스가 진짜인지 가짜인지를 결정하기 위한 임계값으로 0.5를 사용할 수는 없다. 판별자 훈련은 가짜 사례보다 실제 사례를 위해 출력을 더 크게 만들려고 할 뿐이다. 진짜와 가짜를 구분할 수 없기 때문에 WGAN 판별자는 사실상 '차별주의자'가 아닌 '비판자'로 불린다. 이러한 구별은 이론적으로 중요하지만, 실무적 목적상 손실 함수에 대한 입력은 확률일 필요가 없다는 것을 인정하는 것으로 취급할 수 있다. 손실 기능 자체는 다음과 같이 간단하다.

  • 비평가 손실

판별자는 이 기능을 최대화하려고 한다. 즉, 실제 사례에서의 생산량과 가짜 사례에서의 생산량의 차이를 최대화하려고 한다.

  • 생성자 손실

발전기는 이 기능을 최대화하려고 한다. 즉, 가짜 사례에 대해 판별자의 산출량을 극대화하려고 한다. 각각이 의미하는 바는 다음과 같다.

  • : 비평가들의 실례를 들어 산출한 것이다.
  • : 노이즈 z가 주어졌을 때 제너레이터의 출력이다.
  • : 비평가들의 가짜 예에 대한 산출물이다.
  • 비평가 의 산출물은 반드시 1과 0 사이일 필요는 없다.
  • 공식은 실제 분포와 생성된 분포 사이의 지구 이동 거리에서 도출된다.

와세슈타인 생성대립신경망은 미니맥스 기반 생성대립신경망보다 고착에 덜 취약하며, 기울기 소멸에 따른 문제를 피할 수 있다는 이점이 있다. 또한 지구 이동 거리에는 확률 분포 공간에서의 거리 측도라는 진정한 측정 지표라는 이점이 있다. 교차 엔트로피는 이런 의미에서 미터법이 아니다.

구조

생성대립신경망은 생성자와 판별자로 구성되어 있다. 생성자는 타당한 데이터를 생성하는 방법을 학습한다. 생성된 예는 판별자에게 부정적인 훈련 예가 된다. 반면, 판별자는 생성자의 가짜 데이터와 실제 데이터를 구별하는 법을 배운다. 판별자는 신뢰할 수 없는 결과를 생산한 생성자에 불이익을 준다. 훈련이 시작되면 생성자는 명백히 가짜 데이터를 생산하고, 판별자는 그것이 가짜라는 것을 빨리 알 수 있다. 훈련이 진행됨에 따라 생성자는 판별자를 속일 수있는 출력을 생성하는 데 더 가까워진다. 마지막으로 발전기 훈련이 잘 되면 진짜와 가짜의 차이를 구분하는 것이 더 어려워진다. 가짜 데이터를 진짜 데이터로 분류하기 시작해 정확도가 떨어진다. 생성자와 판별자 모두 신경망이다. 생성자 출력은 판별자 입력에 직접 연결된다. 역전파를 통해 판별자의 분류는 생성자가 자신의 가중치를 업데이트하는 데 사용하는 신호를 제공한다.

판별자

생성대립신경망의 판별자는 단순히 분류자일 뿐이다. 실제 데이터와 발전기에 의해 생성된 데이터를 구별하려고 한다. 판별자는 분류하는 데이터 유형에 적합한 네트워크 아키텍처를 사용할 수 있다.

생성대립신경망 구조.png
판별자 훈련 데이터

판별자의 훈련 데이터는 다음 두 가지 출처에서 나온다.

  • 실제 데이터 인스턴스: 판별자는 훈련 중에 실제 사람 사진과 같은 실제 데이터 인스턴스를 사용한다. 그리고 이러한 사례를 긍정적인 예로 사용한다.
  • 생성자가 생성한 가짜 데이터 인스턴스: 판별자는 이를 훈련 중 부정적인 예로서 사용한다.

위의 그림에서 두 개의 샘플 상자는 판별자에게 공급되는 두 개의 데이터 소스를 나타낸다. 판별자 훈련 중에는 생성자가 훈련하지 않는다. 이는 무게는 일정하게 유지되는 반면 판별자가 훈련할 수 있는 예를 만들어낸다.

판별자 훈련

판별자는 두 개의 손실 기능에 연결된다. 판별자 훈련 중, 판별자는 생성자 손실을 무시하고 판별자 손실만 사용한다. 또한 다음 절에서 설명한 것과 같이 생성자 훈련 중에 제너레이터 손실을 사용한다.

  1. 판별자는 실제 데이터와 생성자의 가짜 데이터를 모두 분류한다.
  2. 판별자 손실은 판별자가 실례를 가짜로 오인하거나 실례를 가짜로 오인하여 불이익을 준다.
  3. 판별자는 판별자 네트워크를 통해 판별자 손실로부터 역제안하여 가중치를 갱신한다.

생성자

생성대립신경망의 생성자 부분은 판별자의 피드백을 통합하여 가짜 데이터를 만드는 법을 배운다. 이를 통해 판별자는 자신의 산출물을 진짜로 분류하도록 만드는 법을 배운다. 생성자 훈련은 판별자 훈련이 요구하는 것보다 생성자와 판별자 사이의 보다 긴밀한 통합이 필요하다. 생성자를 훈련시키는 생성대립신경망의 부분에는 다음이 포함된다.

  • 무작위 입력
  • 임의 입력을 데이터 인스턴스로 변환하는 생성자 네트워크
  • 생성된 데이터를 분류하는 판별자 네트워크
  • 판별자 출력
  • 생성자가 판별자를 속이지 못해 불이익을 주는 생성자 손실
임의 입력

신경망은 어떤 형태의 입력을 필요로 한다. 일반적으로 우리는 우리가 분류하거나 예측하고자 하는 예와 같이 우리가 어떤 것을 하고 싶은 데이터를 입력한다. 그러나 완전히 새로운 데이터 인스턴스를 출력하는 네트워크의 입력으로 사용하는 것은 무엇일까. 가장 기본적인 형태에서 생성대립신경망은 임의의 노이즈를 그것의 입력으로 받아들인다. 그런 다음 생성자는 이 노이즈를 의미 있는 출력으로 변환한다. 노이즈를 도입함으로써 생성대립신경망이 목표 분포의 다른 장소에서 표본을 추출하여 다양한 데이터를 생성하도록 할 수 있다. 실험 결과, 소음의 분포는 크게 중요하지 않기 때문에 균일한 분포처럼 샘플링하기 쉬운 것을 선택할 수 있다. 편의상 노이즈를 샘플링하는 공간은 일반적으로 출력 공간의 차원성보다 크기가 작다.

판별자를 사용한 생성자 교육

신경망을 훈련시키기 위해 네트워크의 출력의 오류나 손실을 줄이기 위해 네트워크의 무게를 조절한다. 그러나 생성대립신경망에서는 생성자는 우리가 영향을 미치려고 하는 손실과 직접적으로 연결되어 있지 않다. 생성자가 판별자 네트에 공급되고 판별자는 우리가 영향을 미치려고 하는 출력을 생성한다. 생성자 손실은 판별자 네트워크가 가짜로 분류하는 샘플을 생산한 생성자에 불이익을 준다.

생성자 역전파.png

여분의 네트워크 덩어리는 역전파에 포함되어야 한다. 역전파는 중량이 출력에 미치는 영향, 즉 중량을 변경했을 때 출력이 어떻게 변화하는지 계산하여 각 중량을 올바른 방향으로 조정한다. 그러나 생성자 중량의 영향은 역전파를 통해 공급하는 판별자 중량의 영향에 따라 달라진다. 그래서 역전파 출력에서 시작하여 판별자를 통해 생성자로 다시 흐른다. 동시에, 우리는 생성자 훈련 중에 판별자가 바뀌는 것을 원하지 않는다. 움직이는 목표물을 맞추려고 하는 것은 생성자에 더 큰 문제를 일으킬 것이다. 그래서 다음과 같은 절차로 생성자를 훈련시킨다.

  • 무작위 노이즈 샘플
  • 샘플링된 무작위 노이즈로부터 생성자 출력 생성
  • 생성자 출력에 대한 판별자의 '진실' 또는 '거짓' 분류 가져오기
  • 판별자 분류로 인한 손실 계산
  • 판별자와 생성자를 통해 역전파하여 기울기 효과 통감
  • 기울기(gradient)를 사용하여 생성자 중량 변경

문제점

각주

  1. Generative adversarial network Wikipedia - https://en.wikipedia.org/wiki/Generative_adversarial_network
  2. Rohith Gandhi, 〈Generative Adversarial Networks — Explained〉, 《Towards Data Science》, 2018-05-11

참고자료

같이 보기


  검수요청.png검수요청.png 이 생성대립신경망 문서는 인공지능 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.