요약
진행간 과거에 읽었던 자료, 논문들을 새로 같이 연구하게 되시는 분들이 다시 읽어야하는 현상이 발견하는 것을 확인하고관련 자료들을 문서화 하기로 결정하였습니다.
text to image 와 image to text의 연결에 관하여 목표로 진행간 다양한 공부가 필요하다 느꼈고 해당 분야와 관련있는 전반에 대해 문서화 하기로 하였습니다.
관련 자료는 현재 내부적으로는 분야별로 구글독스의 형태로 작성되고있습니다.
분야로는 "GAN과 전반적인 모델설계", "NLP와 어텐션"으로 크게 나눠서 진행하고 있고 별도로 기초가 부족하다고 느낀 팀원간 스터디를 진행하고있습니다.
진행 내용
GAN과 전반적인 모델 설계에 관하여 문서화중인 예시 https://docs.google.com/document/d/1oLxjRun6QSQKwzQHJbS6F9fQEfDRLTv336mNgQTaOqE/edit?usp=sharing
GAN(Generative Adversarial Network)
작성자별 표기
김준화 : 0, 1.1, 1.2, 2.1, 2.2, 2.3, 2.4, 2.5, 3.1, 4.1, 4.2, 5.1, 7.3
김인수 : 1.4
Orders
0. Introduction
1. GAN Models
1.1 Basic GAN
1.2 DCGAN
1.3 Conditional GAN
1.4
2. Activation Function
2.1 Sigmoid function
2.2 Tanh function
2.3 Relu function
2.4 Leaky Relu function
2.5 Parametric relu
2.6 ELU
2.7 GELU
3. CNNs
3.1 Basic CNN with Alexnet
3.1.1 CNN 주요 용어 정리
3.2 Inception
3.3 VGG
3.4
4. Pooling layer
4.1 Lp Pooling
4.2 Mixed Pooling
4.3 Stochastic Pooling
4.4 Spectral Pooling
4.5 Spatial pyramid Pooling
4.6 Multi-scale orderless Pooling
4.7
5. Loss Function
5.1 Hinge loss
5.2 Softmax loss
5.3 Contrastive loss
5.4 Triplet loss
5.5 Kullback-leibler Divergence
5.6
6. Regularization
6.1 lp-norm regularization
6.2 Dropout
6.3 DropConnect
6.4
7. Optimization
7.1 Data augmentation
7.2 Weight initialization
7.3 Stochastic gradient descent
7.4 Batch normalization
7.5 Instance normalization
7.6 Group normalization
7.7 Batch-Instance normalization
8. Auto Encoder
8.1 Basic Auto Encoder
8.2 Conditinal Auto Encoder
8.3 Variational Auto Encoder
8.4
9. Reference
0. Introduction
GAN은 2014년 NIPS에서 Ian Goodfellow가 발표한 회귀생성 모델로서 분류를 담당하는 모델(판별자 D)과 회귀생성을 담당하는 모델(생성자 G)로 구성되어 있다. 두 모델은 GAN이란 이름에서 쉽게 알 수 있듯이, 생성자 G와 판별자 D가 서로의 성능을 개선해 적대적으로 경쟁해 나가는 모델이다.
2014년 등장한 [1] 의 논문으로 , 기존의 지도 학습 중심의 딥러닝 패러다임을 비지도 학습으로 바꾸어 놓았고, 논문이 발표된 이후 DCGAN, CGAN, STACK GAN, STAR GAN 등 후속 연구와 사례들이 쏟아져 나오고 있다.
초기에 GAN Model은 이미지 생성에 주로 활용되었지 영상 합성, 음성, 텍스트 등 다양한 분야에 적용되는 것을 확인할 수 있다.
1. GAN Models
1.1 Basic GAN(수정중)
[1]의 논문을 읽어보면 위조지폐범이야기를 통해 GAN의 대략적인 개념을 알 수 있을 것이라고 생각이 된다. [1]에서 정의한 GAN의 녜트워크 2개는 다음과 같다. 생성자(G) : 랜덤 벡터를 입력으로 받아 이를 합성된 이미지로 디코딩한다.
판별자(D) : 이미지를 입력으로 받아 훈련 세트에서 온 이미지인지, 생성자 네트워크가 만든 이미지인지 판별한다.
즉 두 네트워크는 서로 경쟁관계에 놓여있으며, G는 D를 속이도록 훈련한다. 훈련이 잘 된다면 점점 더 실제와 같은 이미지를 생성하게 된다. 이론적으로 학습이 진행이 된다면 결국 G는 실제 이미지와 구분할 수 없는 인공적인 이미지를 만들어 D를 속이고, D는 생성된 이미지가 실제인지 판별하는 기준을 설정하면서 생성자의 능력 향상에 적응해 간다.
식으로 살펴보면 다음과 같다.
minGmaxDV(D,G) = EX~Pdata(x)[logD(x)] + Ez~Pz(z)[log(1-D(G(z)))]
수식을 이해하기 위해서 두 가지 예시를 통해 살펴보자.
첫번째로 G가 완벽한 이미지를 생성해서 G(z) = 1이라고 D가 잘못된 결론을 내린다면, D(G(z)) = 1 이므로 log(0)은 -∞ 값을 갖게 된다. 이렇게 되면 G는 min 값을 얻는 것이 맞다.
두번째로 D가 G의 이미지를 잘 구분하기 위해서는, 실제 data로 부터 얻은 D(x) = 1, D(G(z)) = 0이 되어야 한다. 그렇게 되면 우변의 수식은 모두 0으로 사라지게 된다. 이 것이 maxV(D,G)가 된다.
이런 방법으로 서로 피드백을 주며 평형점에 도달하기 위해서 학습을 진행시키지만, 한쪽이 이득을 보면 한쪽이 손해를 볼 수 밖에 없는 구조이기 때문에 모두를 만족시킬 수 있는 평형점을 찾기가 쉽지 않다. 따라서 실제의 학습에서 한쪽을 상수로 고정하고 다른 변수에 대해 문제를 푸는 방식의 접근을 할 수 밖에 없다.
1.2 DCGAN
1.3 Conditional GAN
[11] 의 conditional GAN은 GAN의 어떤 문제점을 해결한 논문이다. GAN 논문이 발표된 후 얼마 지나지 않아서 발표된 점도 놀랄 만 하다. 기존 GAN은 generator을 통해 어떤 target 이미지를 생성하지만, 어떤 이미지를 만들지 결정짓는 작업은 하지 못했다.
논문을 읽어보면 아래 사진과 같이 그저 condition을 주면 된다고 주장을 하는데, 직접 해보기 전까지는 믿을 수 없을 만큼 간단하고 명료하다.
📷
즉, Generator와 Discriminator에 특정 condition 인 y값만 정보로 주면 된다. 조건으로 주는 y의 형태도 특별한 값이 아니다. 예를 들어서 꽃이 10가지의 종류로 되어있다면 그 종류에 해당하는 label이 곧 y가 된다.
📷 (1)
minGmaxDV(D,G) = EX~Pdata(x)[logD(x)] + Ez~Pz(z)[log(1-D(G(z)))] (2)
(1)은 conditional gan의 수식, (2)는 original gan의 수식이다.
수식을 살펴보면 y가 (2)에 조건부로 들어간 것을 제외하면 (1)과 (2)의 형태는 동일한 알고리즘을 따른다고 할 수 있다.
마지막으로 CGAN의 Future work에 흥미로운 점이 있다. 논문의 내용은
Also, in the current experiments we only use each tag individually. But by using multiple tags at the same time.
이다.
즉, 논문의 CGAN은 y컨디션으로 단일 tag를 주었지만, multiple tags 를 동시에 조건으로 준다면 더욱 섬세한(?), 좋은 결과를 낼 수 있을 것 이라고 예상한다. 예상은 적중했고 CGAN의 주요 개념이 pix2pix, discogan, cyclegan등에 적용되었다.
1.4 cycle GAN
1. 4. 1. Unsupervised task에 대한 CycleGAN의 유용성 요약
CycleGAN은 style transfer에 쓰일 수 있으며, paired training data가 없는 태스크에 적합하다.
4. 2. CycleGAN 소개
GAN이 도메인 X에서 도메인Y로의 변형을 G(X)와 Y의 구분이 불가능하게 함으로서 배운다는 점을 떠올려 보았을 때, 지금까지의 GAN 컴퓨터비전 알고리즘들은 supervised setting, 에서는(여기서의 Supervised setting이란 예컨대 색칠되지 않은 스케치와 그 스케치에 대해 완성된 채색 그림처럼 비슷한 도메인의 예시 이미지 쌍으로 된 훈련데이터가 있는 경우를 말한다) 파워풀했으나 이런 데이터셋은 사실상 구하기 힘들다.
그래서 서로 다른 도메인 간의 데이터셋을 통하여 ‘무언가’를 배울 수 있는 GAN 알고리즘을 찾을 필요성이 대두되었다.
4. 3. 기존 task에서 한 발 나간 Style transfer
cycleGAN은 style transfer에 사용할 수 있는데, Style transfer란 다음과 같은 것을 말한다 : 실제 풍경 사진과 그것을 그린 모네 그림의 페어가 아니라, 실제 사진과 모네 그림 세트에 대한 지식(여기서는 훈련 셋트이다)이 있을 때라도 GAN 알고리즘을 통하여 Style transfer를 할 수 있다. 이는 데이터셋이 훈련에 알맞게 수집되어 있지 않은 상태에서도 unsupervised learning을 수행할 수 있게 한 것이다.
4. 4. Underlying Density의 가정과 그를 기반으로 한 서로 다른 도메인의 Representation으로서 Unsupervised Dataset의 이해와 CycleGAN을 이용한 Unsupervised learning
어떤 데이터(Style transfer의 경우에는 이미지)를 원본 도메인(X)으로부터 목표 도메인(Y)으로 translate하는 방법을 제시하는 것이 cyclegan이다.
최우선의 milestone은 G: X -> Y인 mapping G를 찾는 것으로서, adversarial loss를 사용해서 G(X)가 Y와 구분 불가능한 G(X)를 찾는 것이다.
그러나 이 단계에서 G는 매우 조건이 부족한 매핑이기 때문에 이와 인버스 매핑 관계의 F : Y -> X를 찾고 여기서 cycle consistency loss라는 것을 도입한다. 이는 하나의 매핑 F 또는 그 역 G가 조건이 부족함으로 인해서 서로 너무 다른 도메인의 부분을 매핑하지 않도록 한다. 즉 도메인 X로부터 도메인 Y로 갔다가 다시 X로 돌아왔을 때, 다시 원래 이미지를 얻을 수 있게 한다. 서로 다른 도메인이므로 서로 다른 distribution을 mapping하는 function들이 transitivity를 유지하게 하는 것이다.
이는 수식적으로는 F(G(X)) = X 과 그 역이 성립하게 한다. 이렇게 F와 G는 일관성을 유지하게 된다.
4. 4. 1. Underlying density
모네 이미지와 실제 풍경 사진의 두 이미지 콜렉션이 실제 세상의 서로 다른 렌더링이라고 간주하여 한 이미지 콜렉션의 특별한 성질을 포착, 이 특질들이 다른 이미지 집합에서는 어떻게 translated될 수 있는지(how these characteristics could be translated into the other image collection)를 training examples 없이도 알아낼 수 있는 방법론을 제시한다. 그러므로, 서로 다른 도메인이라 하더라도 도메인 간에 어떤 underlying density가 있다고 가정하는 것이다.
underlying density가 있고, 서로 다른 두 개의 렌더링 사이에는 상호 매핑 function G : X -> Y 와 그 역 F : Y ->X 가 있다고 가정하고 출발한다.
4. 5. CycleGAN의 두 loss function
cyclegan은 두 가지의 loss를 사용한다.
4. 5. 1. Adversarial loss CycleGAN의 두 loss 중 하나는 G와 F의 두 mapping function에 대하여 각각 전통적인 adversarial loss이다.
CycleGAN의 adversarial loss를 적용할 때, mapping function G는 Discriminator Y와 쌍을 이루고, mapping function F는 Discriminator X와 쌍을 이룬다.
Generator-discriminator 쌍은 두 개 존재하게 된다.
LGAN(G, DY , X, Y ) = Ey∼pdata(y) [log DY (y)] + Ex∼pdata(x) [log(1 − DY (G(x))],
4. 5. 2. Cycle Consistency loss 또다른 하나는 위의 G와 F가 상호 모순적이지 않도록 cycle consistency loss을 도입하는 것이다. 일찍이 GAN은 주어진 데이터를 목표 도메인의 distribution으로 mapping function(Generator 네트워크를 통해 구현된다)을 통해 데이터포인트 전체를 새로운 타겟 도메인 데이터로 대치시키는 알고리즘이었는데, 이것만으로는 G와 F가 각 도메인의 서로 비슷한 부분을 매핑하는 것을 보장할 수 없다.(under-constrained) 따라서 forward cycle consistency와 backward cycle consistency라는 두 가지를 다음과 같은 손실함수를 통해 모델을 훈련시킴으로서 만족하도록 한다.
Lcyc(G, F) = Ex∼pdata(x) [kF(G(x)) − xk1] + Ey∼pdata(y) [kG(F(y)) − yk1].
4. 6. Conclusion
Cyclegan은 서로 다른 도메인 간에도 underlying density가 있다(즉 실제 세상에 대한 두 가지 서로 다른 representation이라는) 는 가정 하에, 이들이 서로 번안될 수 있도록(transitivity)하는 길을 열어 주게 되었다. 또 GAN의 안정적인 결과물 도출에도 영향을 주었다.
2. Activation Function
활성 함수란 어떠한 신호를 입력받아 이를 적절한 처리를 하여 출력해주는 함수를 말한다. 이를 통해 출력된 신호가 다음 단계에서 활성화 되는지를 결정한다.
[4] 위의 그림과 같이 input data →activation function → output data를 얻게 되는다. 따라서 어떤 활성함수의 사용했는지에 따라 deep neural network에서의 vanishing gradient 문제로 인해 학습의 정도가 달라지기도 한다. 따라서 기본적인 활성함수의 종류를 정리해본다. 또한 GAN model에서 주로 사용되는 활성함수를 살펴보고 이유를 정리해 본다. 📷
2.1 Sigmoid function
📷
수식 : σ(x)=11+e-x, (0 , 1)
(sigmoid function의 1차 미분 그래프)📷
시그모이드 함수는 완전히 값을 전달하지 않거나(0) 전달하는(1) 특성이 있다. 초기에 널리 사용되었으나 Vanishing Gradient라는 문제로 인해 다른 활성 함수로 대체되고 있다.
Sigmoid의 그래프를 살펴보면 활성화 값이 0 또는 1과 가깝다면 편미분 값이 0에 매우 가까워지는 특성이 있다. 인공신경망의 back propagation에서 가장 일반적으로 사용되는 경사 하강법에는 chain rule이 적용되는데, 이 과정에서 0에 매우 작은 값이 계속 곱해지면 그 값이 0으로 수렴한다. 그렇게 되면, weight update가 매우 작아지고 학습이 원하는 방향으로 update되지 않는다. 이러한 문제를 Vanishing Gradient problem이라고 정의한다.
또한 Sigmoid function그래프를 살펴보면 중심값이 0이 아닌 0.5이며, 양수 범위에서 값이 존재한다. 이 경우 모수 추정 학습이 어렵고 수렴속도 저하를 일으키는 단점이 있다.
마지막으로 relu(2.3)과 비교했을 때, exp()의 성질로 인해, 미분을 하여도 exp()형태가 남아 있어 연산량이 증가한다. 따라서 연산량의 효율적인 사용에도 부정적인 영향을 끼친다는 점이 있다.
Sigmoid 함수는 binary classification에 적절한 함수다. network의 활성화 함수에 넣기 보다는 특정 용도(binary classification)에 맞게 사용하자.
2.2 Tanh function
Tanh function은 하이퍼볼릭탄젠트라고 불리며, sigmoid function의 크기와 위치를 조절한 함수라고 할 수 있다.
2.1에서 sigmoid function을 σ(x)=11+e-x, (0 , 1)라고 정의를 했다. Tanh함수는 tanh(x) = 2σ(2x) -1 = ex-e-xex+e-x,(-1, 1)로 정의가 된다. 직관적으로 수식을 살펴보면 위의 설명이 이해가 될 것이다. 아래 그래프로 다시 살펴보자.
Tanh 그래프📷
그래프의 모양은 sigmoid function과는 달리 0을 기준으로 대칭인 것을 확인할 수 있다. Sigmoid function의 단점 중 중심 값이 0이 아닌 것을 해결한 점을 제외하고는 tanh와 sigmoid는 특별한 차이가 없다. 단지 학습 수렴 속도가 조금 빨라졌다. 아래의 미분 그래프를 살펴보면 {x > 5, x< -5 }에서 gradient가 0으로 작아지기 때문에 vanishing gradient 문제가 여전히 존재한다. 마지막으로 exp() 단점 또한 해결하지 못했다.
📷
2.3 Relu function
Relu는 Rectified Linear Unit의 약자로, 선형함수이다. Sigmoid function의 gradient vanishing 문제를 해결하기 위해 많이 사용되고 있다. 선형함수이기 때문에 미분이 간단하게 된다. 그래프의 모양은 다음과 같다.
📷
수식 : f = max(0,x)
그래프로 확인해보면, x가 양수이면 기울기가 1로 일정하므로 gradient vanishing problem을 피할 수 있고, 미분하기도 편리해 연산 효율도 좋다. 동일 모델 연산 결과로 비교하면 sigmoid에 비해 6배 빠르다.
다만 위 그림에서 확인할 수 있듯 0을 기준으로 대칭인 모양이 아니다. 또한 x가 음수이면 그래디언트가 무조건 0이된다는 단점이 있다. 이를 극복하기 위해 2.4의 Leaky relu가 고안되었다.
2.4 Leaky Relu function
relu의 가장 큰 단점은 음의 영역(not active)인 경우 zero gradient를 갖는 다는 것이다. 이 것은 weights의 update가 발생하지 않는 경우를 유발하고 학습 속도 저하를 유발할 수 있다. 이런 문제를 해결하기 위해서 Leaky relu가 만들어 졌다. 수식과 그래프는 아래와 같이 표현된다.
📷
수식 : ai,j,k = max(zi,j,k , 0) + ƛmin(zi,j,k, 0)
ƛ 는 미리 정해놓은 (0,1) 사이의 값이다.
Leaky relu를 사용하므로써 음의 영역에서 작지만 0이 아닌 gradient를 얻을 수 있다.
2.5 Parametric relu
Parametric relu는 다른 활성함수에 비해 대중적으로 많이 알려지지 않았다. 우선 수식으로 살펴보자. 그래프는 2.4의 leaky relu그래프의 주황색을 보자.
수식 : ai,j,k = max(zi,j,k , 0) + ƛk min(zi,j,k,0)
ƛk 는 learned parameter for the kth channel이라고 한다. 즉, ƛk의 값은 학습이 진행되는 동안 계속 변하는 not predefined 값이다. backpropagation을 할 때 weight를 업데이트 하듯 학습시 업데이트 해준다.
leaky relu, parametric relu모두 relu의 성능 개선을 위해 만들어졌으나 100% 성능을 향상시켜준다는 보장은 하지 못한다. 모델을 만들 때 최종 모델에서 위의 relu 종류를 각각 사용해보고 성능 개선이 존재한다면 사용하는 것이 좋을 것 같다.
2.6
3. CNNs
3.1 Basic CNN with Alexnet(작성중)
AlexNet은 ILSVRC-2012 우승작이다. Alexnet이 이 대회에서 우승한 뒤로 GPU 연산을 활용한 CNN이 이미지 인식 분야의 떠오르는 대세가 되었다는 점에서 큰 의미를 가진다.
2012 ILSVRC에서 Alexnet을 활용하여 이미지 인식률 84.7%로 2위인 팀(73.8%)와 엄청난 차이로 우승을 했다.
Alexnet 의 모델은 아래와 같다.
📷
3.1.1 CNN 주요 용어 정리
1) Convolution(합성곱)
2) Channel(채널)
3) Filter(필터)
4) Stride(스트라이드)
5) Padding(패딩)
6) Feature Map(피처 맵)
7) Activation Map(액티베이션 맵)
8) Pooling layer(풀링 레이어)
3.2 Inception
3.3 VGG
3.4
4. Pooling layer
4.1 Lp Pooling
Lp pooling은 복잡한 세포를 모델링한 pooling process이다. Lp pooling은 max pooling보다 더 일반화 된 것이라고 생각하면 된다. 아래와 같이 수식을 살펴보자.
yi,j,k = (m,nRijam,n,kp)^1/p, yi,j,k 은 k번 째 feature map 에서 i ,j의 위치의 값.
p = 1의 경우, average pooling, p=∞ 의 경우 max pooling이 된다.
즉, 보편적으로 알고 있는 pooling 개념의 일반적인 식 표현이다.
4.2 Mixed Pooling
: Mixed pooling은 문자 그대로 어떤 방법의 조합인데, 그 조합이란 average pooling과 max pooling의 조합이다. Mixed pooling의 수식은 아래와 같다.
수식 : yi,j,k = ƛm,nRijam,n,k = (1- ƛ)1Rijm,nRijam,n,k
ƛ : random value(0 or 1) 으로 average 또는 max pooling을 선택한다.
ƛ=0 이면 average pooling, ƛ=1 이면 max pooling 을 선택한다.
ƛ는 back propagation에서 학습에 따라 바뀌며, [10]논문에 따르면 overfitting 방지와 accuracy 향상에 효과가 있다고 주장하고 있다.
4.3 Stochastic Pooling
4.4 Spectral Pooling
4.5 Spatial pyramid Pooling
4.6 Multi-scale orderless Pooling
4.7
5. Loss Function
Loss function은 같은 모델을 대상으로 하더라도, 모델의 성능을 올리기 위해 변형하여 사용해서 실험결과에 반영한다. 또한 적절한 Loss function을 사용하는 것도 중요하다.
5.1 Hinge loss
Hinge loss는 support vector machine(SVM)과 같이 large margin classifier의 학습에 주로 사용된다. 즉, 학습데이터 각각의 범주를 구분하면서 데이터와의 거리가 가장 먼 decision boundary를 찾기 위해 고안된 손실 함수의 한 부류이다.
*margin classifier : https://en.wikipedia.org/wiki/Margin_classifier 참고
binary classification 문제에서 모델의 예측값 y’, 학습데이터 실제값 y 사이의 hinge loss는 아래 수식과 같이 정의 된다.
수식 : hinge loss = max{0, 1-(y’ * y)}
SVM에서 y=1, y < (wTx +b ) : 양의 영역, y=-1, y > (wTx +b ) : 음의 영역 을 만족하게 된다. 따라서 svm에서 손실을 0으로 두려는 x는 아래와 같은 식을 만족해야 한다.
수식 : y’ * y = y(wTx +b ) >= 1
즉, y’ * y가 1 미만의 값을 가진다면 x는 양의 영역과 음의영역 사이인 margin에 존재한다는 뜻이다. Y’ * y가 1 이상이라면 손실을 무시하고, 1보다 작으면 작을수록 손실 또한 크도록 유도한 것이 hinge loss 수식의 목적이다.
5.2 Softmax loss
5.3 Contrastive loss
5.4 Triplet loss
5.5 Kullback-leibler Divergence
5.6
6. Regularization
6.1 lp-norm regularization
6.2 Dropout
6.3 DropConnect
6.4
7. Optimization
7.1 Data augmentation
7.2 Weight initialization
7.3 Stochastic gradient descent
학습하고자 하는 모델의 파라미터를 θ, 학습 데이터의 개수를 M이라고 할 때, loss function L(θ)은 아래와 같이 전체 학습 데이터에 대한 평균으로 표현된다.
수식 : L(θ) =📷
L(θ)를 최소하하기 위한 대표적인 방법이 경사하강법(Gradient descent)로서, L(θ)에 대한 기울기의 반대 방향으로 η만큼 parameter update 하는 과정을 여러 iteration을 통해 반복하여 최적의 parmeter θ* 를 찾아낸다.
수식 : θk+1 = θk – η∇L(θ)
단점으로 gradient를 정확하게 계산할 수 있지만, 매 iteration마다 전체 데이터에 대한 loss function을 계산해야 하므로 많은 연산량이 필요하다. 이를 개선한 방법이 한 iteration에 하나의 샘플만 사용하는 Stochastic Gradient Descent 이다. 하지만 이것은 연산속도는 빠른 반면 gradient 추정 값이 noisy하다.
이것을 보완한 새로운 방법이 매 iteration마다 적장한 크기의 mini-batch에 대해 gradient를 구하는 Mini-batch SGD이며 이 방법이 딥러닝에서 가장 일반적으로 사용되는 기법이다. 수식은 아래와 같다.
수식 : θk+1 = θk – η📷
수식에서도 알 수 있듯이 m의 크기가 얼마인지에 따라 학습 과정에서 차이를 보인다. m이 클 수록 gradient 계산이 정확해지지만 연산량이 증가한다. 딥러닝 모델을 학습시킬 때 batch size를 크게 잡으면 메모리 에러가 자주 생기는 이유가 이것 때문이다. 따라서 컴퓨터에 메모리가 충분히 크다면 더 정확한 gradient를 계산해서 더 좋은 결과를 낼 수 있을 것이다.
7.4 Batch normalization
7.5 Instance normalization
7.6 Group normalization
7.7 Batch-Instance normalization
8. Auto Encoder
8.1 Basic Auto Encoder
8.2 Conditinal Auto Encoder
8.3 Variational Auto Encoder
8.4
9. Reference
[1] Generative adversarial nets, 2014
[2] https://pozalabs.github.io
[3] Pattern Recognition, 2017
[4] http://cs231n.github.io/neural-networks-1/
[5] http://zamezzz.tistory.com/215
[6] https://ratsgo.github.io/deep%20learning
[9] https://en.wikipedia.org/wiki/Margin_classifier
[10] Mixed Pooling for Convolutional Neural Networs, 2016
[11] Conditional Generative Adversarial Nets, 2014