동작 AI · 5-3 · 긴급 미션

인코더·디코더 — 동작을 접었다 펼친다

5-2의 숙제는 "손잡이(잠재 변수)[주]는 어디서 오나"였다. 이번에는 데이터만 보고 손잡이를 찾는다. 막대 인형 장면 600개로 숫자 1,196개를 k개로 접는 인코더와, k개를 다시 1,196개로 펼치는 디코더를 만든다. 숫자 16개로 접었다 펴도 동작의 99.8%가 돌아온다. 그리고 그 접힌 숫자로 떨림을 지우고, 가려진 팔꿈치를 채우고, 5-1의 투기 탐지를 적은 데이터로 더 정확하게 하고, 5-2의 생성을 손잡이 없이 해낸다.

1,196 → 16인코더가 접는 크기 (74.8배)
99.8%숫자 16개가 담아낸 움직임 (설명한 분산)
0.030 → 0.009떨림 σ = 0.03을 접었다 편 뒤의 오차 (코드 1)
2.1배가려진 팔꿈치를 채우는 정확도 향상 (코드 1)
99.7%종류당 25개만으로 학습한 투기 탐지 정확도 (k = 16, 코드 2)
2개Colab에서 바로 돌리는 코드
1미션

세 번째 지령 — "손잡이를 데이터에서 찾아라"

5-2의 생성기 D는 손잡이 세 개(속도·위치·크기)를 미리 알고 있어서 이겼다. 실제 데이터에는 손잡이가 붙어 오지 않는다. 이번 미션은 장면 600개만 보고 손잡이를 스스로 찾는 것이다.

[SYSTEM] 04:55 · 5-2 완료 보고 접수. 다음 지령: 동작 압축. 첨부: 여섯 종류 장면 600개, 깔때기 설계도 한 장.
박사
박사숫자 1,196개가 정말 다 따로 움직일까? 아니야. 팔꿈치가 움직이면 손목도 따라가고, 이번 프레임은 지난 프레임과 거의 같지. 그러니 훨씬 적은 숫자로 접을 수 있어.
조수
조수접는 쪽이 인코더, 펴는 쪽이 디코더! 접었다 폈는데 원래 동작이 나오면, 가운데 숫자에 동작이 다 들어 있다는 거죠?
초파리 연구원
초파리 연구원그 가운데 숫자가 바로 5-2에서 찾던 손잡이야. 그리고 덤이 있어. 떨림도 지워지고, 가려진 팔꿈치도 채워지고, 투기 탐지도 좋아져.
연구실 로봇깔때기 크기를 1개부터 16개까지 준비했습니다. 코드 1이 계산한 방향 16개를 이 페이지에 실어 두었습니다.
위쪽 화면에서 막대 인형 넷이 작은 캡슐 하나로 모였다가 세 줄의 걷는 막대 인형 행렬로 펼쳐지고, 아래쪽에서는 흐릿한 막대 인형이 선명해지며 막대그래프가 올라간다. 조수가 주먹을 쥐고 기뻐하고 로봇이 상승 그래프 팻말을 든다
접었다 펼치기. 흐릿한 입력이 선명한 출력이 되는 장면을 섹션 4에서 직접 만든다.
2깔때기

깔때기 — 1,196개를 k개로 접었다 다시 펼친다

왼쪽 원본을 인코더가 숫자 k개(가운데 보라 막대)로 접고, 디코더가 다시 1,196개로 펼친다(오른쪽). 병목 크기 k를 줄여 가며 어디까지 접을 수 있는지 보자.

병목 k
장면

코드 1의 결과 — 시험 장면 300개를 접었다 편 오차

병목 k압축 비율설명한 분산복원 오차 (RMSE)뼈 길이 오차
11,196배85.72%0.10216.16%
2598배95.07%0.05987.65%
3398.7배97.84%0.03952.78%
5239.2배99.02%0.02661.95%
8149.5배99.46%0.01951.86%
1674.8배99.80%0.01231.50%
3237.4배99.90%0.00881.43%

시험 장면에는 포즈 추정의 떨림(σ = 0.008)이 섞여 있다. k = 32의 오차 0.0088은 그 떨림 크기와 거의 같다. 그 아래로는 동작이 아니라 떨림을 외우게 된다.

초보자를 위한 풀이 — 이 깔때기는 어떻게 만들었나

장면 600개를 모아 "동작이 가장 크게 달라지는 방향"을 차례로 찾았다(주성분 분석, PCA). 인코더는 장면에서 평균 장면을 빼고 이 방향 k개에 비춰 숫자 k개를 얻는다. 디코더는 평균 장면에 방향 k개를 그 숫자만큼 더한다. 더하기와 곱하기뿐인 가장 단순한 오토인코더다. 신경망으로 만든 오토인코더는 층과 활성함수를 써서 휘어진 관계까지 담는다(3-7). 이 페이지의 방향 16개는 코드 1이 계산한 값을 그대로 실었다.

3잠재 지도

잠재 지도와 손잡이 — 데이터가 스스로 찾은 손잡이

장면 600개를 손잡이 1·2로 찍은 지도다. 점을 눌러 장면을 고르고, 아래 손잡이 네 개를 돌려 보자. 손잡이에는 이름이 없다. 무엇이 바뀌는지 보고 직접 이름을 붙여 보자.

같은 종류의 장면은 지도에서 가까이 모인다. 아무도 "이건 던지기"라고 알려 주지 않았는데, 접기만 했는데도 그렇다. 손잡이 값은 학습 장면들의 표준편차(σ) 단위다. ±2σ 밖은 학습 데이터에 거의 없던 영역이라 펼친 모양이 어색해진다.

손잡이가장 크게 움직이는 곳관찰해서 붙인 별명장면별 평균 (코드 1)
1 (움직임의 85.7%)모든 관절의 x, 장면 후반"끝날 때 어디에 있나" — 통 앞에 남는가, 오른쪽으로 걸어 나가는가넣기 −15.3 · 던지기 +8.3 · 지나가기 +6.4 · 떨어뜨리기 +6.7
2 (9.4%)오른손목·팔꿈치와 발목의 x, 장면 초반"처음에 어디서, 오른팔을 어느 쪽에 두고 시작하나"지나가기 −4.4 · 손 흔들기 +4.1
3 (2.8%)오른손목·팔꿈치·머리의 y"팔을 드는가, 허리를 숙이는가"손 흔들기 +2.6 · 줍기 −2.1
4 (1.2%)오른손목과 발목의 x, 장면 중반"가운데 시간의 팔·다리 좌우 흔들림"줍기 +1.3 · 던지기 −0.9

5-2의 손잡이와 무엇이 다른가

5-2의 손잡이(속도·위치·크기)는 사람이 장면을 만들 때 정한 것이었다. 여기의 손잡이는 데이터가 가장 크게 달라지는 방향을 차례로 뽑은 것이다. 그래서 이름이 없고, 손잡이 하나에 여러 뜻이 섞여 있다(손잡이 1은 위치이면서 "걸어 나갔나"이기도 하다). 대신 사람이 아무것도 알려 주지 않아도 찾을 수 있다. 이것이 잠재 공간이다.

4떨림·가림

성능 향상 ① — 떨림을 지우고, 가려진 팔꿈치를 채운다

실제 포즈 추정은 관절 점이 떨리고, 팔이 몸에 가리면 점을 놓친다. 깔때기는 "사람 동작처럼 생긴 것"만 통과시키므로, 접었다 펴면 떨림은 걸러지고 빈칸은 그럴듯하게 채워진다.

떨림 σ
장면

떨림 지우기 (코드 1, 장면 120개)

떨림 σ = 0.01이면 오차 0.0100 → 0.0082, σ = 0.03이면 0.0300 → 0.0090, σ = 0.05면 0.0501 → 0.0104. 떨림이 클수록 효과가 크다. 떨림은 방향이 제멋대로라 깔때기의 방향 16개에 거의 걸리지 않기 때문이다.

가려진 팔꿈치 채우기 (코드 1, 장면 120개)

보이는 칸만으로 잠재 숫자 16개를 최소제곱으로 맞춘 뒤 디코더로 펼치면, 빈칸까지 채워진다. 위치 오차는 "어깨와 손목의 중간점으로 때우기" 0.0230 대 "디코더로 채우기" 0.0108, 약 2.1배 정확하다. 5-1에서 말한 "팔이 몸에 가리면 관절을 못 찾는다"를 이렇게 메운다.

5투기 탐지

성능 향상 ② — 접은 숫자로 투기를 잡으면

5-1에서 "좌표를 그대로 학습하면 데이터가 훨씬 많이 필요하다"고 했다. 이번에는 관절과 캔의 좌표(1,288개)를 먼저 인코더로 접고, 접힌 숫자 k개로 가장 단순한 로지스틱 회귀를 학습한다.

학습 장면 (종류당)1,288개 그대로 + MLPk = 8로 접고 + 로지스틱 회귀k = 16으로 접고 + 로지스틱 회귀
25 (전체 150)96.7%95.0%99.7%
50 (전체 300)97.0%95.3%100.0%
100 (전체 600)98.0%98.0%100.0%

k = 16 + 로지스틱 회귀: 종류당 25개(전체 150개)만으로 시험 300개 중 299개를 맞혔다. 숫자 16개 속에 "캔이 끝에 어디 있나"와 "사람이 어디로 갔나"가 함께 접혀 있어서, 직선 하나로도 가를 수 있게 된 것이다.

k = 8은 모자라다: 캔의 마지막 위치처럼 작은 움직임은 9번째 이후 방향에 들어 있어, 8개로 접으면 일부가 빠진다. 무조건 많이 접는 것이 답은 아니다.

5-1의 92.3%와 다른 이유: 5-1은 "물체 없음"을 좌표 −9로 표시했고, 여기서는 (0, 0)으로 표시했다. 입력 표시만 바꿔도 MLP가 98%까지 오른다. 이 표의 세 열은 모두 같은 입력으로 비교했다.

왜 접으면 좋아지나

인코더는 이름표 없이 장면만 보고 만들었다(600개를 모두 썼지만 투기·정상 정답은 보지 않았다). 그렇게 얻은 "동작의 요약"은 잡음이 걸러지고 숫자가 적어서, 정답이 붙은 장면이 적어도 분류기가 헤매지 않는다. 이름표 없는 데이터로 표현을 먼저 배우고, 적은 정답으로 마무리하는 방식은 오늘날 큰 모델 학습의 기본 흐름과 같다. 단, 이 숫자는 합성 데이터 결과다. 실제 영상에서는 이보다 낮다.

6생성

성능 향상 ③ — 손잡이 없이 동작 만들기 (생성기 E)

5-2의 감독관이 다시 왔다. 이번 생성기 E는 사람이 정한 손잡이를 모른다. 잠재 지도에서 던지기들이 모인 자리(평균과 표준편차)를 보고 새 점 16개를 뽑아 디코더로 펼친다.

5-2의 생성기 네 개와 함께 놓고 보면 (코드 2 · 5-2 코드 2, 생성 20개씩)

생성기손잡이를 미리 아나뼈 길이 오차떨림손목 최대 속도다양성새로움
A 평균 하나—1.7%0.00451.360.0000.033
B 좌표마다 주사위—44.2%0.265910.000.1490.109
C 하나 골라 복사—4.7%0.03002.750.1250.000
D 손잡이 3개 뽑기안다 (사람이 정함)0.0%0.01252.710.1230.022
E 잠재 16개에서 뽑기모른다 (데이터가 찾음)3.7%0.01221.760.1140.047

E가 해낸 것: 손잡이를 모르고도 B처럼 부서지지 않는다(뼈 오차 44.2% → 3.7%, 떨림 0.27 → 0.012). 다양하고(0.114), 베끼지도 않았다(0.047).

E가 못 한 것: 손목 최대 속도가 1.76으로, 던지는 힘이 빠졌다. 잠재 공간에서 평균 근처를 뽑고 직선 방향들을 더하기만 하니, 빠르게 휘두르는 짧은 순간이 뭉개진다. 뼈 길이도 진짜(0%)만큼 정확하지는 않다.

더 좋은 디코더

선형 디코더는 방향들을 비율대로 더할 뿐이라, "팔이 원을 그리며 돈다" 같은 휘어진 관계를 담지 못한다. 그래서 실제 동작 생성 연구는 층을 쌓은 비선형 인코더·디코더를 쓰고 [R2], 잠재 공간이 정규분포 모양이 되도록 함께 학습해 "뽑으면 그럴듯하게 펼쳐지는" 공간을 만든다(VAE [R1]). 시간 축을 함께 다루는 동작용 VAE도 있다 [R4].

7한계

접기의 한계, 그리고 다음 미션

인코더·디코더는 탐지와 생성 양쪽을 끌어올렸다. 그래도 남은 것이 있다.

이 편에서 알게 된 것
  • 1,196개는 16개로 접힌다: 움직임의 99.8%가 남는다. 동작 데이터는 겉보기보다 훨씬 단순하다.
  • 접으면 걸러진다: 떨림은 지워지고(0.030 → 0.009), 빈칸은 채워진다(2.1배 정확).
  • 접으면 적은 정답으로 배운다: 종류당 25개로 99.7%.
  • 접은 곳에서 뽑으면 만들어진다: 사람이 정한 손잡이 없이도 생성이 된다.
남은 문제
  • 선형의 한계: 힘 있는 던지기가 뭉개진다. 비선형 디코더와 VAE가 필요하다.
  • 본 적 없는 동작: 깔때기는 학습한 여섯 종류의 모양만 안다. 처음 보는 동작(예: 넘어지기)은 접었다 펴면 아는 동작 쪽으로 끌려간다. 거꾸로 이 "복원 오차가 큰 장면"을 이상 동작 경보로 쓸 수 있다.
  • 원하는 동작을 고르는 법: 지금은 "던지기가 모인 자리"를 우리가 골라 줬다. 사람이 "손 흔들기"라고 말로 고를 수는 없을까? 말도 같은 지도 위에 놓으면 된다.
왼쪽 하트·별·음표·느낌표·달 아이콘 카드와 오른쪽 막대 인형 동작 카드들이 빛나는 선으로 이어지고, 조수가 맨 위 카드를 누르며 박사가 턱을 괴고 지켜보는 장면
다음 미션 예고 · 말과 동작을 같은 지도 위에서 짝짓기
박사
박사동작을 지도 위의 점으로 만들었지. 그럼 "손 흔들기"라는 말도 같은 지도 위의 점으로 만들면? 말을 넣으면 그 근처 동작이 나오겠지!
조수
조수말도 인코더로 접는 거네요! 말 깔때기랑 동작 깔때기를 같은 지도에 맞추면…
초파리 연구원
초파리 연구원그게 5-4야. 엉켜 있는 선들이 학습하면서 제 짝을 찾아가는 걸 보게 될 거야.

Colab 코드 — 이 페이지를 직접 실행해 보기

두 코드 모두 Colab에 기본으로 설치된 라이브러리만 쓴다. "노트북(.ipynb) 내려받기" 후 Colab에서 파일 → 노트북 업로드로 열거나, 복사해서 새 노트북 칸에 붙여 넣는다.

코드 1 · 동작을 숫자 k개로 접었다 펼치기 (선형 오토인코더)섹션 2~4와 연결 · numpy, matplotlib · CPU 약 3초

장면 600개로 encode·decode를 만들고, k별 복원 오차, 떨림 지우기, 가려진 팔꿈치 채우기(fill)를 잰다. 이 페이지의 방향 16개가 여기서 나왔다. 내 데이터로 바꾸려면 S 자리에 (장면 수, 숫자 수) 모양의 내 데이터를 넣는다. 센서·로그 데이터도 같은 방식으로 접을 수 있다.

실행 결과 (2026-10-05 실행, numpy 2.4 · matplotlib 3.10 · CPU). 시드를 고정해 언제 실행해도 같다. 그래프 두 장(k별 설명한 분산, 잠재 지도)도 함께 나온다.
코드 2 · 접은 숫자로 투기 탐지와 동작 생성 높이기섹션 5·6과 연결 · numpy, scikit-learn · CPU 약 40초

5-1의 투기 탐지를 "그대로 MLP" 대 "접고 로지스틱 회귀"로 학습 장면 수를 바꿔 비교하고, 5-2의 감독관 채점으로 생성기 E를 잰다. 섹션 5·6의 표가 이 출력에서 바로 만들어진다.

실행 결과 (2026-10-05 실행, numpy 2.4 · scikit-learn 1.8 · CPU). 데이터 시드를 고정했지만 라이브러리 버전에 따라 MLP 숫자는 조금 바뀔 수 있다.

AI 응용 프롬프트 — 이 코드를 출발점으로 삼기

ChatGPT, Qwen, Claude 같은 AI 도우미에 붙여 넣는 프롬프트다. "복사"를 누르면 프롬프트 뒤에 고른 코드가 함께 붙는다. 〔 〕 안을 내 상황으로 바꿔 쓰면 된다.

함께 붙일 코드

AI의 답은 출발점일 뿐이다. 제안된 논문·수치·라이브러리 함수는 반드시 원문과 공식 문서로 확인한다. 실제 사람의 동작 데이터를 쓸 때는 촬영 동의와 데이터셋의 이용 조건을 먼저 확인한다.

용어 정리

본문의 노란 점선 밑줄과 같은 사전이다. 섹션 이름을 누르면 처음 나온 곳으로 간다.

비유 모음 — 그리고 비유가 틀리는 지점

비유는 이해의 첫걸음이지만 오해의 씨앗도 된다. 사람의 지각과 견준 비유에는 강도를 표시했다. 직접 실제로 같은 일을 한다는 근거가 있음 · 부분 일부 성질만 닮음 · 없음 대응하는 것이 알려지지 않음

개념일상 비유사람의 지각 비유비유가 틀리는 지점
인코더·디코더여행 가방에 옷을 접어 넣었다가 숙소에서 펴기부분 긴 춤 동작을 "왼발, 박수, 돌기"처럼 몇 마디로 기억했다가 다시 추기옷은 접어도 그대로지만, 깔때기는 작은 주름(떨림)을 버린다. 버린 것은 다시 펼쳐도 돌아오지 않는다
병목 크기 k요약문의 글자 수 제한없음요약은 사람이 중요한 것을 고르지만, 이 깔때기는 "크게 달라지는 것"을 고른다. 작지만 중요한 차이(캔의 마지막 위치)를 놓칠 수 있다
잠재 공간음식점을 "가격 · 매운 정도" 두 축의 지도에 찍기없음음식점 지도의 축은 사람이 정하지만, 잠재 공간의 축은 데이터가 정하고 이름이 없다
가림 복원지워진 글자를 앞뒤 문맥으로 짐작해 읽기부분 가려진 팔도 몸 전체의 자세로 짐작하는 사람의 지각짐작은 학습한 동작의 범위 안에서만 맞는다. 처음 보는 자세면 아는 자세 쪽으로 틀리게 채운다
잠재 공간에서 뽑기지도에서 "이 동네 근처"를 찍어 가 보기없음지도의 빈 땅(학습 데이터가 없던 곳)을 찍으면 이상한 곳에 도착한다

저자 소개와 레퍼런스

E-1 저자 소개 · E-2 학술 레퍼런스 · E-3 그림과 숫자의 출처

E-1 저자 소개

안상선 ((주)M-Robo 대표)

한국전기안전공사, 매일경제신문을 거쳐 현재 매일경제 사외벤처 (주)M-Robo를 창업해 대표로 재직하고 있다. (주)M-Robo는 언론사 사내 벤처로 시작한 미디어 벤처로, 국민일보에 로봇기자(스톡봇)을 서비스 했으며, 한국인터넷진흥원, 한국언론진흥재단, 한국방송통신전파진흥원 등에서 다수의 프로젝트를 진행했다. 이후 자체 A.I 뉴스 신문인 Money-Robo를 서비스 중이다. 대표 재직 중 아시아오픈 데이터 해커톤 우승, 데이터창업 분야 공로로 행정안전부 장관상을 2회 수상했으며, 인공지능 및 블록체인 분야에 대한 5개 특허 발명 및 등록자이다. 저서로는 “AI범죄와 자기방어”가 있으며, 핀테크분야, 통계학, 인공지능 분야에 대해서 한국기술교육대학교 온라인평생교육원 이러닝 콘텐츠 개발을 진행했다. 최종학위는 경제학 박사(동국대, 미시수리경제학)이다. 국민대학교, 호서대학교 등 여러 대학교에서 데이터 및 인공지능과 관련한 과목을 강의하고 있다. 자세한 프로필

강의

  • 안상선 (2025). 「비즈니스를 위한 데이터 과학」 강의안. 한국열린사이버대학교 인공지능융합학과.
  • 안상선 (2025). [K-디지털] 인공지능 자연어 처리. STEP(스마트직업훈련플랫폼), 한국기술교육대학교 온라인평생교육원.
  • 안상선 (2024). [K-디지털] 핀테크 데이터 분석 기초. STEP(스마트직업훈련플랫폼), 한국기술교육대학교 온라인평생교육원.

STEP 강의 바로가기: link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
사이트 개편으로 접속이 원활하지 않을 경우에는 www.step.or.kr로 접속 바랍니다.

논문과 발표

  • 안상선 (2025). 국민노후보장패널데이터를 활용한 가구지출 예측 모델 연구: 인공지능 모델 기반 접근. 「미래사회」, 16(2). 원문
  • 안상선 (2025). 국민노후보장패널데이터를 활용한 가구지출 예측 모델 연구: 인공지능 접근. 국민노후보장패널 학술대회 발표자료(2025.05.13), 국민연금공단 국민연금연구원. 발표자료
  • 안상선 (2025). SNS 텍스트 기반 마약 의심 거래 탐지 알고리즘에 대한 연구: 패턴 및 맥락 분석을 중심으로. 「미래사회」, 16(1). 원문
  • 안상선 (2024). 금융분야의 이상탐지 모델 보안을 위한 통계 기반의 적대적 데이터 대응 방안: 실증적 분석과 시뮬레이션 결과. 「미래사회」, 15(3). 원문
  • 안상선 (2024). 인공지능을 활용한 가상 캐릭터 특성 기반 SNS 포스팅 탐지 솔루션. 2024 Summer Newmedia Party 포스터 발표(2024.06.19), 서울미디어대학원대학교.
  • 안상선 (2024). 산업재해 패널 데이터를 활용한 머신러닝 모델. 제10회 산재보험패널 학술대회 포스터 발표(2024.05.17), 근로복지공단 근로복지연구원.
  • 안상선 (2024). 가상 자산 시계열 데이터의 분석과 예측: 시계열 모델 및 인공지능 모델의 비교, 개선점 제시. 「미래사회」, 15(1). 원문

E-2 학술 레퍼런스

  1. [R1] Kingma, D. P., & Welling, M. (2014). Auto-encoding variational Bayes. ICLR 2014. arXiv:1312.6114 — 섹션 6·7
  2. [R2] Holden, D., Saito, J., & Komura, T. (2016). A deep learning framework for character motion synthesis and editing. ACM Transactions on Graphics, 35(4), Article 138. doi:10.1145/2897824.2925975 — 섹션 6 (동작용 오토인코더)
  3. [R3] Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. Science, 313(5786), 504–507. doi:10.1126/science.1127647 — 섹션 2 (신경망 오토인코더와 PCA 비교)
  4. [R4] Petrovich, M., Black, M. J., & Varol, G. (2021). Action-conditioned 3D human motion synthesis with Transformer VAE. ICCV 2021. arXiv:2104.05670 — 섹션 6
  5. [R5] Pearson, K. (1901). On lines and planes of closest fit to systems of points in space. Philosophical Magazine, 2(11), 559–572. — 섹션 2 (주성분 분석의 출발점)

E-3 그림과 숫자의 출처

  • 장면 그림(인코딩 깔때기, 디코딩과 성능 향상, 텍스트–동작 매칭)은 저자가 직접 만든 픽셀아트다
  • 섹션 2~4·6의 인코더·디코더는 코드 1이 계산한 평균 장면과 방향 16개를 그대로 실었다(32비트 실수)
  • 섹션 2·4·5·6 아래의 표는 코드 1·2를 실제로 실행한 결과다. 화면 속 떨림과 생성 결과는 브라우저에서 같은 방식으로 다시 뽑은 것이라 숫자가 조금 다르다
  • 섹션 3의 손잡이 별명은 방향이 크게 움직이는 관절·시간을 보고 저자가 붙인 것이다

E-4 주석

  • [주] 손잡이(잠재 변수) — 이 시리즈에서 잠재 변수(latent variable)를 쉽게 부르는 비유다. 돌리면 데이터 전체가 함께 바뀌는 소수의 숫자라는 뜻이다. 영어권 해설에서도 잠재 공간의 각 차원을 비유적으로 "knob(손잡이)", "dial(다이얼)", "slider(슬라이더)"라고 부르곤 한다. 논문의 정식 용어는 잠재 변수이며, 5-3에서 데이터가 찾은 손잡이 하나하나는 주성분(principal component)이다. 진짜 손잡이와 달리 하나에 여러 뜻이 섞일 수 있다.

교육자를 위한 TIP

강사, 실무 OJT 담당자, 튜터를 위한 운영 안내다. 시간은 예상치이므로 실제 수업에 맞춰 조정한다.

대상5-1·5-2를 마친 대학생·직장인. 센서·영상·로그처럼 크고 잡음 많은 데이터를 다루는 실무자
선수 지식5-2의 "동작은 표다"와 생성기 채점, 벡터의 내적(같은 자리끼리 곱해 더하기)
학습 목표① 인코더·디코더와 병목 k의 뜻을 깔때기 그림으로 설명한다 ② 접었다 펴기가 떨림 제거·가림 복원·적은 데이터 학습·생성에 각각 어떻게 쓰이는지 예를 든다 ③ 선형 인코더의 한계와 VAE가 필요한 이유를 말한다
예상 시간읽기 35~45분 · 애니메이션 시연 25분 · Colab 실습 30분 (코드 1 10분, 코드 2 실행 1분 + 해석 19분)

운영안 세 가지

강의형 50분

개념 중심

도입 5분(섹션 1, 5-2의 숙제) → 섹션 2 깔때기 k 줄이기 12분 → 섹션 3 손잡이 돌리기 10분 → 섹션 4 떨림·가림 8분 → 섹션 5·6 표 읽기 10분 → 확인 문제 5분.

실무 OJT 90분

데이터 압축 적용 중심

섹션 2 15분 → 우리 데이터(센서, 로그)의 "숫자 수"와 "실제로 독립적인 숫자 수" 토론 15분 → 섹션 4·5로 잡음 제거·적은 정답 학습 사례 20분 → 코드 1에 우리 데이터 넣기 30분 → 섹션 7 한계 정리 10분.

1:1 튜터링

수준별 진도

입문자는 섹션 2·4만. 중급자는 코드 1의 encode·decode를 손으로 따라가게 한 뒤, 섹션 3의 손잡이 1이 왜 "끝날 때의 위치"인지 Vt[0]을 그려 확인하게 한다.

섹션별 운영 포인트

섹션멈춰서 물어볼 질문조작 팁
2 깔때기"숫자 몇 개면 던지기가 던지기처럼 보일까?"k = 1 → 3 → 8로 올리며 오른쪽 결과를 본다
3 잠재 지도"아무도 알려 주지 않았는데 왜 같은 종류끼리 모였을까?"빨간 점(던지기) 하나를 고르고 손잡이 1을 −2σ로 돌린다
4 떨림·가림"깔때기는 떨림과 동작을 어떻게 구별할까?"σ = 0.05와 팔꿈치 가리기를 함께 켠다
5 투기 탐지"k = 8은 왜 k = 16보다 못할까?"표의 25개 줄을 먼저 읽는다
6 생성"E는 D보다 무엇을 덜 알고, 무엇을 덜 잘하나?""다시 만들기"를 눌러 손목 최대 속도 칸을 본다

흔한 오해 Top 5

오해바른 설명보여 줄 장면
압축하면 정보가 줄어 성능이 떨어진다버리는 것이 주로 잡음이면 오히려 좋아진다. 떨림 제거, 적은 데이터 학습이 그 예다섹션 4, 섹션 5
k는 클수록 좋다k가 크면 떨림까지 담는다. 작으면 중요한 작은 움직임을 놓친다. 목적에 맞게 고른다섹션 2 표의 k = 32, 섹션 5의 k = 8
잠재 숫자마다 사람이 이해할 뜻이 있다방향은 데이터가 정하고 이름이 없다. 별명은 사람이 나중에 붙인 해석이다섹션 3 표
오토인코더는 신경망이어야 한다가장 단순한 선형 오토인코더는 PCA와 같은 일을 한다. 신경망은 휘어진 관계까지 담는다섹션 2 아래 풀이
잠재 공간의 아무 점이나 뽑으면 그럴듯한 동작이 나온다학습 데이터가 있던 근처만 그렇다. 그 공간을 고르게 만드는 것이 VAE의 일이다섹션 3 ±2σ 밖, 섹션 6

확인 문제 (해설은 눌러서 펼치기)

Q1. 숫자 1,196개를 k = 16으로 접으면 압축 비율은? 이때 담아낸 움직임은?

1,196 ÷ 16 = 74.75, 약 74.8배. 코드 1에서 설명한 분산은 99.80%다.

Q2. 방향 두 개 v₁ = (1, 0, 0), v₂ = (0, 1, 0), 평균 0일 때 x = (3, −2, 0.4)를 k = 2로 접었다 펴면?

인코더: z = (x·v₁, x·v₂) = (3, −2). 디코더: 3v₁ − 2v₂ = (3, −2, 0). 세 번째 값 0.4는 두 방향에 걸리지 않아 사라진다. 이것이 "떨림이 지워지는" 원리다.

Q3. 가려진 팔꿈치를 "어깨와 손목의 중간점"으로 때우면 왜 틀리나? 디코더는 무엇을 더 아나?

팔꿈치는 굽어 있어서 중간점보다 바깥에 있다. 디코더는 장면 600개에서 배운 "이 자세면 팔꿈치는 대개 여기"라는 관계(방향 16개)를 써서 보이는 다른 관절들과 함께 맞춘다. 코드 1에서 오차가 0.0230 → 0.0108로 줄었다.

Q4. 인코더를 만들 때 투기·정상 정답을 보지 않았는데도 투기 탐지가 좋아진 이유는?

인코더는 동작의 구조(무엇이 함께 움직이나)만 배워 1,288개를 16개 요약으로 바꿨다. 요약은 잡음이 적고 숫자가 적어서, 정답이 붙은 장면이 150개뿐이어도 단순한 분류기가 헤매지 않는다.

Q5. 생성기 E의 손목 최대 속도가 1.76으로 학습 데이터(2.55)보다 낮은 이유는?

잠재 공간에서 던지기들의 평균 근처를 뽑고, 디코더가 방향들을 직선으로 더하기만 하기 때문이다. 타이밍이 조금씩 다른 빠른 휘두름은 직선 방향 몇 개로 표현되지 않아 뭉개진다. 비선형 디코더나 시간 축을 다루는 모델이 필요하다.

Colab 과제

기본

코드 1에서 가리는 관절을 오른팔꿈치에서 왼무릎(9번 → 10번 관절)으로 바꾸고, 가리는 구간을 21프레임에서 40프레임으로 늘린다. 디코더로 채우기의 오차가 어떻게 변하는지 표로 보고한다.

도전

학습에 없는 동작 "넘어지기"(pose 함수에 lean을 1.4까지 키우는 장면)를 만들어, 여섯 종류 장면보다 복원 오차가 얼마나 큰지 잰다. 복원 오차로 "처음 보는 동작" 경보를 만들 수 있는지 기준값과 함께 제안한다.

난이도 조절과 더 배우기

입문자섹션 2의 k 버튼과 섹션 4의 세 그림만으로도 "접었다 펴면 걸러진다"를 얻는다
심화코드 1의 선형 인코더를 Keras 오토인코더(1,196 → 64 → 16 → 64 → 1,196)로 바꿔 복원 오차와 생성기 E의 손목 속도를 비교하게 한다
다음 편5-4 단어에서 동작으로 — 말도 같은 지도 위의 점으로 만든다

미션 5-3 완료!

「5-3 인코더·디코더」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.

막대 인형 카드 묶음을 깔때기에 넣고, 깔때기 아래로 빛나는 캡슐이 떨어지며, 다른 막대 인형들이 캡슐을 들고 도장을 찍는 여섯 장면
박사
박사접었다 펼치기로 세 가지를 얻었어요.
  • 숫자 1,196개 → 16개, 움직임 99.8%
  • 떨림은 지우고 빈칸은 채운다
  • 적은 정답으로 탐지, 손잡이 없이 생성
조수
조수손잡이 1이 "어디로 걸어 나가나"라니, 데이터가 스스로 찾았다는 게 신기해요!
초파리 연구원
초파리 연구원다음은 말이야. "손 흔들기"라는 말을 같은 지도에 올려 보자.