인지야공

인지야공/강의 요약/4번째 글

패턴인식 — 좋은 특징이란 무엇인가

이 강의에서 가장 오래 남은 것은 모델 구조가 아니라 질문 네 개였다. 강의가 개념을 설명하기 전에 먼저 질문을 던지고, 답을 스스로 생각하게 한 뒤 정리하는 방식이었다.

Q. 개와 고양이를 구별하는 데 좋은 특징은 무엇일까? Q. 문제를 확장하면 어떻게 될까? (모든 동물 중 고양이를 찾는다면) Q. 특징이 많을수록 성능이 좋은가? Q. 모든 특징이 특정 작업에 유의미한가?

패턴과 특징

정의
패턴 Pattern어떤 일이 일어나거나 나타나는 규칙적이고 반복적인 방식. 데이터 내의 규칙성
특징 Feature구별되는 속성이나 측면. 패턴을 효과적으로 표현하기 위해 추출한 유의미한 속성 값

특징은 세 가지로 설명된다 — 원시 데이터에서 불필요한 정보를 제거하고 필요한 것만 뽑은 것, 컴퓨터가 패턴을 인식할 수 있도록 변환된 정보(주로 수치 벡터 Rd\mathbb{R}^d), 그리고 인식하려는 패턴을 다른 것과 유일하게 구별할 수 있게 하는 속성.

원시 데이터 → 특징 추출 → 특징 집합 → 인식(분류·예측) → 인식된 패턴

좋은 특징의 조건

그룹 사이에는 차이가 크고, 그룹 안에서는 일관된 것이 좋은 특징이다.

예
좋은 특징귀 모양(고양이는 주로 뾰족, 개는 다양), 얼굴·두개골 형태, 몸의 비율, 울음소리, 특정 움직임 패턴
나쁜 특징털 색깔(매우 다양), 크기(겹치는 범위가 넓다), 수염 길이, 꼬리 유무(대부분 있다), 배경 정보(무관), 성격(정량화 어려움)

핵심은 구별력(Discriminative power) 이다. 꼬리 유무가 나쁜 특징인 이유가 명쾌하다 — 둘 다 있으니 아무것도 갈라 주지 못한다.

문제를 확장하면

‘개 vs 고양이’(Closed-Set)에서 ‘고양이 vs 모든 동물’(Open-Set)로 넓히면 훨씬 어려워진다. 개와 고양이를 가르는 데 유용했던 뾰족한 귀가 여우에게도 있기 때문이다.

문제의 제약이 적을수록, 즉 더 일반적일수록 특징을 일반화하기 어렵고 문제가 어려워진다.

특징이 많으면 좋은가

아니다. 네 가지 문제가 생긴다.

문제
차원의 저주특징이 늘면 데이터 공간이 희소해져, 성능 유지에 기하급수적으로 많은 데이터가 필요하다
노이즈관련 없거나 중복된 특징이 학습을 방해한다
과적합학습 데이터에만 맞춰져 새 데이터에 일반화되지 않는다
계산 비용학습 시간과 메모리가 늘어난다

결론은 이렇다 — 많은 특징보다 정보량 많고 구별력 높은 소수의 특징이 낫다. 그래서 특징 공학과 특징 선택이 중요해진다. 동물 사진을 분류할 때 배경색은 대부분 무관하다.

일반화와 제약

일반화(Generalization) — 학습 데이터로 학습한 모델이 처음 보는 데이터에 대해서도 좋은 성능을 보이는 능력이다. 머신러닝의 궁극적 목표다.

여기서 강의의 반직관적인 주장이 나온다. 문제를 상세하게 만들수록, 즉 제약을 부과할수록 해결하기 쉬워진다. 일반화된 특징 추출이 쉬워지기 때문이다.

제약 방법예
데이터·환경 제약얼굴 인식에 증명사진만 쓰기, 조용한 환경에서 음성 녹음. 데이터의 변동성을 줄인다
모델 제약정규분포 가정, 이미지에 CNN 사용, 파라미터 수 줄이기. 과적합 방지
작업 제약다중 분류 대신 이진 분류, 특정 숫자만 인식. 문제의 범위를 좁힌다

시스템 프레임워크는 학습과 추론 두 과정이다. 학습 알고리즘이 Seen Data 로 모델을 만들고, 그 모델이 Unseen Data 를 받아 결과를 낸다.

응용 분야와 핵심 기술은 이렇게 정리된다.

분야핵심 기술
영상 인식CNN, ViT
음성 인식HMM, 딥러닝 음향 모델
신호 처리FFT, 웨이블릿, 시계열 딥러닝
자연어 처리RNN, Transformer (BERT/GPT)

신경망 기초

인간 두뇌의 신경망 구조를 수학적으로 모델링한 것이다.

인공 신경망생물학적 대응
인공 뉴런(노드)생물학적 뉴런
연결 가중치시냅스
활성화 함수뉴런의 발화 임계값

기능은 입력에서 출력으로 매핑하는 복잡한 함수 y=f(x)y = f(x) 를 학습하는 것이다. 일종의 함수 근사기(Function Approximator)다.

왜 딥러닝인가

  • 데이터 확장성 — 전통 알고리즘보다 데이터가 많을 때 성능 향상 폭이 크다. 특히 이미지·음성·텍스트 같은 비정형 데이터에서
  • 성장 동력 — 빅데이터 + 알고리즘 발전(역전파, 개선된 활성화 함수) + 하드웨어(GPU)

단일 뉴런의 세 얼굴

활성화 함수출력
퍼셉트론 (1957)계단 함수이진 분류. y=step(∑wixi+b)y = \text{step}(\sum w_ix_i + b)
선형 회귀없음(항등)연속값. y^=wx+b\hat{y} = wx + b
로지스틱 회귀시그모이드확률. y^=σ(wx+b)\hat{y} = \sigma(wx+b), σ(z)=1/(1+e−z)\sigma(z) = 1/(1+e^{-z})

같은 뉴런 하나인데 활성화 함수만 바꾸면 셋이 된다. 이 관점이 신경망을 이해하는 데 가장 도움이 됐다.

활성화 함수는 비선형성을 도입하기 위해 있다. 없으면 여러 층을 쌓아도 결국 선형 변환 하나와 같아진다. 층을 깊게 하는 것 자체가 무의미해진다는 뜻이다.

  • MLP — 입력층·은닉층·출력층으로 구성된 피드포워드 신경망
  • DNN — 은닉층이 여러 개인 MLP. 깊어질수록 추상적인 특징을 학습한다 (엣지 → 부분 → 객체)

학습

목표는 예측값과 실제값의 오차를 최소화하는 파라미터 (w,b)(w, b) 를 찾는 것이다.

MSE=1N∑i=1N(yi−y^i)2,CE=−∑iyilog⁡(y^i)\text{MSE} = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2, \qquad \text{CE} = -\sum_i y_i\log(\hat{y}_i)

경사 하강법으로 최적화한다.

w←w−η∂L∂w,b←b−η∂L∂bw \leftarrow w - \eta\frac{\partial L}{\partial w}, \qquad b \leftarrow b - \eta\frac{\partial L}{\partial b}

종류쓰는 데이터
배치 GD전체
확률적 GD (SGD)1개
미니배치 GD일부. 가장 널리 쓰인다

역전파는 출력층에서 입력층 방향으로 오차를 전파하며 각 파라미터에 대한 기울기를 효율적으로 계산하는 알고리즘이다. 연쇄 법칙을 쓴다.

1. 순전파      입력으로 예측값 계산
2. 손실 계산   예측값과 실제값으로 손실 계산
3. 역전파      출력층부터 거꾸로 기울기 계산
4. 업데이트    경사 하강법으로 파라미터 갱신

평가

데이터를 셋으로 나눈다.

쓰임
학습 Training모델 파라미터 학습
검증 Validation학습 중 성능 평가, 하이퍼파라미터 튜닝, 과적합 확인
테스트 Test최종 일반화 성능 평가. 학습·튜닝에 관여하지 않는다

학습 손실은 계속 줄어드는데 검증 손실이 올라가기 시작하면 과적합이다. 이 한 문장이 학습 곡선을 읽는 법의 전부다.

지도학습

레이블이 있는 데이터로 학습한다. 입력 xx 와 출력 yy 의 쌍으로 이루어진 데이터셋을 쓰고, y≈f(x)y \approx f(x) 인 ff 를 찾는 것이 목표다.

Logits 은 신경망 마지막 선형 계층의 출력값, 즉 활성화 함수 적용 전의 원시 점수다.

문제 유형별 설계

문제출력 차원출력 활성화손실 함수
회귀1없음(항등)MSE / MAE / Huber
이진 분류1SigmoidBCE
다중 클래스 분류KKSoftmaxCategorical CE
다중 레이블 분류KKSigmoidBCE (클래스별 평균)

다중 클래스와 다중 레이블의 차이가 여기서 갈린다. 하나만 정답이면 Softmax(합이 1), 여러 개가 동시에 정답일 수 있으면 클래스마다 독립적인 Sigmoid 다. 영화 장르가 액션이면서 코미디일 수 있으니 후자다.

회귀의 손실 함수 셋은 성격이 뚜렷하게 다르다.

성질
MAE (L1)이상치에 덜 민감(강건). 모든 구간에서 기울기가 같아 최적점 근처에서 수렴이 어렵다
MSE (L2)오차가 클수록 기울기가 커져 수렴에 유리. 이상치에 매우 민감
Huber오차가 작을 땐 MSE, 클 땐 MAE 처럼. 이상치에 강건하면서 수렴도 쉽다. 임계값 δ\delta 필요

주요 공식들.

softmax(z)i=ezi∑jezj,LBCE=−[ylog⁡y^+(1−y)log⁡(1−y^)]\text{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}, \qquad L_{BCE} = -[y\log\hat{y} + (1-y)\log(1-\hat{y})]

LCE=−∑k=1Kyklog⁡y^k(yk는 one-hot)L_{CE} = -\sum_{k=1}^{K} y_k\log\hat{y}_k \quad (y_k \text{는 one-hot})

Categorical CE 는 BCE 의 일반화된 형태다.

어려운 문제 넷과 그 해법

문제무엇인가
기울기 소실깊은 망에서 역전파 시 입력층으로 갈수록 기울기가 사라져 앞쪽 레이어가 학습되지 않는다. Sigmoid·Tanh 가 양 극단에서 기울기 0 에 가까워 유발한다
과적합학습 데이터에 과하게 맞춰진다. 데이터 부족·편향, 또는 모델 복잡도가 과함
클래스 불균형클래스별 샘플 수 차이가 크다. 다수 클래스로 편향된다 (이상 탐지, 사기 탐지)
데이터 부족레이블된 데이터가 부족하다. 항공우주·재난·희귀 질병처럼 드문 이벤트

기울기 소실 해결

  • 활성화 함수 변경 — ReLU 및 변형. ReLU 는 양수 입력에서 기울기가 1 로 유지된다. Leaky ReLU 는 음수에도 작은 기울기를 줘 뉴런이 완전히 죽는 것을 막는다
  • 잔차 연결 — ResNet 의 핵심. Skip connection 으로 기울기가 이전 레이어로 잘 흐르게 한다

과적합 해결

  • 조기 종료 — 검증 손실이 더 이상 줄지 않으면 학습을 멈춘다
  • 규제 — 손실에 가중치 크기 페널티를 더한다

L1:  L+λ∑∣wj∣(일부 가중치를 0 으로→특징 선택)L_1: \; L + \lambda\sum|w_j| \quad (\text{일부 가중치를 0 으로} \to \text{특징 선택}) L2:  L+λ2∑wj2(크기를 전반적으로 줄인다→Weight Decay)L_2: \; L + \frac{\lambda}{2}\sum w_j^2 \quad (\text{크기를 전반적으로 줄인다} \to \text{Weight Decay})

  • 드롭아웃 — 학습 중 무작위로 뉴런을 끈다. 특정 특징에 과도하게 의존하는 것을 막고 앙상블 효과를 준다

클래스 불균형 해결 — 데이터 증강(회전·반전·노이즈), 클래스 가중치(소수 클래스 오차에 더 큰 가중치).

L=1N∑wyi⋅ℓ(y^i,yi)L = \frac{1}{N}\sum w_{y_i}\cdot\ell(\hat{y}_i, y_i)

데이터 부족 해결 — 데이터 확장(증강, 합성 데이터, 능동 학습), 지식 전이(전이 학습, 도메인 적응). 대규모 데이터로 사전학습된 모델을 가져와 미세 조정한다.

그 밖에 약한 지도 학습(준지도·자기지도)과 메타 학습(Few-Shot/One-Shot, Metric Learning)이 있다. 메타 학습은 적은 데이터로 빠르게 학습하는 방법 자체를 학습하는 것이다.

비지도학습

레이블 없이 데이터 자체의 내재적 특성을 파악한다. 목표는 숨겨진 구조 발견, 군집화, 차원 축소, 밀도 추정, 데이터 생성이다.

오토인코더

인코더가 입력을 저차원 잠재 공간으로 압축하고, 디코더가 그로부터 원본을 복원한다. 가장 압축된 가운데 부분이 병목(Bottleneck) 이다.

학습 목표는 재구성 오차 최소화다. Loss=(x−x′)2\text{Loss} = (x - x')^2.

변형
Denoising AE입력에 일부러 잡음을 넣고 깨끗한 원본을 복원하도록 학습. 주요 특징을 배우고 잡음에 강건해진다
이상 탐지정상 데이터만으로 학습한다. 정상은 잘 복원하지만 이상은 복원을 못 하므로, 재구성 오차가 큰 데이터를 이상으로 판정한다

이상 탐지용 오토인코더의 발상이 좋다. 이상 데이터가 거의 없어서 지도학습이 불가능한 상황을 “정상만 배우고 낯선 것을 걸러 낸다”로 뒤집는다.

생성 모델

모델원리
VAE잠재 벡터를 직접 내는 대신 잠재 공간의 확률 분포(μ\mu, σ\sigma)를 학습. z∼N(μ,σ2)z \sim N(\mu, \sigma^2) 를 샘플링해 생성. AE 보다 연속적이고 의미 있는 잠재 공간
GAN생성자와 판별자가 경쟁하며 학습. 생성자는 판별자를 속이는 방향으로, 판별자는 진짜와 가짜를 더 잘 구별하는 방향으로
Diffusion순방향으로 원본에 가우시안 노이즈를 점진적으로 더해 완전한 노이즈로 만들고, 역방향으로 노이즈에서 점진적으로 제거하며 복원(생성)

Diffusion 이 최근 고품질 이미지 생성에서 뛰어난 성능을 보이고 있다.

CNN

왜 CNN 인가

이미지 데이터의 세 가지 성질 때문이다.

성질
지역 상관성인접 픽셀들은 유사한 값을 가진다
지역적 균질성이미지 전체는 비균질하지만 작은 영역은 균질하다
구성적·계층적 구조엣지 → 눈·코 → 얼굴로 이어진다

MLP 의 한계는 둘이다.

  • 파라미터 폭발 — 224×224×3 이미지에 뉴런 100개면 1500만 개 파라미터다
  • 공간 구조 무시 — Flatten 하면 픽셀 간 공간 관계가 사라진다

전통적 컴퓨터 비전에서는 Sobel 같은 필터를 수동으로 설계했다. CNN 은 그 필터의 가중치를 데이터로부터 학습한다. 이 한 줄이 차이의 전부다.

네 가지 핵심 아이디어

지역적 연결성뉴런이 입력 전체가 아닌 일부 지역에만 연결된다
가중치 공유하나의 필터를 이미지 전체에 동일하게 적용. 파라미터를 획기적으로 줄이고, 위치와 무관하게 같은 특징을 감지한다(이동 등가성)
풀링특징 맵 크기를 줄여 계산량을 감소시키고, 약간의 위치 변화에 둔감하게 만든다
계층적 특징 학습저수준(엣지·코너)부터 고수준(객체)까지 쌓아 올린다

Convolutional Layer

하이퍼파라미터
커널 크기특징을 탐지할 영역 (3×3, 5×5)
필터 개수출력 특징 맵의 채널 수. 각 필터가 다른 특징을 학습
스트라이드필터 이동 간격. 크면 출력이 작아지고 수용 영역이 커진다
패딩valid(패딩 없음, 출력 감소) / same(출력 크기 유지, 가장자리 정보 손실 방지)
딜레이션커널 요소 사이에 간격을 둬 파라미터 증가 없이 수용 영역을 넓힌다. WaveNet

출력 크기는 이 식으로 나온다.

O=⌊I−K+2PS⌋+1O = \left\lfloor \frac{I - K + 2P}{S} \right\rfloor + 1

수용 영역(Receptive Field) 은 출력 특징 맵의 한 요소에 영향을 미치는 입력 영역의 크기다. 층이 깊어질수록, 스트라이드·딜레이션이 클수록 커진다. 넓은 문맥을 보려면 필요하다.

다중 채널 입력에서는 각 필터도 입력 채널 수와 같은 깊이를 갖는다(K×K×CK \times K \times C). 채널별 결과를 합산하고 편향을 더해 출력 채널 하나를 만든다. 필터가 DD 개면 출력이 H′×W′×DH' \times W' \times D 다.

Pooling 과 FC

풀링
Max Pooling영역 내 최댓값. 가장 강한 활성화를 보존
Average Pooling영역 내 평균. 전반적 정보를 요약하지만 특징이 흐려진다

FC Layer 는 MLP 와 같다. 다만 공간 정보를 잃는다. 최근에는 FC 대신 Global Average Pooling(GAP) 을 써서 파라미터를 줄이고 과적합을 막는 추세다. 각 특징 맵의 모든 값을 평균해 하나의 값으로 만든다.

CNN 이 효과적인 이유

  1. 적은 파라미터 — 가중치 공유 덕분
  2. 데이터 효율과 일반화 — 공간 구조와 지역성이라는 가정(Inductive Bias)을 구조에 반영
  3. 연산 효율 — 병렬 처리가 쉬워 GPU 가속 효과가 크다

모델 발전사

모델
LeNet-5 (1998)초기 CNN. Conv-Pool 반복 후 FC. MNIST. 약 6만 파라미터
AlexNet (2012)ILSVRC 우승. 8층, ReLU, Dropout, GPU 병렬. 약 6천만 파라미터
VGGNet (2014)16/19층. 3×3 작은 커널만 반복해 구조 단순화. 약 1.38억 파라미터
GoogLeNet (2014)Inception Module(1×1·3×3·5×5 병렬), 1×1 Conv 로 채널 축소, GAP
ResNet (2015)Residual Block. H(x)=F(x)+xH(x) = F(x) + x 의 Skip Connection 으로 기울기 소실을 완화해 100층 이상 학습 가능

VGG 가 3×3 만 쓴 이유가 흥미롭다. 5×5 하나보다 3×3 두 개가 파라미터는 적으면서 같은 수용 영역을 얻고, 비선형성은 한 번 더 들어간다.

시퀀스 모델

순서가 중요한 의미를 갖는 데이터를 다룬다. 문장, 음성, 주가, 센서 로그.

특징
가변 길이데이터 길이가 일정하지 않다
시점 간 의존성이전 시점이 이후에 영향을 준다
순서 중요성순서가 바뀌면 의미가 달라진다

MLP 는 입출력 크기가 고정이라 가변 길이를 다루기 어렵고(최대 길이로 패딩하면 비효율적이며 정보가 왜곡된다), 벡터로 펼치면 순서 정보가 사라진다.

RNN

내부에 순환 구조를 둬 이전 시점의 hidden state 를 현재 계산에 반영한다. 시간축으로 펼치면 각 시점에서 동일한 가중치를 공유하는 구조다.

h⟨t⟩=f(Whhh⟨t−1⟩+Whxx⟨t⟩+bh)h^{\langle t\rangle} = f(W_{hh}h^{\langle t-1\rangle} + W_{hx}x^{\langle t\rangle} + b_h) y⟨t⟩=g(Wyhh⟨t⟩+by)y^{\langle t\rangle} = g(W_{yh}h^{\langle t\rangle} + b_y)

가변 길이는 한 스텝씩 순차 처리하므로 제약이 없고, 순서 정보는 hh 를 통해 반영된다. 단점은 기울기 소실·폭주, 장기 의존성 학습의 어려움, 그리고 순차 처리라 병렬화가 어렵다는 것이다.

유형예
one-to-one비순환 기본 NN
one-to-many이미지 캡셔닝
many-to-one문장 감성 분석
many-to-many (동기)비디오 프레임 분류
many-to-many (비동기)기계 번역 (Seq2Seq)

학습은 BPTT(Backpropagation Through Time) — 시간축으로 펼친 구조에 역전파를 수행한다. 긴 시퀀스에서 기울기 소실·폭주가 발생하고, 초반 정보가 뒤로 전달되지 않는다.

LSTM

셀 상태와 게이트로 장기 의존성 문제를 푼다.

구성 요소역할
Cell State CtC_t정보가 큰 변화 없이 장기간 전달되는 통로. 컨베이어 벨트
Forget Gate ftf_t이전 셀 상태에서 무엇을 버릴지 결정
Input Gate iti_t어떤 새 정보를 셀 상태에 저장할지 결정
Output Gate oto_t셀 상태를 바탕으로 무엇을 hidden state 로 낼지 결정

셀 상태가 게이트를 거치되 곱셈이 아닌 덧셈으로 갱신되는 경로를 갖기 때문에 기울기가 멀리까지 흐른다. 컨베이어 벨트라는 비유가 정확하다.

GRU

LSTM 을 단순화했다. 셀 상태와 hidden state 를 통합하고 게이트 수를 줄였다.

게이트
Update Gate ztz_t이전 hidden state 를 얼마나 유지하고 새 후보를 얼마나 반영할지 (Forget + Input 통합)
Reset Gate rtr_t이전 hidden state 를 얼마나 무시하고 현재 입력을 반영할지

LSTM 과 비슷한 성능을 내면서 파라미터가 적어 계산 효율이 높다.

남은 문제

  • 순차적 계산 — 여전히 순서대로 처리해야 해 긴 시퀀스에서 느리고 병렬화가 어렵다
  • 매우 긴 의존성 — 이론적으로는 되지만 실제로는 어렵다
  • Seq2Seq 의 고정 크기 문맥 벡터 — 인코더 마지막 hidden state 하나에 모든 입력을 압축해야 하는 병목

어텐션

사람은 문장이나 이미지를 볼 때 중요한 부분에 집중한다. 그 발상을 가져온 것이다.

디코더가 각 타임 스텝에서 출력을 예측할 때, 인코더의 모든 hidden state 를 참조하되 현재 예측과 관련성이 높은 것에 더 큰 가중치를 준다.

1. 점수 계산    디코더의 현재 상태와 인코더 각 상태의 관련성 점수
2. 가중치 계산  점수에 Softmax → 합이 1 인 Attention Weight
3. 문맥 벡터    인코더 상태들을 가중합
4. 예측         문맥 벡터와 디코더 상태로 최종 출력

Query·Key·Value 비유가 이해에 결정적이었다.

Query (Q)현재 디코더 상태. 정보를 요청하는 주체
Key (K)인코더의 각 hidden state. 정보를 가지고 있는 대상들
Value (V)실제 정보 값. 보통 Key 와 동일

Query 와 모든 Key 의 유사도를 재고, Softmax 로 정규화한 가중치를 Value 에 곱해 합산한다.

Attention(Q,K,V)=softmax ⁣(QKTdk)V\text{Attention}(Q,K,V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right)V

dk\sqrt{d_k} 로 나누는 이유는 차원이 커지면 내적 값이 커져 Softmax 가 극단으로 쏠리기 때문이다. 그러면 기울기가 죽는다.

Seq2Seq 의 병목을 없앤 것이 어텐션의 출발점이었고, 여기서 순환 구조를 완전히 걷어내면 Transformer 가 된다.

표시는 이 브라우저에만 남는다. 서버로 가는 것은 없다.