디노이징과 조건부 디노이징: 고치다 보면 만들게 된다

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

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

왜 2차원 고리인가

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

같은 점, 다른 σ

고리 데이터에서 σ 를 0.02에서 3까지 섞어 MLP 두 개를 학습했다. 하나는 망가진 점만 받고, 하나는 log σ 를 함께 받는다. 망가진 점 (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칸 뒤에 이어 붙여 받았다. 조건이 무엇이든 받는 자리는 같다. 조건이 글 한 줄이나 참조 그림으로 바뀌면 이어 붙이는 방법만 달라진다.

문제 4. 두 온도계

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

김민준 M01
김민준

18도라고 적혀 있으니 18도요. 온도계가 무엇이든 읽은 값이 제일 정확하죠.

선생님 T01
선생님

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

이서연 S01
이서연

기온 자체의 흔들림이 분산 4, 싼 온도계의 어긋남이 분산 16이에요. 평년에서 3도 벗어난 것 가운데 4/(4 + 16) = 0.2만 기온 탓으로 믿으면 15.6도. 좋은 온도계면 4/(4 + 1) = 0.8을 믿어서 17.4도예요.

김민준 M04
김민준

같은 18도인데 15.6도랑 17.4도면 꽤 다르네요. (나)는 둘의 가운데 16.5도쯤이요?

이서연 S01
이서연

18도가 어느 온도계에서 나왔을 확률을 먼저 따져야 해. 계산하면 싼 온도계일 확률이 0.495라서 거의 반반이고, 그 비율로 섞으면 16.51도야.

선생님 T14
선생님

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

김민준 M07
김민준

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

이서연 S01
이서연

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

문제 5. 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개의 제곱을 평균 내어 σ² 을 어림하면, 그 어림은 σ² 에서 상대적으로 얼마쯤 흔들리는가? n = 2 와 n = 784 를 견주어라. (표준정규 잡음 하나를 제곱한 값의 분산은 2이다.)

김민준 M01
김민준

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

선생님 T01
선생님

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

김민준 M07
김민준

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

이서연 S01
이서연

(나)를 계산하면, 칸 n개의 제곱 평균은 평균 σ², 분산 2σ⁴/n이라서 상대 흔들림이 √(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
선생님

그래요. 2025년 쑨(Qiao Sun), 장(Zhicheng Jiang), 자오(Hanhong Zhao), 허(Kaiming He)는 「잡음을 조건으로 꼭 줘야 하는가?」라는 논문에서 그림 생성 모델들에서 잡음 크기 입력을 빼 보았어요. 그림처럼 차원이 큰 데이터는 망가진 그림만 보고도 잡음 크기를 믿을 만하게 어림할 수 있다는 것을 근거로 들었고, 대부분의 모델은 조금만 나빠졌지만 크게 무너진 경우도 있다고 보고했어요.

이서연 S01
이서연

통계 시간에 표본이 많아야 분산을 믿을 수 있다고 배웠는데, 여기서는 칸 하나하나가 표본이었구나.

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

같은 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 에서는 거의 듣지 않는가?

김민준 M01
김민준

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

이서연 S07
이서연

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

선생님 T14
선생님

같은 그림이 같은 까닭으로 나온 거예요. 그림이 거의 다 지워졌으니 남은 정보는 라벨뿐이고, 라벨만 아는 복원기의 최선은 라벨의 평균이에요. (나)는요?

김민준 M04
김민준

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

이서연 S08
이서연

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

김민준 M01
김민준

시험 문제에 힌트를 줘도, 이미 아는 학생한테는 소용없고 하나도 모르는 학생한테만 크게 도움이 되는 거랑 같네요.