◼GAN : Generative Adversarial Networks, NIPS 2014
- GAN 모델 - 모델의 목표와 구조
- GAN 학습 방법 - GAN의 수렴 과정, 목적 함수, 알고리즘
- GAN의 특징 - 주요 개념, GAN의 이점과 문제점 & 개선 방법
1. GAN 모델
-
Generative model : 실존하진 않지만 있을 법한 데이터를 생성 할 수 있는 모델
-
Discriminative model /Generative model의 차이
-
Discriminative model : 클래스를 정확히 구분하기 위한 Decision boundary에 대한 학습
-
Generative model : 각각의 클래스에 대해서 분포를 학습
-
-
Generative 모델의 목표
-
데이터의 분포를 근사하는 모델을 만드는 것
-
-
GAN 모델의 구조
-
Generative Adversarial Networks(적대적 생성 네트워크)
: 새로운 데이터를 생성하기 위해 뉴럴 네트워크로 이루어진 생성기(Generator)와 판별기(Discriminator)가 서로 겨루며 학습
-
Generator Architecture : 생성기는 단순한 분포를 사람 얼굴 이미지와 같은 복잡한 분포로 매핑(Mapping)하는 함수
- 입력 계층은 가우스 분포에서 표본 추출을 한 100차원 벡터를 취한 다음에 수정하지 않은 텐서를 첫번째 은닉 계층으로 전달
- 세 개의 은닉 계층은 각기 500개, 500개, 784개 유닛이 있는 조밀 계층이다. 첫번째 은닉 계층은 (batch_size,100)모양으로 된 텐서 한 개를 (batch_size,500)모양으로 된 텐서로 바꾼다.
- 두 번째 조밀 계층은 (batch_size,500) 모양으로 된 텐서 한개를 생성한다.
- 세 번째 은닉 계층은 (batch_size,784) 모양으로 된 텐서 한개를 생성한다.
- 마지막 출력 계층에서 이 텐서의 모양이 (batch_size,784)에서 (batch_size,28,28)으로 바뀐다. 즉, 우리 신경망은 (28,28)모양으로 된 이미지들로 이뤄진 이미지 배치를 생성한다.
-
Discriminator Architecture : 판별기에 대한 분포를 동시에 업데이트하여 데이터 생성 분포 $p_x$의 샘플과 생성 분포 $p_g(G)$의 샘플을 구별하도록 학습.
- 판별기는 처음에는 28*28 모양으로 된 입력은 받는다.
- 입력 계층은 (batch_size,28,28)모양으로 된 텐서인 입력 텐서를 취해서 아무 것도 수정하지 않고 첫번째 은닉 계층으로 전달한다.
- 다음으로 평탄화 계층(flatten layer)은 텐서를 784차원의 벡터로 평탄화시켜 첫번째 은닉 계층(즉, 조밀 계층)으로 전달한다. 첫번째 및 두번째 은닉 계층이 이것을 500차원 벡터로 수정
- 마지막 계층은 출력 계층인데, 이 계층은 다시 조밀 계층에 해당하며, 유닛(뉴런)이 한개이고 활성함수로 sigmoid를 쓴다. 이 계층은 0 또는 1이라는 단일한 값을 출력한다. 값 0은 제공된 이미지가 가짜임을 나타내면 값 1은 제공된 이미지가 진짜임을 나타냄
-
-
2. GAN 학습 방법
-
GAN의 수렴 과정
- G는 생성, D는 판별
- $P_g$→$P_{data},D(G(z))$→1/2
나동빈.꼼꼼한 논문해설 GAN편,https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/lecture_notes/GAN.pdf
-
☑ 아래 선은 동일하게 z가 샘플로 뽑은 도메인이다.
☑ 위의 선은 x의 도메인의 일부
☑ 위로 향하는 화살표는 z가 어떻게 x에 mapping되는지 (초록색 그래프)
☑ G는 고밀도의 지역에서 서로 가까워지고, $p_g$ 밀도가 낮은 지역에서 멀어짐.
(a) 네트워크 수렴으로 갈수록 : $p_g$는 $p_{data}$와 유사해지고 판별기 D는 정확한 분류를 하도록 학습 (b) 판별기 D는 샘플과 데이터를 구별하도록 훈련되어
**$D(x)=\\displaystyle \\frac {p_{data}(x)}{p_{data}(x)+p_g(x)}$로 수렴**(c) 생성기를 업데이트 한 후, 판별기의 그래디언트는 G(z)가 데이터로 분류될 가능성이 높은 영역으로 흘러가도록 함 (d) 학습을 몇 단계 거친 후, G&D가 학습이 잘되었다면 $p_g=p_{data}$이기 때문에 둘 다 더 이상 할 수 없는 시점이 있음 이때, 판별기는 두 분포 사이에 차이를 알 수 없고 D(x)=½라는 뜻(판별 모델이 ½로 수렴)
-
GAN 의 목적 함수
-
Discriminator D(x) = probability : a sample came from the real distribution(Real:1, Fake:0)
-
실제 이미지와 생성 이미지를 각각 받아 일반적인 딥러닝 분류기와 같이 학습이 진행됨
→ 실제 이미지를 입력으로 받으면 예측값을 $1(D(x))=1$로, 생성 이미지를 입력으로 받으면 예측 값을 $0(D(x))=0$으로 되도록 학습을 진행
$min_Gmax_D V(D,G)=E_{x⁓p_{data}(x)}[logD(x)]+E_{z⁓p_z(z)}[log(1-D(G(z)))]$
→두 개의 평균 항이 덧셈으로 연결(판별기를 학습시킬 때는 양쪽 항이 모두 관여)
-
-
Generator G(x) = new data instance
-
Discriminator가 $1(D(x))=1$로 예측할 이미지를 생성할 수 있도록 학습이 진행
-
Generator는 D(x)를 타깃으로 한 backpropagation을 통해 학습
→ Discriminator가 실제 이미지로 판단하도록 이미지를 생성
$$min_GV(G) =E_{z~p_z(z)}[log(1-D(G(z)))]$$
→ 생성기를 학습 시킬 때는 우측 항만 관여
-
GAN에서의 기대값
: 단순히 모든 데이터를 하나씩 확인하여 식에 대입한 뒤에 평균을 계산
-
$E_{x~p_{data}(x)}[logD(x)]$
→ 원본 데이터 분포에서의 샘플 x를 뽑아 logD(x)의 기대값 계산
-
$E_{z~p_z(z)}[log(1-D(G(z)))]$
→ 노이즈 분포에서의 샘플 z를 뽑아 log(1-D(G(z)))의 기대값 계산
-
*기대값
-
모든 사건에 대해 확률을 곱하면서 더하여 계산할 수 있음
-
이산확률변수에 대한 기대값
$$E[X]=\Sigma_ix_i*f(x_i)$$
-
연속확률변수에 대한 기대값
$$E[X]=\displaystyle \int x*f(x)dx$$
-
-
-
-
Backpropagation
-
Loss : Binary cross-entropy(BCE)
이진크로스엔트로피 BCE = $-\displaystyle \frac {1}{n}\Sigma_{i=1}^n(y_ilog(p_i)+(1-y_i)log(1-p_i))$
-
목적함수 정의 → alternating gradient descent 활용 → Generator&Discriminator 번갈아 학습
-
Generator의 파라미터를 고정한 상태로 실제 이미지와 생성 이미지를 이용해서 Discriminator에 대해서 Gradient Descent를 수행(이 과정을 실제 같은 이미지를 생성 할때까지 반복)
-
명제 : Global Optimality ①
- Proposition : $D^*G(x)=\displaystyle \frac{p{data}(x)}{p_{data}(x)+p_g(x)}$
-
Proof : For G fixed,
$V(G,D) = E_{x⁓p_{data}(x)}[logD(x)]+E_{z⁓p_z(z)}[log(1-D(G(z)))$
💬$E[X]=\\int_{-∞}^∞ xf(x)dx$ → 연속 함수의 기대값 공식$=\displaystyle \int_xp_{data}(x)log(D(x))dx +\displaystyle \int_zp_z(z)log(1-D(g(z)))dz$
$=\displaystyle \int_xp_{data}(x)log(D(x))+p_g(x)log(1-D(x))dx$
-
식에 대한 간략한 설명
✔매 상황에 대해서 각각 판별자와 생성자가 어떤 Global optimality를 갖는지 설명
✔z의 노이즈 벡터를 생성기 G에 넣어서 데이터 x를 만들어낼 수 있고, 이 부분이 도메인 z에서 x로 매핑 되는 과정과 마찬가지로 볼 수 있기 때문에 x로 치환해서 하나의 적분 식으로 표현 → 그림과 같은 식인 것을 확인 ✔ 함수 y는 a/a+b에서 극대값을 가지는 것을 알 수 있고, 그래프에서도 두 그래프가 만나는 점이 가장 큰 값인 것을 직관적으로 알 수 있다
-
-
- Proposition : $D^*G(x)=\displaystyle \frac{p{data}(x)}{p_{data}(x)+p_g(x)}$
-
명제 : Global Optimality ②
-
Proposition : Global optimum point is $p_g=p_{data}$
- 즉, 생성 데이터의 분포는 원본 데이터의 분포를 따라감
- 식에 대한 간략한 설명
-
별도의 함수 C를 정의, C는 함수 V를 최대화하는 D에 대한 G함수(즉, 특정한 fixed G함수에 대해서 글로벌 옵티멀을 가지는 D함수에 대한 V함수)
- 글로벌옵티멀은 우측의 식을 가지므로, 저대로 전개할수있고
-
이때 로그의 안쪽으로 2를 곱해주고 log(4)를 빼줌(로그함수의 기본적인 성질)
-
증명의 편의성 -> KL divergence로 치환(KL수렴:두개의 분포가 있을때 두개가 얼마나 차이가 나는지를 계산)
-
JS divergence를 사용 (distance metric으로 효과적으로 표현하기위해) → 두개의 분포가 있을때 distance를 구함
→ $JSD(p_{data}||p_g)$는 최소값을 0으로 가짐⇒$-log(4)$
⇒ Global optimum point를 얻을 수 있게 해주는 solution : $p_{data}=p_g$
-
-
-
-
-
GAN의 알고리즘
-
Visualization of Experiments
3. GAN의 특징
-
주요 개념
-
GAN의 이점
- GAN은 비지도학습 방식
- 지도 학습 = 수작업 처리 과정
- 레이블이 없는 데이터에 대한 학습을 통해 데이터의 내부 표현을 학습할 수 있음
- GAN은 데이터를 생성
- GAN은 실제 데이터와 유사한 데이터를 생성
- 실제 데이터와 구별할수없는 오디오, 비디오, 텍스트, 이미지 데이터를 생성
- 마케팅, 전자 상거래, 게임, 광고 및 기타 여러 산업분야에 응용
- GAN은 데이터의 밀도 분포를 학습
- 데이터의 내부 표현을 학습
- 지저분하고 복잡한 데이터 분포를 학습할 수 있음
- 학습된 판별기는 일종의 분류기
- 학습 후 판별기와 생성기를 얻게 됨
- 판별기 신경망은 일종의 분류기여서 물체를 분류하는데 사용됨
- GAN은 비지도학습 방식
-
GAN의 문제점
-
Mode Collapse(모드 붕괴)
-
Mode
[출처 :deeplearning ai "Building Basic Generative Adversarial Networks(GANs)" 강의자료]
- 관측치가 높은 부분을 의미. 최빈값
- 정규분포에서는 평균이 분포의 Mode
- Mode가 1개이면 single mode, 2개이면 bimodal, 2개 이상이면 multimodal, multiple modes
- MNIST dataset의 경우 숫자마다 1개의 mode, 총 10개의 모드가 있는 multiple modes 분포로 나타남
-
Mode collapse
-
BCE loss를 사용할 때 생기는 문제
-
생성기 신경망이 표본을 다양하게 생성하지 못하는 문제 → 모델이 똑같은 이미지만 생성하는 문제
-
이는 생성자가 판별자를 속이는 적은 수의 샘플을 찾을 때 일어납니다. 따라서 한정된 이 샘플 이외에는 다른 샘플을 생성하지 못합니다. 즉, 생성자가 local minimum에 빠지게 된 것
-
생성된 모든 표본이 사실상 동일한 상황을 완전 붕괴라고 함
→ 다양한 최빈값을 지니게 여러가지 모델을 훈련
→ 다양한 데이터 표본으로 GAN을 훈련
-
-
-
Vanishing gradient(경사 소멸)
[출처 :deeplearning ai "Building Basic Generative Adversarial Networks(GANs)" 강의자료]
- 역전파가 되는 동안에 경사도는 마지막 계층에서 처음 계층으로 흐른다.
- 경사도가 역방향으로 흐르는 동안에 경사도는 점점 줄어듬
- 경사도가 너무 작아서 초기 계층이 학습을 느리게하거나 아예 학습이 안되는 경우도 있음
- 이런 경우에 경사도로 인해 초기 계층의 가중치가 바뀌는 일이 전혀 이뤄지지 않으므로,신경망의 초기 계층에 대한 훈련이 쉽게 중단 → 경사소멸
- 경사도 기반 최적화 방법을 사용해 더 큰 신경망을 훈련하게 되면 이런 문제가 더욱 심각
- 경사도 기반 최적화 방법에서는 파라미터의 값을 약간 변경할 때 신경망의 출력이 변화되는 정도를 계산하므로써 파라미터의 값을 최적화
-
Internal covariate shift(내부 공변량 변화)
- 신경망에 대한 입력 분포가 변경될 때 발생
- 입력 분포가 변경되면 은닉계층은 새로운 분포에 적응하는 법을 학습하려함→학습과정 느려짐→처리 과정이 느려지면 전역 최솟값으로 수렴하는데 오랜 시간이 걸림(신경망 입력에 대한 통계 분포가 이전에 본 입력과 크게 다를 때 발생)
- 배치 정규화와 그 밖의 정규화 기법들을 통해 해결 가능
-
-
GAN 학습 시 안정성 문제를 해결하기*, Improved Techhiques for Training GANs*
-
Feature Matching(특징 정합)
- 현재 Disciriminator에 새로운 목표를 지정하여 오버트레이닝을 방지하고, GAN의 불안정성(insatbility)을 해결합니다.
- Generator에서 생성한 분포가 실제 데이터의 분포를 matching 시키기 위해 Discriminator 중간층의 activation 함수를 이용합니다. 단순하게 진짜/가짜를 나누는 방식이 아닌, 진짜와 같은 feature를 가지고 있느냐? 라는 방식으로 훈련을 진행하는 것입니다. 이를 위해 새로운 손실함수 다음과 같은 방식으로 정의하고 사용합니다.
$$||Ex∼pdataf(x)−Ez∼pz(z)f(G(z))||_2^2$$
- f(x)f(x)는 Discriminator의 중간 층 activation 함수입니다. 식을 이해해보면 Discriminator 중간층의 output이 생성에 필요한 하나의 **특징(feature)**이며, 이게 random sampling된 z에 대해 분포가 비슷한지(matching) 살펴보는 것입니다.
- G가 목표하는 통계치에 도달하는지는 확신할 수 없지만, 경험적으로 불안정한 GAN에 대해 효과적이다. 라고 이야기 하고 있습니다.
-
Minibatch discrimination(미니배치 판별)
-
GAN이 실패하는 경우 중 하나는 Generator가 동일한(유사한) 출력을 하게 parameter가 세팅되는 경우입니다. Generator는 Discriminator를 속이기만 하면 되기 때문에 이런 일이 발생합니다.
Vanila GAN 등에서 실험해보면 초기 noise에 따라 Loss가 급격하게 줄어들고 결과를 확인하면 이상한 noise만 출력하는 것을 확인할 수 있습니다.
-
논문에서는 이 문제는 Discriminator가 각 example을 개별로 처리하기 때문에 출력간의 관계를 고려하지 않기 때문이라고 이야기하고 있습니다. 그래서 배치(batch) 안에서 다른 데이터간의 관계를 고려하도록 설계하는 방법입니다.
-
Discriminator는 여전히 실제/생성 데이터를 분류하는 일을 하고, minibatch의 정보를 side information으로 사용할 수 있습니다. (개별 샘플이 minibatch내의 다른 샘플들과의 유사도(L1 norm)를 계산하여 합치고, 이를 판별에서 추가적인 정보로 사용하게 됩니다.)
-
Minibatch Discriminator를 사용하면 시각적으로 매력있는 샘플을 feature matching보다 잘 생성합니다.
-
하지만 feature matching은 semi-supervised learning에서는 더 성능이 좋았다고 합니다.
-
-
Historical averaging(역사적 평균)
- dicrimnator와 generator의 손실함수 모두에 다음을 추가합니다.
$$||θ−\displaystyle \frac {1}{t}∑_{i=1}^tθ[i]||^2$$
- θ 는 모델 파라미터를 나타내고, θ[i]는 i번째 학습 과정에서의 파라미터를 의미합니다.
-
One-sided label smoothing(단측 레이블 평활화)
- Label smoothing은 0과 1 타겟 대신 0.9, 0.1 등의 smoothed value로 classifier을 훈련하는 방법입니다. 구체적으로는 positive target을 α, negative target을 β 로 두는데, 여기서 negative data가 더 좋은 방향으로 생성되는 것을 위해 β는 0으로 두게 됩니다. (One-sided)
-
Virtual batch normalization(배치 정규화)
- Mini batch의 다른 값들의 영향을 많이 받는 것을 방지하기 위해 고정된 배치(reference batch)를 이용하는 방식입니다. reference batch는 학습 초기에 한번 선별되어 학습이 진행되는 동안 변하지 않습니다. 그리고 이 값을 이용하여 normalize합니다. 하지만 2개의 minibatch를 forward propagation하는 것은 느리기 때문에 generator에서만 진행합니다.
-
-
GAN의 적용
◼Reference
- Generative Adversarial Networks,Ian GoodFellow
- 나동빈, GAN:Generative Adversarial Networks(꼼꼼한 딥러닝 논문 리뷰와 코드 실습) https://www.youtube.com/watch?v=AVvlDmhHgC4
- https://m.blog.naver.com/PostView.nhn?blogId=yingbbang&logNo=221472697291&proxyReferer=https:%2F%2Fwww.google.com%2F
- https://doooob.tistory.com/172
'비지도학습 > GAN' 카테고리의 다른 글
pix2pixHD,2015 (0) | 2021.02.09 |
---|---|
[11주차] StarGAN v2: Diverse Image Synthesis for Multiple Domains, 2020 (0) | 2021.01.28 |
[1주차] AE/VAE/GAN(수정중) (0) | 2021.01.28 |
[8주차] Learning to Discover Cross-Domain Relations with Generative Adversarial Networks,2017 (0) | 2021.01.28 |
[7주차] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2020 (0) | 2021.01.28 |