암기와 일반화: 일반화란 무엇인가

자주 하는 실수와 요약

자주 하는 실수

실수 나온 문제 바로잡는 법
답만 외운 것도 기출에서 100점이니 배운 것이라고 봄 1 짧게 줄어드는 공책만 새 문제에 쓸 수 있다. 무작위 답은 줄지도 새 문제에 쓰이지도 않는다
큰 신경망이면 무작위 라벨도 짧게 적을 수 있다고 봄 2 90비트 이하 코드워드는 2⁹¹개 미만이라 동전 라벨 100개가 그만큼 줄 확률은 0.2% 아래다
다 맞히는 모델이 다음 라벨도 잘 예측한다고 봄 3 외운 모델은 자신 있게 틀려 라벨 하나에 1비트보다 많이 쓴다. 비트는 학습 정확도가 아니라 순차 코드로 잰다
학습 자료를 다 맞혔다는 것만으로 처음 보는 자료를 보증받으려 함 4 맞힌 라벨보다 짧게 적혔을 때만 보증이 된다. 예외 목록이 길면 룩업 테이블이다
학습 점을 많이 모으면 「반드시」 맞는다고 보증할 수 있다고 봄 5 운 나쁜 학습 자료가 뽑힐 확률 δ는 남는다. 보증은 확률 1 − δ로만 한다
오차율 경계가 100%를 넘어도 무언가 말한다고 봄 6 경계가 1(두 가지 중 고르는 문제면 0.5) 근처를 넘으면 아무 말도 하지 않은 것이다
규칙처럼 굴면 짧게 적힌다고 바로 결론 냄 6 짧은지는 순차 코드나 가중치를 적는 비트로 따로 잰다
자료가 적을 때도 규칙을 배우는 편이 늘 낫다고 봄 7 자료가 적으면 그대로 적는 설명이 짧다. 어느 설명이 짧은지가 바뀌는 자리가 전이다
학습 점 사이를 섞어 낸 점을 새로 만든 점으로 봄 8 f*는 학습 점의 가중 평균만 낸다. 노이즈를 다 걷으면 학습 점 하나로 간다
가장 가까운 학습 그림과의 거리만으로 외움을 판정함 9 학습 자료가 많으면 새것도 어느 학습 자료와는 가깝다. 새로 뽑은 자료와 비교하거나 겹치지 않는 두 절반으로 따로 배워 비교한다

요약

이 장에서 한 일을 정리해 보자. 평면에 가우스로 흩어진 두 클러스터(클러스터마다 학습 점 50개)에 같은 MLP를 학습시키면 참 라벨도 무작위 라벨도 학습 정확도 100%에 닿지만, 시험 정확도는 99.3%와 54.8%로 갈렸다. 학습 정확도와 파라미터 수로는 둘을 가를 수 없었다. 앞의 라벨로 배운 모델로 다음 라벨을 적는 순차 코드로 재면, 참 라벨 100개는 10.8비트로 줄었고 무작위 라벨은 314.9비트로 오히려 늘었다. 학습 자료를 규칙으로 줄이지 않고 룩업 테이블처럼 지니는 것이 암기다.

라벨의 일부를 망가뜨려 가며 보면 순차 코드의 비트와 시험 정확도가 함께 움직였고, 같은 자료에서 일찍 멈춰 짧게 적은 모델이 시험에서도 더 맞혔다. 오컴 경계는 그 현상에 보증을 붙인다. 학습 점 n개를 모두 맞히는 규칙을 미리 정한 코드로 L비트에 적을 수 있으면, 처음 보는 자료의 오차율은 확률 1 − δ로 (L ln 2 + ln(1/δ))/n 아래다. 룩업 테이블은 L = n이라 아무것도 보증받지 못한다. 학습 자료보다 짧은 설명을 찾았을 때에만 처음 보는 자료에 대해 말할 수 있다는 것이 이 책이 읽는 일반화다.

생성 모델에서는 학습 자료에서 가장 잘하는 디노이저가 학습 점의 가중 평균이라 학습 점을 그대로 꺼내 준다. 원 위의 점으로 학습한 작은 신경망 디노이저는 학습 점이 4개일 때 학습 점으로 돌아가고 40개부터 원 전체로 퍼졌다. 학습 자료를 그대로 적는 설명은 자료 수에 비례해 길어지고 규칙은 그대로이므로, 자료가 늘면 어느 설명이 짧은지가 바뀐다.

flowchart LR
  A["학습 자료를 다 맞힌 모델"] -- "순차 코드로 잰다" --> B{"학습 자료보다<br/>짧게 적히나?"}
  B -- "아니다: 룩업 테이블" --> C["암기<br/>처음 보는 자료에 말할 것이 없다"]
  B -- "그렇다: 규칙" --> D["일반화<br/>오컴 경계 (L ln 2 + ln(1/δ))/n"]
  E["학습 자료 수 N"] -- "N이 늘면 규칙이 짧아진다" --> D

막힌 곳

이 장의 잣대는 모두 바깥에서 잰 것이었다. 순차 코드는 라벨을 적는 비트를 쟀고, 생성 모델의 새로움은 원에서 새로 뽑은 점이나 다른 절반으로 배운 디노이저와 비교해 쟀다. 라벨이 없는 오토인코더처럼 자료를 짧은 코드로 줄였다가 되살리는 모델이라면 어떨까? 되살린 것이 원래 자료와 닮았다는 것만으로 그 코드가 짧고 쓸모 있는 설명이라고 할 수 있을까? 다른 자료나 다른 모델 없이, 모델이 스스로 만든 코드가 자료를 제대로 줄였는지 확인할 방법은 없을까?