>  기사  >  기술 주변기기  >  실제로 심층 컨벌루션 생성 적대 네트워크

실제로 심층 컨벌루션 생성 적대 네트워크

王林
王林앞으로
2023-04-12 14:22:12847검색

번역가 | 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의 눈길을 끄는 점은 무엇인가요?

GAN 또는 DCGAN(Deep Convolutional Generative Adversarial Networks)의 중요성을 이해하기 위해 먼저 왜 그렇게 인기가 있는지 이해해 보겠습니다.

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는 판별자를 속이기 위해 가짜 이미지를 생성하는 생성기이기 때문에 우리가 가장 관심을 갖는 부분입니다.

이제 생성기 아키텍처를 더 자세히 살펴보겠습니다.

  1. 선형 레이어: 노이즈 벡터는 완전 연결 레이어에 입력되고 해당 출력은 4D 텐서로 변환됩니다.
  2. Batch Normalization Layer: 입력을 평균 및 단위 분산으로 정규화하여 학습을 안정화합니다. 이를 통해 기울기 소멸 또는 폭발과 같은 교육 문제를 방지하고 기울기가 네트워크를 통해 흐를 수 있습니다.
  3. 업샘플링 레이어: 논문에 대한 내 해석에 따르면 업샘플링을 위해 컨벌루션 전치 레이어를 사용하는 대신 업샘플링을 사용한 다음 그 위에 간단한 컨벌루션 레이어를 적용한다고 언급되어 있습니다. 그러나 일부 사람들이 컨볼루션 전치(Convolution Transpose)를 사용하는 것을 보았으므로 구체적인 적용 전략은 귀하에게 달려 있습니다.
  4. 2D 컨볼루셔널 레이어: 행렬을 업샘플링할 때 스트라이드 1로 컨벌루션 레이어를 통과하고 동일한 패딩을 사용하여 업샘플링된 데이터로부터 학습할 수 있습니다.
  5. ReLU 레이어: 이 기사에서는 생성기로 LeakyReLU 대신 ReLU를 사용하는 방법을 언급합니다. 이를 통해 모델이 훈련 분포의 색상 공간을 빠르게 포화시키고 포괄할 수 있기 때문입니다.
  6. TanH 활성화 계층: 이 기사에서는 TanH 활성화 함수를 사용하여 생성기 출력을 계산할 것을 권장하지만 그 이유에 대해서는 자세히 설명하지 않습니다. 추측해야 한다면 이는 TanH의 속성으로 인해 모델이 더 빠르게 수렴할 수 있기 때문입니다.

그 중 레이어 2부터 레이어 5까지가 코어 생성기 블록을 구성하며, 이를 N번 반복하여 원하는 출력 이미지 모양을 얻을 수 있습니다.

다음은 PyTorch에서 구현하는 방법에 대한 핵심 코드입니다(전체 소스 코드는 https://github.com/akash-agni/ReadThePaper/blob/main/DCGAN/dcgan.py 주소 참조).

실제로 심층 컨벌루션 생성 적대 네트워크

PyTorch 프레임워크의 생성기를 사용하여 키 코드 구현

Discriminator

실제로 심층 컨벌루션 생성 적대 네트워크

Discriminator 아키텍처 다이어그램

그림을 보면 판별자가 이미지 분류 네트워크에 더 가깝다는 것을 쉽게 알 수 있지만, 단지 몇 가지 작은 조정 작업을 수행할 뿐입니다. 예를 들어, 다운샘플링을 위해 풀링 레이어를 사용하는 대신 스트라이드 컨벌루션 레이어라는 특수 컨볼루션 레이어를 사용하여 자체 다운샘플링을 학습할 수 있습니다.

이제 판별자 아키텍처를 자세히 살펴보겠습니다.

  1. Concat 레이어: 이 레이어는 가짜 이미지와 실제 이미지를 하나의 배치로 결합하여 판별자에 공급하지만 생성기 손실을 얻기 위해 별도로 수행할 수도 있습니다.
  2. 컨볼루션 레이어: 여기서는 stride 컨볼루션을 사용합니다. 이를 통해 하나의 훈련 세션에서 이미지를 다운샘플링하고 필터를 학습할 수 있습니다.
  3. LeakyReLU 레이어: 논문에서 언급했듯이 Leakyrelus는 원본 GAN 논문의 최대 출력 기능에 비해 더 쉬운 훈련을 허용하므로 판별자에게 매우 유용한 것으로 나타났습니다.
  4. 드롭아웃 레이어: 훈련에만 사용되며 과적합을 방지하는 데 도움이 됩니다. 모델은 실제 이미지 데이터를 기억하는 경향이 있는데, 이 시점에서 판별자가 더 이상 생성자에 의해 "속일" 수 없기 때문에 훈련이 중단될 수 있습니다.
  5. Batch Normalization Layer: 논문에서는 각 판별기 블록의 끝 부분에 일괄 정규화를 적용한다고 언급합니다(첫 번째 블록 제외). 논문에서 언급한 이유는 각 레이어에 배치 정규화를 적용하면 샘플 진동 및 모델 불안정성이 발생할 수 있기 때문입니다.
  6. 선형 레이어: 적용된 2D 배치 정규화 레이어에서 모양이 변경된 벡터를 가져오는 완전히 연결된 레이어입니다.
  7. Sigmoid Activation Layer: 판별기 출력의 이진 분류를 다루고 있으므로 Sigmoidd 레이어의 논리적 선택이 이루어집니다.

이 아키텍처에서는 레이어 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의 훈련 루프

Mode Collapse

이상적으로는 생성기가 다양한 출력을 생성하기를 원합니다. 예를 들어 얼굴을 생성하는 경우 모든 무작위 입력에 대해 새 얼굴을 생성해야 합니다. 그러나 생성기가 판별기를 속일 만큼 충분히 그럴듯한 출력을 생성하는 경우 동일한 출력을 반복해서 생성할 수 있습니다.

결국 생성기는 단일 판별자를 과도하게 최적화하고 작은 출력 세트 간에 회전하게 되는데, 이러한 상황을 "모드 붕괴"라고 합니다.

다음 방법을 사용하여 상황을 해결할 수 있습니다.

  1. Wasserstein 손실: Wasserstein 손실은 기울기 소멸에 대한 걱정 없이 판별자를 최적으로 훈련시켜 모드 붕괴를 완화합니다. 판별기가 로컬 최소값에 머물지 않으면 생성기의 안정적인 출력을 거부하는 방법을 학습합니다. 그러므로 발전기는 새로운 것을 시도해야 합니다.
  2. Unrolled GAN: Unrolled GAN은 현재 판별기의 분류뿐만 아니라 향후 판별기 버전의 출력도 포함하는 생성기 손실 함수를 사용합니다. 따라서 생성기는 단일 판별기에 대해 과도하게 최적화될 수 없습니다.

Apps

  1. 스타일 체인저: 얼굴 보정 앱이 요즘 대세입니다. 그중 얼굴 노화, 우는 얼굴, 연예인 얼굴 변형 등은 소셜 미디어에서 널리 인기를 얻은 응용 프로그램 중 일부에 불과합니다.
  2. 비디오 게임: 3D 개체의 텍스처 생성 및 이미지 기반 장면 생성은 비디오 게임 산업이 더 큰 게임을 더 빠르게 개발하는 데 도움이 되는 응용 프로그램 중 일부일 뿐입니다.
  3. 영화 산업: CGI(컴퓨터 생성 이미지)는 모델 영화의 큰 부분이 되었으며, GAN이 가져온 잠재력으로 영화 제작자는 이제 그 어느 때보다 더 큰 꿈을 꿀 수 있습니다.
  4. 음성 생성: 일부 회사에서는 GAN을 사용하여 보다 현실적인 음성을 생성함으로써 텍스트 음성 변환 애플리케이션을 개선하고 있습니다.
  5. 이미지 복원: GAN을 사용하여 손상된 이미지를 노이즈 제거 및 복원하고, 과거 이미지에 색상을 입히고, 프레임 속도를 높이기 위해 누락된 프레임을 생성하여 오래된 비디오를 개선합니다.

결론

요컨대 위에서 언급한 GAN과 DCGAN에 관한 논문은 비지도 학습의 새로운 길을 열어준다는 점에서 획기적인 논문일 뿐입니다. 여기서 제안된 적대적 훈련 방법은 실제 학습 과정을 밀접하게 시뮬레이션하는 새로운 훈련 모델 방법을 제공합니다. 따라서 이 분야가 어떻게 발전하는지 보는 것은 매우 흥미로울 것입니다.

마지막으로 내 ​​GitHub 소스 코드 저장소​​에 있는 이 글에서 샘플 프로젝트의 전체 구현 소스 코드를 찾을 수 있습니다.

번역가 소개

Zhu Xianzhong, 51CTO 커뮤니티 편집자, 웨이팡 대학의 컴퓨터 교사이자 프리랜스 프로그래밍 업계의 베테랑입니다.

원제: Implementing Deep Convolutional GAN, 저자: Akash Agnihotri

위 내용은 실제로 심층 컨벌루션 생성 적대 네트워크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제