본문 바로가기

NLP/용어정리

[용어정리] ELBO

최근에 논문을 읽다가 'ELBO(Evidence Lower Bound)' 라는 용어를 발견했다. 최대한 모른 척하고 넘어가려고 했으나, loss 의 핵심이라 찾아볼 수 밖에 없었다. 다행히 정말 멋진 사람들이 정리를 잘 해둬서 나는 그걸 초심자의 입장에서 순서와 배치만 다듬어서 올리고자 한다. 

 

다시 한 번 좋은 글을 써주신 공로에 감사를 드린다. 나는 초보자의 관점에서 글을 재구성해보고자 한다.


ELBO 의 이해를 돕기 위한 예시

  • 갑자기 온 세상에 줄자가 사라졌다.
  • 그런데 인류를 구하려면, 내 키를 구해야 한다고 한다.
  • 하지만 나는 내 다리와 허리와 머리를 다쳐서 제대로 서있는 게 힘들고, 키를 까먹었다.
  • 다행히 나는 함께 지내면서 나보다 확실히 키가 작은 친구들을 알고 있다.
  • 그래서 그 친구들을 불러 그 친구들이 예전에 쟀던 키를 묻는다.
  • 그 친구들 키 중 최댓값이 그나마 내 키에 가장 가까울 것이다.

위 예시만 이해하면, 이 글의 흐름을 놓칠 리가 없다.

목적: 내 키를 구하라 ↔ VAE 의 분포를 구하자
문제: 직접 재는 게 불가능하다 ↔ 직접 구하는 게 불가능하다
해결책: 나보다 확실히 작은 친구 중 가장 큰 키를 구하자 ↔ 목적 함수에 근사한 식의 최댓값을 구하자

이 해결책의 이름이 'ELBO' 다.

 

이게 다다. 이걸 생각하면서 가보자.


ELBO 가 무엇인가를 이해하려면 VAE 를 알아야 한다.

처음엔 'ELBO 설명' 이런 식으로 검색했다. 해당 용어만 잽싸게 알아내려고 했다. 하지만 검색하면 할수록 'VAE(Variational autoencoder)' 와 밀접한 관련이 있다는 걸 인정해야 했다. 미안하지만, ELBO 를 검색하는 순간부터 VAE 도 함께 배워두자는 마음으로 공부하는 게 속이 편하다. 마치 외국인이 '놀부'라는 단어만 알고 싶어해도 우리가 '흥부'를 굳이 함께 알려줘야 하는 느낌 같았다.

 

 

VAE = Variational + Autoencoder

Autoencoder 의 정의

: VAE 를 알려면 Autoencoder 를 알아야 한다.

https://kr.mathworks.com/help/deeplearning/ug/train-a-variational-autoencoder-vae-to-generate-images.html

위 그림처럼

  1. 먼저 데이터에 인코딩 된 표현으로 바꾼 다음,
  2. 인코딩 표현을 다시 입력 데이터를 가능한 가깝게 생성하는 것을
  3. 목표로하는 인공 신경망

을 Autoencoder 라고 한다.

 

Autoencoder 와 유사한 예시: 모스 부호

굳이 왜 encoder 나 decoder 를 통해서 암호화하고, 복호화하는 걸까? 모스부호를 생각해보면, 다음과 같은 장점이 있었을 것이다.

  • 암호화: 모스 부호 체계를 모르면, 알아들을 수 없다.
  • 시공간의 제약이 없다: 전기 신호로 바꾸면, 전기 신호는 매우 빠르게 먼 곳까지 전달할 수 있다.

실제로 이미지 파일 형식도 이런 원리를 이용한다고 한다. 형식에 따라 encoder 를 통해 전송한 다음에 decoder 를 통해 이미지를 열어볼 수 있는 것이다. 이밖에도 이런 원리를 활용할 가치는 충분하기 때문에 autoencoder 는 줄곧 쓰여왔다.

 

왜 autoencoder 앞에 Variational 이 붙었을까?

기본적인 뜻을 검색해보면, '변형' 이라고 한다. 왜 이런 말이 붙은 걸까?

https://kr.mathworks.com/help/deeplearning/ug/train-a-variational-autoencoder-vae-to-generate-images.html

바로 주목적이 '생성(generation)'으로 바뀌었기 때문이다. 기존 autoencoder 의 목적은 기존 입력의 encoding 과 decoding 이 최대한 잘 되는 것이었다면, VAE 는 기존 입력과 유사한 출력을 생성하는 것에 초점을 두고 있다는 말이다.

 

예를 들자면, 다음과 같다.

  • AE: encoding 잘해서 전송이나 암호화에 도움이 되게 하고, decoding 을 잘해서 최대한 원본에 가깝도록 하겠어.
  • VAE: 숫자 이미지만 100만장을 AE 해보니까, image encodings 의 분포(distribution)를 알 것 같아. 그렇다면, 새로운 숫자 이미지를 직접 생성할 수 있지 않겠을까?

 

VAE 의 역할과 용어

https://process-mining.tistory.com/161

역할

다시 정리하자면, VAE 는 diffusion model, GAN 과 같이 generative model 중 하나로, autoencoder 와 비슷하게 encoder 와 decoder 를 활용하여 latent space 를 도출하고, 이 latent space 로부터 우리가 원하는 output 을 decoding 함으로써 data generation 을 진행한다.

 

latent space

: 직역하면 '잠재 공간'이다. 원본 입력의 정보가 드러나지 않지만 잠재적으로 잘 숨겨졌다고 보는 것이다. 그래서 encoding 한 결과를 latent vector 라고 부르기도 한다.

 

p(x)

: latent space 를 입력했을 때 나오는 input data 의 true distribution 이다. VAE 는 p(x) 를 구하는 게 목적이다. 단, 직접 구하는 것은 힘들기 때문에 최대한 근사(approximation)하고자 한다. 

 

encoder

https://process-mining.tistory.com/161

: input 을 latent space 로 변환하는 역할을 한다. 이때, encoder 는 q(z|x) 에 근사하는 것을 목적으로 한다.

 

잠깐, 왜 자꾸 직접 구하지 않고 근사하는거야?

: 정확한 분포를 구하는 것은 불가능하기 때문이다. 예컨대, MBTI 는 사람을 16가지 유형으로 구분한다. 애초에 사람의 성격을 16가지로 분류하는 것은 불가능하다. 하지만 그럼에도, 가장 자신과 유사한 성격 유형을 찾을 수는 있다. 그리고 그게 실제로 대다수의 언행을 이해하는데 정확하진 않아도 참고할 만한 통계가 될 수도 있다.

 

데이터도 마찬가지다. 고양이 사진을 다양한 각도, 종류, 시간대 등 몇억장을 찍었다고 치자. 과연 그게 일정한 규칙, 그러니까 사람들이 사용하기 쉬운 분포를 따라줄까. 그럴 리가 없다. 그걸 완벽하게 반영하는 분포를 찾아내는 건 매우 힘든 일이다. 그래서 근사의 핵심은 이거다.

어차피 정확하게 맞출 수 없다면, 내가 잘 아는/계산하기 쉬운 분포라고 가정하고, 그 분포를 이리저리 옮겨가며 최대한 데이터 모양을 맞춰서 끼워보자. 그걸 수학적으로 근사한다고 부르자.

 

더 자세히 알고 싶다면, 변분추론(variational inference)을 공부해보자.

 

 

q(z|x)

: encoder 가 찾고자/근사하고자 하는 distribution 이다. input data 의 사후확률(posterior)이며, 'input x 가 주어졌을 때, latent vector z 의 분포'를 의미한다고 보면 된다. 위 그림의 encoder 에서 확인할 수 있다.

 

예컨대, 우리가 가장 잘 아는 분포 중 하나인 정규분포라고 가정해본다면, q(z|x) 를 근사(approximate)할 때는 이 정규분포를 나타내는 평균과 표준편차의 parameter 를 구하는 게 목적이 될 것이다.

 

decoder

https://process-mining.tistory.com/161

: enoder 와 반대로 latent space 를 input 으로 변환하는 역할을 한다. 이 때, decoder 는 input 의 true distribution, 달리 말하면 latent space z 가 주어졌을 때 x 의 분포, 즉 위 그림에서 나타나듯이 p(z|x) 를 근사하는 걸 목적으로 한다.

 

 

VAE 의 목적에 어떻게 도달할 수 있는가

VAE 의 목적은 생성이다

https://process-mining.tistory.com/161

위 그림처럼 VAE 는 distribution p 를 구하는 게 목적이다. latent space 에서 output 로 변경하는 decoder 가 필요하다. 이걸 어떻게 구할까에 대한 답변으로 너무 좋은 블로그가 있어서 여기에 그 내용을 그대로 옮겨두겠다.

 

 

직접 구하는 건 어려우니 q 를 구해서 근사하겠다

https://jaejunyoo.blogspot.com/2017/04/auto-encoding-variational-bayes-vae-1.html

 

왜 직접 하는 것이 어려운가

https://jaejunyoo.blogspot.com/2017/04/auto-encoding-variational-bayes-vae-1.html

 

아는 게 없으니 근사라도 해야지

https://jaejunyoo.blogspot.com/2017/04/auto-encoding-variational-bayes-vae-1.html

직접 구할 수 없다면 최대한 따라잡겠어

https://jaejunyoo.blogspot.com/2017/04/auto-encoding-variational-bayes-vae-1.html

 

ELBO: 근사하는 하한선

https://process-mining.tistory.com/161

→ 내가 구해야 할 식은 다음과 같이 전개가 가능하다.

 

https://process-mining.tistory.com/161

→ 전개해보니, 마지막 하나는 절대 구할 수가 없다.

→ 근데, 해당 항의 범위는 다행히 알 수 있다.

→ 그러면, 그걸 뺀 식을 최대화하면 우리가 원하는 결과에 수렴하지 않을까?

→ 우린 그걸 'ELBO' 라고 부르기로 했어요.

 

https://process-mining.tistory.com/161

 

 


참고 자료

https://jaejunyoo.blogspot.com/2017/04/auto-encoding-variational-bayes-vae-1.html

 

초짜 대학원생의 입장에서 이해하는 Auto-Encoding Variational Bayes (VAE) (1)

Machine learning and research topics explained in beginner graduate's terms. 초짜 대학원생의 쉽게 풀어 설명하는 머신러닝

jaejunyoo.blogspot.com

 

https://process-mining.tistory.com/161

 

VAE 설명 (Variational autoencoder란? VAE ELBO 증명)

Variational autoencoder, 줄여서 VAE는 GAN, diffusion model과 같이 generative model의 한 종류로, input과 output을 같게 만드는 것을 통해 의미 있는 latent space를 만드는 autoencoder와 비슷하게 encoder와 decoder를 활용

process-mining.tistory.com

 

https://kr.mathworks.com/help/deeplearning/ug/train-a-variational-autoencoder-vae-to-generate-images.html

 

변분 오토인코더(VAE)를 훈련시켜 영상 생성하기 - MATLAB & Simulink - MathWorks 한국

이 예제의 수정된 버전이 있습니다. 사용자가 편집한 내용을 반영하여 이 예제를 여시겠습니까?

kr.mathworks.com