코딩 레이트와 코딩 레이트 감소: 클러스터별로 적으면 짧아진다

자주 하는 실수와 요약

자주 하는 실수

실수 나온 문제 바로잡는 법
퍼짐이 허용 오차보다 작은 방향에 음수 비트를 줌 1 그 방향은 0비트에 가깝다. ½ log₂(1 + 퍼짐²/눈금²)는 음수가 되지 않는다
점 구름의 차원을 눈금 없이 말함 2 허용 오차를 반으로 줄일 때 늘어나는 비트가 그 눈금에서 쓰는 방향 수다
한 점에 모인 표현의 코딩 레이트를 0으로 봄 3, 12 코딩 레이트는 원점에서의 2차 모멘트로 잰다. 원점이 아닌 한 점도 방향 하나를 쓴다
라벨 비트를 빼먹고 아낀 양을 셈 4 코딩 레이트 감소는 라벨을 안다고 본 값이다. 라벨을 모르면 라벨 비트를 더한다
클러스터별 코딩 레이트를 점 비율 없이 그냥 더함 5 점 하나의 평균으로 맞추려면 nj/n을 곱해 더한다
원점 양쪽으로 가르면 많이 아낀다고 봄 5 방향 u와 −u는 같은 부분공간이다. 같은 부분공간 안에서는 어떻게 갈라도 거의 아끼지 않는다
틀린 라벨이 비율만큼만 손해라고 봄 6 처음 몇 개의 틀린 점이 납작한 클러스터에 새 방향을 열어 가장 비싸다
라벨 비트가 가장 적은 나누기가 좋다고 봄 7 클러스터 수를 줄이면 클러스터 안을 적는 비트가 는다. 둘의 합이 가장 짧은 곳을 찾는다
눈금이 클 때 「하나」라는 답을 틀렸다고 봄 8 그 눈금에서는 정말 구별되지 않는다. 클러스터 수는 허용 오차가 정한다
직선이나 평면 근처의 클러스터를 k-평균으로 가름 9 k-평균은 중심 둘레의 공을 본다. 원점을 지나는 직선은 중심이 같아 가를 수 없다
색이나 표현이 「멀면」 구별된다고 봄 10 코딩 레이트는 거리가 아니라 방향(각도)을 본다. 서로 직교할 때 가장 많이 아낀다
감소를 키우는 학습에 크기 제한을 두지 않음 11 배율을 두 배로 할 때마다 감소가 는다. 점마다 길이 1로 맞춰 모양으로만 겨루게 한다
클러스터 안을 한 점으로 모으는 것이 가장 좋다고 봄 12 MCR²는 클러스터마다 맡긴 방향을 다 쓰게 한다. 한 점으로 모으면 클러스터 안의 다양함을 잃는다

요약

점 구름을 허용 오차 ε 안에서 적는 평균 비트가 코딩 레이트 R = ½ log₂ det(I + d/(nε²) ZZᵀ)이다. 주축마다 ½ log₂(1 + dλ/ε²)를 더한 것이고, 점들이 퍼진 부피를 허용 오차 공의 부피로 잰 값의 로그다. 퍼짐이 ε보다 작은 방향은 거의 0비트를 내므로, 같은 만큼 퍼져도 납작한 구름은 적게 든다(둥근 구름 6.658비트, 가는 구름 4.972비트). 눈금을 반으로 줄일 때 늘어나는 비트는 그 눈금에서 자료가 쓰는 방향 수다.

점들이 클러스터로 되어 있으면 클러스터별로 따로 적어 아낄 수 있다. 한 덩어리 R에서 점 비율로 가중한 클러스터별 Rc를 뺀 것이 코딩 레이트 감소 ΔR이다. 직선 세 개 근처의 점 300개에서 바른 나누기는 점 하나에 4.031비트를 아꼈고, 직선 둘을 섞으면 2.353비트로 줄었다. 라벨을 모를 때는 점을 적는 비트에 클러스터마다의 축과 라벨의 비트까지 더한 전체 코드 길이가 가장 짧은 나누기를 찾는다(마·데르크센·홍·라이트 2007). 짝지어 합치기는 ε = 0.1에서 세 클러스터를 찾았고, ε가 커지면 클러스터 수가 둘, 하나로 줄었다. 라벨을 고정하고 표현을 움직여 감소를 키우는 것이 MCR²다(위·찬·유·송·마 2020). 점마다 길이 1로 묶으면 클러스터끼리는 서로 직교하고 클러스터 안은 맡긴 방향을 다 쓰는 배치가 가장 좋다.

flowchart LR
  A["점 구름 하나<br/>R = ½ log₂ det(I + d/(nε²) ZZᵀ)"] -- "클러스터별로 따로 적기" --> B["코딩 레이트 감소<br/>ΔR = R − R<sub>c</sub>"]
  B -- "라벨이 없으면<br/>축·라벨 비트까지 더해 최소" --> C["가장 짧은 나누기<br/>클러스터 수는 ε가 정한다"]
  B -- "라벨을 두고<br/>표현을 움직여 최대" --> D["MCR²<br/>클러스터끼리 직교, 클러스터 안은 다양하게"]

막힌 곳

MCR²는 표현이 어디에 놓여야 하는지를 비트로 말해 준다. 점을 직접 움직인 장난감에서는 점의 좌표를 바로 옮겨 세 클러스터를 서로 직교하는 직선 위에 보냈다. 그런데 신경망은 점을 바로 옮기지 못하고, 입력을 층에서 층으로 바꿔 가며 표현을 만든다. 감소를 키우는 그래디언트 스텝 하나하나가 층 하나가 하는 일과 어떤 관계일까? 그리고 클러스터끼리 직교하게, 클러스터 안은 납작하게 놓인 표현에서 원래 자료를 다시 그려 낼 수 있을까? 짧게 적었다는 것만으로는 그 표현이 자료에서 무엇을 남겼는지까지 알 수 없다.