본문 바로가기
Machine-Learning/GAN (Generative Adversarial Network)

[GAN] AutoEncoder의 모든 것 (Revisit Deep Neural Networks)

by AteN 2022. 10. 18.

오토 인코더의 모든 것

위키피티아를 통해 오토인코더의 키워드를 뽑아보면 크게 Unsupervised learning, Representation(= efficient coding learning), dimensionality reduction, generative model learning 으로 5가지로 주요 키워드를 뽑아 낼 수 있으며, 이중에서 가장 중요하게 생각하는 것은 dimensionality reduction을 사용하는 것이다.

이중에서 dimensionality reduction의 키워드를 뽑아보면 Unsupervised Learning, Nonlinear dimensionality reduction (= Representation learning = Efficient coding learning = Feature extraction = manifold learning), generative model learning 으로 사용되는 것을 알 수 있다.

최종적으로 오토인코더와 관련된 키워드를 정리하게 되면 다음과 같이 4가지로 구분할 수 있다.

 

[keywords] :unsupervised learning, manifold learning, generative model learning, ml density estimation

오토 인코더를 학습할 때 학습 방법은 비교사 학습 방법을 따르며 unsupervised learning
loss는 negative ML로 해석 ml density estimation
학습된 오토인코더에서 인코더는 차원 축소 역할을 수행한다 manifold learning
디코더는 생성 모델의 역할을 수행한다  generative model learning

이 강의에서 다룰 내용은 크게 5가지 목차로 구분되어 있다

 

Revisit Deep Neural Networks

Machine Learning Problem

Keyword : ML density estimation

  • 딥뉴럴넷을 학습할 때 사용되는 로스함수는 다양한 각도에서 해석할 수 있다
  • 그 중 하나는 Back-propagation 알고리즘이 좀 더 잘 동작할 수 있는지에 대한 해석이다 (gradient-vanishing problem이 덜 발생할 수 있다는 해석)
  • 다른 하나는 negative maximum likelihood로 보고 특정 형태의 loss는 특정 형태의 확률 분포를 가정한다는 해석이다
  • autoencoder를 학습하는 것 도한 maximum likelihood 관점에서의 최적화로 볼 수 있다.

먼저 오른쪽을 보게 된다면 우리가 머신러닝을 한다고하면 어떤 데이터가 주어지고 그 데이터에서 우리가 뽑고 싶은 정보가 있을 것이다. (ex. 이미지 같으면 얼굴의 위치) 그래서 supervised learning의 경우 데이터 수집하게 된다. 모델을 정의하게 되고 알맞은 모델을 선택해야 한다. 모델을 정하게 되면 파라미터를 학습 tuning하게 되어야 한다. 그래서 정의된 모델에 대한 파라미터를 수정하면서 예측 값과 출력 값의 다른 정도에 따라서 loss function을 최소화되는 과정을 거치게 된다. 마지막으로 잘 학습된 모델을 통해서 추론을 할 수 있게 된다. 이렇게 하는 단계를 진행하는 것이 고전적인 머신러닝의 단계라고 할 수 있다.

 

만약 Deep Neural Network을 사용하겠다고 생각하게 된다면 데이터 수집은 동일하게 진행하면서 Define functions에서 달라질 수 있게 된다. Define functions에서 Deep Neural Network을 사용하겠다고 정의하게 되는 것이다. 이때 모델의 네트워크를 구성하게 되며 (ex. CNN, RNN 등)을 정의하게 되고, 이렇게 정해지면 학습에 대한 weight와 bais를 통해서 파라미터 \( \theta \)를 구성하게 되는 것이다.

주로 Deep Neural Network을 사용하게 되면 back-propagation을 통해 loss function을 정의할 수 있게 되는데 이때의 가정을 보게 되면, 첫 번째로 전체에 대한 loss function은 training DB 전체의 loss function은 각 샘플 loss function들의 loss를 구한 거에 합과 같다. 두 번째로 샘플별 loss function의 인자인 정답이랑 네트워크의 출력값 중에서 네트워크 출력값만을 사용해서 loss function을 구한다. 즉 네트워크의 중간 값으로 사용할 수 없으며, 네트워크의 종단으로 사용할 수 있다.

그 다음에 학습을 시키며, 학습을 시킨다고 한다는 것은 training DB 전에 대한 loss를 minimize한 파라미터 세타를 찾는다. 이때 주로 Gradient Descent 방식을 사용한다. Gradient Descent 는 간단하게 설명하면 Iterative Method 방식으로 점진적으로 사용하는 방식으로 loss값이 줄어드는 방향으로 계속 이동하고, 움직여도 loss값이 변함이 없을 경우 멈춘다.

하지만 네크워크가 깊어질 수로 파라미터가 많아지고 다루어야할 \(\theta \)의 dimension이 엄청 커지게 된다. 하지만 이렇게 깊어지면 \(\theta \)를 업데이트를 해야할 경우 새로운 \( \Delta \theta \)를 바꿔야 하는데 어느정도의 변경을 해야 로스값이 줄어드는지 알아야 한다. 그래서 기본적인 방법이 Taylor Expansion이며 무한정한 미분값을 더하여 업데이트된 loss 값을 구하는 방법이 있고, 이것을 1차 미분 값만 사용하는 방법으로 구할 수 있게 되는 것이다. 결국 현재의 로스값에 대한 Gradient 값과 \(\Delta \theta \)값을 더한 값으로 표현할 수 있는 것이다. 결국 1차 미분 값에 대한 값만 사용한다는 것은 그 근방에서의 값만 사용한다는 의미이며, 차수가 많아질 수록 넓은 지역의 작은 오차로 표현이 가능하게 되는 것이다.

Learning rate를 사용하여 조금씩 파라미터 값을 바꾸는 것은 로스 함수의 1차 미분항까지만 사용했기에 아주 좁은 영역에서만 감소 방향이 정확하기 때문이다.

 

원래는 모든 데이터에 대한 로스 미분값의 합을 구한 후 파라미터를 갱신해야 하지만, 배치 크기만큼만 로스 미분값의 합을 구한 후 파리미터를 갱신한다.

위의 수식은 Backpropagation Algorithm에 대한 내용을 정리한 내용으로 하기 블로그를 정리한 내용으로 따로 정리를 할 예정

http://neuralnetworksanddeeplearning.com/chap2.html

 

Neural networks and deep learning

In the last chapter we saw how neural networks can learn their weights and biases using the gradient descent algorithm. There was, however, a gap in our explanation: we didn't discuss how to compute the gradient of the cost function. That's quite a gap! In

neuralnetworksanddeeplearning.com

 

Loss Function View-Point1 : Backpropagation

해당 설명은 MSE (Mean Square Error) 와 Cross Entropy에 대해서 어느 상황일 때 사용하는 것이 좋을 지에 대해서 설명을 한다. 이것은 Maximum likelihood 관점에서 해석을 하는 것이다.

설명에서 Backpropagation 알고리즘이 잘 동작하는 관점에서 상황을 본다면 Cross Entropy가 더 좋다. 하지만 항상 그렇지는 않다. Maximum likelihood 관점에서 loss function 해석을 할텐데 그 관점에서는 continuous 한 output vector일 경우에는 MSE를 사용하는 것이 좋고, discrete한 경우는 cross entropy를 사용하는 것이 좋다는 것이 해석이다.

 

첫 번째 그림에서의 왼쪽과 오른쪽을 비교하게 되면 오른쪽 보다 왼쪽에서 더 학습이 잘된 것을 확인 할 수 있다. backprogation 알고리즘에서는 activation function의 미분값을 사용하게 되는데, 이때 미분값이 sigmoid를 사용하게 된다면 1/4 줄어들게 되며 backprogation이 입력단까지 가게 된다면 0으로 수렴하게 된다. 이러한 것을 gradient vanishing problem라고 하며, 이러한 문제를 통해서 학습이 잘 안되게 되는 것이다.

그래서 두 번째 그림에서 확인 할 수 있듯이 weight와 bais의 값이 0과 더 가까운 학습을 했을 경우 변화하는 양이 엄청 작기 때문에 변화량이 안바뀌어 학습이 제대로 되지 않는 것이다.

 

MSE 와 달리 CE는 출력 레이어에서의 에러값에 activation function의 비분 값이 곱해지지 않아 gradient vanishing problem에서 좀더 자유롭다 (학습이 좀 더 빨리 된다 )

그러나 레이어가 여러 개가 사용될 경우에는 결국 activation function 의 미분 값이 계속해서 곱해지므로 gradient vanishing problem에서 완전 자유로울 수 있다.

렐루는 미분 값이 1 혹은 0이므로 이러한 관점에서 훌륭한 activation function 이다

MSE를 사용했을 때 보다 CE는 activation function 에 대한 미분값이 없이 때문에 output의 결과가 더 좋은 값으로 나오는 걸 볼 수 있다. 결국 Backprogation 관점에서는 초기 activate function이 사라지는 cross entropy가 더 낫다는 것을 알 수 있다.

 

Loss Function View-Point2 : Maximum Likelihood

loss function의 해석 관점에서 back propagation과 Maximum likelihood의 관점은 유사하지만 관점에 따라 다를 수 있다. back propagation의 경우 해석하면 정답 x에 대한 출력값 y이 “똑같길 바란다”이고, Maximum likelihood의 관점은 “확률이 높길 바란다”가 된다. 결국 확률을 이용하는 관점이 있다고 본다.

Maximum likelihood의 경우 conditional probability까지 정해 놓고 가야 한다(ex, 가우시안 분포, 베르누이 분포 등). 위의 그림은 가우시안 분포를 가정하고 예를 것이다. 그래서 우리가 정해 놓은 확률 분포를 정정하기 위한 파라미터를 추정하는 것이다.

고전적인 머신러닝에서는 고정 입력에 대한 고정 출력인데, Maximum likelihood 해석 관점에서는 학률 분포를 찾은 거에 샘플링을 할 수가 있다.

i.i.d condition

가정 1. independence : 각 샘플별 conditional probability 구해서 곱해서 추정하겠다.

가정 2. identical Distribution : 각 샘플별 conditional probability을 동일하게 정의해서 사용하겠다.

가우시안 분포 : Mean Squared Error

  • 네트워크 출력에 대한 확률 분포가 가우시안 분포에 가까우면 사용하는 것이 좋다.
  • continuous 값이 경우는 가우시안 분포로 모델링하여 Mean Squared Error를 사용

베르누이 분포(다변량일 때 카테고리 분포) : Cross-entropy

  • 네트워크 출력이 베르누이의 확률에 따르면 Cross-entropy를 사용하는 것이 좋다.
  • discrete 값의 경우 베르누이 분포로 모델링하여 Cross-Entropy를 사용

네트워크 입력 값이 주어졌을 때, 네트워크 출력 값 Y를 conditional probability를 추정한다. 즉 파라미터를 찾는 것인데 이때 w 는 네트워크에 대한 출력 값이다. loss는 back propagation을 사용하며 negative log를 붙인다. 이때 conditional probability를 가우시안으로 정의하면 \(\mu\)와 \(\sigma\)를 찾는 것이다. 이때 가우시안을 사용하게 된다면 MSE의 기준과 동일하고, 다변량에 대한 분류는 cross entropy와 동일하다. 라는 것을 위해서 확인 할 수 있다.

autoencoder와 variational autoencoder의 loss fucntion의 해석 관점에서의 해석에 대한 간단한 표이며, autoencoder는 x에 대한 입력값이 주어졌을때, x를 추정하는 것이라면, VAE의 경우는 training DB에 있는 확률에 대한 결과값을 추정하는 것이다.

 

 

Reference 

이활석님 오토인토더의 모든 것 : https://www.youtube.com/watch?v=o_peo6U7IRM 

댓글