그림을 나누는 축: 스펙트럼

세기 스펙트럼: 그림의 세기는 굵은 무늬에 몰려 있다

선생님 그림은 큰 계수 1%에 세기의 90%가 몰렸다. 왜 하필 몰렸을까? 그림의 칸들을 무작위로 섞어 보자. 칸마다의 밝기 값 모음은 하나도 바뀌지 않으니 세기도 같다. 그런데 섞은 그림은 큰 계수 1%가 세기의 8.5%만 가진다. 몰리는 까닭은 밝기 값이 아니라 칸들이 놓인 짜임에 있다. 짜임의 어떤 성질일까?

역사: 영국과 그리스의 풍경 여섯 장

필드(David Field)는 눈의 시각 세포가 왜 그런 모양의 무늬에 반응하는지를 묻다가, 먼저 눈이 받는 그림이 어떤 통계를 가지는지 쟀다. 1987년 논문에서 그는 영국과 그리스에서 나무·바위·덤불을 흑백 필름으로 찍은 사진 여섯 장(건물이나 길이 없는 장면)을 256 × 256 칸으로 읽어 무늬의 진폭을 공간 주파수마다 쟀다. 겉보기에는 제각각인 여섯 장이 모두 같은 모양을 냈다. 무늬의 진폭이 대략 공간 주파수에 반비례했고, 세기(진폭의 제곱)는 공간 주파수의 제곱에 반비례했다.

공간 주파수마다 세기를 재기

선생님 그림의 2차원 푸리에 계수를 공간 주파수 f 가 같은 고리끼리 모아 계수 크기의 제곱을 평균 낸다. 2 c/i 에서 12.9이던 값이 8 c/i 에서 0.46, 32 c/i 에서 0.015, 127 c/i 에서 0.00036 이 된다. 공간 주파수가 4배가 될 때마다 20~30분의 1로 준다. 가로·세로를 모두 로그 눈금으로 그리면 거의 곧은 내리막이고, 그 기울기는 −2.34 다.

P(f)  ∝  f −γ\textcolor{#962d1e}{P}(\textcolor{#008787}{f}) \;\propto\; \textcolor{#008787}{f}^{\,-\textcolor{#87965a}{\gamma}}
f공간 주파수: 그림 한 폭에 든 무늬 수 (c/i)P(f)공간 주파수가 f인 무늬들의 평균 세기 (푸리에 계수 크기의 제곱)γ로그 눈금에서 내리막의 기울기 (클수록 굵은 무늬에 더 몰린다)\begin{array}{ll} \textcolor{#008787}{f} & \text{공간 주파수: 그림 한 폭에 든 무늬 수 (c/i)} \\ \textcolor{#962d1e}{P}(\textcolor{#008787}{f}) & \text{공간 주파수가 f인 무늬들의 평균 세기 (푸리에 계수 크기의 제곱)} \\ \textcolor{#87965a}{\gamma} & \text{로그 눈금에서 내리막의 기울기 (클수록 굵은 무늬에 더 몰린다)} \end{array}

이렇게 공간 주파수마다 무늬의 세기를 늘어놓은 것을 세기 스펙트럼 (공간 주파수마다의 무늬 세기 / power spectrum)이라 한다. 기울기 γ(감마)는 그림마다 조금씩 다르다. 등장인물 그림 70장은 2.24 ± 0.16 이고, CelebA 얼굴 사진 2,000장(64 × 64 흑백)은 2.86 ± 0.28 이다. 같은 세기의 백색 잡음(칸마다 따로 뽑은 잡음)은 0.08, 칸을 섞은 선생님 그림은 0.01 로 평평하다. 그림이 굵은 무늬에 세기를 몰아주는 까닭은 경계에 있다. 밝기가 한 번에 뛰는 경계 하나는 진폭이 공간 주파수에 반비례하는 무늬들의 합이고, 그림은 크고 작은 덩어리의 경계로 가득하다.

세기 스펙트럼. 선생님 그림(진한 적갈)은 로그 눈금에서 기울기 약 −2.34 의 내리막이고, 같은 그림의 칸을 무작위로 섞은 것(진회색)과 세기가 같은 백색 잡음(회색 점선)은 평평하다. 오른쪽은 세 그림. (sources/spectrum/figs.py)
세기 스펙트럼. 선생님 그림(진한 적갈)은 로그 눈금에서 기울기 약 −2.34 의 내리막이고, 같은 그림의 칸을 무작위로 섞은 것(진회색)과 세기가 같은 백색 잡음(회색 점선)은 평평하다. 오른쪽은 세 그림. (sources/spectrum/figs.py)

ML에서: 학습 데이터가 가진 기울기

생성 모델이 흉내 내야 할 그림들은 모두 이 내리막을 가진다. 픽셀 수로만 보면 백색 잡음 한 장과 그림 한 장은 같은 크기의 점이지만, 세기 스펙트럼으로 보면 한쪽은 평평하고 한쪽은 기울기 2쯤으로 내려간다. 생성한 그림의 세기 스펙트럼을 재면 모델이 어느 공간 주파수의 무늬를 덜 그렸는지 숫자로 볼 수 있다.

문제 7. 메신저로 보낸 사진

가로 4,000픽셀 사진을 메신저가 가로 1,000픽셀로 줄여 보냈다. 이 사진의 무늬는 1 c/i 부터 2,000 c/i(두 픽셀이 한 주기)까지 있고, 공간 주파수가 두 배가 되는 구간(옥타브)마다 세기가 같다고 하자. (가) 줄인 사진에서 사라진 무늬는 몇 c/i 위인가? (나) 잃은 세기는 전체의 몇 %인가? (다) 가로 1,080픽셀 휴대폰 화면에서 줄인 사진이 원본과 거의 같아 보이는 까닭은?

김민준 M01
김민준

가로세로를 4분의 1로 줄였으니 칸 수는 16분의 1이에요. 세기도 그만큼 잃은 거 아니에요?

선생님 T01
선생님

사라진 무늬가 어느 구간인지부터 봐요.

김민준 M01
김민준

1,000픽셀이면 500 c/i 까지 담기니까, 사라진 건 500부터 2,000 c/i, 두 옥타브예요. 1부터 2,000까지는 log₂2,000 = 11 옥타브쯤이니까 2/11, 18%네요.

이서연 S03
이서연

칸 수는 16분의 1이 됐는데 세기는 18%만 잃었어. 칸 수를 많이 차지하는 쪽이 가는 무늬라서 그런가 봐.

김민준 M07
김민준

(다)는 화면이 가로 1,080픽셀이면 원본도 어차피 540 c/i 까지만 보여 주니까, 잃은 두 옥타브는 화면에서 원래 안 보이던 무늬네요.

문제 8. 옥타브마다 같은 세기

2차원 그림의 세기 스펙트럼이 정확히 P(f) = f⁻² 라 하자. (가) 공간 주파수가 a 와 2a 사이인 고리에 든 세기를 구하라(반지름 f, 두께 df 인 고리의 넓이는 2πf df). a 에 따라 달라지는가? (나) 소리처럼 1차원이면(고리 대신 길이 df 인 선분) 어떻게 되는가? (다) 선생님 그림처럼 γ = 2.34 이면 한 옥타브 올라갈 때마다 세기가 몇 배가 되는가? 실제로 잰 옥타브 [2, 4), [4, 8), …, [64, 128) 의 몫 12.2, 12.3, 7.5, 4.9, 4.4, 3.0% 와 견주어라.

김민준 M01
김민준

f⁻² 로 빠르게 주니까 위 옥타브일수록 세기가 줄겠죠.

선생님 T01
선생님

고리의 넓이도 함께 넣어 봐요.

이서연 S01
이서연

∫ f⁻² · 2πf df = 2π ∫ df/f 를 a 부터 2a 까지 하면 2π ln 2 = 4.36 이에요. a 가 없어요. 어느 옥타브나 같아요.

이서연 S07
이서연

고리가 바깥으로 갈수록 넓어지는 몫 f 가, 세기가 줄어드는 몫 f⁻² 의 절반을 메운 거예요. 가는 무늬는 하나하나는 약해도 개수가 많아요. 문제 7에서 옥타브마다 세기가 같다고 한 가정이 이거였구나.

선생님 T14
선생님

(나)는요?

이서연 S01
이서연

선분이면 ∫ f⁻² df = 1/(2a) 라 옥타브마다 절반으로 줄어요. 같은 f⁻² 라도 차원에 따라 이야기가 달라지네요.

김민준 M08
김민준

(다)는 세기가 f⁻²·³⁴ 이고 넓이가 f 니까 옥타브마다 2^(2 − 2.34) = 0.79배예요. 잰 값은 12.2% 에서 3.0% 까지 다섯 번 넘어가니 한 번에 (3.0/12.2)^(1/5) = 0.76배고요. 꽤 맞네요.

선생님 T13
선생님

필드도 1987년 논문에 「세기가 1/f² 로 줄면 옥타브마다 같은 세기」라고 적었어요.

김민준 M01
김민준

동네 가게는 하나하나 작아도 수가 많아서 매출을 다 더하면 큰 마트와 맞먹는 거랑 같네요.

문제 9. 제곱 오차로 줄인 조각

8 × 8 조각(수 64개)을 수 8개로 줄였다 되살리는 활성화 없는 오토인코더를 제곱 오차로 학습시키면, 주성분 8개만 남기고 되살린 것과 같은 결과가 된다. 등장인물 그림 조각 42,000개에서 이렇게 하면 조각 분산의 92.0%가 남는다. (가) 남은 세기를 DCT 무늬 번호 (u, v) 의 반지름 √(u² + v²) 구간 [0, 1.5), [1.5, 3), [3, 5), [5, 11) 으로 나누면, 각 구간에서 원래 세기의 몇 %가 남는가? (나) 되살린 조각은 어떻게 보이는가? (다) VAE 로 되살린 얼굴에서 가는 무늬가 14.5%만 남은 것과 견주어라.

김민준 M01
김민준

전체가 92% 남았으니 무늬마다 고르게 92%쯤 남았겠죠.

선생님 T01
선생님

주성분 축을 무엇의 순서로 골랐는지 생각해 봐요.

이서연 S01
이서연

분산이 큰 순서요. 그런데 문제 6에서 주성분 축이 거의 DCT 축이었고, DCT 축마다의 분산은 그 공간 주파수의 세기예요. 세기는 굵은 무늬일수록 크니까…

김민준 M05
김민준

돌려 보니 [0, 1.5) 는 100%, [1.5, 3) 은 76.5%, [3, 5) 는 20.2%, [5, 11) 은 0.6%예요. 고르게가 아니라 굵은 무늬부터 남기고 가는 무늬는 거의 다 버렸어요.

이서연 S08
이서연

(나)는 흐린 조각이네. 제곱 오차로 수 몇 개만 남기라고 하면, 세기가 큰 굵은 무늬를 남기는 게 오차를 가장 많이 줄이니까 그렇게 고른 거야. 세기 스펙트럼이 내리막인 한 이건 블러랑 같은 일이야.

선생님 T14
선생님

(다)는요?

김민준 M08
김민준

VAE 는 비선형이고 손실에 KL 도 있지만, 되살리기 몫은 같은 제곱 오차예요. 64 × 64 컬러 사진 12,288개의 수를 잠재 변수 64칸으로 줄였으니 남길 수 있는 무늬는 더 적고, 세기가 작은 가는 무늬부터 버렸겠네요. 14.5%가 그 흔적이고요.

김민준 M01
김민준

시험 전날 요약 노트를 한 장으로 줄이라고 하면 배점 큰 단원부터 남기고 각주는 다 버리는 거랑 같네요.