Chap 5. 시각과 언어의 확장 — 딥 러닝의 시대

이미지와 텍스트를 처리하는 딥러닝 핵심 알고리즘의 구조를 뜯어봅니다.


여는 문제 — 평평한 그물로는 모자란다

4장은 강력한 무기를 하나 남겼다. 역전파라는 학습 엔진이다. 이제 층을 아무리 깊이 쌓아도, 오차를 거꾸로 흘려보내며 수백만 개의 가중치를 한꺼번에 조율할 수 있다. 그런데 그 엔진을 단 신경망의 몸체는 여전히 평평한 MLP였다. 모든 입력을 한 줄로 늘어놓고 모든 뉴런과 빠짐없이 연결하는, 구조라곤 없는 그물이다.

문제는 세상의 데이터에는 구조가 있다는 것이다. 이미지에서 옆 픽셀끼리는 한 덩어리이고(공간 지역성), 문장에서 단어는 순서가 곧 의미다(“개가 사람을 물었다” ≠ “사람이 개를 물었다”). 평평한 MLP는 이 구조를 보지 못한다. 이미지를 한 줄로 펴는 순간 어느 픽셀이 어느 픽셀 옆에 있었는지가 사라지고, 단어를 한꺼번에 넣으면 순서가 사라진다. 게다가 100×100 이미지 한 장에 입력만 1만 개, 첫 층 가중치가 수백만 개로 폭발한다.

그래서 이 장의 질문은 이것이다. 구조 없는 일반 신경망으로 이미지와 언어를 다루는 비효율과 한계를, 어떻게 넘을 것인가? 답은 한 문장으로 줄일 수 있다 — 데이터의 구조를 신경망의 구조에 새겨 넣는 것이다. 공간 지역성은 CNN으로, 시간 순서는 RNN·LSTM으로, 한 문장을 다른 문장으로 옮기는 일은 seq2seq로, 데이터를 새로 빚어내는 일은 생성 모델로. 이 모두를 관통하는 한 가지가 표현 학습(representation learning) — 원시 데이터에서 본질적 특징을 스스로 길어 올리는 일이다. 이 장은 그 구조들을 하나씩 연필로 뜯어본다.


2012년, 모든 것이 바뀐 해

이미지넷(ImageNet) 대회는 1,000개 카테고리, 120만 장의 사진을 분류하는 연례 경쟁이었다. 2011년까지 우승팀 오류율은 26% 부근에서 1–2%p씩 줄고 있었다. 2012년, 힌튼 연구실의 AlexNet은 오류율을 단번에 16%로 끌어내렸다. 2위와의 격차 10%p — 전례 없는 일이었다.

비결은 새 이론이 아니었다. CNN(1989년 르쿤의 LeNet)도 역전파(1986)도 이미 있었다. 바뀐 것은 데이터(이미지넷), 연산(게임용 GPU 2장), 그리고 ReLU·Dropout 같은 공학적 디테일이었다. 알고리즘 혁신보다 데이터와 연산의 규모가 도약을 만든다 — 이 패턴은 GPT(7장)에서 반복된다.


연필로 풀기 ①: 합성곱 필터 직접 계산

앞서 말한 평평한 그물의 한계가 가장 적나라하게 드러나는 곳이 이미지다. 이미지를 일반 MLP에 넣으면 100×100 픽셀에 입력 1만 개, 첫 층 가중치만 수백만 개가 되고, 고양이가 한 픽셀만 이동해도 완전히 다른 입력이 된다. **CNN(합성곱 신경망)**의 해법은 공간 지역성을 구조로 새겨 넣는 것이다: 작은 패턴 감지기(필터)가 이미지 전체를 훑으며 같은 가중치를 재사용한다. 옆 픽셀끼리만 묶어 보고, 같은 필터를 어디서나 돌려 쓰니 가중치는 줄고 위치가 바뀌어도 같은 패턴을 알아본다.

합성곱은 손으로 계산할 수 있다. 5×5 이미지(왼쪽 절반 밝음=1, 오른쪽 절반 어두움=0)에 3×3 세로 모서리 필터를 적용해 보자.

이미지 (5×5)            필터 (3×3)
1 1 0 0 0              1  0  -1
1 1 0 0 0              1  0  -1
1 1 0 0 0              1  0  -1
1 1 0 0 0
1 1 0 0 0

필터를 이미지 좌상단에 겹쳐 놓고, 겹친 9칸끼리 곱해서 더한다:

위치(1,1): (1)(1)+(1)(0)+(0)(-1) + (1)(1)+(1)(0)+(0)(-1) + (1)(1)+(1)(0)+(0)(-1) = 3
위치(1,2): (1)(1)+(0)(0)+(0)(-1) + … = 3
위치(1,3): (0)(1)+(0)(0)+(0)(-1) + … = 0

한 칸씩 밀며 끝까지 계산하면 출력(특징 맵)은 밝음→어두움 경계가 있는 자리에서만 3, 나머지는 0이다. 필터가 ‘세로 모서리 감지기’로 작동한 것이다. CNN은 이런 필터(커널) 수십–수백 개의 가중치를 역전파(4장)로 스스로 학습한다. 층이 깊어지면 모서리 → 눈·귀 같은 부품 → ‘고양이 얼굴’로 추상화가 올라간다.

필터를 굴릴 때 두 개의 손잡이가 있다. **스트라이드(stride)**는 필터를 몇 칸씩 건너뛰며 미는가다(stride=1이면 한 칸씩). **패딩(padding)**은 가장자리 정보가 깎이는 것을 막으려고 이미지 둘레를 0으로 두르는 것이다(zero-padding, width=1이면 한 겹). 이렇게 추출한 저수준 특징은 다른 과제에 그대로 재활용된다 — 이미지넷으로 미리 학습한(pre-trained) 망의 특징 추출부를 떼어다 새 문제에 붙이는 **전이 학습(Transfer Learning)**이다. 처음부터 학습할 데이터가 부족할 때의 표준 처방이다.

CNN의 계보는 두 이정표로 요약된다. LeNet-5(얀 르쿤, 1989)는 MNIST 손글씨를 풀어 수표 숫자 인식을 실용화한 원형이다. AlexNet(크리제프스키·수츠케버·힌튼, 2012)은 이미지넷에서 그 구조를 키우고 ReLU·드롭아웃을 붙여, 게임용 GPU(GTX 580, 3GB) 2장으로 학습해 우승했다. 같은 아이디어가 데이터와 연산을 만나 폭발한 것이다.


생성의 세 가지 문법 — AutoEncoder, GAN, Diffusion

오토인코더(AutoEncoder): 입력을 좁은 병목(잠재 공간)으로 압축했다가(인코더) 복원하는(디코더) 망. 복원에 꼭 필요한 본질적 특징만 병목에 남는다 — 압축이 곧 표현 학습이다. VAE(2013)는 잠재 공간을 확률 분포로 만들어 거기서 샘플링해 새 데이터를 생성할 수 있게 했다.

GAN(2014): **생성자(위조범)**가 가짜를 만들고 **판별자(감별사)**가 진위를 가린다. 적대적 경쟁 속에 둘이 함께 성장하고, 균형점에서 위조품은 진짜와 구별 불가능해진다. 강력했지만 학습이 불안정했다 — 두 망의 힘의 균형이 깨지면 붕괴한다.

Diffusion(2020, DDPM): 이미지에 잡음을 조금씩 더해 완전한 잡음으로 만드는 과정을 학습한 뒤, 그 역방향(잡음 제거)을 한 단계씩 수행한다. 순수한 잡음에서 이미지가 떠오른다. Stable Diffusion, DALL-E, Midjourney가 모두 이 원리다.

확산의 발상은 사실 2020년 DDPM보다 앞선 2015년 ICML 논문(Deep Unsupervised Learning using Nonequilibrium Thermodynamics)에서 나왔다. 데이터의 패턴이 반복적 과정을 거쳐 서서히 와해되는(“농도가 균일해지는”) 비평형 열역학의 확산 과정을 본떴다. 반복적 변환을 쓴다는 점은 Flow 기반 모델과, 분포에 대한 **변분 추론(Variational Inference)**으로 학습한다는 점은 VAE와 닮았다. 최근에는 확산 학습에 적대적 훈련을 섞기도 한다(Diffusion-GAN, 2022) — 세 문법이 서로 빌려 쓰기 시작한 것이다.

거대 생성 모델을 떠받치는 것은 텍스트-이미지 짝 데이터다. CLIP(OpenAI, Contrastive Language-Image Pre-training)은 이미지와 그 설명문을 같은 벡터 공간에 끌어다 놓아, “고양이 사진”과 “고양이”라는 글자를 가깝게 만든다 — 텍스트로 이미지를 생성·검색하는 다리다. 학습 연료는 규모로 승부한다: LAION-5B는 텍스트-이미지 짝 약 55억 개(정확히 5,526,641,167)를 모은 공개 데이터셋이고, MS COCO(Common Objects in Context)는 사람이 단 설명문이 붙은 정밀한 벤치마크다.


기계가 보는 교과서 — 표준 데이터셋

알고리즘 못지않게 중요한 것이 무엇으로 시험하느냐다. 비전 연구의 세 표준 데이터셋:

데이터셋크기·색클래스분량(train/val/test)
MNIST28×28 흑백10(손글씨 숫자)60,000 / 5,000 / 10,000
CIFAR-1032×32 컬러10(사물)50,000 / — / 10,000
ImageNet(ILSVRC)가변 크기 RGB1,0001,281,167 / 50,000 / 100,000

MNIST(NIST 표준 손글씨의 수정판)는 입문용 ‘초파리’이고, CIFAR-10(캐나다 고등연구원)은 컬러 사물 분류의 다음 단계, ImageNet은 4장에서 본 AlexNet의 무대인 120만 장 규모의 본선이다. 규모가 한 자릿수씩 커질 때마다 모델이 풀 수 있는 문제의 격이 달라졌다.


연필로 풀기 ②: 단어를 숫자로 — TF-IDF에서 Word2vec까지

이미지는 원래 숫자(픽셀)지만 단어는 기호다. ‘고양이’를 어떻게 숫자로 만들까?

고전적 방법 — 빈도 통계. TF-IDF: “이 문서에 자주 나오지만(TF) 다른 문서엔 드문(IDF) 단어”에 높은 점수. 문서 1,000개 중 ‘엔트로피’가 10개 문서에만 등장하고 지금 문서에 5번 나온다면:

TF-IDF = 5 × log(1000/10) = 5 × 2 = 10

‘그리고’처럼 모든 문서에 나오는 단어는 log(1000/1000)=0으로 소거된다. BM25(Best Matching의 약자, 25번째 실험 공식)는 이것의 개량판으로 — 단어 빈도가 무한정 점수를 올리지 않도록 포화시키고 문서 길이를 보정한다 — 지금도 검색 엔진의 기본기다. 한계: 이 방식에서 ‘고양이’와 ‘냥이’는 아무 관계없는 별개의 기호다.

Word2vec(2013) — 맥락으로 의미를 학습. “단어의 의미는 그 단어가 등장하는 맥락이다.” 주변 단어를 예측하는 과제를 작은 신경망에 풀게 하면, 비슷한 맥락에 나오는 단어들이 벡터 공간에서 가까워진다. 그 공간에선 산수가 의미가 된다:

king − man + woman ≈ queen
서울 − 한국 + 일본 ≈ 도쿄

말뭉치로 실제 학습한 벡터에 질의해 보면 결과가 이렇게 나온다(슬라이드의 PTB 학습 예):

[query] you   →  we 0.61, someone 0.59, i 0.55, something 0.49, anyone 0.47
[query] year  →  month 0.72, week 0.65, spring 0.63, summer 0.63, decade 0.60
[analogy] king : man = queen : ?  →  woman 5.16, veto 4.93, ounce 4.69, …
[analogy] car : cars = child : ?  →  children 5.22, average 4.73, yield 4.21, …

‘you’의 이웃이 인칭 대명사·부정대명사로, ‘year’의 이웃이 시간 단위로 모이고, king↔man의 관계가 queen↔woman으로 옮겨지는 것이 보인다. 1장에서 영화 취향을 벡터로 만들고 코사인 유사도를 쟀던 것과 같은 원리가, 이제 단어의 ‘의미’에 적용된 것이다.

말뭉치가 커지면 계산량이 병목이 된다. 두 가지 공학적 처방이 word2vec을 실전용으로 만들었다. 임베딩 층(Embedding layer): 원-핫 벡터에 거대한 가중치 행렬을 곱하는 대신, 단어 ID를 인덱스 삼아 행렬에서 해당 행(벡터)만 뽑아 온다 — 곱셈을 조회로 바꾼 것이다. 네거티브 샘플링(Negative Sampling): “전체 어휘 중 어느 단어냐”라는 다중 분류를, “이 단어가 맞냐/아니냐”라는 이진 분류로 바꾼다. 정답(긍정 예) 하나와, 빈도 분포에서 뽑은 소수의 오답(부정 예)에 대해서만 손실을 계산해 더한다 — 수만 개 출력을 매번 다 계산하던 부담이 몇 개로 줄어든다. (이 발상의 철학적 뿌리와 한계는 10장에서 다룬다.)


RNN, LSTM — 시간을 기억하는 망

CNN이 공간 지역성을 구조로 새겼다면, 이번엔 시간 순서를 새길 차례다. 문장은 순서다. “개가 사람을 물었다”와 “사람이 개를 물었다”는 같은 단어, 다른 의미. RNN은 단어를 하나씩 읽으며 은닉 상태(작업 기억)를 갱신한다 — 2장의 피드백 루프를 내장한 신경망으로, 순서 그 자체를 처리 구조에 박아 넣은 것이다.

RNN은 과거 정보를 응집된 은닉 상태 벡터(h) 하나에 눌러 담아 다음 단계로 넘긴다. 단어의 단순 분포가 아니라 순서가 중요한 과제에 맞는 구조다. 문제는 역전파가 시간을 거슬러 흐를 때다. 역전파가 시계열 길이만큼 가중치 행렬 곱(Matmul)을 반복하기 때문에, 곱이 1보다 작으면 신호가 사라지고(vanishing gradient — 4장에서 계산해 본 그 문제) 1보다 크면 폭발한다(exploding gradient). 특히 RNN의 활성화 함수 tanh의 미분은 0–1 사이라 노드를 지날 때마다 기울기가 계속 깎인다(시그모이드 미분은 [0, 0.25], ReLU는 그대로 전달). 긴 문장의 앞부분을 잊는 것이다.

**LSTM(1997)**은 게이트 구조로 소실 문제를 해결했다 — 0–1 값을 내는 시그모이드 밸브로 기억을 조절하는 **셀 상태(memory cell)**를 따로 둔다: 무엇을 새로 기억하고(input gate), 잊고(forget gate), 출력할지(output gate). GRU는 이를 단순화해 게이트를 둘로 줄였다 — 리셋 게이트 r(과거 은닉 상태를 얼마나 무시할지, LSTM의 output gate에 대응)과 업데이트 게이트 z(은닉 상태를 얼마나 갱신할지, LSTM의 forget+input gate를 합친 역할). 폭발 쪽은 다른 처방을 쓴다 — 기울기 클리핑(Gradient Clipping): 전체 기울기의 L2 노름이 임계값을 넘으면 비례 축소해 갱신한다. 여기에 LSTM 다층화·드롭아웃·가중치 공유를 얹어, 2010년대 중반까지 기계번역(seq2seq)·음성 인식의 표준이었다.

남은 구조적 한계 두 가지 — ① 순차 처리라 병렬화 불가(GPU를 놀림) ② 게이트를 달아도 아주 긴 의존은 결국 흐려짐. 이 둘을 동시에 부순 것이 2017년의 어텐션(7장)이다.


seq2seq — 한 문장을 다른 문장으로

기계번역(영→독)이나 이미지 캡셔닝(이미지→“I am a cat”)처럼 입력 한 줄을 출력 한 줄로 바꾸는 과제가 seq2seq다. 인코더 RNN이 입력 문장을 은닉 벡터 h 하나로 압축하면, 디코더 RNN이 그 h에서 출력 문장을 한 단어씩 풀어낸다. 약점은 분명하다 — 아무리 긴 문장도 고정 길이 벡터 하나에 쑤셔 넣어야 한다.

초기엔 영리한 우회로로 버텼다. 입력 반전(reverse): 입력 단어 순서를 뒤집어 넣으면 첫 단어와 그 번역이 가까워져 학습이 쉬워진다. peeky: 인코더가 만든 h를 디코더의 마지막에만 주지 않고 모든 시각의 디코더 계층에 곁눈질하듯 계속 전달한다. 그래도 병목은 남았다. 근본 해법은 마지막 은닉 상태 하나가 아니라 모든 시각의 은닉 상태 벡터를 전부 전달하고, 양방향 LSTM으로 단어의 좌우 맥락을 균형 있게 보는 것 — 디코더가 매 단어마다 입력의 어느 부분을 볼지 고르는 이 발상이 곧 **어텐션(attention)**이고, 7장의 트랜스포머로 이어진다.


신경망의 한계 — 적대적 공격

판다 사진에 인간 눈에 안 보이는 잡음을 섞으면, 신경망은 99% 확신으로 ‘긴팔원숭이’라 답한다(adversarial attack). 정지 표지판에 스티커 몇 장이면 자율주행차가 속도제한 표지판으로 읽는다. 공격은 놀랄 만큼 적은 자원으로도 가능하다 — Universal Adversarial Perturbations(2016)는 한 장의 고정된 잡음 패턴을 거의 모든 이미지에 더하기만 해도 분류기를 속일 수 있음을, One Pixel Attack(2017)은 단 한 픽셀만 바꿔도 오분류를 유도할 수 있음을 보였다.

버그가 아니라 본질의 노출이다. 신경망이 학습한 것은 인간의 ‘판다 개념’이 아니라 데이터의 통계적 결에 최적화된 결정 경계다. 그 경계는 인간 지각과 대체로 일치하지만 고차원 공간 곳곳에서 미세하게 어긋나 있고, 공격자는 그 어긋남을 정확히 찌를 수 있다. 1장의 표상 문제 — 대리체(통계적 특징)는 전체(개념)가 아니다 — 가 보안 문제로 돌아온 것이다.


참고 논문


논쟁거리

기계가 감각을 인지하고, 언어와 세계를 이해하기 위해 필요한 것이 무엇일까요?

이 장에서 본 시스템들의 공통점: 세계가 아니라 데이터의 분포를 학습한다. CNN은 판다의 질감 통계는 알지만 판다를 만져본 적 없고, Word2vec은 ‘뜨겁다’의 사용 맥락은 알지만 데어본 적 없다. 적대적 공격은 그 간극이 실제로 존재함을 보여주는 증거다.

이것을 기호 접지 문제(symbol grounding problem)라 부른다 — 기호가 세계에 닿지(grounded) 않으면, 기호를 기호로만 정의하는 순환에 갇힌다는 것. 반론도 있다: 시각 장애인은 색을 본 적 없이도 색에 대해 정확하게 말한다 — 언어의 관계망만으로도 상당한 이해가 구성된다는 증거다.

공학의 대응은 결핍을 메우는 것이다. 멀티모달 모델(이미지+텍스트 동시 학습), 로봇의 체화(embodiment), 월드 모델(9장). “이해에 몸이 필요한가”는 6장(인공생명의 물질성)과 9장(Physical AI)에서 계속 이어진다.


다음으로 — 두 갈래로 갈라지는 길

이 장에서 우리는 데이터의 구조를 신경망의 구조에 새겨 넣었다. 공간은 CNN으로, 순서는 RNN·LSTM으로, 문장의 변환은 seq2seq로. 구조를 새기자 평평한 그물이 못 하던 일이 풀렸다. 그러나 해결은 새로운 모순 두 가지를 남긴다.

첫 번째 모순은 구조 자체에서 나온다. RNN은 단어를 한 개씩 차례로 읽어야 하므로 병렬화가 안 되고(GPU를 놀린다), 게이트를 달아도 긴 의존은 결국 흐려지며, seq2seq는 아무리 긴 문장도 고정 길이 벡터 하나에 욱여넣어야 한다. 순차 처리의 병목과 고정 길이 벡터의 병목 — 이것을 깨는 길은, 디코더가 매 순간 입력의 어느 부분을 볼지 스스로 고르는 어텐션으로 이어진다. 그것이 7장의 트랜스포머다.

두 번째 모순은 학습 방식 자체에서 나온다. 이 장의 모든 성공은 ‘정답이 붙은 데이터’를 전제로 했다 — 이 이미지는 고양이, 이 문장의 번역은 저것. 그러나 정답 레이블을 사람이 일일이 달 수 없는 문제(게임에서 이기기, 로봇이 걷기)는 어떻게 배울까? 정답 대신 보상이라는 희미한 신호만으로 배우는 길, 그것이 6장의 강화학습이다.

같은 한 장의 해결이 이렇게 두 갈래로 갈라진다 — 순차 처리의 병목을 깨는 길은 7장의 어텐션으로, 정답 레이블 없이 보상만으로 배우는 길은 6장의 강화학습으로.