딥러닝

AutoEncoder를 공부하는 이유

문학적 딥러닝 2024. 11. 12. 22:21

AutoEncoder 라는 말을 들으면, 요즘 사람들이 가장 많이 접하게 된 계기가 바로 GPT의 Transformer 모델이 이 AutoEncoder를 사용하기 때문일 것이다. 

 

하지만 막상 트랜스포머 루트로 AutoEncoder를 보면, "별거 없는데? 그냥 이러한 구조를 AutoEncoder라고 하는구나"라는 생각이 들거나, 아니면 트랜스포머에서 새로나온 모델 구조인줄 아는 사람들도 있을 것이다(내가 그랬다).

 

하지만 AutoEncoder는 나름 역사 깊은 모델 구조이고, 이를 공부하는 이유는 이 모델의 철학을 알아야 하기 때문이다. 

 

독학의 길을 걸은 나는 다른 석사 박사분들이랑 우연히 같이 수업을 듣게 되었는데, 박사과정을 밝고 계신 분이 이런말을 했다, "yolo 모델은 3? 아니면 5?부터 기존의 철학이 없어졌다." 나는 순간 "무슨 철학?"이라는 생각이 들었고. 모든 모델에는 저자의 철학이 담겨 있다는 사실을 이 때 알았다. 

 

1) AutoEncoder의 철학은 무엇일까?

 

나도 정확하게 안다고 할 수는 없다. 하지만 여러 방면에서 지속적으로 AE와 VAE를 공부하는 도중에 깨달은 것은 AutoEncoder의 핵심은 잘 예측하는 혹은 잘 복원하는 것이 중점이 아니라, 중간에 있는 잠재 공간(latent space)를 잘 만들어 주는 것이 핵심적인 요소이다. 

 

2) 왜 자꾸 인코더 디코더 라고 나누어서 말할까?

 

기본적으로 AutoEncoder는 인코더 부분과 디코더 부분으로 나뉘었다고 설명하는 글들이 많은데(대부분 본인이 공부한 것을 그대로 적었기 때문이 더 많겠지만), 이렇게 나뉜 이유는 잠재공간(latent space)를 잘 만들어준 "인코더"를 따로 떼어서 활용하기 좋기 때문이다.

 

실제로 코드를 보면, 인코더와 디코더 모델을 따로 만들고, 둘을 결합하는 방식으로 학습을 진행하는데, 나중에 이 인코더 부분만 가지고 새로운 디코더에 연결시켜 새로운 제품을 만들기 위함이다. 

 

그래서 GPT가 나오고 다른 회사에서도 사용할 수 있도록 GPT-2 모델을 공유하면서, 대량의 회사들이 너도 나도 본인만의 챗봇을 만들게 된 이유가 여기에 있다. 

 

3)인코더가 정확히 무엇을 했으면 하는가?(여기서부터는 지극히 개인적인 비유와 관점이다)

나는 좋은 인코더란 이런 모습이라고 생각했다. 주어진 무언가를 핵심적인 부분들로 나누어서 적절하게 써먹을 수 있는 재료를 만드는 것.

 

이렇게 만들어진 재료가 디코더를 통해서 새로운 쓸만한 무언가를 만든다는 것이다.

 

 

4)인코더와 디코더는 별개의 모델이면, 서로 다른거 아닌가?(싸구려 고기로 고급 요리를 만들 듯이 디코더만 좋을 수 도 있지 않나?)

기본적으로 AutoEncoder의 구조는 위에 사진 처럼, 인코더와 디코더는 역함수 관계를 나타내기 위한 구조이다. 우측에는 "출력"이라고 했지만, 실제로는 "입력의 복원"이 좀더 맞는 말이다. (챗봇이 아니라 AutoEncoder 구조 자체의 철학을 말하는 것이다, GPT를 생각하면 안된다)

 

약간 여기서는 접근을 반대로 해야 했다. 

 

"인코더에서 잘 분해 했으니, 디코더가 잘 만들었다" -> "디코더에서 잘 만들었으니, 인코더가 잘 분해했다"라고 반대로 생각해야 했다.

 

이 과정을 "유도하는 과정"이라고 나는 정의했다. 어떻게 보면, 통계에 있는 MLE(Maximun Likelihood Estimatimation)의 관점이 좀 필요하다. 원인론이 아닌 결과론으로 접근을 해야 한다. 

 

이러한 방식을 받아들이면, AutoEncoder의 다음 단계인 Variational AutoEncoder의 코드에서 "평균", "로그 분산"을 활용한다면서, 정작 코드는 그냥 linear layer을 통과하는 코드인 것을 이해할 수 있었다.