자주 하는 실수와 요약
자주 하는 실수
| 실수 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 제곱 오차로 짐작한 값이 실제로 있는 값이라고 봄 | 1, 2 | 망가진 입력과 어울리는 원래 값들의 평균이다. 많이 망가질수록 섞이는 후보가 늘어 전체 평균 쪽으로 끌려간다 |
| 가린 칸 수만 같으면 남는 후보 수도 같다고 봄 | 2 | 어디를 가렸느냐에 따라 남는 후보가 다르다 |
| 망가진 정도를 잘못 알아도 복원기가 알아서 맞춘다고 봄 | 3, 4 | 크게 잡으면 멀쩡한 것까지 흐리고, 작게 잡으면 잡음을 남긴다. 망가진 정도를 조건으로 함께 준다 |
| 잡음 크기를 알려 주면 언제나 크게 좋아진다고 봄 | 5 | 차원이 큰 그림은 망가진 그림만 보고도 잡음 크기를 어림할 수 있다(784칸이면 2.5%쯤). 2차원 점은 그렇지 못하다 |
| 라벨 조건은 언제나 같은 만큼 듣는다고 봄 | 6 | 망가진 그림이 아직 말하지 않은 것이 많을 때 크게 듣는다. 다 지워진 그림에서 라벨만 아는 복원기는 그 라벨의 평균을 그린다 |
| 순수한 잡음을 한 번에 고치면 새 그림이 나온다고 봄 | 7 | 한 번에 고치면 평균이 나온다. 큰 꼴부터 조금씩 정해야 실제로 있을 법한 하나가 된다 |
| 출발점은 아무 데나 둬도 수리공이 데이터로 데려간다고 봄 | 8 | 수리공은 지금 점이 그 단계의 σ 만큼 망가졌다고 믿고 걷는다. 출발점은 그 크기의 잡음이어야 한다 |
| 학습 그림에서 오차가 0인 복원기가 만들기에도 가장 좋다고 봄 | 9 | 학습 그림을 외운 복원기는 학습 그림을 그대로 꺼낸다. 처음 보는 그림을 고칠 줄 아는 복원기가 새 그림을 만든다 |
요약
일부러 망가뜨린 입력(칸을 지우거나 잡음을 섞은 그림)을 받아 원래 입력을 되살리도록 배우는 오토인코더가 디노이징 오토인코더다. 망가진 입력이 있으니 베낄 수 없고, 데이터가 어떻게 생겼는지를 배워야 한다. 제곱 오차로 배운 복원기는 그 망가진 그림이 나올 수 있었던 원래 그림들의 평균(조건부 평균)을 내놓으므로, 많이 망가질수록 고친 그림이 흐려지고 전체 평균 그림에 다가간다. 망가진 정도 σ 를 조건으로 함께 주면(조건부 디노이징) 복원기 하나가 모든 σ 를 제 기준으로 고친다. 라벨도 조건으로 줄 수 있고, 조건은 망가진 그림이 아직 말하지 않은 것이 많을수록 크게 듣는다. 이 복원기에 순수한 잡음을 주고 한 번에 고치면 평균이 나오지만, σ 를 큰 값에서 작은 값으로 줄이며 고친 쪽으로 조금씩 옮기기를 되풀이하면 큰 꼴부터 정해지며 새 그림이 만들어진다. 고치기만 배운 복원기가 만들기를 하게 되는 것이다.
flowchart LR A["디노이징 오토인코더<br/>망가진 입력 → 원래 입력"] --> B["제곱 오차의 답은 평균<br/>많이 망가질수록 흐리다"] B --> C["조건부 디노이징<br/>σ·라벨을 함께 받는다"] C --> D["한 번에 고치기<br/>평균 하나로 모인다"] C --> E["수리공의 걸음<br/>σ 를 줄이며 조금씩 고치기"] E --> F["큰 꼴부터 정해지며<br/>새 그림이 나온다"]
막힌 곳
고치는 법만 배운 복원기가 순수한 잡음에서 새 숫자를 만들어 냈다. 걸음마다 수리공은 앞 걸음이 남긴 그림을 보고 고쳤으니, 걸음마다의 결과가 다음 걸음의 조건이 된 셈이다. 조건은 사람이 줄 수도 있었다. 라벨을 주자 다 지워진 그림에서도 그 라벨의 평균 그림이 나왔다.
그렇다면 한 번에 그리던 VAE 에도 조건을 더 주면 선명해질까? 사람이 재서 정해 준 조건과, 수리공의 걸음처럼 모델이 스스로 만든 조건은 무엇이 다를까?