1. 개요[편집]
| 오토인코더 Autoencoder | |
|---|---|
| 구조 | 인코더 f: x → z · 디코더 g: z → x̂ |
| 목적함수 | 재구성 오차 (+ 병목 또는 정규화) |
| 지도 여부 | 비지도 — 라벨이 입력 자기 자신 |
| 선형 극한 | PCA가 만드는 부분공간(축 자체는 아님) |
| 주요 변종 | 희소 · 잡음제거 · 수축 · 변분 |
| 주 용도 | 차원 축소 · 표현 학습 · 이상 탐지 · 신경 압축 · 비선형 ROM |
정답을 입력 자기 자신으로 주는 순간, 라벨 없는 데이터가 전부 지도학습 데이터가 된다. 문제는 그 시험이 너무 쉬워서 컨닝을 막아야 한다는 것이다.
오토인코더(autoencoder)는 입력을 저차원 코드로 압축하는 인코더 와 그 코드로부터 입력을 복원하는 디코더 를 이어 붙여, 재구성 오차 를 최소화하도록 함께 학습시키는 비지도 신경망이다. 배우려는 것은 항등함수 인데, 항등함수 자체는 아무 정보도 없다. 쓸모는 그 항등함수를 통과시키기 위해 통과할 수 없는 좁은 문을 하나 만들어 둔다는 데서 나온다. 그 문이 병목이고, 병목을 지나려면 데이터에서 버려도 되는 것과 버리면 안 되는 것을 구분해야 한다.
역사적으로는 1980년대 자기연상(auto-association) 신경망에서 출발했고, 힌턴과 살라쿠트디노프의 2006년 Science 논문이 심층 오토인코더로 주성분 분석보다 훨씬 좋은 저차원 코드를 얻어내며 딥러닝 부활의 초기 사례가 됐다. 지금은 단독 모형보다 부품으로 더 많이 쓰인다 — 확산모형의 잠재공간, 신경 이미지 압축의 변환, 비선형 축소차수모델의 좌표계가 전부 오토인코더다.
이 문서는 결정론적 오토인코더를 다룬다. 잠재변수에 사전분포를 못 박아 생성모형으로 만드는 확률적 판본은 변분 오토인코더에 따로 있고, 여기서 반복하지 않는다.
2. 병목 — 못 배우게 해야 배운다[편집]
인코더와 디코더의 용량이 충분하면 오토인코더는 반드시 컨닝한다. 코드 차원이 입력 차원 이상이면 를 그대로 배워 재구성 오차 0을 달성하고, 배운 것은 아무것도 없다. 그래서 무언가를 반드시 제약해야 하고, 어떤 제약을 거느냐가 오토인코더의 계보를 만든다.
- 부족완비(undercomplete): 코드 차원 입력 차원 . 가장 직관적인 병목이고, 아래에서 볼 PCA와의 연결이 여기서 나온다.
- 과완비 + 정규화(overcomplete): 를 허용하되 코드에 희소성을, 인코더에 매끄러움을, 입력에 잡음을 강제한다. 차원이 아니라 정보량을 병목으로 삼는 것.
용량이 큰 오토인코더가 조용히 항등함수로 퇴화하는 사고는 이론적 우려가 아니라 현장의 단골 버그다. 특히 이상치 탐지에서 재구성 오차를 이상 점수로 쓸 때 치명적인데, 학습에서 본 적 없는 이상 표본까지 충실히 복원해 버려 탐지기가 무력화된다. 자세한 진단은 해당 문서 쪽에 있다.
3. 선형 오토인코더는 PCA인가[편집]
활성함수를 전부 없애고 로 두고 제곱오차를 최소화하면 어떻게 되는가. 답은 유명하지만 자주 반쯤 틀리게 인용된다.
부를라르와 캄프(1988), 발디와 호닉(1989)의 결과를 정확히 쓰면 이렇다. 데이터 공분산 의 상위 개 고유벡터가 일 때, 전역 최소점에서의 합성 사상은
즉 상위 주성분이 펼치는 부분공간 위로의 직교사영이 된다. 재구성 오차도 PCA와 정확히 같다. 그러나 과 각각은 그렇지 않다. 임의의 가역행렬 에 대해
로 바꿔도 곱은 그대로이고 손실도 그대로다. 해집합 전체가 만큼의 자유도를 갖는다. 따라서 학습된 의 행들은 일반적으로 직교하지도 않고, 크기 순으로 정렬되지도 않으며, 개별 주성분 축에 대응하지도 않는다. “선형 오토인코더는 PCA와 같다”는 문장은 부분공간 수준에서만 참이고, 축 수준에서는 거짓이다. 실제로 학습된 코드에 PCA를 다시 돌려야 정렬된 성분이 나온다.1 인코더와 디코더 가중치를 묶는 관행도 이 자유도를 완전히 없애 주지는 못한다.2
두 가지 부수적 사실이 더 있다.
- 손실 지형에 나쁜 지역최소점이 없다. 발디와 호닉은 전역 최소점 외의 모든 임계점이 안장점임을 보였다. 비볼록 문제인데도 경사법이 잘 도는 이유이고, 이 결과가 이후 심층 선형망 손실 지형 연구의 출발점이 됐다.
- 은닉층 하나에 비선형을 얹는 것만으로는 PCA를 못 넘는다. 출력이 선형이고 손실이 제곱오차면, 시그모이드를 끼워도 최적해가 여전히 같은 부분공간 근처에 머문다는 것이 원논문의 관찰이다. 깊이와 비선형이 함께 있어야 비로소 휘어진 다양체를 잡는다. 오토인코더가 1980년대에 각광받지 못한 이유도, 2006년에 되살아난 이유도 같은 문장으로 설명된다.
그러면 실무에서 PCA 대신 오토인코더를 쓸 이유는? 데이터가 실제로 비선형 다양체 위에 있을 때, 그리고 표본이 너무 많아 짜리 특이값 분해가 부담될 때다. 반대로 선형 구조라면 PCA가 무조건 낫다 — 닫힌 해가 있고, 성분이 정렬되며, 절단으로 버린 에너지를 특이값으로 정확히 셀 수 있다. 오토인코더에는 그 계기판이 없다.
4. 정규화 계열 — 병목을 차원 밖에서 만들기[편집]
4.1. 희소 오토인코더[편집]
코드 차원을 넉넉히 주되 동시에 켜지는 유닛 수를 벌한다. 활성값에 L1 벌점을 걸거나, 유닛 의 평균 활성 를 목표 희소도 (보통 0.05)에 붙들어 두는 KL 벌점
을 더한다. 결과적으로 각 입력이 소수의 기저 원소 조합으로 표현되는데, 이건 딕셔너리 학습이나 희소 부호화가 하던 일을 신경망으로 상각(amortize)한 것에 가깝다. 차이는 추론 비용이다 — 희소 부호화는 표본마다 최적화 문제를 풀어야 하지만, 희소 오토인코더는 인코더 한 번 통과로 끝난다.
4.2. 잡음제거 오토인코더[편집]
뱅상 외(2008)의 처방은 무식할 정도로 단순하다. 입력을 망가뜨리고 원본을 복원시킨다. 로 마스킹·가우시안·소금후추 잡음을 넣은 뒤 손실은 로 잰다. 항등함수는 이제 최적해가 아니다 — 망가진 입력을 그대로 뱉으면 벌점을 받으므로, 모형은 데이터가 사는 다양체 쪽으로 되밀어 주는 사상을 배워야 한다.
이 계열에는 예쁜 이론적 뒷받침이 있다. 뱅상(2011)은 가우시안 잡음(분산 )과 제곱손실로 학습한 잡음제거 오토인코더에서
즉 재구성 잔차가 잡음 섞인 분포의 스코어를 추정한다는 것을 보였다(). 잡음 제거를 학습시켰더니 로그밀도의 기울기가 딸려 나온 것이고, 이 항등식이 그대로 스코어 기반 생성모형과 확산 모형의 학습 목표가 된다. 오늘날 이미지 생성의 주력 계열이 가우시안 잡음제거 오토인코더를 잡음 세기별로 잔뜩 학습시킨 것이라는 사실은 이 지점에서 나온다.
마스킹 잡음 쪽 계보도 따로 뻗었다. 입력의 일부를 가리고 복원시키는 훈련은 언어모형의 마스크 예측, 그리고 이미지 패치의 75%를 가리는 마스크드 오토인코더로 이어진다. 자기지도학습의 상당 부분이 잡음제거 오토인코더의 후손이라고 봐도 크게 틀리지 않는다.
4.3. 수축 오토인코더[편집]
리파이 외(2011)는 잡음을 확률적으로 넣는 대신 해석적으로 같은 효과를 노린다. 인코더 야코비안의 프로베니우스 노름을 직접 벌한다.
이러면 인코더가 입력의 미세한 변화에 둔감해진다 — 즉 국소적으로 수축적이 된다. 그런데 재구성 항은 정보를 보존하라고 요구하므로, 둘의 타협은 “다양체를 따라가는 방향으로만 민감하고 나머지 방향으로는 둔감한” 인코더다. 특징공간의 국소 차원을 추정하는 데 야코비안 특이값 스펙트럼을 쓸 수 있다는 것도 여기서 나온 부산물이고, 다양체 학습과 직접 만나는 지점이다. 다만 다양체를 잡는 것과 그 위의 좌표가 “진짜 인자”인 것은 전혀 다른 이야기다.3
시그모이드 인코더 에서는 이 벌점이 로 닫힌 형태로 떨어져 계산이 싸다. 잡음제거 오토인코더가 디코더까지 포함한 사상 전체를 강건하게 만드는 반면 수축 오토인코더는 인코더만 붙든다는 것이 둘의 정확한 차이다.
5. 잠재공간 — 보간이 되는 곳과 안 되는 곳[편집]
학습된 코드 두 개를 잡아 로 직선 보간하고 디코더에 넣으면 두 입력 사이가 부드럽게 이어지는 그림이 나온다 — 가끔은. 결정론적 오토인코더에는 코드 공간 위의 분포를 규정하는 장치가 전혀 없다. 손실은 학습 표본이 찍힌 좌표에서만 정의되고, 그 사이 빈 공간에서 디코더가 무슨 짓을 하든 벌점이 없다. 그래서 보간 경로가 한 번도 방문한 적 없는 구멍을 지나가면 출력이 무너진다.
처방은 두 갈래다. 잠재공간에 사전분포를 강제해 집합 사후분포를 채우는 쪽이 변분 오토인코더이고, 코드를 유한 개 코드북 벡터로 양자화해 애초에 빈틈을 없애는 쪽이 벡터 양자화 계열이다. 후자는 잠재공간이 이산이라 보간이라는 개념 자체가 사라지는 대신, 그 위에 별도의 사전분포 모형을 얹기 좋다는 장점이 있다.
주의할 것 하나. 직선 보간은 고차원에서 생각보다 나쁜 선택이다. 등방 가우시안에서 뽑은 두 벡터를 직선으로 이으면 중간점의 노름이 양 끝보다 배쯤 작아져 밀도가 낮은 영역을 지난다. 구면 선형보간(slerp)을 쓰는 것이 관례가 된 이유이고, “우리 모형은 보간이 안 되네요”의 상당수가 사실 이 문제다.4
6. 압축기로서의 오토인코더[편집]
오토인코더는 태생이 손실 압축기다. 인코더가 분석 변환, 디코더가 합성 변환, 병목이 비트 예산에 대응한다. 실제 신경 이미지 압축 파이프라인은 여기에 두 조각을 더 붙인다 — 코드를 양자화하고, 양자화된 심볼을 허프만 부호화나 산술 부호화 같은 무손실 엔트로피 부호기로 비트스트림에 담는다. 학습 목표는 자연스럽게 율-왜곡 형태
가 되고, 를 훑으면 율-왜곡 곡선이 나온다. JPEG의 DCT + 양자화 + 엔트로피 부호화 구조와 자리 하나하나가 대응한다는 점이 이 관점의 매력이다. 다른 것은 변환이 손으로 설계된 고정 기저냐 데이터에서 학습된 비선형 사상이냐뿐이다. 자세한 고전 쪽 이야기는 이미지 압축 문서에 있다.
양자화가 미분 불가능하다는 문제는 학습 중에 균등잡음을 더해 대체하거나 직통(straight-through) 추정량으로 우회한다. 압축률을 높이려고 병목을 좁히면 재구성이 흐려지는 것은 변분 오토인코더 문서에서 본 “L2 손실 → 조건부 평균 → 흐릿함”과 정확히 같은 메커니즘이며, 그래서 신경 압축 쪽도 지각 손실이나 적대적 손실을 섞는다.
7. 공학 시뮬레이션에서 — 비선형 ROM[편집]
축소차수모델의 표준 도구는 적합직교분해(POD)다. 스냅숏 행렬의 특이값 분해로 선형 기저를 뽑고 그 위에 갈레르킨 사영을 한다. 문제는 대류 지배 문제다. 이동하는 충격파나 화염면처럼 형상이 그대로 평행이동하는 해에서는 선형 부분공간 근사의 오차가 모드 수에 대해 아주 천천히 줄어든다 — 콜모고로프 -폭이 느리게 감소한다는 말이고, 실무적으로는 모드를 수백 개 써도 정확도가 안 오른다는 뜻이다. 선형 기저로 이동하는 펄스를 표현하려면 위치마다 다른 기저가 필요하니 당연한 일이다.
오토인코더 기반 ROM은 사영 대상을 선형 부분공간에서 비선형 다양체로 바꾼다. 상태를 로 두고 잠재변수 의 시간발전 방정식을 잔차 최소화로 유도하면(리와 칼버그, 2020), 같은 정확도를 훨씬 적은 잠재 차원으로 달성하는 사례가 보고돼 있다. 이동하는 펄스를 표현하는 데 필요한 잠재변수는 원리적으로 “위치” 하나면 되기 때문이다.
물론 공짜가 아니다.
- 오차 상계가 없다. POD는 절단한 특이값의 제곱합이 곧 버린 에너지라 계기판이 있다. 오토인코더에는 없고, 학습 범위 밖에서 얼마나 틀릴지 알 방법도 없다. 안전 여유가 걸린 인증 해석에서 이 차이는 치명적이다.
- 디코더가 조밀하다. POD 사영은 희소 구조를 어느 정도 물려받지만, 신경망 디코더는 그렇지 않아 매 시간스텝의 비선형 항 평가가 다시 전차원 비용이 된다. 초축소(hyper-reduction)가 사실상 필수다.
- 학습 비용과 재현성. 스냅숏을 모으고 망을 학습시키는 오프라인 비용이 POD의 SVD 한 번보다 훨씬 크고, 시드에 따라 결과가 흔들린다.
그래서 현장의 감각은 “POD가 되는 문제는 POD로, POD가 깨지는 대류 지배 문제에서만 오토인코더”에 가깝다. 물리 정보 신경망 쪽 정규화를 잠재 동역학에 얹어 외삽 성능을 붙들어 보려는 시도도 활발하다.
8. 실무 감각[편집]
- 먼저 PCA를 돌려라. 선형 재구성 오차가 이미 충분히 작으면 오토인코더가 이길 여지가 없다. 스크리 도표는 병목 차원 의 출발점으로도 쓸 만하다.
- 손실은 데이터 분포에 맞춘다. 로 정규화된 이미지에는 이진 교차엔트로피, 실수값 필드에는 MSE. 물리량이면 성분별 스케일 차이가 손실을 독점하지 않도록 무차원화부터 해야 한다. 압력과 온도를 같은 MSE에 던지면 단위가 큰 쪽만 복원된다.
- 재구성 오차 숫자 자체는 비교 불가능하다. 정규화 방식과 데이터 스케일이 바뀌면 값이 통째로 바뀐다. 항상 같은 전처리 아래 PCA 베이스라인과 나란히 놓고 봐야 한다.
- 코드 차원을 후속 작업으로 고른다. 분류·군집·회귀 등 하류 작업이 있다면 그 성능으로 를 고르는 것이 가장 정직하다. 아무 하류 작업도 없다면 애초에 그 코드가 무엇을 위한 것인지부터 되물어야 한다.
- 정규화 계층 배치 주의. 배치 정규화를 병목 직전에 넣으면 코드가 강제로 표준화되어 스케일 정보가 날아간다. 의도한 것이라면 좋지만 대개는 사고다.
9. 관련 문서[편집]
- 변분 오토인코더 · 생성적 적대 신경망 · 벡터 양자화
- 주성분 분석 · 특이값 분해 · 저랭크 근사 · 커널 PCA
- 다양체 학습 · 다차원 척도법 · 차원의 저주
- 딕셔너리 학습 · 전변분 잡음제거
- 축소차수모델 · 적합직교분해 · 물리 정보 신경망
- 이상치 탐지 · 이미지 압축 · 허프만 부호화
- 심층 학습 · 합성곱 신경망 · 역전파 · 확률적 경사하강법
10. Footnotes[편집]
-
회전 자유도를 깨는 방법은 알려져 있다. 학습된 디코더 가중치에 SVD를 한 번 더 걸면 정렬된 주성분 방향이 복원되고(Plaut, 2018), 가중치 감쇠를 넣으면 손실 지형의 대칭 자체가 깨져 임계점이 주성분 방향에 정렬된다는 분석도 있다(Kunin 외, 2019). 정규화가 최적화를 돕는 데 그치지 않고 해의 식별가능성을 만든다는 드문 예시다. ↩
-
인코더와 디코더 가중치를 로 묶는 관행(tied weights)은 파라미터를 절반으로 줄이고 자유도를 직교군 정도로 좁혀 준다. 그래도 축은 여전히 안 정렬된다. 요즘 대형 모형에서는 잘 안 쓰는데, 인코더와 디코더의 구조가 애초에 대칭이 아닌 경우가 많아서다(예: 인코더는 스트라이드 합성곱, 디코더는 업샘플 + 합성곱). ↩
-
“오토인코더가 데이터의 진짜 생성인자를 찾아 준다”는 기대는 이론적으로 근거가 약하다. 비선형 인코더의 잠재변수는 임의의 가역 변환에 대해 불변이므로, 추가 가정(보조변수, 시간구조, 희소성) 없이는 식별 자체가 불가능하다는 것이 비선형 ICA 쪽의 오래된 결론이다. 선형 오토인코더의 자유도가 비선형에서는 훨씬 더 커진 것뿐이라고 보면 된다. ↩
-
이 현상은 차원의 저주 문서에 나오는 “고차원 가우시안의 질량은 얇은 껍질에 몰린다”의 직접적 귀결이다. 껍질 위의 두 점을 직선으로 이으면 반드시 속이 빈 안쪽을 지난다. 잠재공간을 구로 상상하고 그 위를 걸어가야 한다는 뜻이고, 실제로 대각선을 따라 걷는 데모가 예뻐 보이는 것도 이 때문이다. ↩