요약
진행간 과거에 읽었던 자료, 논문들을 새로 같이 연구하게 되시는 분들이 다시 읽어야하는 현상이 발견하는 것을 확인하고관련 자료들을 문서화 하기로 결정하였습니다.
관련 자료는 현재 내부적으로는 분야별로 구글독스의 형태로 작성되고있습니다.
분야로는 "GAN과 전반적인 모델설계", "NLP와 어텐션"으로 크게 나눠서 진행하고 있고 별도로 기초가 부족하다고 느낀 팀원간 스터디를 진행하고있습니다.
더하여 현재 진행하고있는 문서화 작업은 상당히 많은 진척을 보이고 있습니다.
문서화 작업간 발생한 필요한 코드들은 별도의 버전관리를 통헤
코드 또한 모아나가고 있습니다.
진행
GAN관련 문서화 docs
https://docs.google.com/document/d/1oLxjRun6QSQKwzQHJbS6F9fQEfDRLTv336mNgQTaOqE/edit
NLP, ATTENTION등과 관련한 문서화 docs
https://docs.google.com/document/d/141f839bNky8Tx5jfvu7q7IqFXdNzuszL8x15zh26De0/edit?usp=sharing
다음 연구보고글부터는 세부내용은 독스 링크로 갈음하겠습니다.
GAN(Generative Adversarial Network)
작성자별 표기
김준화 : 0, 1.1, 1.2,1.3, 2.1, 2.2, 2.3, 2.4, 2.5, 3.1, 4.1, 4.2, 5.1, 6.1, 6.2, 7.3
김인수 : 1.4, 1.10
홍은영: 1.2
Orders
0. Introduction
1. GAN Models
1.1 Basic GAN
1.2 DCGAN
1.3 Conditional GAN
1.4 Cycle GAN(2017)
1.5 SLGAN(2016)
1.6 f-GAN(2016)
1.7 LSGAN(2017)
1.8 ACGAN(2017)
1.9 Stack gan(2017)
1.10 Discogan(2017.3)
1.11 EBGAN(2017)
1.12 BEGAN(2017)
1.13 WGAN(2017)
1.14 STARGAN(2018)
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.1.1.1
3.1.1.2
3.1.1.3
3.1.1.4
3.1.2 CNN 종류
3.1.2.1 Conv
3.1.2.2 dilated conv
3.1.2.3 deconvolution
3.1.2.4 transposed conv
3.1.2.5
3.2 inception v1
3.3 inception v2,v3
3.4 inception v4
3.5 VGG-16
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
S8.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.2.1 기존 GAN의 한계
GAN의 불안정성
black box method -> 과정을 알 수 가 없음
Measure for sample evaluation -> 성능 판단 기준이 모호
[12]의 논문은 위에서 언급한 GAN의 문제들을 해결하고자 하였고, 논문이 기여한 점들은 아래와 같다.(수정중)
○ 안정적으로 학습되는 Convolutional GAN구조를 제안->1.2.2,3,4
○ 벡터 산술 연산 가능 ->1.2.5
○ DCGAN이 학습한 filter 시각화->1.2.5
1.2.2 DCGAN 특징
Max-pooling layer를 없애고 strided convolution, fractional-strided convolution을 사용
generator와 discriminator에 Batch normalization을 사용(다만, Generator의 output layer와 discriminator의 input은 제외)
Fully connected hidden layer 제거
Generator output layer에 Tanh 사용, 나머지 layer는 ReLU 사용
모든 Discriminator의 layer에 Leaky ReLU 사용
DCGAN은 기존 GAN에 존재했던 fully-connected 구조의 대부분을 CNN 구조로 대체하고 위에 적혀있는 조건들처럼 각각의 Discriminator와 Generator의 활성화함수, layer 갯수 등 세부적인 구조가 다르다.
1.2.3 DCGAN Generator
아래 그림은 Generator 구조를 나타낸 것이다.
Generator는 random input을 받아서 Discriminator가 사용할 수 있는 64*64크기인 컬러 영상이 나와야 하기 때문에 image feature map 형태로 변형시킬 수 있는 Project and reshape 블럭이 필요하다.
📷
strided convolution, fractional-strided convolution 추가설명
📷
https://www.slideshare.net/shyamkkhadka/unsupervised-learning-represenation-with-dcgan
strided convolution
5*5 영상에 3*3 컨볼루션 필터를 가지고 컨볼루션 마스크를 씌우는 것이다. stride는 2, zero-padding으로 두었으니까 ouput은 3*3으로 출력의 크기가 줄어드는 것을 확인할 수 있다.
2) fractional-strided convolution(dilated convolution)
아래 그림에서 (a)는 우리가 흔히 알고 있는 1-dilated convolution이고, (b)는 2-dilated convolution이며 빨간색 위치에 있는 점들만 convolution 연산에 사용되고 나머지는 0으로 채운다. 이렇게 하면 receptive field의 크기가 7*7영역으로 커지게 된다.(c)는 4-dilated convolution이고, receptive field의 크기가 15*15로 커지게 된다.
📷https://laonple.blog.me/220991967450
최종적으로,100 dimensional uniform distribution(Z)가 들어오면 fractional-strided convolution을 통해 G(z)를 표현할 수 있게 되었고 64*64*3 크기의 RGB영상을 리턴하는 모델을 만들 수 있다.
1.2.4 DCGAN Discriminator
📷
Discriminator은 64*64*3 크기의 컬러영상을 입력받아서 1차원 결과를 출력한다.
1.2.5 DCGAN의 성과(수정중)
Discriminator에서 convolution filter가 특정물체를 학습한다는 것을 확인
(Discriminator filter 시각화)
Generator에서 memorization이 일어난 것이 아니라는 것을 확인(이미지를 외워서 보여주는 것이 아니고 유의미한 특징을 학습)->walking in the latent space, 기억망각
Generator의 입력으로 들어가는 z vector에 대한 산술 연산이 가능하고 segmentic하게 출력 결과 조절 가능->z 벡터 연산
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의 안정적인 결과물 도출에도 영향을 주었다.
1.4 Cycle GAN(2017)
1.5 SLGAN(2016)
1.6 f-GAN(2016)
1.7 LSGAN(2017)
1.8 ACGAN(2017)
1.9 Stack gan(2017)
1.10 Discogan(2017. 3) (수정 중)
Learning to DISCOver Cross-Domain Relations with Generative Adversarial Networks
(https://arxiv.org/pdf/1703.05192.pdf)
DiscoGan을 이용하여 수행 가능한 태스크
사람이 서로 다른 도메인으로부터 온 데이터의 관계를 쉽게 알아차리는 것과 다르게, 그를 컴퓨터를 이용하여 자동적으로 찾는 일은 어렵고 관계를 설명하는 Ground-truth pair를 요구한다. 즉 서로 다른 도메인으로부터 온 데이터포인트들을 서로 페어링한 데이터가 필요하다.
DiscoGAN을 사용하면 이런 식으로 짝지어진 데이터가 아닌 데이터로부터도 서로 다른 도메인간의 관계를 발견할 수 있는데, 이렇게 발견된 관계를 통하여 디스코간은 '방향' 이나 '얼굴의 동일성' 같은 중요 특성을 보존한 채로 한 도메인에서 다른 도메인으로의 스타일 변형(Style transfer) 을 수행하여 낸다.
인트로
영어 문장과 그 문장이 프랑스어로 번역된 문장
같은 스타일의 정장 자켓과을 어떤 바지나 신발과 함께 선택할지, 사람들은 그 관계를 잘 안다.
하지만 기계도 이처럼 서로 다른 이미지 도메인을 연관시키는 능력을 가질 수 있을까?
연관 문제로 접근: Style transfer
Style을 유지하며 도메인만을 바꾸는 Style transfer 문제는, 어떤 조건이 주어졌을 때 이미지 생성 문제와도 연관될 수 있다.
왜냐면 도메인으로부터 다른 도메인으로 연결되는 매핑 함수를 찾는 것은, 한 도메인에서 어떤 이미지가 주어진 채로 다른 도메인의 이미지를 생성해 내는 문제로 생각될 수 있기 때문이다.
이런 Style transfer문제들이 최근에 GAN을 통하여 많이 해결되고 있긴 하지만, 이 문제들은 대부분 인간의 수작업이나 다른 알고리즘을 통하여 직접적으로 한 쌍으로 짝지어진 데이터셋을 사용해서 모델을 훈련시키는 방법으로 스타일 트랜스퍼에 접근하므로, Unpaired dataset을 가지고 훈련을 하지는 못한다.
그러나 Unpaired dataset을 가지고 훈련할 수 있는 알고리즘을 찾아야 하는 이유
일단 paired dataset을 찾거나 만들기 힘든 이유도 있지만, 다음과 같은 문제도 존재한다.
바로 A 도메인의 어떤 이미지와 스타일이 같은 B 도메인의 대응 이미지가 없거나, 동일한 스타일에 해당하는 적절한 후보 이미지가 여러 개일 경우에는 이미지를 짝짓는 작업이 어렵다는 문제이다.
Discogan이 그런 관계를 찾는 방법
Train : 서로 다른 두 도메인의 Unpaired 이미지 셋
Input : 한 도메인의 이미지
Output : 다른 도메인의 해당하는 스타일의 이미지
DiscoGAN 모델의 구성
DiscoGAN은 두 GAN들을 한 쌍으로 하여 구성되어 있다.
그리고 두 개의 각 GAN들은 각각의 GAN의 Generative function이 그 상대 도메인의 Counterpart로 확실히 매핑되도록 한다.
중요 intuition은
한 도메인의 모든 이미지가 다른 도메인의 이미지들로 표현 가능하도록 제한하는 데 있다
예를 들자면 하나하나의 핸드백 이미지로부터 신발 이미지를 만들고자 모델을 훈련시킨다고 하면 이 만들어진 신발 이미지를 핸드백 이미지의 이미지를 기반으로 했을 뿐인 표현(representation)이 되도록 하는 것이다.(그렇게 하면 이 이미지기반의 표현은 이후 다시 핸드백 이미지로 재구성되어 원래 도메인으로 돌아올 수 있도록 된다.)
이는 reconstruction(재구성) 손실 함수를 통하여 가능하게 된 여기에, GAN loss를 함께 사용하면 '신발 도메인'에 있는 이미지들과 가능한 한 가까운 이미지가 된다.
이 두 가지 특성을 사용하여서 양쪽 도메인의 맵핑 함수를 잘 찾아내도록 한다. 잘 찾아낸 맵핑 함수는 여러 이미지-한 이미지(여러 개의 이미지가 다른 도메인의 하나의 이미지로 이어지는 것)나 한 이미지-여러 이미지(한 이미지가 다른 도메인의 여러 개의 이미지로 이어지는 것) 맵핑이 아니도록 해야 할 것이다.
DiscoGAN의 실험으로부터, 간단한 아이디어가 서로 다른 두 도메인의 공통 특성이나 스타일을 잘 발견해 낸다는 것을 볼 수 있다.
간단한 2차원 영역에서 데이터포인트들 간의 (도메인)이동을 하였을 때 DiscoGAN 모델은 두 개의 베이스라인으로 삼은 모델보다 mode collapse problem에 강력한 면을 보였다.
DiscoGAN은 두 이미지 도메인 간의 양방향성 맵핑을 학습하는 데도 강점을 보였다. (얼굴, 차, 의자, 윤곽선과 사진) 그리고 이미지 translation에도 성공적으로 적용할 수 있었다.
translation된 이미지는 다른 모든 요소들은 유지한 채, 머리 색, 성별, 그리고 방향과 같은 지정 특질들만을 변형했다. 결과물은 또한 DiscoGAN 모델이 반복된 translation mapping의 반복 적용에도 강력함을 보였다.
1.11 EBGAN(2017)
1.12 BEGAN(2017)
1.13 WGAN(2017)
1.14 STARGAN(2018) (작성중)
STARGAN을 들어가기에 앞서 image to image translation에 대해 간단히 소개하고자 한다. Image to image translation이란 주어진 image에 대해 특정한 일부분을 변형하여 다른 image로 바꾸는 것이라고 할 수 있다. 웃는 사람의 초상을 찌푸린 얼굴로 바꾸는 것을 단적인 예로 들 수 있다.
Image to image translation은 성공적인 실험결과를 보이고 있지만, domain수에 따른 한계가 존재한다.📷(그림 출처 : stargan논문)
위의 그림과 같이 4개의 domain에 대해서 학습을 하면 총 12개의 generator가 필요하다. 일반적인 식으로 나타내면,
수식 : k domain → k(k-1) generator 필요하다. 이렇게 되면 domain이 3개 이상만 되더라도 6개의 generator가 필요하기 때문에 학습이 거의 되지 않거나 매우 느린 속도로 학습이 될 것으로 보인다.
하지만 stargan에서 주장하는 idea는 매우 단순하다. 논문에 따르면 input the both image and domain info를 하고 learn을 한다고 한다. 자세히 풀어 쓰면 랜덤하게 타겟 domain label을 생성하고 해당 label에 대한 학습을 진행한다고 한다. 이런 간단한 아이디어로 많은 domain에 대해서도 generator를 많이 사용하지 않고 1개의 generator로도 multi domain에 대한 생성 모델을 만들어 낼 수 있다.
수식 G(x,c) → y, x: input image, c : randomly generate the target domain label c(condition), y : output image , G : generator
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() 단점 또한 해결하지 못했다.
GAN 모델에서 마지막에 등장하는 Activation function.
📷
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
t
즉, 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
D
6. Regularization
Overfitting은 deep learning의 가장 큰 걸림돌이라고 할 수 있다. 이런 Overfitting문제를 해결하기 위한 여러 가지 방법들이 연구되고 있다. Regularization 또한 overfitting을 해결하는데 효과적이다. Regularization은 모델의 일반화 오류를 줄여 overfitting을 방지하는 기법의 총칭이라고 할 수 있다.
Loss, cost를 단순히 작아지는 방향으로 진행하다 보면, 특정 가중치 값들이 커지면서 오히려 학습에 악영향을 미칠 수 있다.
📷
(그림 첨부 : http://enginius.tistory.com/476)
위의 그림을 통해 regularization을 사용 여부에 따른 효과를 확인 할 수 있다.
6.1 lp-norm regularization
[3] 의 3.5.1의 글을 인용해서 적어보면 lp-norm regularization은 다음과 같다.
Regularization modifies the objective function by adding additional terms that penalize the model complexity.
수식 : E(θ,x,y) = L(θ, x, y) + λR(θ), R(θ) =📷
(E(θ,x,y) : objective function, R(θ) : additional(regularization) terms, L(θ, x, y) : loss function, λ : regularization strength)
위 수식에서 p 값에 따라 흔히 알고 있는 L1, L2 Regularization으로 분류가 된다. 즉 위의 수식은 lp norm regularization의 일반 식이다.
L1 , L2 Regularization의 차이는 무엇이고 언제 L1을 L2를 사용하는지 아는것이 가장 중요하다.
L1을 사용하게 되면 상수 값이 마이너스가 되어 작은 가중치들은 0으로 수렴한다. 그래서 중요한 몇개의 가중치만 남게 된다. 따라서 몇 개의 의미있는 값을 얻고 싶은 경우 사용한다.
(보충 필요 - 수식 증명하면 좋은데 나중에 하겠습니다^^)
L2를 사용하게 되면 학습의 방향이 단순히 loss를 줄이는 방향 뿐만아니라 제곱의 형태이기 때문에 weight 또한 작아지는 방향으로 진행을 한다.
결론적으로 일반적인 딥러닝 모델에 regularization을 적용할 경우, L2 를 사용한다.
6.2 Dropout
모델 설계를 할 때 layer가 깊어 질 수록 더 많은 문제를 해결할 수 있고 학습 능력 또한 올라간다. 하지만 아래 그림에서 볼 수 있듯이 layer가 깊다고 해서 성능이 무조건 좋아지진 않는다.
📷
(그림 출처 : https://medium.com/@lisulimowicz/cnn-model-residual-net-e82b6a0a379d)
이러한 이유는 망의 크기가 커지면 overfitting 에 빠지는 가능성의 증가, 학습시간 증가, 데이터 수의 부족 등이 있다. 이런 망의 크기 증가에 따른 overfitting 문제를 해결하고자 dropout개념이 탄생했다.
📷
(그림 출처 : https://laonple.blog.me/220542170499)
(a)는 모든 layer에 대해 학습을 수행하지만 (b)와 같이 일부 node를 drop한 후 학습을 진행한다. [13] 논문에 따르면 drop하는 node는 mini-batch 구간의 학습이 완료되면 랜덤으로 다른 node를 생략한다고 한다.
Dropout의 효과는 아래 그림을 통해 직접 확인하자.
📷
(그림 출처 : [13])
효과는 dropout에 의해 어느 한 노드 혹은 노드 몇개의 조합에 의한 dependent를 방지하고, 특정 정보가 없더라도 모델이 동일한 예측결과를 내는데 도움(co-adaptation)을 줄 수 있다고 한다. 즉, 특정 학습 데이터에 영향을 받지 않는 robust한 모델을 구성한다.
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 Networks, 2016
[11] Conditional Generative Adversarial Nets, 2014
NLP & ATTENTION
:sentence embedding까지의 NLP학습과
attention을 포함한 네트워크 설계에 필요한 기술들에 관하여
작성자별 표기
강우람 : 3.A, 3.B, 7.A ,7.B
도미래 : 2
Orders
NLP 1)
1. 서론
2. 분산표상
A. 자연어 처리에서 임베딩을 사용하는 이유 B. 단어 임베딩 C. Word2Vec D. 문자 임베딩
3. Recurrent Neural Networks A. RNN 필요성 B. 네트워크 구조 1) RNN 기본 구조 2) Long Short-Term Memory 3) Gated Recurrent Units C. 적용 1) 단어 수준 분류를 위한 RNN 2) 문장 수준 분류를 위한 RNN 3) 문장 생성을 위한 RNN
4. 강화학습과 비지도학습 A. 문장생성을 위한 강화학습 B. 비지도학습 기반 문장 표현 C. 심층생성모델
5. 메모리 네트워크
6. ATTENTION! 2)
A. Born for Translation
B. Definition
C. A Family of Attention Mechanisms
1. Summary
2. Self-Attention
3. Soft vs Hard Attention
4. Global vs Local Attention
D. Transformer
1. Key, Value and Query
2. Multi-Head Self-Attention
3. Encoder
4. Decoder
E. Full Architecture
1. SNAIL
F. Self-Attention GAN
7. Reference
ref 1), 2)는 목차구성간 참조
참고)) 지울예정
문서 작성 중 코드를 첨부하실 예정이라면 부가기능 -> code block을 이용하여
아래 처럼 보이도록 할 수 있습니다! 드래그 한 후 해당 언어를 선택한 뒤 format을 누르면 됩니다!!
from konlpy.tag import Okt okt=Okt() token=okt.morphs("나는 자연어 처리를 배운다") print(token)
NLP 1)
서론
실습 링크 (https://github.com/wooramkang/koreaAI_context_LAB)
분산표상 (도미래 작성중)
자연어 처리에서 인코딩&임베딩을 하는 이유
텍스트 수치화
우리가 사용할 데이터는 텍스트 데이터이다. 하지만 딥러닝 모델은 수치형 텐서만을 이용하기 때문에 텍스트 원본을 입력으로 사용할 수 없다. 따라서 텍스트 데이터를 수치형 텐서로 변경하는 과정이 필요하다.
인코딩(encoding)
자연어 처리에서 인코딩이라는 것은 텍스트를 숫자로 바꾸는 과정을 의미한다. 예를들어 [그림1]처럼 표현하는 것을 ‘the dog on the mat’을 인코딩 했다고 볼 수 있다.
📷
[그림1]
* One-hot encoding
가장 대표적인 인코딩으로 원 핫 인코딩 (One-hot encoding)을 예로 들 수 있다. 단어 집합의 크기를 벡터의 크기로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을, 그 이외의 인덱스에는 0을 부여하는 벡터의 표현 방식이다.
📷
[그림2]
임베딩(embedding)
임베딩이란 범주형 자료를 연속형 벡터 형태로 변환시키는 것을 의미한다. 주로 인공신경망 학습을 통해 범주형 자료를 벡터 형태로 바꾼다. 즉, 인공신경망 학습 과정을 이용하여 각 벡터에 가장 알맞은 값을 할당하는 것이다. 이 과정을 통해 각각의 카테고리는 각각의 특징을 잘 표현할 수 있는 벡터값을 가지게 된다.
단어 임베딩(Word Embedding) (수정중)
앞에서 말한 원 핫 인코딩(One-hot encoding)은 여러 한계를 가진다.
⑴ 단어의 갯수가 늘어나면 벡터의 차원이 늘어난다. (sparse, 고차원임)
이는 학습 속도 저하, 성능 저하 문제를 야기한다.
⑵ 유사성을 전혀 표현할 수 없다.
예를들어 개, 강아지, 멍멍이, 보온병이라는 단어가 주어졌을 때
원 핫 인코딩 방식으로는 개, 강아지, 멍멍이가 서로 유사하고
보온병은 유사 관계나 차이가 없다는 것을 표현할 수 없다.
이를 해결하기 위해 텍스트의 의미를 R차원의 Vector로 매핑시키는 단어 임베딩 (word Embedding) 방식을 이용한다. 단어 임베딩이란 단어를 임베딩하여 벡터 공간으로 옮겨 놓는 것을 의미한다. 따라서 고차원의 원 핫 인코딩 방식과 달리 저차원의 실수형 벡터로 표현된다. 잘 구축된 embedding 공간에서는 동의어가 비슷한 단어 벡터로 embedding될 것이다. 일반적으로는 두 단어의 벡터 사이의 거리가 단어들 사이의 의미상 거리와 관계된다.
* 텐서플로우에서 임베딩을 하는 방법
vocab = len(law_int_to_vocab) embedding = 200 with train_graph.as_default(): embedding = tf.Variable(tf.random_uniform((vocab, embedding), -1, 1)) embed = tf.nn.embedding_lookup(embedding, inputs)
* 케라스에서 임베딩을 하는 방법
from keras.models import Sequential from keras.layers import Flatten, Dense, Embedding model = Sequential() model.add(Embedding(10000, 8, input_length=maxlen)) model.add(Flatten())
Word2Vec 3) (수정중)
Word2Vec란?
문장 내부의 단어(word token)를 벡터로 변환하는 도구이다. 즉 단어의 연결을 기반으로 단어의 연관성을 벡터로 만들어준다. 이를 이용하여 단어의 의미를 파악하게 할 수 있다.
📷
[그림3]
CBOW
Skip-gram
실습하기
파이썬에서는 간단하게 호출하여 사용할 수 있다.
from gensim.models import word2vec
실습한 코드 및 데이터는 github 링크에서 word2vec_test.py , word2vec_check.py를 참고하면 된다. 실습은 국립국어원에서 저장한 ‘벽에서 빠져나온 남자’ 텍스트 데이터로 word2vec 모델을 생성한 후 [‘당신’]이라는 단어와 가까운 단어를 추출하여 그래프로 출력한 결과이다.
이렇게 word2vec는 단어와 연관성이 있는 단어를 보여준다. 물론 데이터가 책한권 분량의 데이터이므로 원하는 결과를 출력하기 위해서는 큰 규모의 데이터로 테스트를 진행하면 된다.
📷
[그림4]
문자 임베딩
3. Recurrent Neural Networks A. RNN 필요성 B. 네트워크 구조 1) RNN 기본 구조 2) Long Short-Term Memory 3) Gated Recurrent Units C. 적용 1) 단어 수준 분류를 위한 RNN 2) 문장 수준 분류를 위한 RNN 3) 문장 생성을 위한 RNN
4. 강화학습과 비지도학습 A. 문장생성을 위한 강화학습 B. 비지도학습 기반 문장 표현 C. 심층생성모델
5. 메모리 네트워크
6. ATTENTION! 2)
A. Born for Translation
B. Definition
C. A Family of Attention Mechanisms
1. Summary
2. Self-Attention
3. Soft vs Hard Attention
4. Global vs Local Attention
D. Transformer
1. Key, Value and Query
2. Multi-Head Self-Attention
3. Encoder
4. Decoder
E. Full Architecture
1. SNAIL
F. Self-Attention GAN
7. Reference
ref 1), 2)는 목차구성간 참조
https://ratsgo.github.io/natural%20language%20processing/2017/08/16/deepNLP/
Efficient Estimation of Word Representations in Vector Space