오토인코더: 줄였다 되살리며 배우는 신경망

조건부 디노이징: 얼마나 망가졌는지 함께 알려 주기

노이즈 크기 σ 마다 디노이저를 따로 두면, σ 를 촘촘히 나눌수록 신경망이 늘어난다. 신경망 하나가 모든 σ 를 고치게 하려면 σ 를 여러 값으로 섞어 학습하면 된다. 그런데 고칠 때 σ 를 알려 줄 것인가, 말 것인가? 알려 주지 않으면 디노이저는 망가진 그림만 보고 얼마나 망가졌는지까지 스스로 짐작해야 한다.

왜 2차원 고리인가

숫자 그림은 784칸이라 고친 자리를 그림으로 그릴 수 없으므로, 숫자 두 개짜리 데이터를 쓴다. 데이터는 반지름 1인 고리 위에 두께 0.06쯤으로 놓인 점들이다. 2차원이면 망가진 점과 고친 점을 한 평면에 그릴 수 있고, 점 하나가 숫자 두 개뿐이라 얼마나 흔들렸는지를 점 스스로는 거의 말해 주지 못한다. σ 를 모르는 디노이저에게 가장 어려운 무대다.

같은 점, 다른 σ

고리 데이터에서 σ 를 0.02에서 3까지 섞어, 망가진 점만 받는 MLP 와 log σ 를 함께 받는 MLP 두 개를 학습했다. 망가진 점 (1.3, 0) 하나를 σ 를 알려 준 디노이저로 고쳐 보면 이렇다.

알려 준 σ 0.05 0.3 1 3
고친 점 (1.15, 0.00) (0.98, 0.00) (0.55, 0.00) (0.07, 0.00)

σ 가 작으면 고리 바로 바깥에서 조금 흔들린 점으로 보고 거의 그대로 두고, σ = 0.3 이면 고리 위로 끌어오고, σ 가 크면 어디서 왔는지 모르니 고리 전체의 평균인 가운데 쪽으로 끌어온다. 같은 점인데 σ 에 따라 고칠 자리가 다르다. σ 를 모르는 디노이저는 이 점을 여러 σ 의 경우를 섞은 어중간한 답인 (0.83, 0.00)으로 고친다.

L(θ)=E ∥fθ(x~,σ,y)−x∥2,가장 좋은 fθ(x~,σ,y)=E[x∣x~,σ,y]\textcolor{#d62728}{\mathcal{L}}(\textcolor{#665522}{\theta}) = \mathbb{E}\,\big\lVert \textcolor{#665522}{f_\theta}(\textcolor{#1b9e77}{\tilde{x}}, \textcolor{#4c5d80}{\sigma}, \textcolor{#0093b8}{y}) - \textcolor{#1b9e77}{x} \big\rVert^2, \qquad \text{가장 좋은 } \textcolor{#665522}{f_\theta}(\textcolor{#1b9e77}{\tilde{x}}, \textcolor{#4c5d80}{\sigma}, \textcolor{#0093b8}{y}) = \mathbb{E}[\textcolor{#1b9e77}{x} \mid \textcolor{#1b9e77}{\tilde{x}}, \textcolor{#4c5d80}{\sigma}, \textcolor{#0093b8}{y}]
fθ(x~,σ,y)망가진 그림과 함께 조건을 받는 디노이저x~, x망가진 그림, 원래 그림σ노이즈 크기 (학습 때 여러 값을 섞어 뽑는다)y라벨 (주지 않아도 된다)E[x∣x~,σ,y]조건이 같은 경우들만 모은 원래 그림의 평균\begin{array}{ll} \textcolor{#665522}{f_\theta}(\textcolor{#1b9e77}{\tilde{x}}, \textcolor{#4c5d80}{\sigma}, \textcolor{#0093b8}{y}) & \text{망가진 그림과 함께 조건을 받는 디노이저} \\ \textcolor{#1b9e77}{\tilde{x}},\ \textcolor{#1b9e77}{x} & \text{망가진 그림, 원래 그림} \\ \textcolor{#4c5d80}{\sigma} & \text{노이즈 크기 (학습 때 여러 값을 섞어 뽑는다)} \\ \textcolor{#0093b8}{y} & \text{라벨 (주지 않아도 된다)} \\ \mathbb{E}[\textcolor{#1b9e77}{x} \mid \textcolor{#1b9e77}{\tilde{x}}, \textcolor{#4c5d80}{\sigma}, \textcolor{#0093b8}{y}] & \text{조건이 같은 경우들만 모은 원래 그림의 평균} \end{array}

세로 막대 오른쪽에 아는 것을 하나씩 더 놓을수록 평균에 들어가는 원래 그림의 후보가 줄어든다. 이렇게 망가진 그림과 함께 노이즈 크기나 라벨 같은 조건을 받아 고치는 일을 조건부 디노이징 (조건을 함께 받아 고치기 / conditional denoising)이라 한다. 고리에서 고친 점과 원래 점의 제곱 거리 평균은 σ = 0.05 에서 σ 를 알려 주면 0.0040, 모르면 0.0079다. 고치지 않고 두는 것(0.0050)보다도 나쁘다. σ = 3 에서는 알려 주면 0.955, 모르면 1.089로, 모든 점을 그냥 가운데 원점에 갖다 놓는 것(1.007)보다 나쁘다.

고리 데이터에서 노이즈 크기 σ 마다 고친 점과 원래 점의 제곱 거리 평균. 이 고리에서 식으로 계산한 가장 좋은 디노이저(학습한 MLP 와 거의 같다)를 썼다. σ 를 알려 준 디노이저(초록)는 모든 σ 에서 고치지 않은 것(회색 점선)보다 낫다. σ 를 모르는 디노이저(벽돌색)는 σ 가 작으면 고치지 않은 것보다 나쁘다.
고리 데이터에서 노이즈 크기 σ 마다 고친 점과 원래 점의 제곱 거리 평균. 이 고리에서 식으로 계산한 가장 좋은 디노이저(학습한 MLP 와 거의 같다)를 썼다. σ 를 알려 준 디노이저(초록)는 모든 σ 에서 고치지 않은 것(회색 점선)보다 낫다. σ 를 모르는 디노이저(벽돌색)는 σ 가 작으면 고치지 않은 것보다 나쁘다.
직접 움직여 보기σ 를 알려 주면크게 열기

ML에서: 조건이 들어가는 자리

이 장의 디노이저는 log σ 와 라벨을 망가진 그림 784칸 뒤에 이어 붙여 받았는데, 조건이 무엇이든 받는 자리는 같다. 조건이 글 한 줄이나 참조 그림으로 바뀌면 이어 붙이는 방법만 달라진다.

문제 9. 두 온도계

우리 동네의 이맘때 기온은 평균 15도, 표준편차 2도로 오르내린다. 기록 장부에는 날마다 두 온도계 가운데 하나로 잰 값이 적히는데, 싼 온도계는 참 기온에서 표준편차 4도, 좋은 온도계는 1도만큼 어긋난다. 어느 온도계를 쓰는지는 반반인데, 오늘 장부에 18도가 적혀 있다. (가) 싼 온도계로 쟀다는 것을 안다면, 참 기온의 짐작(제곱 오차가 가장 작은 값)은? 좋은 온도계라면? (나) 어느 온도계인지 적혀 있지 않다면? (다) 날마다 이렇게 짐작할 때, 온도계를 알 때와 모를 때 제곱 오차의 평균은 얼마나 다른가?

이맘때 기온의 분포(평균 15도, 표준편차 2도), 장부에 적힌 18도, 두 온도계가 어긋나는 크기(표준편차 4도와 1도)
이맘때 기온의 분포(평균 15도, 표준편차 2도), 장부에 적힌 18도, 두 온도계가 어긋나는 크기(표준편차 4도와 1도)
이서연 S01
이서연

18도라고 적혀 있으니 18도요. 온도계로 직접 잰 값이니까 그게 제일 믿을 만하지 않아요?

선생님 T01
선생님

싼 온도계는 4도씩 어긋난다면서요. 18도가 「참 기온이 높아서」인지 「온도계가 어긋나서」인지는 어떻게 가르죠?

김민준 M03
김민준

평년 15도에서 3도 벗어났는데, 기온은 원래 2도쯤만 오르내리니까 3도 높은 날은 드물어요. 싼 온도계가 4도쯤 어긋나는 건 흔하고요. 그럼 온도계 탓일 가능성이 더 클 것 같은데요.

이서연 S04
이서연

그럼 18도를 그대로 믿으면 안 되겠네요. 두 변동을 분산으로 놓으면 기온이 4, 싼 온도계가 16이에요. 벗어난 3도를 분산의 비율대로 나눠서 4/(4 + 16) = 0.2만 기온 탓으로 믿으면 15.6도예요.

김민준 M01
김민준

좋은 온도계면 4/(4 + 1) = 0.8을 믿어서 17.4도네. 같은 18도인데 꽤 다르다.

선생님 T14
선생님

(나)는요?

김민준 M02
김민준

두 온도계가 반반이니까 둘의 가운데 16.5도쯤 아닐까요?

이서연 S03
이서연

반반은 18도를 보기 전 얘기잖아. 18도가 어느 온도계에서 나왔을 법한지 먼저 따져 봐야 해. 계산해 보니 싼 온도계일 확률이 0.495라서 거의 반반이고, 그 비율로 섞으면 16.51도야. 이번엔 가운데랑 거의 같네.

선생님 T01
선생님

(다)는 시뮬레이션으로 해 봐요.

김민준 M07
김민준

이백만 날로 돌렸어요. 읽은 값 그대로면 8.48, 온도계를 알면 2.00, 모르면 2.52예요. 좋은 온도계로 잰 날만 보면 0.80 대 1.46이라 거의 두 배고요. 모를 땐 좋은 온도계 값도 괜히 평년 쪽으로 끌어당기니까 손해를 봐요.

이서연 S01
이서연

고리에서 σ 를 모르는 디노이저가 σ 가 작을 때 고치지 않느니만 못했던 거랑 같아. 조금만 흔들린 점을 많이 흔들린 점일 수도 있다며 괜히 옮긴 거지.

문제 10. 784칸이면 σ 가 보인다

MNIST 에서도 σ 를 0.02 ~ 4 에서 섞어 디노이저 두 개를 학습했는데, 하나는 log σ 를 함께 받고 하나는 받지 않는다. 시험 그림의 제곱 오차 합 평균은 아래와 같다.

σ 0.05 0.25 1 4
σ 를 모름 2.29 4.30 18.68 46.96
σ 를 앎 2.25 4.35 18.69 46.87

(가) 고리에서는 σ 를 알려 주는 것이 큰 차이를 냈는데, 여기서는 왜 거의 같을까? (나) 노이즈만 든 칸 n개의 제곱을 평균 내어 σ² 을 추정하면, 그 추정값은 σ² 에서 상대적으로 얼마쯤 흔들리는가? 표준정규 노이즈 하나를 제곱한 값의 분산이 2임을 써서 n = 2 와 n = 784 를 비교하라.

고리 곁의 망가진 점 (1.3, 0)과, 같은 숫자 그림을 σ = 0.5 와 σ = 2 로 하나씩 망가뜨린 784칸 그림 두 장(어느 쪽이 어느 σ 인지는 적지 않음). 그림 자료: MNIST(CC BY-SA 3.0).
고리 곁의 망가진 점 (1.3, 0)과, 같은 숫자 그림을 σ = 0.5 와 σ = 2 로 하나씩 망가뜨린 784칸 그림 두 장(어느 쪽이 어느 σ 인지는 적지 않음). 그림 자료: MNIST(CC BY-SA 3.0).
김민준 M01
김민준

학습이 잘못된 거 아닐까요? σ 를 넣어 줬는데 아무 효과가 없으니까요.

선생님 T01
선생님

그럼 σ 를 모르는 디노이저는 σ 를 어떻게 알아냈을까요? 망가진 숫자 그림을 눈으로 보면 σ 가 0.5인지 2인지 알 수 있어요?

김민준 M07
김민준

아, 보여요. 바탕이 얼마나 지글지글한지 보면 바로 알죠.

이서연 S01
이서연

(나)는 칸 n개의 제곱을 평균 내는 거니까… 평균은 σ²이고, 칸 하나의 제곱은 분산이 2σ⁴니까 n개를 평균 내면 2σ⁴/n이야.

김민준 M03
김민준

그럼 σ²에 비하면 얼마나 흔들리는 건데?

이서연 S07
이서연

상대 표준편차가 √(2/n)이야. n = 2 면 100%, 아무것도 모르는 거나 같아. n = 784 면 5%고, σ 자체는 그 절반인 2.5%쯤 흔들려.

김민준 M05
김민준

실제 그림으로 해 봤어요. 원래 그림의 제곱합 평균(87.81)을 빼고 784로 나눠서 σ 를 추정했더니 σ = 2 에서 2.7% 흔들려요. 그런데 σ = 0.5 에서는 8.4%, σ = 0.1 이면 97%나 돼요.

이서연 S08
이서연

σ 가 작으면 노이즈보다 그림마다 잉크 양이 다른 게 더 크니까 내 추정법이 무너지는 거야. 그래도 디노이저는 오차가 똑같았어. 칸끼리의 모양을 보고 더 똑똑하게 읽었겠지. 2차원 점은 그럴 칸이 없고.

선생님 T13
선생님

그래요. 그림처럼 칸이 많은 데이터는 망가진 그림만 보고도 노이즈 크기를 꽤 믿을 만하게 추정할 수 있어요. 그래서 노이즈 크기를 아예 주지 않는 모델도 시험되었어요.

이서연 S01
이서연

샘플이 많아야 분산을 믿을 수 있는데, 여기서는 칸 하나하나가 샘플이었구나.

문제 11. 라벨까지 알려 주면

같은 MNIST 디노이저에 라벨(0~9 의 원-핫 10칸)까지 함께 주도록 하나 더 학습했다. 거의 순수한 노이즈인 σ = 4 로 망가뜨린 시험 그림을 고친 결과는 이렇다(제곱 거리).

고친 그림 ↔ 원래 그림 고친 그림 ↔ 전체 평균 그림 고친 그림 ↔ 그 라벨의 평균 그림
σ 만 앎 46.89 7.70
σ 와 라벨을 앎 38.44 15.30 6.37

σ = 0.25 에서는 두 디노이저의 오차가 4.33 과 4.30 으로 거의 같다. (가) σ = 4 에서 라벨을 알려 준 디노이저는 무엇을 내놓는가? (나) 라벨은 왜 σ = 4 에서는 크게 듣고 σ = 0.25 에서는 거의 듣지 않는가?

시험 그림 「3」을 σ = 4 와 σ = 0.25 로 망가뜨린 그림과, σ 만 아는 디노이저와 σ 와 라벨을 함께 아는 디노이저가 고친 그림을 내놓을 자리. 그림 자료: MNIST(CC BY-SA 3.0).
시험 그림 「3」을 σ = 4 와 σ = 0.25 로 망가뜨린 그림과, σ 만 아는 디노이저와 σ 와 라벨을 함께 아는 디노이저가 고친 그림을 내놓을 자리. 그림 자료: MNIST(CC BY-SA 3.0).
김민준 M01
김민준

(가)는 표에 나와 있어요. 라벨을 알면 그 라벨의 평균 그림이랑 6.37밖에 안 떨어져 있어요. 「3」을 주면 3들의 평균 그림이 나오는 거죠.

이서연 S07
이서연

그거 라벨을 넣고 그림을 받던 MLP 랑 똑같은 그림이잖아. 그때도 3들의 평균을 그렸지.

선생님 T14
선생님

같은 그림이 나온 건 원인이 같기 때문이에요. 그림이 거의 다 지워졌으니 남은 정보는 라벨뿐이고, 라벨만 아는 디노이저의 최선은 라벨의 평균이에요. (나)는요?

김민준 M01
김민준

σ = 0.25 그림은 눈으로 봐도 무슨 숫자인지 다 보이니까요. 라벨이 알려 줄 게 이미 그림에 들어 있어요.

이서연 S08
이서연

조건이 얼마나 쓸모 있는지는 망가진 그림이 아직 말해 주지 않은 것이 얼마나 남았느냐에 달렸네. 다 지워진 그림에는 라벨이 남은 정보의 거의 전부고, 멀쩡한 그림에는 라벨이 보탤 게 없어.

김민준 M01
김민준

내비게이션도 처음 가는 길에서는 안내를 하나하나 다 듣지만, 매일 다니는 통학길에서는 거의 안 듣잖아요. 길을 이미 아는 만큼 내비가 보탤 게 줄어드는 거죠.