레이트–디스토션과 정보 병목: 무엇을 버려도 되는가

β-VAE: β 는 레이트와 왜곡의 교환 비율

VAE 를 학습시켜 본 사람은 손실이 두 항으로 되어 있다는 것을 안다. 디코더가 입력을 얼마나 잘 되살리는지 재는 되살리기 항과, 인코더가 내놓는 분포가 사전분포에서 얼마나 멀어졌는지 재는 KL 항이다. 두 항을 더한 것이 ELBO(증거 하한)의 부호를 바꾼 것이고, KL 항 앞에 계수 β 를 붙이면 β-VAE 가 된다. 레이트–디스토션의 눈으로 보면 되살리기 항은 왜곡처럼, KL 항은 잠재 코드를 적는 비트처럼 보인다. 그렇다면 β 를 바꾸는 일은 레이트–디스토션 곡선 위에서 무엇을 하는 것일까?

역사: β 하나로 VAE 를 다시 읽기

2017년 딥마인드의 히긴스(Irina Higgins)와 동료들은 ICLR 에서 KL 항에 1보다 큰 계수 β 를 붙인 β-VAE 를 내놓았다. 잠재 칸 하나가 그림을 만든 요인 하나(위치, 크기, 색)에만 반응하게 만들려는 것이 목적이었다. 같은 해 말 알레미와 풀(Ben Poole), 피셔, 딜런, 소러스(Rif A. Saurous), 머피는 「고장 난 ELBO 고치기(Fixing a Broken ELBO)」(ICML 2018)에서 이 계수를 레이트–디스토션으로 다시 읽었다. 그들은 입력과 잠재 사이 상호정보량의 위아래 한계를 세워 VAE 들을 레이트–디스토션 평면에 찍었고, ELBO 값이 같은 모델들이 잠재를 쓰는 정도는 전혀 다를 수 있음을 보였다. 영상 압축기를 배운 발레와 동료들도 자기들의 완화한 손실이 어떤 조건에서 VAE 의 로그우도처럼 읽힌다고 적었다. 압축과 생성 모델이 같은 손실을 서로 다른 쪽에서 쓰고 있었던 것이다.

가우스 자료로 β-VAE 를 학습시키기

결과를 미리 알 수 있는 자료로 시작하자. 레이트–디스토션 함수를 이미 손으로 구한 분산 1 인 가우스 수 x 다. 인코더는 x 를 받아 평균 ax, 분산 s² 인 정규분포에서 잠재 z 를 뽑고, 디코더는 x̂ = bz 로 되살린다. 디코더 분산을 σd² = 1 로 고정하면 β-VAE 손실은 점 하나에서 다음과 같다. 재파라미터화(표준정규분포에서 노이즈를 따로 뽑아 샘플을 ax + s × 노이즈로 만드는 방법)로 샘플을 뽑아 Adam(경사하강을 조금 고친 흔한 최적화 방법)으로 학습시키고, 학습이 끝난 뒤 KL 항의 평균(비트로 바꾼 것)과 제곱 오차의 평균을 잰다(계산은 s6_vae.py).

Lβ(x)  =  (x−x^)22σd2  +  β  KL(q(z∣x) ∥ N(0,1))\mathcal{L}_{\textcolor{#4c5d80}{\beta}}(\textcolor{#1b9e77}{x}) \;=\; \frac{(\textcolor{#1b9e77}{x}-\textcolor{#a5003c}{\hat{x}})^2}{2\textcolor{#008787}{\sigma_d^2}} \;+\; \textcolor{#4c5d80}{\beta}\;\mathrm{KL}\big(\textcolor{#a000c8}{q}(\textcolor{#ff5a78}{z}\mid\textcolor{#1b9e77}{x})\,\big\|\,\mathcal{N}(0,1)\big)
x, x^입력과 디코더가 되살린 값z잠재 코드q(z∣x)인코더가 내는 잠재의 분포σd2디코더 분산 (되살리기 항의 눈금, 여기서는 1로 고정)βKL 항의 계수KL(⋅ ∥ N(0,1))사전분포에서 멀어진 정도. 평균하면 잠재를 적는 비트(레이트)의 위 한계\begin{array}{ll} \textcolor{#1b9e77}{x},\ \textcolor{#a5003c}{\hat{x}} & \text{입력과 디코더가 되살린 값} \\ \textcolor{#ff5a78}{z} & \text{잠재 코드} \\ \textcolor{#a000c8}{q}(\textcolor{#ff5a78}{z}\mid\textcolor{#1b9e77}{x}) & \text{인코더가 내는 잠재의 분포} \\ \textcolor{#008787}{\sigma_d^2} & \text{디코더 분산 (되살리기 항의 눈금, 여기서는 1로 고정)} \\ \textcolor{#4c5d80}{\beta} & \text{KL 항의 계수} \\ \mathrm{KL}(\cdot\,\|\,\mathcal{N}(0,1)) & \text{사전분포에서 멀어진 정도. 평균하면 잠재를 적는 비트(레이트)의 위 한계} \end{array}
β 학습한 레이트 (비트) 학습한 왜곡 같은 왜곡에서 레이트–디스토션 함수
0.0625 1.998 0.0626 1.998
0.125 1.498 0.1253 1.498
0.25 0.998 0.2506 0.998
0.5 0.500 0.4999 0.500
0.75 0.210 0.7480 0.210
1 0.000 0.9996 0.000
1.5 0.000 1.0000 0.000

학습한 점들이 모두 레이트–디스토션 곡선 위에 놓이고 왜곡이 β 와 같은 것은 곡선의 기울기 때문이다. 레이트를 nat(자연로그로 센 단위)으로 재면 가우스 원천의 레이트–디스토션 함수는 ½ ln(1/D) 이고 그 기울기는 −1/(2D) 다. β-VAE 손실은 왜곡 1 을 1/(2σd²) 로, 레이트 1 nat 을 β 로 쳐서 더한다. 두 값의 교환 비율이 곡선의 기울기와 맞는 곳이 D = βσd² 다. 이처럼 왜곡과 레이트를 계수 하나로 맞바꿔 한 손실로 더한 것을 레이트–디스토션 손실 (왜곡 + 계수 × 레이트, rate–distortion loss)이라 한다. 계수를 고르는 일은 곡선 위의 점 하나를 고르는 일이고, β-VAE 의 β 는 그 계수다.

βσd² 가 분산 1 에 닿으면 레이트가 0 이 된다. 인코더는 입력을 무시하고 사전분포를 그대로 내고, 디코더는 늘 평균 0 으로 답한다. VAE 를 학습시키다 보면 만나는 「잠재를 쓰지 않는」 일, 흔히 사후 붕괴(posterior collapse)라 부르는 일이다. 레이트–디스토션 곡선에서는 허용 왜곡이 분산에 닿아 비트가 0 이 되는 끝점과 같다.

레이트–디스토션 곡선(파랑) 위에 β 마다 학습한 β-VAE 의 (왜곡, 레이트) 점(빈 동그라미)을 찍은 것. 점들이 곡선 위에 놓이고 왜곡이 β 와 같다. β 가 1 이상이면 레이트 0 의 끝점에 머문다(잠재를 쓰지 않음). 회색 점은 수 하나씩 적는 로이드 양자화기. 디코더 분산 1, 분산 1 인 가우스 자료. 계산 sources/rate-distortion/s6_vae.py
레이트–디스토션 곡선(파랑) 위에 β 마다 학습한 β-VAE 의 (왜곡, 레이트) 점(빈 동그라미)을 찍은 것. 점들이 곡선 위에 놓이고 왜곡이 β 와 같다. β 가 1 이상이면 레이트 0 의 끝점에 머문다(잠재를 쓰지 않음). 회색 점은 수 하나씩 적는 로이드 양자화기. 디코더 분산 1, 분산 1 인 가우스 자료. 계산 sources/rate-distortion/s6_vae.py

자료가 분산 4, 2, 1, 0.5, 0.25 인 성분 다섯이면 무슨 일이 생길까? 같은 VAE 를 잠재 칸 다섯으로 학습시키면 β = 1 에서 레이트가 1.504비트, 왜곡이 3.745 이고, 잠재 칸 둘만 쓴다. 물 붓기로 수위 1 을 부으면 비트 합 1.5, 왜곡 합 3.75 이고 성분 둘이 비트를 받는다. β = 2 이면 레이트 0.504, 잠재 칸 하나, β = 0.5 이면 레이트 3.026, 잠재 칸 셋이다. β-VAE 는 수위 θ = βσd² 로 물을 붓고 있었던 것이고, 물에 잠긴 성분의 잠재 칸은 입력을 무시한다.

직접 움직여 보기위젯 3: β-VAE 의 β 는 수위를 정한다새 창에서 열기 ↗

ML에서: 레이트–디스토션–지각

VAE 가 되살린 그림이 흐릿하다는 것은 잘 알려져 있는데, 레이트–디스토션의 말로 하면 이상한 일이 아니다. 비트가 모자랄 때 제곱 오차를 가장 작게 하는 답은 그럴듯한 그림 여럿의 평균이고, 평균한 그림은 흐리다. 블라우(Yochai Blau)와 미캘리(Tomer Michaeli)는 ICML 2019 에 「손실 압축 다시 생각하기: 레이트–디스토션–지각의 맞바꿈(Rethinking Lossy Compression: The Rate-Distortion-Perception Tradeoff)」을 냈다. 이 논문은 「왜곡이 작다」와 「보기에 진짜 같다」가 같은 말이 아님을 셋째 축으로 세웠다. 되살린 것의 분포가 원래 자료의 분포와 같아야 한다는 조건을 더하면 레이트–디스토션 곡선이 올라간다. 그들의 정리 2 는 제곱 오차에서 그 올라감이 크지 않음을 보였다. 지각 품질을 완벽히 맞추는 데 드는 왜곡은, 같은 비트에서 지각을 따지지 않을 때의 왜곡의 2배를 넘지 않는다.

분산 1 인 가우스 수로 재 보면, 되살린 수도 분산 1 인 가우스여야 한다고 할 때 가우스 짝으로 만든 한 가지 방법의 왜곡은 1비트에서 0.25 가 아니라 0.268 이고, 0.5비트에서는 0.5 가 아니라 0.586 이다(s1_rd.py). 생성 모델 쪽에서는 이 맞바꿈을 「사람이 알아채지 못하는 결은 정확히 되살리지 않고 그럴듯하게 다시 그린다」로 쓴다.

분산 1 인 가우스 수에서 왜곡만 따질 때의 레이트–디스토션 곡선(파랑)과, 되살린 수도 원래와 같은 분포여야 할 때 가우스 짝으로 만든 방법의 곡선(자주). 회색 점선은 레이트–디스토션 곡선을 왜곡 쪽으로 2배 늘린 선으로, 블라우·미캘리의 정리 2 가 말하는 위 한계다. 계산 sources/rate-distortion/s1_rd.py
분산 1 인 가우스 수에서 왜곡만 따질 때의 레이트–디스토션 곡선(파랑)과, 되살린 수도 원래와 같은 분포여야 할 때 가우스 짝으로 만든 방법의 곡선(자주). 회색 점선은 레이트–디스토션 곡선을 왜곡 쪽으로 2배 늘린 선으로, 블라우·미캘리의 정리 2 가 말하는 위 한계다. 계산 sources/rate-distortion/s1_rd.py

문제 13. 택시와 지하철

약속 장소까지 지하철로 가면 택시보다 30분 늦지만 택시비는 8,000원 더 든다. 「치른 돈 + λ × 걸린 시간」을 가장 작게 하는 교통수단을 고른다고 하자. (가) 시간당 10,000원으로 치는 사람과 20,000원으로 치는 사람은 각각 무엇을 타는가? (나) 두 선택이 같아지는 시간 가치는?

김민준 M01
김민준

30분이면 10,000원인 사람에게는 5,000원어치, 20,000원인 사람에게는 10,000원어치예요. 웃돈 8,000원과 견주면 앞사람은 지하철, 뒷사람은 택시요.

선생님 T01
선생님

(나)는요?

김민준 M01
김민준

30분이 8,000원어치가 되는 곳이니까 시간당 16,000원이요.

이서연 S07
이서연

돈과 시간은 단위가 달라서 그냥 더할 수 없는데, λ 하나를 정하면 한 줄로 비교할 수 있어. β-VAE 의 β 가 비트와 제곱 오차를 한 손실로 더하는 것도, 단위가 다른 두 양을 계수 하나로 맞바꾸는 일이야.

김민준 M07
김민준

그럼 β 를 바꾸는 건 내 시간이 얼마짜리인지를 바꾸는 거네요. 같은 사람이라도 바쁜 날에는 택시를 타고요.

선생님 T13
선생님

그래요. λ 를 바꾸면 고르는 선택지가 바뀌듯, β 를 바꾸면 레이트–디스토션 곡선 위에서 고르는 점이 바뀌어요.

문제 14. 같은 β, 다른 디코더 분산

분산 4, 2, 1, 0.5, 0.25 인 성분 다섯의 가우스 자료로 선형 β-VAE 를 학습시킨다. (가) β = 1 에 디코더 분산 σd² = 1 이면 레이트와 왜곡은? (나) β = 1 은 그대로 두고 σd² = 0.25 로 바꾸면? (다) 「β = 1 이 보통의 VAE 이니 레이트–디스토션 곡선 위의 정해진 한 점이다」라는 말은 맞는가? (위젯 3의 두 단추로 확인해 보자.)

김민준 M01
김민준

(가)는 수위가 βσd² = 1 이니까 레이트 1.5비트, 왜곡 3.75, 잠재 칸 둘이요. (나)도 β = 1 이니까 똑같겠죠.

선생님 T01
선생님

수위가 무엇과 무엇의 곱이었죠?

김민준 M05
김민준

아, β 랑 σd² 요. σd² = 0.25 면 수위가 0.25 가 되니까 레이트 5비트, 왜곡 1.25 이고 잠재 칸 넷을 써요. β 는 그대로인데 완전히 다른 점이네요.

이서연 S01
이서연

되살리기 항이 제곱 오차를 2σd² 로 나누니까, σd² 를 작게 잡으면 같은 오차를 더 비싸게 치는 거야. β 를 4분의 1 로 줄인 것과 같아.

이서연 S06
이서연

그럼 (다)는 틀렸어요. β = 1 은 로그우도의 하한이라는 점에서 특별하지만, 곡선 위 어디에 앉을지는 디코더 분산이 정해요. 디코더 분산까지 학습하게 두면 자료가 그것까지 정하고요.

선생님 T14
선생님

그래요. 그래서 알레미와 동료들은 ELBO 값 하나로는 그 VAE 가 잠재를 얼마나 쓰는지 알 수 없다고 했어요. 레이트와 왜곡을 따로 적어야 곡선 위의 자리가 보여요.

이서연 S11
이서연

디코더 분산을 바꾸는 건 눈금 단위를 바꾸는 거네요. 미터로 재던 걸 센티미터로 재면 같은 직선의 기울기 숫자가 백 배가 되잖아요.

문제 15. 잠재 칸을 늘리면

위 다섯 성분 자료에 β = 1, σd² = 1 로 β-VAE 를 학습시켰더니 잠재 칸 다섯 가운데 둘만 썼다. (가) 연구자가 「잠재 칸이 모자라서 그렇다」며 잠재 칸을 50개로 늘리면 몇 칸을 쓰게 될까? (나) 더 많은 칸을 쓰게 하려면 무엇을 바꿔야 하는가? (다) 실제 VAE 에서 일부 잠재 칸이 사전분포 그대로 남는 것을 보면 무엇을 의심해야 하는가?

김민준 M01
김민준

칸이 많으면 더 많이 쓰지 않을까요? 50칸이면 적어도 다섯 칸은 다 쓸 것 같은데요.

선생님 T01
선생님

물 붓기 그림에서 칸을 쓰느냐 마느냐를 정한 건 무엇이었나요?

김민준 M04
김민준

성분의 분산이 수위보다 높은지요. 수위가 1 이면 분산 1, 0.5, 0.25 인 성분은 잠겨요. 칸을 50개로 늘려도 자료의 성분은 다섯 개뿐이고 수위도 그대로니까… 여전히 둘이네요.

이서연 S01
이서연

(나)는 수위를 낮춰야 해. β 를 줄이거나 σd² 를 줄이거나.

김민준 M01
김민준

얼마나 줄이면 몇 칸을 써?

이서연 S01
이서연

β = 0.5 면 셋, 0.3 이면 넷을 써. 학습해 보면 β = 0.3 에서 레이트가 4.502비트로, 물 붓기의 4.474비트와 거의 같아.

선생님 T14
선생님

(다)는요?

이서연 S08
이서연

칸이 비는 것 자체는 고장이 아닐 수 있어요. 그 방향의 자료가 수위보다 작게 퍼져 있으면, 정해진 교환 비율에서는 적지 않는 게 가장 좋은 답이니까요. 의심할 것은 칸 수가 아니라 β 와 디코더 분산이 정한 수위예요.

김민준 M11
김민준

동아리 방에 의자를 50개 들여놔도 회원이 다섯 명이면 다섯 자리만 차잖아요. 회비를 낮춰야, 그러니까 수위를 낮춰야 사람이 더 와요.