티스토리 뷰

Deep Learning

Building Basic GAN, Week2 - Lecture

seoyoung02 2024. 2. 3. 14:30

※ Coursera의 Build Basic Generative Adversarial Networks (GANs) 강의를 듣고 작성한 글입니다.

Week 2에서는 GAN과 관련된 구성 요소들을 알아봅니다.

Activations

딥러닝 layer는 linear한 연산들로 이루어져 있습니다. Linear한 연산은 하나의 linear연산으로 계산해 낼 수 있으므로 결국 하나의 연산과 같아지는 일이 발생합니다. 이러한 계산에 복잡도를 더하기 위해 non-linear를 더해주어야 합니다. 이러한 non-linear연산은 backpropagation에 미분이 사용되므로 미분가능해야합니다. 이러한 조건을 만족하여 layer에서 activation을 구하기 위해 사용하는 함수를 activation function이라고 합니다. (이 강의에서 activation function을 통과해 나온 결과를 activaion이라고 하는 것 같아요.)

Activation functions

Example of activation functions

ReLU를 제일 많이 사용한다고 합니다. 그래프에서 보이는 것 처럼 모든 음수를 없애버립니다. 이러면 음수에서 미분값도 0이 되는데 weight를 업데이트하는데 필요한 중요 정보를 잃어버리는 것이라서 neuron이 inactive해지는 문제가 발생합니다. 이를 dying ReLU problem이라고 합니다.

Leaky ReLU는 음수 부분을 0으로 만들지 않고, 약간의 기울기를 남겨두는 것입니다. 하지만 운이 나쁘다면 linear가 되어버릴 수 있다고 합니다.

Sigmoid는 exponential을 사용한 형태입니다. 0~1의 값을 가지고, 양 끝으로 멀어질 수록 기하급수적으로 0또는 1에 가까워집니다. 따라서 기울기가 0에 가까워져 input이 0에서 너무 멀면 정보가 줄어드는 문제가 발생합니다.

Tanh도 양끝으로 멀어질수록 -1 또는 1에 가까워지므로 sigmoid와 같으 문제를 가집니다. -1까지 범위이기 때문에 sign을 유지한다는 장점이 있습니다.

 

 

Batch Normalization

데이터의 distribution에 따라 cost function의 모양이 달라지는데 이걸 norm 해주면 균일한 모양이 됩니다.

Covariant Shift와 Normalization의 효과

Covariant shift란 input의 분포가 달라지면 cost function의 분포가 달라지는 것입니다. 이는 한 데이터 셋 안에서 train/test 차이에서도 발생할 수 있습니다. 이러한 현상은 batch normalization을 사용하면 완화할 수 있습니다.

딥러닝은 여러 layer로 이루어져 있습니다. 각 layer마다 covariant shift가 발생할 수 있는데 이를 internal covariant shift라고 합니다. 학습을 하면서 weight가 업데이트되면 activation에 영향을 미쳐 activation의 분포가 계속 변하게 됩니다. 이것을 batch normalization을 통해 안정화 해주면 학습이 쉬워지고 빨라집니다.

Batch Normalization Training

Batch normalization은 단순히 분포의 평균을 0으로 만드는 것이 아니라 shift factor, scale factor를 통해 모델에 맞게 rescaling을 해줍니다. 이 shift factor와 scale factor는 학습하여 얻이집니다.

 

Convolution

Convolution은 이미지관련 task에서 feature를 추출하기 위해 많이 사용되는 방식입니다. GAN에서도 중요한 부분이라고 합니다. Convolution에는 filter가 있고, 이 filter를 이동시키며 filter와 겹치는 영역의 값을 filter값과 곱하고 합해줍니다. 이러한 과정을 모든 이미지에 걸쳐 진행하면 최종 result를 얻게 됩니다. 

Padding and Stride

이 때, 몇 칸 이동시킬지를 stride라고 합니다. 

Padding

Convolution을 input에 그대로 적용하면 중심에만 집중되는 문제가 있습니다. 패딩을 넣으면  input의 모든 영역을 균형있게 반영할 수 있습니다. 많은 경우 zero padding을 사용합니다.

Pooling and Upsampling

Max pooling

Pooling은 convolution을 사용해 dimension을 낮춰주는 역할을 합니다. 딥러닝에서 연산량을 줄이기 위해 크기를 줄이기 위해 사용되기도 합니다. 기존 convolution 처럼 parameter가 있어 이를 사용해 결과를 계산하는것이 아니라, 최대/최소/평균의 값을 사용하기 때문에 학습하지 않습니다.

Upsampling은 pooling과 반대 과정입니다. 작은 input의 크기를 키워줍니다. Upsampling도 pooling과 마찬가지로 parameter를 따로 가지지 않고, 근처의 값을 그대로 사용하거나, interpolation을 통해 계산해주므로 학습이 필요하지 않습니다.

Transposed Conv

Transposed Convolution and Problem

 

Upsampling 테크닉 중 하나로 filter에 parameter를 두어 학습합니다 . 위에 설명했던 convolution의 문제점인 가운데에 집중되는 문제가 upsampling에도 존재해 chckerboard pattern 문제가 발생합니다. 이러한 문제로 최근에는 upsample이후convolution을 사용하는 조합을 더 많이 사용한다고 합니다.

댓글
최근에 올라온 글
Total
Today
Yesterday
최근에 달린 댓글
링크
공지사항
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함