번역가 | Zhu Xianzhong
리뷰어 | Sun Shujuan
Red Vineyard(저자: Vincent van Gogh)
New York Times에 따르면 데이터 센터의 에너지 중 90%가 낭비되는 이유는 기업이 수집된 데이터의 대부분은 어떤 형태로든 분석되거나 사용되지 않습니다. 보다 구체적으로 이를 '다크 데이터'라고 합니다.
“다크 데이터”는 다양한 컴퓨터 네트워크 운영을 통해 얻은 데이터이지만 통찰력을 얻거나 의사 결정을 내리는 데 어떠한 방식으로도 사용되지 않는 데이터를 말합니다. 조직의 데이터 수집 능력은 데이터 분석 처리량을 초과할 수 있습니다. 어떤 경우에는 조직이 데이터가 수집되고 있다는 사실조차 알지 못할 수도 있습니다. IBM은 센서와 아날로그-디지털 변환을 통해 생성된 데이터의 약 90%가 전혀 사용되지 않는 것으로 추정합니다. — "다크 데이터"에 대한 Wikipedia 정의
기계 학습 관점에서 이 데이터가 통찰력을 얻는 데 유용하지 않은 주요 이유 중 하나는 레이블이 부족하기 때문입니다. 따라서 비지도 학습 알고리즘은 이 데이터의 잠재력을 활용하는 데 매우 매력적입니다.
2014년 Ian Goodfello 등은 적대적 프로세스를 통해 생성 모델을 추정하는 새로운 방법을 제안했습니다. 여기에는 두 개의 독립적인 모델을 동시에 훈련시키는 작업이 포함됩니다. 즉, 데이터 분포를 모델링하려는 생성기 모델과 생성기를 통해 입력을 훈련 데이터 또는 가짜 데이터로 분류하려고 시도하는 판별기입니다.
이 논문은 현대 기계 학습 분야에서 매우 중요한 이정표를 설정하고 비지도 학습의 새로운 길을 열었습니다. 2015년 Radford et al.이 발표한 Deep Convolutional GAN 논문은 Convolutional Network의 원리를 적용하여 2D 이미지를 생성하는 데 성공했으며, 따라서 논문에서 이 아이디어를 계속해서 구축하고 있습니다. 이 글을 통해 위 논문에서 논의한 주요 구성요소를 설명하고 이를 PyTorch 프레임워크를 사용하여 구현해 보았습니다.
GAN의 눈길을 끄는 점은 무엇인가요?
1. 대부분의 실제 데이터에는 레이블이 지정되어 있지 않으므로 GAN의 비지도 학습 특성은 이러한 사용 사례에 이상적입니다.
2. 생성기와 판별자는 제한된 레이블이 있는 데이터가 있는 사용 사례에 대해 매우 좋은 특징 추출기 역할을 하거나, 증강 기술을 사용하는 대신 가짜 샘플을 생성할 수 있으므로 2차 모델 교육을 개선하기 위한 추가 데이터를 생성합니다.
3. GAN은 최대 가능성 기술에 대한 대안을 제공합니다. 적대적 학습 프로세스와 비경험적 비용 함수는 강화 학습에 매우 매력적입니다.
4. GAN에 대한 연구는 매우 매력적이며 그 결과는 ML/DL의 영향에 대한 광범위한 논쟁을 불러일으켰습니다. 예를 들어 딥페이크(Deepfake)는 대상 인물에 사람의 얼굴을 오버레이하는 GAN 애플리케이션으로, 악의적인 목적으로 사용될 가능성이 있어 본질적으로 논란이 많다.
5. 마지막으로, 이런 종류의 네트워크로 작업하는 것은 멋지고 이 분야의 모든 새로운 연구는 매력적입니다.
전체 아키텍처
Deep Convolutional GAN의 아키텍처
앞서 논의한 것처럼 사실적인 이미지를 생성하기 위한 Convolutional 네트워크인 GAN의 핵심 아이디어를 구현하려고 시도하는 DCGAN을 통해 작업하겠습니다.
DCGAN은 두 개의 독립적인 모델로 구성됩니다. 임의의 노이즈 벡터를 입력으로 모델링하고 데이터 분포를 학습하여 가짜 샘플을 생성하는 생성기(G)와 훈련 데이터(실제 샘플)를 얻는 또 다른 판별기(D) 생성된 데이터(가짜 샘플)를 분석하고 분류해 봅니다. 이 두 모델 사이의 전투는 우리가 적대적 훈련 과정이라고 부르는 것으로, 한쪽의 손실은 다른 쪽의 이득이 됩니다.
Generator
Generator 아키텍처 다이어그램
Generator는 판별자를 속이기 위해 가짜 이미지를 생성하는 생성기이기 때문에 우리가 가장 관심을 갖는 부분입니다.
이제 생성기 아키텍처를 더 자세히 살펴보겠습니다.
그 중 레이어 2부터 레이어 5까지가 코어 생성기 블록을 구성하며, 이를 N번 반복하여 원하는 출력 이미지 모양을 얻을 수 있습니다.
다음은 PyTorch에서 구현하는 방법에 대한 핵심 코드입니다(전체 소스 코드는 https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py 주소 참조).
PyTorch 프레임워크의 생성기를 사용하여 키 코드 구현
Discriminator 아키텍처 다이어그램
그림을 보면 판별자가 이미지 분류 네트워크에 더 가깝다는 것을 쉽게 알 수 있지만, 단지 몇 가지 작은 조정 작업을 수행할 뿐입니다. 예를 들어, 다운샘플링을 위해 풀링 레이어를 사용하는 대신 스트라이드 컨벌루션 레이어라는 특수 컨볼루션 레이어를 사용하여 자체 다운샘플링을 학습할 수 있습니다.
이제 판별자 아키텍처를 자세히 살펴보겠습니다.
이 아키텍처에서는 레이어 2부터 레이어 5까지가 판별기의 핵심 블록을 형성하며 계산을 N번 반복하여 각 훈련 데이터에 대해 모델을 더 복잡하게 만들 수 있습니다.
PyTorch에서 구현하는 방법은 다음과 같습니다(전체 소스 코드는 https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py 주소 참조).
PyTorch에 구현된 판별기의 키 코드 섹션
우리는 판별기(D)를 훈련하여 훈련 샘플과 생성기(G)의 샘플에 올바른 레이블을 할당할 확률을 최대화합니다. log(D(x))를 최소화하여 수행할 수 있습니다. 동시에 log(1 − D(G(z)))를 최소화하도록 G를 훈련합니다. 여기서 z는 노이즈 벡터를 나타냅니다. 즉, D와 G 모두 가치 함수 V(G, D)를 사용하여 다음과 같은 2인 미니맥스 게임을 합니다.
대적 비용 함수 계산 공식
실제 응용 환경에서 위 방정식은 G가 잘 학습할 수 있을 만큼 충분한 기울기를 제공하지 못할 수 있습니다. 학습 초기 단계에서 G가 좋지 않으면 D는 훈련 데이터와 상당히 다르기 때문에 높은 신뢰도로 샘플을 거부할 수 있습니다. 이 경우 log(1 − D(G(z))) 함수는 포화에 도달합니다. log(1 − D(G(z)))를 최소화하도록 G를 훈련하는 대신 logD(G(z))를 최대화하도록 G를 훈련합니다. 이 목적 함수는 동적 G와 D에 대해 동일한 고정점을 생성하지만 학습 초기에 더 강력한 기울기 계산을 제공합니다. ——arxiv 논문
두 모델을 동시에 훈련하기 때문에 이는 까다로울 수 있고 GAN은 훈련하기가 매우 어렵습니다. 나중에 논의할 알려진 문제 중 하나는 패턴 모드 붕괴라고 합니다. .
이 논문에서는 학습률이 0.0002인 Adam 최적화 프로그램을 사용할 것을 권장합니다. 이렇게 낮은 학습률은 GAN이 매우 빠르게 분기되는 경향이 있음을 나타냅니다. 또한 훈련 속도를 더욱 높이기 위해 0.5와 0.999 값의 1차 및 2차 모멘텀을 사용합니다. 모델은 평균이 0이고 표준편차가 0.02인 정규 가중치 분포로 초기화되었습니다.
다음은 이를 위한 훈련 루프를 구현하는 방법을 보여줍니다(전체 소스 코드는 https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py에서 확인 가능).
DCGAN의 훈련 루프
이상적으로는 생성기가 다양한 출력을 생성하기를 원합니다. 예를 들어 얼굴을 생성하는 경우 모든 무작위 입력에 대해 새 얼굴을 생성해야 합니다. 그러나 생성기가 판별기를 속일 만큼 충분히 그럴듯한 출력을 생성하는 경우 동일한 출력을 반복해서 생성할 수 있습니다.
결국 생성기는 단일 판별자를 과도하게 최적화하고 작은 출력 세트 간에 회전하게 되는데, 이러한 상황을 "모드 붕괴"라고 합니다.
다음 방법을 사용하여 상황을 해결할 수 있습니다.
요컨대 위에서 언급한 GAN과 DCGAN에 관한 논문은 비지도 학습의 새로운 길을 열어준다는 점에서 획기적인 논문일 뿐입니다. 여기서 제안된 적대적 훈련 방법은 실제 학습 과정을 밀접하게 시뮬레이션하는 새로운 훈련 모델 방법을 제공합니다. 따라서 이 분야가 어떻게 발전하는지 보는 것은 매우 흥미로울 것입니다.
마지막으로 내 GitHub 소스 코드 저장소에 있는 이 글에서 샘플 프로젝트의 전체 구현 소스 코드를 찾을 수 있습니다.
Zhu Xianzhong, 51CTO 커뮤니티 편집자, 웨이팡 대학의 컴퓨터 교사이자 프리랜스 프로그래밍 업계의 베테랑입니다.
원제: Implementing Deep Convolutional GAN, 저자: Akash Agnihotri
위 내용은 실제로 심층 컨벌루션 생성 적대 네트워크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!