1. 개요[편집]
| 변분 오토인코더 Variational Autoencoder | |
|---|---|
| 약칭 | VAE |
| 제안 | D. P. Kingma & M. Welling (2013) — Auto-Encoding Variational Bayes |
| 동시 발견 | Rezende, Mohamed, Wierstra (2014) |
| 정체 | 잠재변수 생성모형 + 상각(amortized) 변분 추론 |
| 목적함수 | ELBO (증거 하한) |
| 핵심 장치 | 재매개변수화 트릭 (경로 미분 추정량) |
| 대표 병증 | 사후분포 붕괴, 흐릿한 표본 |
변분 오토인코더(variational autoencoder, VAE)는 잠재변수 생성모형 를, 관측마다 사후분포를 따로 풀지 않고 신경망 하나가 를 통째로 내놓도록 상각(amortize) 시킨 뒤, 생성망 와 추론망 를 ELBO로 동시에 경사법으로 학습하는 모형이다.
이름 때문에 “오토인코더의 확률 버전” 순서로 소개되는 일이 많은데, 사실 순서가 거꾸로다. 출발점은 변분 추론이고, 인코더-디코더처럼 생긴 그림은 그 결과로 딸려 나온 것이다. 결정론적 오토인코더는 코드 를 만들 뿐 위의 분포를 정의하지 않아서, 잠재공간에서 아무 점이나 뽑아 디코더에 넣으면 대체로 쓰레기가 나온다. VAE는 잠재변수에 사전분포 를 못 박고 그 사전분포에 맞도록 인코더를 벌하기 때문에, 학습이 끝난 뒤 인코더를 버리고 를 뽑아 디코더만 돌려도 표본이 나온다. 오토인코더에 없던 이 한 가지가 생성모형과 압축기를 가른다.1
2013년 12월 킹마와 웰링의 프리프린트가 나온 뒤 반년 안에 사실상 표준 도구가 된 이유는 성능이 아니라 호환성이었다. 목적함수 한 줄과 재매개변수화 한 줄만 있으면 그 뒤는 자동 미분과 확률적 경사하강법이 다 해 준다. 변분 추론을 하겠다고 모형마다 손으로 갱신식을 유도하던 시대가 여기서 끝났다.
2. ELBO와 그 갭[편집]
일반적인 유도는 변분 추론 문서에 있으니, 여기서는 VAE가 쓰는 형태만 짚는다.2 관측 하나에 대해 로그가능도를 잠재변수로 쪼개고 를 끼워 넣으면
가 항등식으로 성립한다. 우변 둘째 항이 쿨백-라이블러 발산이라 0 이상이므로 은 의 하한이고, 하한과 참값 사이의 갭이 정확히 근사 사후분포와 참 사후분포 사이의 KL이다. 이 한 문장이 VAE 전체의 손익계산서다. ELBO를 올리면 (i) 데이터의 로그가능도가 올라가거나 (ii) 추론이 정확해지거나 둘 중 하나이며, 어느 쪽이 얼마나 올랐는지는 알 수 없다.
첫 항을 다시 쪼개면 실무에서 코드로 옮기는 형태가 나온다.
왼쪽은 ” 로부터 를 얼마나 잘 되살리는가”, 오른쪽은 “인코더가 사전분포에서 얼마나 벗어났는가”. 오토인코더의 재구성 손실에 벌점 하나가 붙은 모양이라 구현이 익숙해 보이지만, 저 벌점이 생성 능력을 만든다. 없으면 인코더는 마다 아주 뾰족한 봉우리를 잠재공간 아무 데나 찍어 놓고 완벽히 재구성하는, 그냥 결정론적 오토인코더로 퇴화한다.3
갭 자체도 한 겹이 아니다. 크레머·리·듀버노(2018)는 이것을 근사 갭(선택한 분포족 가 참 사후분포를 못 담아서 생기는 몫)과 상각 갭(그 안의 최적점조차 인코더 신경망이 못 맞혀서 생기는 몫)으로 분해했다. 후자는 VAE에만 있는 세금이다. 관측마다 최적화를 다시 돌리는 고전 VI에는 없고, 한 번 학습한 인코더로 모든 를 처리하겠다는 상각의 대가로 생긴다. 표본 하나에 대해 인코더 출력에서 시작해 몇 스텝 더 최적화해 주는 것만으로 ELBO가 눈에 띄게 오르는 현상이 그 증거다.
3. 재매개변수화 트릭[편집]
이제 진짜 문제. 을 어떻게 구하는가. 기댓값을 취하는 분포 자체가 에 의존하기 때문에 미분을 그냥 안으로 밀어 넣을 수 없다.
우변은 아예 0이다( 는 를 모른다). 즉 “표본을 뽑아 평균 내고 역전파” 를 순진하게 하면 인코더에는 재구성 항의 기울기가 한 방울도 흐르지 않는다. 우회로는 둘이다.
- 점수함수 추정량(score function, REINFORCE): . 에서 표본만 뽑을 수 있으면 되고 가 미분 가능할 필요조차 없다. 대신 의 값만 쓰고 기울기 정보를 안 쓴다.
- 경로 미분 추정량(pathwise): 무작위성을 와 무관한 잡음으로 밀어내는 것.
이렇게 쓰면 가 되어 기댓값을 취하는 분포가 와 무관해지고, 미분이 그대로 안으로 들어가 이 나온다. 표본 추출이 계산그래프의 가운데를 막고 있던 벽에서 그냥 지나가는 노드로 바뀐다. 이것이 재매개변수화 트릭이고, 구현상으로는 “정규분포 난수를 뽑아 곱하고 더한다” 한 줄이다.
핵심은 편향이 아니라 분산이다. 두 추정량 모두 불편이지만, 점수함수는 디코더가 를 어느 방향으로 옮기길 원하는지()를 전혀 참고하지 못하고 잡음 속에서 상관관계를 더듬어야 한다. 잠재차원이 수십~수백인 VAE에서 이 차이는 대체로 몇 자릿수의 분산 차이로 나타나고, 실제로 점수함수만으로는 학습이 사실상 진행되지 않는다.4 다만 경로 미분이 항상 저분산인 것은 아니다 — 가 매우 거칠면 역전될 수 있고, 이론적 반례도 알려져 있다. VAE의 매끄러운 디코더에서 압도적으로 유리하다는 것이 정확한 서술이다.
대가는 적용 범위다. 경로 미분은 가 “고정 잡음의 미분가능한 변환”으로 쓰일 수 있어야 하므로, 이산 잠재변수에는 그대로 쓸 수 없다. 검벨-소프트맥스 완화나 직통(straight-through) 추정량으로 근사하거나, 점수함수로 되돌아가야 한다. VQ-VAE가 코드북 인덱스를 다루면서 직통 추정량을 쓰는 이유가 이것이다.
4. 가우시안 KL의 닫힌 형태[편집]
사전분포를 , 근사 사후분포를 대각 가우시안 로 잡으면 KL 항은 표본을 뽑을 필요 없이 해석적으로 떨어진다. 차원에서
이게 VAE가 실무에서 그토록 잘 도는 두 번째 이유다. 목적함수 두 항 중 하나는 몬테카를로 잡음이 아예 없다. 재구성 항만 표본 1개로 추정하면 되고(미니배치가 이미 있으므로 표본 1개로 충분하다는 것이 원논문의 관찰이다), 남은 분산은 그 항에만 있다.
식을 뜯어보면 각 좌표가 , 로 끌려간다는 것이 보인다. 에서 기여가 정확히 0. 구현할 때는 대신 를 신경망 출력으로 두는 것이 국룰인데, 양수 제약이 공짜로 풀리고 위 식이 로그 항을 이미 요구하기 때문이다.
5. 왜 흐릿한가[편집]
VAE의 표본이 GAN 계열보다 뿌옇다는 것은 오래된 관찰이고, 원인의 상당 부분은 모형이 아니라 가능도의 선택에 있다. 디코더를 분산 고정 가우시안 로 두면
즉 재구성 항이 정확히 L2 손실이다. L2를 최소화하는 출력은 조건부 평균 이므로, 하나의 에 여러 그럴듯한 가 대응하는 순간 디코더는 그것들을 평균 내는 것이 최적이 된다. 사람 얼굴 여러 장의 픽셀 평균이 어떻게 생겼는지 떠올리면 된다 — 그게 흐릿함의 정체다.
여기에 목적함수의 방향이 겹친다. ELBO 최대화는 결국 를 밀어 올리는 것이고 이는 최소화, 즉 질량 포괄(mode-covering) 쪽이다. 데이터가 있는 곳에 가 0이면 무한대 벌점을 받으므로 모형은 모든 모드를 덮으려 하고, 용량이 모자라면 모드 사이의 빈 공간까지 확률질량을 발라 버린다. 반대로 GAN의 목적함수는 모드 추구 쪽이라 선명하지만 모드를 통째로 빠뜨린다. 선명함과 모드 커버리지는 같은 저울의 양 끝이라는 것이 이 대비의 요점이지, VAE가 그냥 열등한 것이 아니다.
그래서 처방도 원인별로 갈린다. 픽셀 독립 가우시안을 버리고 이산화된 로지스틱 혼합이나 자기회귀 디코더를 쓰거나, 잠재변수를 이산화한 뒤 사전분포를 별도로 학습하거나(벡터 양자화 계열), 아예 가능도를 지각 손실·적대적 손실로 바꾸는 식이다. 그리고 를 1로 고정하는 관행 자체가 숨은 가중치라는 점도 짚어 둘 만하다 — 위 식에서 가 재구성 항의 배율이므로, 를 고정하는 순간 이미 를 암묵적으로 고른 셈이다.
6. 사후분포 붕괴와 β-VAE[편집]
사후분포 붕괴(posterior collapse)는 일부(또는 전부) 잠재차원에서 가 되어 KL 기여가 0으로 눌리고, 디코더가 그 차원을 아예 무시하게 되는 현상이다. 최적화가 실패한 것이 아니라 ELBO 관점에서 합리적인 해라는 점이 고약하다. 디코더가 없이도 데이터를 잘 설명할 만큼 강력하면(자기회귀 디코더가 대표적), 잠재변수를 쓰는 순간 KL 벌점만 내고 얻는 것이 없다. 텍스트 VAE에서 이 문제가 특히 악명 높았던 이유다.
완화책은 전부 “KL 항을 초반에 약하게 만들기”의 변주다.
| 처방 | 하는 일 | 부작용 |
|---|---|---|
| KL 어닐링 | KL 가중치를 0에서 1로 서서히 올림 | 스케줄이 또 하나의 초모수 |
| 프리 비츠 | 차원별 KL에 하한 를 두고 그 아래는 벌하지 않음 | 더 이상 ELBO가 아님 |
| 디코더 약화 | 수용영역 제한, 드롭아웃 | 재구성 품질 손해 |
| 잠재변수 우회 연결 | 디코더 각 층에 를 직접 주입 | 구조가 복잡해짐 |
β-VAE(히긴스 외 2017)는 반대 방향이다. KL 항에 을 곱해 일부러 정보 병목을 좁힌다. 잠재차원 하나가 정보를 나르려면 KL 비용을 내야 하므로, 예산이 빠듯해지면 모형은 데이터의 변동을 가장 경제적인 축들로 쪼개려는 압력을 받는다 — 이것이 얽힘 해제(disentanglement)라는 주장이었다. 재구성 품질은 당연히 나빠지고, 이후 연구들은 얽힘 해제가 목적함수만으로 보장되지 않으며 귀납 편향과 초모수 선택에 크게 의존한다는 점을 지적했다. 그래도 를 노브로 노출시켰다는 실무적 기여는 남았다.
를 율-왜곡(rate-distortion) 관점으로 읽으면 더 깔끔하다. KL 항은 잠재 채널의 율(rate, 비트), 재구성 항은 왜곡(distortion)이고 ELBO는 둘의 합에 불과하다. 그렇다면 같은 ELBO 값을 주는 (율, 왜곡) 조합이 무수히 많다 — 알레미 외(2018)가 지적한 지점이 이것이고, 사후분포 붕괴는 그 곡선 위에서 율 = 0 인 끝점에 앉은 상태다. ELBO 숫자 하나만 보고 모형을 고르면 안 되는 이유가 여기 있다.
하한을 조이는 방향의 개선도 있다. 중요도 가중 ELBO(IWAE)는 개 표본으로
를 쓰는데, 에 대해 단조 증가하고 에서 로 수렴한다. 다만 하한이 조여질수록 인코더에 도달하는 기울기의 신호 대 잡음비가 나빠지는 역설이 알려져 있어서, 공짜는 아니다. 중요도 표본추출의 무게 퇴화 문제가 여기서도 그대로 반복된다.
7. 어디에 쓰이나[편집]
이미지 생성 자리는 확산모형에 내줬지만, VAE는 사라진 게 아니라 부품으로 내려갔다. 요즘 이미지 생성 파이프라인의 표준 구성은 VAE로 픽셀을 저차원 잠재로 압축해 두고 확산모형을 그 잠재공간에서 돌리는 것이다 — 512×512 픽셀 대신 64×64 잠재에서 계산하니 비용이 수십 배 싸진다. 이 구조에서 VAE가 담당하는 것은 생성이 아니라 잘 정규화된 압축 좌표계다.
공학 쪽 용례도 이 성격을 그대로 물려받는다. 고차원 유동장·응력장의 스냅숏을 저차원 잠재로 눌러 축소차수모델의 좌표로 쓰거나, 형상 파라미터화가 어려운 설계 공간을 잠재공간으로 대체해 베이지안 최적화를 그 위에서 돌리는 식이다. 주성분 분석이 선형 부분공간만 찾는 데 비해 비선형 다양체를 잡을 수 있다는 것이 팔림새인데, 대신 재구성 오차의 상한이 없다는 점은 정직하게 감수해야 한다. POD는 절단한 특이값으로 버린 에너지를 정확히 셀 수 있지만 VAE에는 그런 계기판이 없다. 안전 여유가 걸린 자리에서는 이 차이가 결정적이다.
8. 관련 문서[편집]
- 변분 추론 · 쿨백-라이블러 발산 · 젠센 부등식
- 오토인코더 · 생성적 적대 신경망 · 벡터 양자화
- 기댓값 최대화 알고리즘 · 가우시안 혼합 모형 · 최대우도추정
- 자동 미분 · 확률적 경사하강법 · 심층 학습
- 중요도 표본추출 · 마르코프 연쇄 몬테카를로
- 주성분 분석 · 축소차수모델 · 베이지안 최적화
- 편향-분산 분해 · 부트스트랩
9. Footnotes[편집]
-
그래서 “VAE는 잡음을 넣은 오토인코더” 같은 설명은 결과만 맞고 이유가 틀렸다. 잡음을 넣는 이유는 강건성이 아니라 가 분포여야 KL을 잴 수 있기 때문이고, KL을 재야 하는 이유는 ELBO가 그렇게 생겼기 때문이다. 유도를 따라가면 잡음의 크기()마저 학습 대상이라는 게 자연스러워진다. ↩
-
이 문서에서 반복하지 않은 재매개변수화의 일반론(비켤레 모형, ADVI, 확률적 VI)은 변분 추론 쪽에 있다. VAE는 그 기법이 “인코더 신경망 + 디코더 신경망”이라는 특정 조합을 만났을 때의 이름이라고 보는 편이 정확하다. ↩
-
잠재공간을 돌아다니며 두 이미지 사이를 보간하는 그 유명한 데모도 사전분포 벌점 덕이다. 벌점이 없으면 두 코드 사이의 중간점은 학습 중 한 번도 방문한 적 없는 좌표라 디코더가 무슨 짓을 할지 모른다. 그럼에도 VAE의 잠재공간에도 사전분포와 집합 사후분포가 어긋나 생긴 “구멍”이 남아 있고, 보간 경로가 그 구멍을 지나가면 여전히 이상한 그림이 나온다. ↩
-
원논문이 REINFORCE 대비 우위를 강조한 것도 이 대목이다. 재미있는 건 강화학습 쪽은 반대로 여전히 점수함수를 쓴다는 것 — 거기서는 환경이 미분 불가능해서 를 애초에 구할 수 없기 때문이다. 같은 문제에 정반대 답이 나오는 이유가 “환경을 미분할 수 있는가” 하나에 달려 있다. ↩