"Most GANs today are at least loosely based on the DCGAN architecture." - NIPS 2016 Tutorial by Ian Goodfellow
1. DCGAN의 특징
2. 목표와 구조
3. Adversarial 학습에 대한 디테일
4. LSUN(Large Scale Scene Understanding)
5. Empirical validation
6. Investigating and visualizing the internals of the networks
7. Conclusion
◼ DCGAN의 contribution

① 안정적 학습
대부분의 상황에서 언제나 안정적으로 학습이 되는 Deep Convolutional GAN 구조(DCGAN)를 제안하였다는 점
→ GAN의 구조적 단점(Saddle problem)으로 인한 불안정성 개선하여 자연스러운 이미지 생성
② 벡터 산술 연산
마치 word2vec과 같이 DCGAN으로 학습된 Generator가 벡터 산술 연산이 가능한 성질을 갖고 이것으로 semantic 수준에서의 sample generation을 해볼 수 있다는 점
왕🤴 - 남자👦 + 여자🧒 = 여왕👸
③ Black-box method 개선
DCGAN이 학습한 filter들을 시각화하여 보여주고 특정 filter들이 이미지의 특정 물체를 학습했다는 것을 보여주었다는 점
④ 높은 분류 성능
이렇게 학습된 Discriminator가 다른 비지도 학습 알고리즘들과 비교하여 비슷한 이미지 분류 성능을 보였다는 점
◼ DCGAN의 목표
1) Generator가 단순 기억("memorization")으로 데이터를 생성하지 않는 것을 보여줘야함
2) 생성이미지 해상도 개선 : z의 미세한 변동에 따른 generate 결과가 연속적으로 부드럽게 이루어져야함("Walking in the latent space")
◼ Approach and model architecture 접근방법과 모델의 구조


Architecture guidelines for stable Deep Convolutional GANs 안정적인 DCGAN을 위한 구조 가이드라인
- 판별기 신경망: Strided Convolution ,생성기 신경망: fractional-strided 생성기 신경망으로 pooling layer 대체
- 생성기와 판별기 둘 다에 Batch normalization을 사용
- 더 깊은 구조를 위해서 FCL(Fully Connectyed Layer)을 제거
- 생성기 모든 층에서 렐루 활성화 함수(Relu Activation Function)를 사용함
- (단, 출력층에서는 예외로 탄 함수 사용)
- 판별기의 모든 층에서 리키 렐루 활성화함수(Leaky Relu Activation Function)를 사용


❓두 convolution의 차이점❓
◾ Strided Convolution(보폭 처리 합성곱) : DCGAN의 판별기에 사용되는 strided convolution(보폭 처리 합성곱).
◾ Fractionally-strided convolutions : DCGAN의 생성기에 사용되는 fractionally-strided convolutions.기존의 convolutions는 필터를 거치며 크기가 작아진 반면에, fractionally-strided convolutions은 input에 padding을 하고 convolution을 하면서 오히려 크기가 더 커지는 특징이 있다. 쉽게 transposed convolution이라고도 불리고, deconvolution이라고도 불리는데, deconvolution는 잘못된 단어라고 한다.
❓Batch-normalization❓
Batch Normalization은 기본적으로 Gradient Vanishing / Gradient Exploding 이 일어나지 않도록 하는 아이디어 중의 하나이며, 지금까지는 이 문제를 Activation 함수의 변화 (ReLU 등), Careful Initialization, small learning rate 등으로 해결하였지만, 이 논문에서는 이러한 간접적인 방법보다 training 하는 과정 자체를 전체적으로 안정화하여 학습 속도를 가속시킬 수 있는 근본적인 방법을 제안하였다.
◼ Adversarial 학습에 대한 디테일


◼ LSUN(Large Scale Scene Understanding)


◼ Empirical validation
1) Classifying CIFAR-10 using GANs as a feature extractor (특징추출으로 GAN을 사용하여 CIFAR-10을 분류하기)
- 비지도 표현 학습 알고리즘의 퀄리티를 평가하는 하나의 공통적인 기술은 지도학습적 데이터셋에 특징 추출로서 적용하는것,
그리고 이 특징에 피팅된 선형모델들에 대한 퍼포먼스를 평가하는것
- 4800의 특징 맵을 사용하여 80.6퍼의 정확도를 얻을수있음


2) Classifying SVHN Digits using GANs as a feature Extractor (GAN을 특징추출으로서 사용하여 SVHN Digits를 분류)
SVHN(길거리 집 데이터셋)에서 우리는 라벨링된 데이터가 희소성의 띌때 지도학습적 목적을 위해 DCGAN의 판별기의 특징들을 사용한다. 시파10 실험에서 비슷한 데이터셋 준비하는 룰은 다음과 같다.(논-엑스트라부터 10,000장의 validation set를 나누고 모든 하이퍼파라미터과 모델셀렉션을 위해 사용한다)



◼ Investigating and visualizing the internals of the networks
1) Walking in the latent space 잠재공간에서 워킹 : 생성 결과과 연속적으로 부드럽게 이뤄져야함
"If walking in this latent space results in semantic changes to the image generations (such as objects being added and removed), we can reason that the model has learned relevant and interesting representations. The results are shown in Fig.4. "

2) Visualizing the discriminator features 판별기 특징들 시각화하기
We demonstrate that an unsupervised DCGAN trained on a large image dataset can also learn a hierarchy of features that are interesting. Using guided backpropagation as proposed by (Springenberg et al., 2014), we show in Fig.5 that the features learnt by the discriminator activate on typical parts of a bedroom, like beds and windows. For comparison, in the same figure, we give a baseline for randomly initialized features that are not activated on anything that is semantically relevant or interesting.

3) Manipulating the generator representation 생성기 표현에 대한 조정
(1) forgetting to draw certain objects 특정 객체 그리기를 잊어버리기(지우기)
- 생성기가 학습하는 샘플의 퀄리티는 생성기가 특정 객체 표현에 주요한 장면의 component를 학습한다고 함(창문, 램프,문 그리고 여러가지 잡다한 가구들과 같이)
- 이 표현이 가져오는 형태를 탐구해보기위해서, 우리는 생성기에서 창문을 완전히 제거하는 시도를 하는 실험을 진행
- 그러고나서 특정한 새로운 샘플들은 특징맵 제거를 적용 혹은 미적용하여 생성됨

(2) vector arithmetic on face samples 얼굴 샘플에 벡터 연산
학습된 단어의 표현을 평가하는 문맥에서 (Mikolov et al., 2013)논문은 간단한 계산은 표현 공간에서 풍부한 선형적 구조를 보여주는건 보여줬다. 한가지 예는 벡터("왕")-벡터("남자")+벡터("여자")는 Queen에 대한 벡터와 nearest neighbor인 벡터라는 결과를 가져왔다




* 보간(interpolation)은 두 점을 연결하는 방법을 의미한다. 여기서 말하는 연결은 궤적을 생성한다는 뜻이다.보간이 필요한 이유는 정보를 압축한 것을 다시 복원하기 위함이다. 특징점이라 불리는 선의 모양 복원에 꼭 필요한 점듦나 취해서 저장하는데 이 과정을 sampling이라 부른다. 일반적으로 sampling은 일정 시간 주기로 선의 점을 취하는 방식을 사용하는데 녹음 기술에서 많이 쓴다.
◼ Conclusion and future work
✔ GAN을 학습하기위한 더욱 안정적인 구조를 제안하고, 적대적 네트워크가 지도적이고 생성적인 모델링에 대한 이미지 좋은 표현을 학습
✔ 모델에 아직 남아있는 불안정성도 몇개 있음 : 모델이 더 오래 학습할수록 필터들의 subset에서 싱글 oscillating 모드로 무너지기도함
✔ 다른 도메인(비디오, 오디오)으로 이 프레임워크를 넓히는것도 재밌을듯
✔ 학습된 잠재공간의 properties에 대한 더욱 깊은 조사도 재밌을듯
💜Reference
https://seing.tistory.com/110?category=419141
jaejunyoo.blogspot.com/2017/02/deep-convolutional-gan-dcgan-1.html
https://bigstory.tistory.com/entry/데이터-중복-제거Data-deduplication [IT on the Wheel]